%PDF- %PDF-
| Direktori : /home1/lightco1/www/plugins/csviaddon/content/com_content/model/import/ |
| Current File : //home1/lightco1/www/plugins/csviaddon/content/com_content/model/import/content.php |
<?php
/**
* @package CSVI
* @subpackage JoomlaContent
*
* @author Roland Dalmulder <contact@csvimproved.com>
* @copyright Copyright (C) 2006 - 2016 RolandD Cyber Produksi. All rights reserved.
* @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
* @link http://www.csvimproved.com
*/
defined('_JEXEC') or die;
JLoader::register('JArrayHelper', JPATH_PLATFORM . '/joomla/utilities/arrayhelper.php');
/**
* Content import.
*
* @package CSVI
* @subpackage JoomlaContent
* @since 6.0
*/
class Com_ContentModelImportContent extends RantaiImportEngine
{
/**
* Content table.
*
* @var ContentTableContent
* @since 6.0
*/
private $content = null;
/**
* The Joomla content helper
*
* @var Com_ContentHelperCom_Content
* @since 6.0
*/
protected $helper = null;
/**
* Start the product import process.
*
* @return bool True on success | false on failure.
*
* @since 6.0
*/
public function getStart()
{
// Process data
foreach ($this->fields->getData() as $fields)
{
foreach ($fields as $name => $details)
{
$value = $details->value;
switch ($name)
{
case 'category_path':
$this->setState('catid', $this->helper->getCategoryId($value));
$this->setState($name, $value);
break;
default:
$this->setState($name, $value);
break;
}
}
}
// There must be an id or alias and catid or category_path
if ($this->getState('id', false)
|| ($this->getState('alias', false) && ($this->getState('catid', false) || !$this->getState('category_path', false))) )
{
$this->loaded = true;
if (!$this->getState('id', false))
{
$this->setState('id', $this->helper->getContentId());
}
// Load the current content data
if ($this->content->load($this->getState('id', 0)))
{
if (!$this->template->get('overwrite_existing_data'))
{
$this->log->add('Article ' . $this->getState('alias') . 'not updated because the option overwrite existing data is set to No');
$this->loaded = false;
}
}
}
return true;
}
/**
* Process a record.
*
* @return bool Returns true if all is OK | Returns false if no product SKU or product ID can be found.
*
* @since 6.0
*/
public function getProcessRecord()
{
if ($this->loaded)
{
if (!$this->getState('id', false) && $this->template->get('ignore_non_exist'))
{
// Do nothing for new products when user chooses to ignore new products
$this->log->addStats('skipped', JText::sprintf('COM_CSVI_DATA_EXISTS_IGNORE_NEW', $this->getState('alias', '')));
}
else
{
// Check if we have a title
if (empty($this->content->title))
{
$this->content->title = $this->getState('alias');
}
// Set the attributes
$this->setAttributes();
// Set the images
$this->setImages();
// Set the urls
$this->setUrls();
// Check for meta data
$this->setMetadata();
// Get the transliteration helper
$translit = new CsviHelperTranslit($this->template);
if ($this->getState('alias', false) || ($this->getState('id', false) == 0))
{
$this->setState('alias', $translit->stringURLSafe($this->getState('alias')));
}
// Data must be in an array
$data = Joomla\Utilities\ArrayHelper::fromObject($this->state);
// Bind the data
if ($this->content->bind($data))
{
// Add a creating date if there is no product_id
if (!$this->getState('id', false))
{
$this->content->created = $this->date->toSql();
$this->content->created_by = $this->userId;
}
else
{
if (!$this->getState('modified_on', false))
{
$this->content->modified = $this->date->toSql();
$this->content->modified_by = $this->userId;
}
}
if ($this->content->check())
{
$this->content->store();
}
else
{
$errors = $this->content->getErrors();
foreach ($errors as $error)
{
$this->log->add($error);
$this->log->addStats('incorrect', $error);
}
}
}
}
return true;
}
else
{
return false;
}
}
/**
* Load the necessary tables.
*
* @return void.
*
* @since 6.0
*/
public function loadTables()
{
$this->content = $this->getTable('Content');
}
/**
* Clear the loaded tables.
*
* @return void.
*
* @since 6.0
*/
public function clearTables()
{
$this->content->reset();
}
/**
* Set the attributes field.
*
* @return void.
*
* @since 6.0
*/
private function setAttributes()
{
// Check for attributes
if (!$this->getState('attribs', false))
{
$attributeFields = array
(
'show_title',
'link_titles',
'show_intro',
'show_category',
'link_category',
'show_parent_category',
'link_parent_category',
'show_author',
'link_author',
'show_create_date',
'show_modify_date',
'show_publish_date',
'show_item_navigation',
'show_icons',
'show_print_icon',
'show_email_icon',
'show_vote',
'show_hits',
'show_noauth',
'urls_position',
'alternative_readmore',
'article_layout',
'show_publishing_options',
'show_article_options',
'show_urls_images_backend',
'show_urls_images_frontend'
);
// Get Value from content plugin
$dispatcher = new RantaiPluginDispatcher;
$dispatcher->importPlugins('csviext', $this->db);
// Fire the plugin to get attributes to import
$pluginFields = $dispatcher->trigger(
'getAttributes',
array(
'extension' => 'joomla',
'operation' => 'content',
'log' => $this->log
)
);
if (!empty($pluginFields[0]))
{
$this->log->add('Attributes added for content swmap plugin', false);
$attributeFields = array_merge($attributeFields, $pluginFields[0]);
}
// Load the current attributes
$attributes = json_decode($this->content->attribs);
if (!is_object($attributes))
{
$attributes = new stdClass;
}
foreach ($attributeFields as $field)
{
if (!$this->getState($field, false))
{
if ($this->$field == '*')
{
$attributes->$field = '';
}
else
{
$attributes->$field = $this->getState($field, '');
}
}
else
{
$attributes->$field = $this->getState($field, '');
}
}
// Store the new attributes
$this->setState('attribs', json_encode($attributes));
}
}
/**
* Set the images.
*
* @return void.
*
* @since 6.0
*/
private function setImages()
{
if (!$this->getState('images'))
{
$imageFields = array
(
'image_intro',
'float_intro',
'image_intro_alt',
'image_intro_caption',
'image_fulltext',
'float_fulltext',
'image_fulltext_alt',
'image_fulltext_caption'
);
// Load the current images
$images = json_decode($this->content->images);
if (!is_object($images))
{
$images = new stdClass;
}
foreach ($imageFields as $field)
{
$images->$field = $this->getState($field, '');
}
// Store the new attributes
$this->setState('images', json_encode($images));
}
}
/**
* Set the urls.
*
* @return void.
*
* @since 6.0
*/
private function setUrls()
{
if (!$this->getState('urls'))
{
$urlFields = array
(
'urla',
'urlatext',
'targeta',
'urlb',
'urlbtext',
'targetb',
'urlc',
'urlctext',
'targetc',
);
// Load the current images
$urls = json_decode($this->content->urls);
if (!is_object($urls))
{
$urls = new stdClass;
}
foreach ($urlFields as $field)
{
$urls->$field = $this->getState($field, '');
}
// Store the new attributes
$this->setState('urls', json_encode($urls));
}
}
/**
* Set the meta data.
*
* @return void.
*
* @since 6.0
*/
private function setMetadata()
{
if (!$this->getState('metadata', false))
{
$metadataFields = array
(
'meta_robots',
'meta_author',
'meta_rights',
'meta_xreference'
);
// Load the current attributes
$metadata = json_decode($this->content->metadata);
if (!is_object($metadata))
{
$metadata = new stdClass;
}
foreach ($metadataFields as $field)
{
$newField = str_ireplace('meta_', '', $field);
if ($this->getState($field, false))
{
if ($this->getState($field, '') == '*')
{
$metadata->$field = '';
}
else
{
$metadata->$newField = $this->getState($field, '');
}
}
elseif (!isset($metadata->$newField))
{
$metadata->$newField = '';
}
}
// Store the new attributes
$this->setState('metadata', json_encode($metadata));
}
}
}