joomla_test/plugins/josetta_ext/k2item/models/item.php
2020-01-02 22:20:31 +07:00

361 lines
12 KiB
PHP

<?php
/**
* @version $Id: item.php 1812 2013-01-14 18:45:06Z lefteris.kavadas $
* @package K2
* @author JoomlaWorks http://www.joomlaworks.net
* @copyright Copyright (c) 2006 - 2013 JoomlaWorks Ltd. All rights reserved.
* @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
*/
defined('_JEXEC') or die ;
jimport('joomla.application.component.model');
JTable::addIncludePath(JPATH_ADMINISTRATOR.'/components/com_k2/tables');
class JosettaK2ModelItem extends JModel
{
public function save($item, $front = false)
{
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.archive');
require_once (JPATH_ADMINISTRATOR.'/components/com_k2/lib/class.upload.php');
$db = JFactory::getDBO();
$user = JFactory::getUser();
$row = JTable::getInstance('K2Item', 'Table');
$params = JComponentHelper::getParams('com_k2');
$nullDate = $db->getNullDate();
if (!$row->bind($item))
{
$this->setError($row->getError());
return false;
}
$row->catid = (int)$row->catid;
if ($front && $row->id == NULL)
{
JLoader::register('K2HelperPermissions', JPATH_SITE.'/components/com_k2/helpers/permissions.php');
if (!K2HelperPermissions::canAddItem($row->catid))
{
$this->setError(JText::_('K2_YOU_ARE_NOT_ALLOWED_TO_POST_TO_THIS_CATEGORY_SAVE_FAILED'));
return false;
}
}
($row->id) ? $isNew = false : $isNew = true;
if ($params->get('xssFiltering'))
{
$filter = new JFilterInput( array(), array(), 1, 1, 0);
$item['articletext'] = $filter->clean($item['articletext']);
}
$pattern = '#<hr\s+id=("|\')system-readmore("|\')\s*\/*>#i';
$tagPos = preg_match($pattern, $item['articletext']);
if ($tagPos == 0)
{
$row->introtext = $item['articletext'];
$row->fulltext = '';
}
else
{
list($row->introtext, $row->fulltext) = preg_split($pattern, $item['articletext'], 2);
}
if ($row->id)
{
$datenow = JFactory::getDate();
$row->modified = $datenow->toSql();
$row->modified_by = $user->get('id');
}
else
{
$row->ordering = $row->getNextOrder("catid = {$row->catid} AND trash = 0");
if ($row->featured)
$row->featured_ordering = $row->getNextOrder("featured = 1 AND trash = 0", 'featured_ordering');
}
$row->created_by = $row->created_by ? $row->created_by : $user->get('id');
if ($front)
{
$K2Permissions = K2Permissions::getInstance();
if (!$K2Permissions->permissions->get('editAll'))
{
$row->created_by = $user->get('id');
}
}
if ($row->created && strlen(trim($row->created)) <= 10)
{
$row->created .= ' 00:00:00';
}
$config = JFactory::getConfig();
$tzoffset = $config->get('config.offset');
$date = JFactory::getDate($row->created, $tzoffset);
$row->created = $date->toSql();
if (strlen(trim($row->publish_up)) <= 10)
{
$row->publish_up .= ' 00:00:00';
}
$date = JFactory::getDate($row->publish_up, $tzoffset);
$row->publish_up = $date->toSql();
if (trim($row->publish_down) == JText::_('K2_NEVER') || trim($row->publish_down) == '')
{
$row->publish_down = $nullDate;
}
else
{
if (strlen(trim($row->publish_down)) <= 10)
{
$row->publish_down .= ' 00:00:00';
}
$date = JFactory::getDate($row->publish_down, $tzoffset);
$row->publish_down = $date->toSql();
}
if (!$row->check())
{
$this->setError($row->getError());
return false;
}
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('k2');
$result = $dispatcher->trigger('onBeforeK2Save', array(&$row, $isNew));
if (in_array(false, $result, true))
{
$this->setError($row->getError());
return false;
}
//Trigger the finder before save event
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('finder');
$results = $dispatcher->trigger('onFinderBeforeSave', array('com_k2.item', $row, $isNew));
if (!$row->store())
{
$this->setError($row->getError());
return false;
}
if (!$params->get('disableCompactOrdering'))
{
$row->reorder("catid = {$row->catid} AND trash = 0");
}
if ($row->featured && !$params->get('disableCompactOrdering'))
{
$row->reorder("featured = 1 AND trash = 0", 'featured_ordering');
}
// Image copy
$src = md5("Image".$item['ref_id']);
$target = md5("Image".$row->id);
$sizes = array('XL', 'L', 'M', 'S', 'XS');
$savepath = JPATH_SITE.DS.'media'.DS.'k2'.DS.'items'.DS.'cache';
foreach($sizes as $size)
{
if(JFile::exists($savepath.DS.$src.'_'.$size.'.jpg') && !JFile::exists($savepath.DS.$target.'_'.$size.'.jpg'))
{
JFile::copy($savepath.DS.$src.'_'.$size.'.jpg', $savepath.DS.$target.'_'.$size.'.jpg');
}
}
//Extra fields
$objects = array();
$variables = JRequest::get('post', 4);
foreach ($variables as $key => $value)
{
if (( bool )JString::stristr($key, 'K2ExtraField_'))
{
$object = new JObject;
$object->set('id', JString::substr($key, 13));
$object->set('value', $value);
unset($object->_errors);
$objects[] = $object;
}
}
$csvFiles = empty($item['files']) ? array() : $item['files'];
foreach ($csvFiles as $key => $file)
{
if (( bool )JString::stristr($key, 'K2ExtraField_'))
{
$object = new JObject;
$object->set('id', JString::substr($key, 13));
$csvFile = $file['tmp_name'][0];
if (!empty($csvFile) && JFile::getExt($file['name'][0]) == 'csv')
{
$handle = @fopen($csvFile, 'r');
$csvData = array();
while (($data = fgetcsv($handle, 1000)) !== FALSE)
{
$csvData[] = $data;
}
fclose($handle);
$object->set('value', $csvData);
}
else
{
require_once (JPATH_ADMINISTRATOR.'/components/com_k2/lib/JSON.php');
$json = new Services_JSON;
$object->set('value', $json->decode($item['K2CSV_'.$object->id]));
if (!empty($item['K2ResetCSV_'.$object->id])) {
$object->set('value', null);
}
}
unset($object->_errors);
$objects[] = $object;
}
}
require_once (JPATH_ADMINISTRATOR.'/components/com_k2/lib/JSON.php');
$json = new Services_JSON;
$row->extra_fields = $json->encode($objects);
$row->extra_fields_search = '';
foreach ($objects as $object)
{
$row->extra_fields_search .= $this->getSearchValue($object->id, $object->value);
$row->extra_fields_search .= ' ';
}
$query = "DELETE FROM #__k2_tags_xref WHERE itemID={intval($row->id)}";
$db->setQuery($query);
$db->query();
if (!empty($item['tags']))
{
$tags = array_unique($item['tags']);
foreach ($tags as $tag)
{
$tag = JString::str_ireplace('-', '', $tag);
$query = "SELECT id FROM #__k2_tags WHERE name=".$db->Quote($tag);
$db->setQuery($query);
$tagID = $db->loadResult();
if ($tagID)
{
$query = "INSERT INTO #__k2_tags_xref (`id`, `tagID`, `itemID`) VALUES (NULL, {intval($tagID)}, {intval($row->id)})";
$db->setQuery($query);
$db->query();
}
else
{
$K2Tag = JTable::getInstance('K2Tag', 'Table');
$K2Tag->name = $tag;
$K2Tag->published = 1;
$K2Tag->check();
$K2Tag->store();
$query = "INSERT INTO #__k2_tags_xref (`id`, `tagID`, `itemID`) VALUES (NULL, {intval($K2Tag->id)}, {intval($row->id)})";
$db->setQuery($query);
$db->query();
}
}
}
//Image
if ((int)$params->get('imageMemoryLimit'))
{
ini_set('memory_limit', (int)$params->get('imageMemoryLimit').'M');
}
if ($front)
{
if (!K2HelperPermissions::canPublishItem($row->catid) && $row->published)
{
$row->published = 0;
$this->setError(JText::_('K2_YOU_DONT_HAVE_THE_PERMISSION_TO_PUBLISH_ITEMS'));
}
}
$query = "UPDATE #__k2_items SET video_caption = ".$db->Quote($row->video_caption).", video_credits = ".$db->Quote($row->video_credits).", ";
if (!is_null($row->video))
{
$query .= " video = ".$db->Quote($row->video).", ";
}
if (!is_null($row->gallery))
{
$query .= " gallery = ".$db->Quote($row->gallery).", ";
}
$query .= " extra_fields = ".$db->Quote($row->extra_fields).", extra_fields_search = ".$db->Quote($row->extra_fields_search)." , published = ".$db->Quote($row->published)." WHERE id = ".$row->id;
$db->setQuery($query);
if (!$db->query())
{
$this->setError($db->getErrorMsg());
return false;
}
$row->checkin();
$cache = JFactory::getCache('com_k2');
$cache->clean();
//$dispatcher->trigger('onAfterK2Save', array(&$row, $isNew));
$dispatcher->trigger('onContentAfterSave', array(&$row, $isNew));
//Trigger the finder after save event
$dispatcher = JDispatcher::getInstance();
JPluginHelper::importPlugin('finder');
$results = $dispatcher->trigger('onFinderAfterSave', array('com_k2.item', $row, $isNew));
return $row->id;
}
protected function getSearchValue($id, $currentValue)
{
$row = JTable::getInstance('K2ExtraField', 'Table');
$row->load($id);
require_once (JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'JSON.php');
$json = new Services_JSON;
$jsonObject = $json->decode($row->value);
$value = '';
if ($row->type == 'textfield' || $row->type == 'textarea')
{
$value = $currentValue;
}
else if ($row->type == 'multipleSelect')
{
foreach ($jsonObject as $option)
{
if (in_array($option->value, $currentValue))
$value .= $option->name.' ';
}
}
else if ($row->type == 'link')
{
$value .= $currentValue[0].' ';
$value .= $currentValue[1].' ';
}
else if ($row->type == 'labels')
{
$parts = explode(',', $currentValue);
$value .= implode(' ', $parts);
}
else
{
foreach ($jsonObject as $option)
{
if ($option->value == $currentValue)
$value .= $option->name;
}
}
return $value;
}
}