mirror of https://github.com/joomla/joomla-cms.git
1859 lines
58 KiB
PHP
1859 lines
58 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Plugin
|
|
* @subpackage Sampledata.Blog
|
|
*
|
|
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
defined('_JEXEC') or die;
|
|
|
|
use Joomla\CMS\Application\ApplicationHelper;
|
|
use Joomla\CMS\Component\ComponentHelper;
|
|
use Joomla\CMS\Extension\ExtensionHelper;
|
|
use Joomla\CMS\Factory;
|
|
use Joomla\CMS\HTML\HTMLHelper;
|
|
use Joomla\CMS\Language\Multilanguage;
|
|
use Joomla\CMS\Language\Text;
|
|
use Joomla\CMS\Plugin\CMSPlugin;
|
|
use Joomla\CMS\Session\Session;
|
|
use Joomla\Database\ParameterType;
|
|
|
|
/**
|
|
* Sampledata - Blog Plugin
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
class PlgSampledataBlog extends CMSPlugin
|
|
{
|
|
/**
|
|
* Database object
|
|
*
|
|
* @var JDatabaseDriver
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
protected $db;
|
|
|
|
/**
|
|
* Application object
|
|
*
|
|
* @var JApplicationCms
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
protected $app;
|
|
|
|
/**
|
|
* Affects constructor behavior. If true, language files will be loaded automatically.
|
|
*
|
|
* @var boolean
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
protected $autoloadLanguage = true;
|
|
|
|
/**
|
|
* Holds the menuitem model
|
|
*
|
|
* @var MenusModelItem
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
private $menuItemModel;
|
|
|
|
/**
|
|
* Get an overview of the proposed sampledata.
|
|
*
|
|
* @return boolean True on success.
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
public function onSampledataGetOverview()
|
|
{
|
|
if (!Factory::getUser()->authorise('core.create', 'com_content'))
|
|
{
|
|
return;
|
|
}
|
|
|
|
$data = new stdClass;
|
|
$data->name = $this->_name;
|
|
$data->title = Text::_('PLG_SAMPLEDATA_BLOG_OVERVIEW_TITLE');
|
|
$data->description = Text::_('PLG_SAMPLEDATA_BLOG_OVERVIEW_DESC');
|
|
$data->icon = 'wifi';
|
|
$data->steps = 4;
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* First step to enter the sampledata. Content.
|
|
*
|
|
* @return array or void Will be converted into the JSON response to the module.
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
public function onAjaxSampledataApplyStep1()
|
|
{
|
|
if (!Session::checkToken('get') || $this->app->input->get('type') != $this->_name)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!ComponentHelper::isEnabled('com_tags'))
|
|
{
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_SKIPPED', 1, 'com_tags');
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Get some metadata.
|
|
$access = (int) $this->app->get('access', 1);
|
|
$user = Factory::getUser();
|
|
|
|
// Detect language to be used.
|
|
$language = Multilanguage::isEnabled() ? Factory::getLanguage()->getTag() : '*';
|
|
$langSuffix = ($language !== '*') ? ' (' . $language . ')' : '';
|
|
|
|
/** @var \Joomla\Component\Tags\Administrator\Model\TagModel $model */
|
|
$modelTag = $this->app->bootComponent('com_tags')->getMVCFactory()->createModel('Tag', 'Administrator', ['ignore_request' => true]);
|
|
|
|
$tagIds = array();
|
|
|
|
// Create first three tags.
|
|
for ($i = 0; $i <= 3; $i++)
|
|
{
|
|
$title = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_TAG_' . $i . '_TITLE') . $langSuffix;
|
|
|
|
$tag = array(
|
|
'id' => 0,
|
|
'title' => $title,
|
|
'alias' => ApplicationHelper::stringURLSafe($title),
|
|
// Parent is root, except for the 4th tag. The 4th is child of the 3rd
|
|
'parent_id' => $i === 3 ? $tagIds[2] : 1,
|
|
'published' => 1,
|
|
'access' => $access,
|
|
'created_user_id' => $user->id,
|
|
'language' => $language,
|
|
'description' => '',
|
|
);
|
|
|
|
try
|
|
{
|
|
if (!$modelTag->save($tag))
|
|
{
|
|
Factory::getLanguage()->load('com_tags');
|
|
throw new Exception(Text::_($modelTag->getError()));
|
|
}
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
$tagIds[] = $modelTag->getItem()->id;
|
|
}
|
|
|
|
if (!ComponentHelper::isEnabled('com_content') || !Factory::getUser()->authorise('core.create', 'com_content'))
|
|
{
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_SKIPPED', 1, 'com_content');
|
|
|
|
return $response;
|
|
}
|
|
|
|
if (ComponentHelper::isEnabled('com_fields') && $user->authorise('core.create', 'com_fields'))
|
|
{
|
|
Factory::getLanguage()->load('com_fields');
|
|
|
|
$mvcFactory = $this->app->bootComponent('com_fields')->getMVCFactory();
|
|
|
|
$groupModel = $mvcFactory->createModel('Group', 'Administrator', ['ignore_request' => true]);
|
|
|
|
$group = [
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_FIELDS_GROUP_TITLE') . $langSuffix,
|
|
'id' => 0,
|
|
'published' => 1,
|
|
'ordering' => 0,
|
|
'note' => '',
|
|
'state' => 1,
|
|
'access' => $access,
|
|
'created_user_id' => $user->id,
|
|
'context' => 'com_content.article',
|
|
'description' => '',
|
|
'language' => $language,
|
|
'params' => '{"display_readonly":"1"}',
|
|
];
|
|
|
|
try
|
|
{
|
|
if (!$groupModel->save($group))
|
|
{
|
|
throw new Exception($groupModel->getError());
|
|
}
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
$groupId = $groupModel->getItem()->id;
|
|
|
|
// Add fields
|
|
$fieldIds = [];
|
|
|
|
$articleFields = [
|
|
[
|
|
'type' => 'textarea',
|
|
'fieldparams' => [
|
|
'rows' => 3,
|
|
'cols' => 80,
|
|
'maxlength' => 400,
|
|
'filter' => ''
|
|
]
|
|
],
|
|
];
|
|
|
|
$fieldModel = $mvcFactory->createModel('Field', 'Administrator', ['ignore_request' => true]);
|
|
|
|
foreach ($articleFields as $i => $cf)
|
|
{
|
|
// Set values from language strings.
|
|
$cfTitle = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_FIELDS_FIELD_' . $i . '_TITLE') . $langSuffix;
|
|
|
|
$cf['id'] = 0;
|
|
$cf['name'] = $cfTitle;
|
|
$cf['label'] = $cfTitle;
|
|
$cf['title'] = $cfTitle;
|
|
$cf['description'] = '';
|
|
$cf['note'] = '';
|
|
$cf['default_value'] = '';
|
|
$cf['group_id'] = $groupId;
|
|
$cf['ordering'] = 0;
|
|
$cf['state'] = 1;
|
|
$cf['language'] = $language;
|
|
$cf['access'] = $access;
|
|
$cf['context'] = 'com_content.article';
|
|
$cf['params'] = [
|
|
'hint' => '',
|
|
'class' => '',
|
|
'label_class' => '',
|
|
'show_on' => '',
|
|
'render_class' => '',
|
|
'showlabel' => '1',
|
|
'label_render_class' => '',
|
|
'display' => '3',
|
|
'prefix' => '',
|
|
'suffix' => '',
|
|
'layout' => '',
|
|
'display_readonly' => '2'
|
|
];
|
|
|
|
try
|
|
{
|
|
if (!$fieldModel->save($cf))
|
|
{
|
|
throw new Exception($fieldModel->getError());
|
|
}
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Get ID from the field we just added
|
|
$fieldIds[] = $fieldModel->getItem()->id;
|
|
}
|
|
}
|
|
|
|
if (ComponentHelper::isEnabled('com_workflow') && Factory::getUser()->authorise('core.create', 'com_workflow'))
|
|
{
|
|
$this->app->bootComponent('com_workflow');
|
|
|
|
// Create workflow
|
|
$workflowTable = new \Joomla\Component\Workflow\Administrator\Table\WorkflowTable($this->db);
|
|
|
|
$workflowTable->default = 0;
|
|
$workflowTable->title = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_SAMPLE_TITLE') . $langSuffix;
|
|
$workflowTable->description = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_SAMPLE_DESCRIPTION');
|
|
$workflowTable->published = 1;
|
|
$workflowTable->access = $access;
|
|
$workflowTable->created_user_id = $user->id;
|
|
$workflowTable->extension = 'com_content.article';
|
|
|
|
if (!$workflowTable->store())
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, Text::_($stageTable->getError()));
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Get ID from workflow we just added
|
|
$workflowId = $workflowTable->id;
|
|
|
|
// Create Stages.
|
|
for ($i = 1; $i <= 9; $i++)
|
|
{
|
|
$stageTable = new \Joomla\Component\Workflow\Administrator\Table\StageTable($this->db);
|
|
|
|
// Set values from language strings.
|
|
$stageTable->title = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE' . $i . '_TITLE');
|
|
$stageTable->description = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE' . $i . '_DESCRIPTION');
|
|
|
|
// Set values which are always the same.
|
|
$stageTable->id = 0;
|
|
$stageTable->published = 1;
|
|
$stageTable->ordering = 0;
|
|
$stageTable->default = $i == 6 ? 1 : 0;
|
|
$stageTable->workflow_id = $workflowId;
|
|
|
|
if (!$stageTable->store())
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, Text::_($stageTable->getError()));
|
|
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
// Get the stage Ids of the new stages
|
|
$query = $this->db->getQuery(true);
|
|
|
|
$query->select([$this->db->quoteName('title'), $this->db->quoteName('id')])
|
|
->from($this->db->quoteName('#__workflow_stages'))
|
|
->where($this->db->quoteName('workflow_id') . ' = :workflow_id')
|
|
->bind(':workflow_id', $workflowId, ParameterType::INTEGER);
|
|
|
|
$stages = $this->db->setQuery($query)->loadAssocList('title', 'id');
|
|
|
|
// Prepare Transitions
|
|
|
|
$defaultOptions = json_encode(
|
|
[
|
|
'publishing' => 0,
|
|
'featuring' => 0,
|
|
'notification_send_mail' => false,
|
|
]
|
|
);
|
|
|
|
$fromTo = array(
|
|
array(
|
|
// Idea to Copywriting
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE1_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE2_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Copywriting to Graphic Design
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE2_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE3_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Graphic Design to Fact Check
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE3_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE4_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Fact Check to Review
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE4_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE5_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Edit article - revision to copy writer
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE5_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE2_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Revision to published and featured
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE5_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TITLE')],
|
|
'options' => json_encode(
|
|
array(
|
|
'publishing' => 1,
|
|
'featuring' => 1,
|
|
'notification_send_mail' => true,
|
|
'notification_text' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TEXT'),
|
|
'notification_groups' => ["7"]
|
|
)
|
|
),
|
|
),
|
|
array(
|
|
// All to on Hold
|
|
'from_stage_id' => -1,
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE7_TITLE')],
|
|
'options' => json_encode(
|
|
array(
|
|
'publishing' => 2,
|
|
'featuring' => 0,
|
|
'notification_send_mail' => false,
|
|
)
|
|
),
|
|
),
|
|
array(
|
|
// Idea to trash
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE1_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE8_TITLE')],
|
|
'options' => json_encode(
|
|
array(
|
|
'publishing' => -2,
|
|
'featuring' => 0,
|
|
'notification_send_mail' => false,
|
|
)
|
|
),
|
|
),
|
|
array(
|
|
// On Hold to Idea (Re-activate an idea)
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE7_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE1_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Unpublish a published article
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE9_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// Trash a published article
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE8_TITLE')],
|
|
'options' => $defaultOptions,
|
|
),
|
|
array(
|
|
// From unpublished back to published
|
|
'from_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE9_TITLE')],
|
|
'to_stage_id' => $stages[Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TITLE')],
|
|
'options' => json_encode(
|
|
array(
|
|
'publishing' => 1,
|
|
'featuring' => 0,
|
|
'notification_send_mail' => true,
|
|
'notification_text' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_STAGE6_TEXT'),
|
|
'notification_groups' => ["7"]
|
|
)
|
|
),
|
|
),
|
|
);
|
|
|
|
// Create Transitions.
|
|
for ($i = 0; $i < count($fromTo); $i++)
|
|
{
|
|
$trTable = new \Joomla\Component\Workflow\Administrator\Table\TransitionTable($this->db);
|
|
|
|
$trTable->from_stage_id = $fromTo[$i]['from_stage_id'];
|
|
$trTable->to_stage_id = $fromTo[$i]['to_stage_id'];
|
|
$trTable->options = $fromTo[$i]['options'];
|
|
|
|
// Set values from language strings.
|
|
$trTable->title = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_TRANSITION' . ($i + 1) . '_TITLE');
|
|
$trTable->description = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_WORKFLOW_TRANSITION' . ($i + 1) . '_DESCRIPTION');
|
|
|
|
// Set values which are always the same.
|
|
$trTable->id = 0;
|
|
$trTable->published = 1;
|
|
$trTable->ordering = 0;
|
|
$trTable->workflow_id = $workflowId;
|
|
|
|
if (!$trTable->store())
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, Text::_($trTable->getError()));
|
|
|
|
return $response;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Store the categories
|
|
$catIds = array();
|
|
|
|
for ($i = 0; $i <= 2; $i++)
|
|
{
|
|
$categoryModel = $this->app->bootComponent('com_categories')
|
|
->getMVCFactory()->createModel('Category', 'Administrator');
|
|
|
|
$categoryTitle = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_CATEGORY_' . $i . '_TITLE');
|
|
$categoryAlias = ApplicationHelper::stringURLSafe($categoryTitle);
|
|
|
|
// Set unicodeslugs if alias is empty
|
|
if (trim(str_replace('-', '', $categoryAlias) == ''))
|
|
{
|
|
$unicode = $this->app->set('unicodeslugs', 1);
|
|
$categoryAlias = ApplicationHelper::stringURLSafe($categoryTitle);
|
|
$this->app->set('unicodeslugs', $unicode);
|
|
}
|
|
|
|
if (ComponentHelper::isEnabled('com_workflow') && $user->authorise('core.create', 'com_workflow') && $workflowId)
|
|
{
|
|
// Category 0 gets the workflow from above
|
|
$params = $i == 0 ? '{"workflow_id":"' . $workflowId . '"}' : '{}';
|
|
}
|
|
|
|
$category = [
|
|
'title' => $categoryTitle . $langSuffix,
|
|
'parent_id' => 1,
|
|
'id' => 0,
|
|
'published' => 1,
|
|
'access' => $access,
|
|
'created_user_id' => $user->id,
|
|
'extension' => 'com_content',
|
|
'level' => 1,
|
|
'alias' => $categoryAlias . $langSuffix,
|
|
'associations' => array(),
|
|
'description' => '',
|
|
'language' => $language,
|
|
'params' => $params
|
|
];
|
|
|
|
try
|
|
{
|
|
if (!$categoryModel->save($category))
|
|
{
|
|
Factory::getLanguage()->load('com_categories');
|
|
throw new Exception($categoryModel->getError());
|
|
}
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Get ID from category we just added
|
|
$catIds[] = $categoryModel->getItem()->id;
|
|
}
|
|
|
|
// Create Articles.
|
|
$articles = array(
|
|
|
|
// Category 1 = Help
|
|
array(
|
|
// Article 0 - About
|
|
'catid' => $catIds[1],
|
|
),
|
|
array(
|
|
// Article 1 - Working on Your Site
|
|
'catid' => $catIds[1],
|
|
'access' => 3,
|
|
),
|
|
|
|
// Category 0 = Blog
|
|
array(
|
|
// Article 2 - Welcome to your blog
|
|
'catid' => $catIds[0],
|
|
'featured' => 1,
|
|
'tags' => array_map('strval', $tagIds),
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa1-1200.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_2_INTROIMAGE_ALT'),
|
|
'image_intro_alt_empty' => '',
|
|
'image_intro_caption' => '',
|
|
'image_fulltext' => 'images/sampledata/cassiopeia/nasa1-400.jpg',
|
|
'float_fulltext' => 'float-left',
|
|
'image_fulltext_alt' => '',
|
|
'image_fulltext_alt_empty' => 1,
|
|
'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery'
|
|
)
|
|
),
|
|
array(
|
|
// Article 3 - About your home page
|
|
'catid' => $catIds[0],
|
|
'featured' => 1,
|
|
'tags' => array_map('strval', $tagIds),
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa2-1200.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => '',
|
|
'image_intro_caption' => '',
|
|
'image_fulltext' => 'images/sampledata/cassiopeia/nasa2-400.jpg',
|
|
'float_fulltext' => 'float-left',
|
|
'image_fulltext_alt' => '',
|
|
'image_fulltext_alt_empty' => 1,
|
|
'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery'
|
|
),
|
|
'authorValue' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_3_FIELD_0'),
|
|
),
|
|
array(
|
|
// Article 4 - Your Modules
|
|
'catid' => $catIds[0],
|
|
'featured' => 1,
|
|
'tags' => array_map('strval', $tagIds),
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa3-1200.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => 1,
|
|
'image_intro_caption' => '',
|
|
'image_fulltext' => 'images/sampledata/cassiopeia/nasa3-400.jpg',
|
|
'float_fulltext' => 'float-left',
|
|
'image_fulltext_alt' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_4_FULLTEXTIMAGE_ALT'),
|
|
'image_fulltext_alt_empty' => '',
|
|
'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery'
|
|
)
|
|
),
|
|
array(
|
|
// Article 5 - Your Template
|
|
'catid' => $catIds[0],
|
|
'featured' => 1,
|
|
'tags' => array_map('strval', $tagIds),
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa4-1200.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => 1,
|
|
'image_intro_caption' => '',
|
|
'image_fulltext' => 'images/sampledata/cassiopeia/nasa4-400.jpg',
|
|
'float_fulltext' => 'float-left',
|
|
'image_fulltext_alt' => '',
|
|
'image_fulltext_alt_empty' => 1,
|
|
'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery'
|
|
)
|
|
),
|
|
// Category 2 = Joomla - marketing texts
|
|
array(
|
|
// Article 6 - Millions
|
|
'catid' => $catIds[2],
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa1-640.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => 1,
|
|
'image_intro_caption' => '',
|
|
)
|
|
),
|
|
array(
|
|
// Article 7 - Love
|
|
'catid' => $catIds[2],
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa2-640.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => 1,
|
|
'image_intro_caption' => '',
|
|
)
|
|
),
|
|
array(
|
|
// Article 8 - Joomla
|
|
'catid' => $catIds[2],
|
|
'images' => array(
|
|
'image_intro' => 'images/sampledata/cassiopeia/nasa3-640.jpg',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => 1,
|
|
'image_intro_caption' => '',
|
|
)
|
|
),
|
|
array(
|
|
// Article 9 - Workflows
|
|
'catid' => $catIds[1],
|
|
'images' => array(
|
|
'image_intro' => '',
|
|
'float_intro' => '',
|
|
'image_intro_alt' => '',
|
|
'image_intro_alt_empty' => '',
|
|
'image_intro_caption' => '',
|
|
'image_fulltext' => 'images/sampledata/cassiopeia/nasa4-400.jpg',
|
|
'float_fulltext' => 'float-right',
|
|
'image_fulltext_alt' => '',
|
|
'image_fulltext_alt_empty' => 1,
|
|
'image_fulltext_caption' => 'www.nasa.gov/multimedia/imagegallery'
|
|
),
|
|
'authorValue' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_9_FIELD_0'),
|
|
),
|
|
array(
|
|
// Article 10 - Typography
|
|
'catid' => $catIds[2],
|
|
),
|
|
);
|
|
|
|
$mvcFactory = $this->app->bootComponent('com_content')->getMVCFactory();
|
|
|
|
// Set com_workflow enabled for com_content
|
|
$params = ComponentHelper::getParams('com_content');
|
|
$params->set('workflow_enabled', '1');
|
|
|
|
$query = $this->db->getQuery(true);
|
|
|
|
$query->update($this->db->quoteName('#__extensions'))
|
|
->set($this->db->quoteName('params') . '=' . $this->db->quote(json_encode($params)))
|
|
->where($this->db->quoteName('name') . '=' . $this->db->quote('com_content'));
|
|
|
|
$this->db->setQuery($query)->execute();
|
|
|
|
// Store the articles
|
|
foreach ($articles as $i => $article)
|
|
{
|
|
$articleModel = $mvcFactory->createModel('Article', 'Administrator', ['ignore_request' => true]);
|
|
|
|
// Set values from language strings.
|
|
$title = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_' . $i . '_TITLE');
|
|
$alias = ApplicationHelper::stringURLSafe($title);
|
|
$article['title'] = $title . $langSuffix;
|
|
$article['introtext'] = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_' . $i . '_INTROTEXT');
|
|
$article['fulltext'] = Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_' . $i . '_FULLTEXT');
|
|
|
|
// Set values which are always the same.
|
|
$article['id'] = 0;
|
|
$article['ordering'] = 0;
|
|
$article['created_user_id'] = $user->id;
|
|
$article['created_by_alias'] = 'Joomla';
|
|
$article['alias'] = ApplicationHelper::stringURLSafe($article['title']);
|
|
|
|
// Set unicodeslugs if alias is empty
|
|
if (trim(str_replace('-', '', $alias) == ''))
|
|
{
|
|
$unicode = $this->app->set('unicodeslugs', 1);
|
|
$article['alias'] = ApplicationHelper::stringURLSafe($article['title']);
|
|
$this->app->set('unicodeslugs', $unicode);
|
|
}
|
|
|
|
$article['language'] = $language;
|
|
$article['associations'] = array();
|
|
$article['metakey'] = '';
|
|
$article['metadesc'] = '';
|
|
|
|
if (!isset($article['featured']))
|
|
{
|
|
$article['featured'] = 0;
|
|
}
|
|
|
|
if (!isset($article['state']))
|
|
{
|
|
$article['state'] = 1;
|
|
}
|
|
|
|
if (!isset($article['images']))
|
|
{
|
|
$article['images'] = '';
|
|
}
|
|
|
|
if (!isset($article['access']))
|
|
{
|
|
$article['access'] = $access;
|
|
}
|
|
|
|
if (!$articleModel->save($article))
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 1, Text::_($articleModel->getError()));
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Get ID from article we just added
|
|
$ids[] = $articleModel->getItem()->id;
|
|
|
|
if ($article['featured'])
|
|
{
|
|
// Set the article featured in #__content_frontpage
|
|
$query = $this->db->getQuery(true);
|
|
|
|
$featuredItem = (object) [
|
|
'content_id' => $articleModel->getItem()->id,
|
|
'ordering' => 0,
|
|
'featured_up' => null,
|
|
'featured_down' => null
|
|
];
|
|
|
|
$this->db->insertObject('#__content_frontpage', $featuredItem);
|
|
}
|
|
|
|
// Add a value to the custom field if a value is given
|
|
if (ComponentHelper::isEnabled('com_fields') && Factory::getUser()->authorise('core.create', 'com_fields'))
|
|
{
|
|
if (!empty($article['authorValue']))
|
|
{
|
|
// Store a field value
|
|
$query = $this->db->getQuery(true);
|
|
|
|
$valueAuthor = (object) [
|
|
'item_id' => $articleModel->getItem()->id,
|
|
'field_id' => $fieldIds[0],
|
|
'value' => $article['authorValue'],
|
|
];
|
|
|
|
$this->db->insertObject('#__fields_values', $valueAuthor);
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->app->setUserState('sampledata.blog.articles', $ids);
|
|
$this->app->setUserState('sampledata.blog.articles.catids', $catIds);
|
|
|
|
$response = new stdClass;
|
|
$response->success = true;
|
|
$response->message = Text::_('PLG_SAMPLEDATA_BLOG_STEP1_SUCCESS');
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Second step to enter the sampledata. Menus.
|
|
*
|
|
* @return array or void Will be converted into the JSON response to the module.
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
public function onAjaxSampledataApplyStep2()
|
|
{
|
|
if (!Session::checkToken('get') || $this->app->input->get('type') != $this->_name)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!ComponentHelper::isEnabled('com_menus') || !Factory::getUser()->authorise('core.create', 'com_menus'))
|
|
{
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_SKIPPED', 2, 'com_menus');
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Detect language to be used.
|
|
$language = Multilanguage::isEnabled() ? Factory::getLanguage()->getTag() : '*';
|
|
$langSuffix = ($language !== '*') ? ' (' . $language . ')' : '';
|
|
|
|
// Create the menu types.
|
|
$menuTable = new \Joomla\Component\Menus\Administrator\Table\MenuTypeTable($this->db);
|
|
$menuTypes = array();
|
|
|
|
for ($i = 0; $i <= 2; $i++)
|
|
{
|
|
$menu = array(
|
|
'id' => 0,
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_MENU_' . $i . '_TITLE') . $langSuffix,
|
|
'description' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_MENU_' . $i . '_DESCRIPTION'),
|
|
);
|
|
|
|
// Calculate menutype. The number of characters allowed is 24.
|
|
$type = HTMLHelper::_('string.truncate', $menu['title'], 23, true, false);
|
|
|
|
$menu['menutype'] = $i . $type;
|
|
|
|
try
|
|
{
|
|
$menuTable->load();
|
|
$menuTable->bind($menu);
|
|
|
|
if (!$menuTable->check())
|
|
{
|
|
Factory::getLanguage()->load('com_menu');
|
|
throw new Exception($menuTable->getError());
|
|
}
|
|
|
|
$menuTable->store();
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 2, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
$menuTypes[] = $menuTable->menutype;
|
|
}
|
|
|
|
// Storing IDs in UserState for later usage.
|
|
$this->app->setUserState('sampledata.blog.menutypes', $menuTypes);
|
|
|
|
// Get previously entered Data from UserStates.
|
|
$articleIds = $this->app->getUserState('sampledata.blog.articles');
|
|
|
|
// Get MenuItemModel.
|
|
$this->menuItemModel = new \Joomla\Component\Menus\Administrator\Model\ItemModel;
|
|
|
|
// Get previously entered categories ids
|
|
$catids = $this->app->getUserState('sampledata.blog.articles.catids');
|
|
|
|
// Insert menuitems level 1.
|
|
$menuItems = array(
|
|
array(
|
|
// Blog
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_0_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=category&layout=blog&id=' . $catids[0],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'layout_type' => 'blog',
|
|
'show_category_title' => 0,
|
|
'num_leading_articles' => 4,
|
|
'num_intro_articles' => 4,
|
|
'num_links' => 0,
|
|
'orderby_sec' => 'rdate',
|
|
'order_date' => 'published',
|
|
'blog_class_leading' => 'boxed columns-2',
|
|
'show_pagination' => 2,
|
|
'secure' => 0,
|
|
'show_page_heading' => 1,
|
|
),
|
|
),
|
|
array(
|
|
// Help
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_CATEGORY_1_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=category&layout=blog&id=' . $catids[1],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'blog_class_leading' => '',
|
|
'blog_class' => 'boxed',
|
|
'num_leading_articles' => 0,
|
|
'num_intro_articles' => 4,
|
|
'num_links' => 0,
|
|
'orderby_sec' => 'rdate',
|
|
'order_date' => 'published',
|
|
'show_pagination' => 4,
|
|
'show_pagination_results' => 1,
|
|
'article_layout' => '_:default',
|
|
'link_titles' => 0,
|
|
'info_block_show_title' => '',
|
|
'show_category' => 0,
|
|
'link_category' => '',
|
|
'show_parent_category' => '',
|
|
'link_parent_category' => '',
|
|
'show_author' => 0,
|
|
'link_author' => '',
|
|
'show_create_date' => 0,
|
|
'show_modify_date' => '',
|
|
'show_publish_date' => 0,
|
|
'show_hits' => 0,
|
|
'menu_text' => 1,
|
|
'menu_show' => 1,
|
|
'show_page_heading' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Author Login
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_2_TITLE'),
|
|
'link' => 'index.php?option=com_users&view=login',
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_users', 'component')->extension_id,
|
|
'params' => array(
|
|
'logindescription_show' => 1,
|
|
'logoutdescription_show' => 1,
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Sample metismenu (heading)
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_11_TITLE'),
|
|
'type' => 'heading',
|
|
'link' => '',
|
|
'component_id' => 0,
|
|
'params' => array(
|
|
'layout_type' => 'heading',
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Typography
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_14_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=article&id=&id=' . (int) $articleIds[10],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'show_title' => 0,
|
|
'link_titles' => 0,
|
|
'show_intro' => 1,
|
|
'info_block_position' => '',
|
|
'info_block_show_title' => 0,
|
|
'show_category' => 0,
|
|
'show_author' => 0,
|
|
'show_create_date' => 0,
|
|
'show_modify_date' => 0,
|
|
'show_publish_date' => 0,
|
|
'show_item_navigation' => 0,
|
|
'show_hits' => 0,
|
|
'show_tags' => 0,
|
|
'menu_text' => 1,
|
|
'menu_show' => 1,
|
|
'page_title' => '',
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_3_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=form&layout=edit',
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'access' => 3,
|
|
'params' => array(
|
|
'enable_category' => 1,
|
|
'catid' => $catids[0],
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_4_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=article&id=' . $articleIds[1],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_5_TITLE'),
|
|
'link' => 'administrator',
|
|
'type' => 'url',
|
|
'component_id' => 0,
|
|
'browserNav' => 1,
|
|
'access' => 3,
|
|
'params' => array(
|
|
'menu_text' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_6_TITLE'),
|
|
'link' => 'index.php?option=com_users&view=profile&layout=edit',
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_users', 'component')->extension_id,
|
|
'access' => 2,
|
|
'params' => array(
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_7_TITLE'),
|
|
'link' => 'index.php?option=com_users&view=login',
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_users', 'component')->extension_id,
|
|
'params' => array(
|
|
'logindescription_show' => 1,
|
|
'logoutdescription_show' => 1,
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
);
|
|
|
|
try
|
|
{
|
|
$menuIdsLevel1 = $this->addMenuItems($menuItems, 1);
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 2, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Insert level 1 (Link in the footer as alias)
|
|
$menuItems = array(
|
|
array(
|
|
'menutype' => $menuTypes[2],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_8_TITLE'),
|
|
'link' => 'index.php?Itemid=',
|
|
'type' => 'alias',
|
|
'params' => array(
|
|
'aliasoptions' => $menuIdsLevel1[2],
|
|
'alias_redirect' => 0,
|
|
'menu-anchor_title' => '',
|
|
'menu-anchor_css' => '',
|
|
'menu_image' => '',
|
|
'menu_image_css' => '',
|
|
'menu_text' => 1,
|
|
'menu_show' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
);
|
|
|
|
try
|
|
{
|
|
$menuIdsLevel1 = array_merge($menuIdsLevel1, $this->addMenuItems($menuItems, 1));
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 2, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Insert menuitems level 2.
|
|
$menuItems = array(
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_9_TITLE'),
|
|
'link' => 'index.php?option=com_config&view=config',
|
|
'parent_id' => $menuIdsLevel1[5],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_config', 'component')->extension_id,
|
|
'access' => 6,
|
|
'params' => array(
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[1],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_10_TITLE'),
|
|
'link' => 'index.php?option=com_config&view=templates',
|
|
'parent_id' => $menuIdsLevel1[5],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_config', 'component')->extension_id,
|
|
'params' => array(
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Blog
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_0_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=category&layout=blog&id=' . $catids[0],
|
|
'parent_id' => $menuIdsLevel1[3],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'layout_type' => 'blog',
|
|
'show_category_title' => 0,
|
|
'num_leading_articles' => 1,
|
|
'num_intro_articles' => 2,
|
|
'num_links' => 2,
|
|
'orderby_sec' => 'front',
|
|
'order_date' => 'published',
|
|
'blog_class_leading' => 'boxed columns-1',
|
|
'blog_class' => 'columns-2',
|
|
'show_pagination' => 2,
|
|
'show_pagination_results' => 1,
|
|
'show_category' => 0,
|
|
'info_bloc_position' => 0,
|
|
'show_publish_date' => 0,
|
|
'show_hits' => 0,
|
|
'show_feed_link' => 0,
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Category List
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_12_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=category&id=' . $catids[0],
|
|
'parent_id' => $menuIdsLevel1[3],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'page_subheading' => 'Subheading of List',
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Articles (menu header)
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MENUS_ITEM_13_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=category&layout=blog&id=' . $catids[2],
|
|
'parent_id' => $menuIdsLevel1[3],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'layout_type' => 'blog',
|
|
'show_category_title' => 0,
|
|
'num_leading_articles' => 3,
|
|
'num_intro_articles' => 0,
|
|
'num_links' => 2,
|
|
'orderby_sec' => 'front',
|
|
'order_date' => 'published',
|
|
'blog_class_leading' => 'boxed columns-3',
|
|
'blog_class' => '',
|
|
'show_pagination' => 2,
|
|
'show_pagination_results' => 1,
|
|
'show_category' => 0,
|
|
'info_bloc_position' => 0,
|
|
'show_publish_date' => 0,
|
|
'show_hits' => 0,
|
|
'show_feed_link' => 0,
|
|
'menu_text' => 1,
|
|
'show_page_heading' => 0,
|
|
'secure' => 0,
|
|
),
|
|
)
|
|
);
|
|
|
|
try
|
|
{
|
|
$menuIdsLevel2 = $this->addMenuItems($menuItems, 2);
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 2, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Add a third level of menuItems - use article title also for menuItem title
|
|
$menuItems = array(
|
|
array(
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_6_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=article&id=&id=' . (int) $articleIds[6],
|
|
'parent_id' => $menuIdsLevel2[4],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'menu_show' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_7_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=article&id=&id=' . (int) $articleIds[7],
|
|
'parent_id' => $menuIdsLevel2[4],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'menu_show' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
array(
|
|
'menutype' => $menuTypes[0],
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_CONTENT_ARTICLE_8_TITLE'),
|
|
'link' => 'index.php?option=com_content&view=article&id=' . (int) $articleIds[8],
|
|
'parent_id' => $menuIdsLevel2[4],
|
|
'component_id' => ExtensionHelper::getExtensionRecord('com_content', 'component')->extension_id,
|
|
'params' => array(
|
|
'menu_show' => 1,
|
|
'secure' => 0,
|
|
),
|
|
),
|
|
);
|
|
|
|
try
|
|
{
|
|
$this->addMenuItems($menuItems, 3);
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 2, $e->getMessage());
|
|
|
|
return $response;
|
|
}
|
|
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::_('PLG_SAMPLEDATA_BLOG_STEP2_SUCCESS');
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Third step to enter the sampledata. Modules.
|
|
*
|
|
* @return array or void Will be converted into the JSON response to the module.
|
|
*
|
|
* @since 3.8.0
|
|
*/
|
|
public function onAjaxSampledataApplyStep3()
|
|
{
|
|
$app = Factory::getApplication();
|
|
|
|
if (!Session::checkToken('get') || $this->app->input->get('type') != $this->_name)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!ComponentHelper::isEnabled('com_modules') || !Factory::getUser()->authorise('core.create', 'com_modules'))
|
|
{
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_SKIPPED', 3, 'com_modules');
|
|
|
|
return $response;
|
|
}
|
|
|
|
// Detect language to be used.
|
|
$language = Multilanguage::isEnabled() ? Factory::getLanguage()->getTag() : '*';
|
|
$langSuffix = ($language !== '*') ? ' (' . $language . ')' : '';
|
|
|
|
// Add Include Paths.
|
|
$model = new \Joomla\Component\Modules\Administrator\Model\ModuleModel;
|
|
$access = (int) $this->app->get('access', 1);
|
|
|
|
// Get previously entered Data from UserStates
|
|
$menuTypes = $this->app->getUserState('sampledata.blog.menutypes');
|
|
|
|
$catids = $this->app->getUserState('sampledata.blog.articles.catids');
|
|
$articleIds = $this->app->getUserState('sampledata.blog.articles');
|
|
|
|
// Link to article "typography" in banner module
|
|
$headerLink = 'index.php?option=com_content&view=article&id=' . $articleIds[10];
|
|
|
|
$modules = array(
|
|
array(
|
|
// The main menu Blog
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_0_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'menu',
|
|
'module' => 'mod_menu',
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'menutype' => $menuTypes[0],
|
|
'layout' => 'cassiopeia:dropdown-metismenu',
|
|
'startLevel' => 1,
|
|
'endLevel' => 0,
|
|
'showAllChildren' => 1,
|
|
'class_sfx' => '',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'itemid',
|
|
'module_tag' => 'nav',
|
|
'bootstrap_size' => 0,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// The author Menu, for registered users
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_1_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'sidebar-right',
|
|
'module' => 'mod_menu',
|
|
'access' => 3,
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'menutype' => $menuTypes[1],
|
|
'startLevel' => 1,
|
|
'endLevel' => 0,
|
|
'showAllChildren' => 1,
|
|
'class_sfx' => '',
|
|
'layout' => '_:default',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'itemid',
|
|
'module_tag' => 'aside',
|
|
'bootstrap_size' => 0,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Syndication
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_2_TITLE'),
|
|
'ordering' => 6,
|
|
'position' => 'sidebar-right',
|
|
'module' => 'mod_syndicate',
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'display_text' => 1,
|
|
'text' => 'My Blog',
|
|
'format' => 'rss',
|
|
'layout' => '_:default',
|
|
'cache' => 0,
|
|
'module_tag' => 'section',
|
|
),
|
|
),
|
|
array(
|
|
// Archived Articles
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_3_TITLE'),
|
|
'ordering' => 4,
|
|
'position' => 'sidebar-right',
|
|
'module' => 'mod_articles_archive',
|
|
'params' => array(
|
|
'count' => 10,
|
|
'layout' => '_:default',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'module_tag' => 'div',
|
|
'cachemode' => 'static',
|
|
),
|
|
),
|
|
array(
|
|
// Latest Posts
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_4_TITLE'),
|
|
'ordering' => 6,
|
|
'position' => 'top-a',
|
|
'module' => 'mod_articles_news',
|
|
// Assignment 1 means here - only on the homepage
|
|
'assignment' => 1,
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'catid' => $catids[2],
|
|
'image' => 1,
|
|
'img_intro_full' => 'intro',
|
|
'item_title' => 0,
|
|
'link_titles' => '',
|
|
'item_heading' => 'h4',
|
|
'triggerevents' => 1,
|
|
'showLastSeparator' => 1,
|
|
'show_introtext' => 1,
|
|
'readmore' => 1,
|
|
'count' => 3,
|
|
'show_featured' => '',
|
|
'exclude_current' => 0,
|
|
'ordering' => 'a.publish_up',
|
|
'direction' => 1,
|
|
'layout' => '_:horizontal',
|
|
'moduleclass_sfx' => '',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'itemid',
|
|
'style' => 'Cassiopeia-noCard',
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => '0',
|
|
'header_tag' => 'h3',
|
|
'header_class' => ''
|
|
),
|
|
),
|
|
array(
|
|
// Older Posts (from category 0 = blog)
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_5_TITLE'),
|
|
'ordering' => 2,
|
|
'position' => 'bottom-b',
|
|
'module' => 'mod_articles_category',
|
|
'params' => array(
|
|
'mode' => 'normal',
|
|
'show_on_article_page' => 0,
|
|
'show_front' => 'show',
|
|
'count' => 6,
|
|
'category_filtering_type' => 1,
|
|
'catid' => $catids[0],
|
|
'show_child_category_articles' => 0,
|
|
'levels' => 1,
|
|
'author_filtering_type' => 1,
|
|
'author_alias_filtering_type' => 1,
|
|
'date_filtering' => 'off',
|
|
'date_field' => 'a.created',
|
|
'relative_date' => 30,
|
|
'article_ordering' => 'a.created',
|
|
'article_ordering_direction' => 'DESC',
|
|
'article_grouping' => 'none',
|
|
'article_grouping_direction' => 'krsort',
|
|
'month_year_format' => 'F Y',
|
|
'item_heading' => 5,
|
|
'link_titles' => 1,
|
|
'show_date' => 0,
|
|
'show_date_field' => 'created',
|
|
'show_date_format' => Text::_('DATE_FORMAT_LC5'),
|
|
'show_category' => 0,
|
|
'show_hits' => 0,
|
|
'show_author' => 0,
|
|
'show_introtext' => 0,
|
|
'introtext_limit' => 100,
|
|
'show_readmore' => 0,
|
|
'show_readmore_title' => 1,
|
|
'readmore_limit' => 15,
|
|
'layout' => '_:default',
|
|
'owncache' => 1,
|
|
'cache_time' => 900,
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => 4,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Bottom Menu
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_6_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'footer',
|
|
'module' => 'mod_menu',
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'menutype' => $menuTypes[2],
|
|
'startLevel' => 1,
|
|
'endLevel' => 0,
|
|
'showAllChildren' => 0,
|
|
'layout' => '_:default',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'itemid',
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => 0,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Search
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_7_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'search',
|
|
'module' => 'mod_finder',
|
|
'params' => array(
|
|
'searchfilter' => '',
|
|
'show_autosuggest' => 1,
|
|
'show_advanced' => 0,
|
|
'show_label' => 0,
|
|
'alt_label' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_7_TITLE'),
|
|
'show_button' => 1,
|
|
'opensearch' => 1,
|
|
'opensearch_name' => '',
|
|
'set_itemid' => 0,
|
|
'layout' => '_:default',
|
|
'module_tag' => 'search',
|
|
),
|
|
),
|
|
array(
|
|
// Header image
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_8_TITLE'),
|
|
'content' => '<p>' . Text::sprintf('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_8_CONTENT', $headerLink) . '</p>',
|
|
'ordering' => 1,
|
|
'position' => 'banner',
|
|
'module' => 'mod_custom',
|
|
// Assignment 1 means here - only on the homepage
|
|
'assignment' => 1,
|
|
'showtitle' => 0,
|
|
'params' => array(
|
|
'prepare_content' => 0,
|
|
'backgroundimage' => 'images/banners/banner.jpg',
|
|
'layout' => 'cassiopeia:banner',
|
|
'moduleclass_sfx' => '',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'static',
|
|
'style' => '0',
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => '0',
|
|
'header_tag' => 'h3',
|
|
'header_class' => ''
|
|
),
|
|
),
|
|
array(
|
|
// Popular Tags
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_9_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'bottom-b',
|
|
'module' => 'mod_tags_popular',
|
|
'params' => array(
|
|
'maximum' => 8,
|
|
'timeframe' => 'alltime',
|
|
'order_value' => 'count',
|
|
'order_direction' => 1,
|
|
'display_count' => 1,
|
|
'no_results_text' => 0,
|
|
'minsize' => 1,
|
|
'maxsize' => 2,
|
|
'layout' => '_:cloud',
|
|
'owncache' => 1,
|
|
'module_tag' => 'aside',
|
|
'bootstrap_size' => 4,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Similiar Items
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_10_TITLE'),
|
|
'ordering' => 0,
|
|
'position' => '',
|
|
'module' => 'mod_tags_similar',
|
|
'position' => 'bottom-b',
|
|
'params' => array(
|
|
'maximum' => 5,
|
|
'matchtype' => 'any',
|
|
'layout' => '_:default',
|
|
'owncache' => 1,
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => 4,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Backend - Site Information
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_11_TITLE'),
|
|
'ordering' => 4,
|
|
'position' => 'cpanel',
|
|
'module' => 'mod_stats_admin',
|
|
'access' => 6,
|
|
'client_id' => 1,
|
|
'params' => array(
|
|
'serverinfo' => 1,
|
|
'siteinfo' => 1,
|
|
'counter' => 0,
|
|
'increase' => 0,
|
|
'layout' => '_:default',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'cachemode' => 'static',
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => 6,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
array(
|
|
// Backend - Release News
|
|
'title' => Text::_('PLG_SAMPLEDATA_BLOG_SAMPLEDATA_MODULES_MODULE_12_TITLE'),
|
|
'ordering' => 1,
|
|
'position' => 'postinstall',
|
|
'module' => 'mod_feed',
|
|
'client_id' => 1,
|
|
'params' => array(
|
|
'rssurl' => 'https://www.joomla.org/announcements/release-news.feed',
|
|
'rssrtl' => 0,
|
|
'rsstitle' => 1,
|
|
'rssdesc' => 1,
|
|
'rssimage' => 1,
|
|
'rssitems' => 3,
|
|
'rssitemdesc' => 1,
|
|
'word_count' => 0,
|
|
'layout' => '_:default',
|
|
'cache' => 1,
|
|
'cache_time' => 900,
|
|
'module_tag' => 'div',
|
|
'bootstrap_size' => 0,
|
|
'header_tag' => 'h3',
|
|
'style' => 0,
|
|
),
|
|
),
|
|
);
|
|
|
|
foreach ($modules as $module)
|
|
{
|
|
// Append language suffix to title.
|
|
$module['title'] .= $langSuffix;
|
|
|
|
// Set values which are always the same.
|
|
$module['id'] = 0;
|
|
$module['asset_id'] = 0;
|
|
$module['language'] = $language;
|
|
$module['note'] = '';
|
|
$module['published'] = 1;
|
|
|
|
if (!isset($module['assignment']))
|
|
{
|
|
$module['assignment'] = 0;
|
|
}
|
|
else
|
|
{
|
|
// Assignment means always "only on the homepage".
|
|
if (Multilanguage::isEnabled())
|
|
{
|
|
$homes = Multilanguage::getSiteHomePages();
|
|
|
|
if (isset($homes[$language]))
|
|
{
|
|
$home = $homes[$language]->id;
|
|
}
|
|
}
|
|
|
|
if (!isset($home))
|
|
{
|
|
$home = $app->getMenu('site')->getDefault()->id;
|
|
}
|
|
|
|
$module['assigned'] = [$home];
|
|
}
|
|
|
|
if (!isset($module['content']))
|
|
{
|
|
$module['content'] = '';
|
|
}
|
|
|
|
if (!isset($module['access']))
|
|
{
|
|
$module['access'] = $access;
|
|
}
|
|
|
|
if (!isset($module['showtitle']))
|
|
{
|
|
$module['showtitle'] = 1;
|
|
}
|
|
|
|
if (!isset($module['client_id']))
|
|
{
|
|
$module['client_id'] = 0;
|
|
}
|
|
|
|
if (!$model->save($module))
|
|
{
|
|
Factory::getLanguage()->load('com_modules');
|
|
$response = array();
|
|
$response['success'] = false;
|
|
$response['message'] = Text::sprintf('PLG_SAMPLEDATA_BLOG_STEP_FAILED', 3, Text::_($model->getError()));
|
|
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
$response = array();
|
|
$response['success'] = true;
|
|
$response['message'] = Text::_('PLG_SAMPLEDATA_BLOG_STEP3_SUCCESS');
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Final step to show completion of sampledata.
|
|
*
|
|
* @return array or void Will be converted into the JSON response to the module.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
public function onAjaxSampledataApplyStep4()
|
|
{
|
|
if ($this->app->input->get('type') != $this->_name)
|
|
{
|
|
return;
|
|
}
|
|
|
|
$response['success'] = true;
|
|
$response['message'] = Text::_('PLG_SAMPLEDATA_BLOG_STEP4_SUCCESS');
|
|
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* Adds menuitems.
|
|
*
|
|
* @param array $menuItems Array holding the menuitems arrays.
|
|
* @param integer $level Level in the category tree.
|
|
*
|
|
* @return array IDs of the inserted menuitems.
|
|
*
|
|
* @since 3.8.0
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
private function addMenuItems(array $menuItems, $level)
|
|
{
|
|
$itemIds = array();
|
|
$access = (int) $this->app->get('access', 1);
|
|
$user = Factory::getUser();
|
|
$app = Factory::getApplication();
|
|
|
|
// Detect language to be used.
|
|
$language = Multilanguage::isEnabled() ? Factory::getLanguage()->getTag() : '*';
|
|
$langSuffix = ($language !== '*') ? ' (' . $language . ')' : '';
|
|
|
|
foreach ($menuItems as $menuItem)
|
|
{
|
|
// Reset item.id in model state.
|
|
$this->menuItemModel->setState('item.id', 0);
|
|
|
|
// Set values which are always the same.
|
|
$menuItem['id'] = 0;
|
|
$menuItem['created_user_id'] = $user->id;
|
|
$menuItem['alias'] = ApplicationHelper::stringURLSafe($menuItem['title']);
|
|
|
|
// Set unicodeslugs if alias is empty
|
|
if (trim(str_replace('-', '', $menuItem['alias']) == ''))
|
|
{
|
|
$unicode = $app->set('unicodeslugs', 1);
|
|
$menuItem['alias'] = ApplicationHelper::stringURLSafe($menuItem['title']);
|
|
$app->set('unicodeslugs', $unicode);
|
|
}
|
|
|
|
// Append language suffix to title.
|
|
$menuItem['title'] .= $langSuffix;
|
|
|
|
$menuItem['published'] = 1;
|
|
$menuItem['language'] = $language;
|
|
$menuItem['note'] = '';
|
|
$menuItem['img'] = '';
|
|
$menuItem['associations'] = array();
|
|
$menuItem['client_id'] = 0;
|
|
$menuItem['level'] = $level;
|
|
$menuItem['home'] = 0;
|
|
|
|
// Set browserNav to default if not set
|
|
if (!isset($menuItem['browserNav']))
|
|
{
|
|
$menuItem['browserNav'] = 0;
|
|
}
|
|
|
|
// Set access to default if not set
|
|
if (!isset($menuItem['access']))
|
|
{
|
|
$menuItem['access'] = $access;
|
|
}
|
|
|
|
// Set type to 'component' if not set
|
|
if (!isset($menuItem['type']))
|
|
{
|
|
$menuItem['type'] = 'component';
|
|
}
|
|
|
|
// Set template_style_id to global if not set
|
|
if (!isset($menuItem['template_style_id']))
|
|
{
|
|
$menuItem['template_style_id'] = 0;
|
|
}
|
|
|
|
// Set parent_id to root (1) if not set
|
|
if (!isset($menuItem['parent_id']))
|
|
{
|
|
$menuItem['parent_id'] = 1;
|
|
}
|
|
|
|
if (!$this->menuItemModel->save($menuItem))
|
|
{
|
|
// Try two times with another alias (-1 and -2).
|
|
$menuItem['alias'] .= '-1';
|
|
|
|
if (!$this->menuItemModel->save($menuItem))
|
|
{
|
|
$menuItem['alias'] = substr_replace($menuItem['alias'], '2', -1);
|
|
|
|
if (!$this->menuItemModel->save($menuItem))
|
|
{
|
|
throw new Exception($menuItem['title'] . ' => ' . $menuItem['alias'] . ' : ' . $this->menuItemModel->getError());
|
|
}
|
|
}
|
|
}
|
|
|
|
// Get ID from menuitem we just added
|
|
$itemIds[] = $this->menuItemModel->getstate('item.id');
|
|
}
|
|
|
|
return $itemIds;
|
|
}
|
|
}
|