joomla_test/administrator/components/com_k2/models/extrafield.php

458 lines
12 KiB
PHP
Raw Normal View History

2020-01-02 22:20:31 +07:00
<?php
/**
* @version $Id: extrafield.php 1965 2013-04-29 16:01:44Z 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
*/
// no direct access
defined('_JEXEC') or die ;
jimport('joomla.application.component.model');
JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
class K2ModelExtraField extends K2Model
{
function getData()
{
$cid = JRequest::getVar('cid');
$row = JTable::getInstance('K2ExtraField', 'Table');
$row->load($cid);
return $row;
}
function save()
{
$mainframe = JFactory::getApplication();
$row = JTable::getInstance('K2ExtraField', 'Table');
if (!$row->bind(JRequest::get('post')))
{
$mainframe->redirect('index.php?option=com_k2&view=extrafields', $row->getError(), 'error');
}
$isNewGroup = JRequest::getInt('isNew');
if ($isNewGroup)
{
$group = JTable::getInstance('K2ExtraFieldsGroup', 'Table');
$group->set('name', JRequest::getVar('group'));
$group->store();
$row->group = $group->id;
}
if (!$row->id)
{
$row->ordering = $row->getNextOrder("`group` = {$row->group}");
}
$objects = array();
$values = JRequest::getVar('option_value', null, 'default', 'none', 4);
$names = JRequest::getVar('option_name');
$target = JRequest::getVar('option_target');
$editor = JRequest::getVar('option_editor');
$rows = JRequest::getVar('option_rows');
$cols = JRequest::getVar('option_cols');
$alias = JRequest::getWord('alias');
$required = JRequest::getInt('required');
$showNull = JRequest::getInt('showNull');
$displayInFrontEnd = JRequest::getInt('displayInFrontEnd');
if (JString::strtolower($alias) == 'this')
{
$alias = '';
}
for ($i = 0; $i < sizeof($values); $i++)
{
$object = new JObject;
$object->set('name', $names[$i]);
if ($row->type == 'select' || $row->type == 'multipleSelect' || $row->type == 'radio')
{
$object->set('value', $i + 1);
}
elseif ($row->type == 'link')
{
if (substr($values[$i], 0, 7) == 'http://')
{
$values[$i] = $values[$i];
}
else
{
$values[$i] = 'http://'.$values[$i];
}
$object->set('value', $values[$i]);
}
elseif ($row->type == 'csv')
{
$file = JRequest::getVar('csv_file', NULL, 'FILES');
$csvFile = $file['tmp_name'];
if (!empty($csvFile) && JFile::getExt($file['name']) == '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_COMPONENT.DS.'lib'.DS.'JSON.php');
$json = new Services_JSON;
$object->set('value', $json->decode($values[$i]));
if (JRequest::getBool('K2ResetCSV'))
$object->set('value', null);
}
}
elseif ($row->type == 'textarea')
{
$object->set('value', $values[$i]);
$object->set('editor', $editor[$i]);
$object->set('rows', $rows[$i]);
$object->set('cols', $cols[$i]);
}
elseif ($row->type == 'image')
{
$object->set('value', $values[$i]);
}
elseif ($row->type == 'header')
{
$object->set('value', JRequest::getString('name'));
$object->set('displayInFrontEnd', $displayInFrontEnd);
}
else
{
$object->set('value', $values[$i]);
}
$object->set('target', $target[$i]);
$object->set('alias', $alias);
$object->set('required', $required);
$object->set('showNull', $showNull);
unset($object->_errors);
$objects[] = $object;
}
require_once (JPATH_COMPONENT.DS.'lib'.DS.'JSON.php');
$json = new Services_JSON;
$row->value = $json->encode($objects);
if (!$row->check())
{
$mainframe->redirect('index.php?option=com_k2&view=extrafield&cid='.$row->id, $row->getError(), 'error');
}
if (!$row->store())
{
$mainframe->redirect('index.php?option=com_k2&view=extrafields', $row->getError(), 'error');
}
$params = JComponentHelper::getParams('com_k2');
if (!$params->get('disableCompactOrdering'))
$row->reorder("`group` = {$row->group}");
$cache = JFactory::getCache('com_k2');
$cache->clean();
switch(JRequest::getCmd('task'))
{
case 'apply' :
$msg = JText::_('K2_CHANGES_TO_EXTRA_FIELD_SAVED');
$link = 'index.php?option=com_k2&view=extrafield&cid='.$row->id;
break;
case 'save' :
default :
$msg = JText::_('K2_EXTRA_FIELD_SAVED');
$link = 'index.php?option=com_k2&view=extrafields';
break;
}
$mainframe->redirect($link, $msg);
}
function getExtraFieldsByGroup($group)
{
$db = JFactory::getDBO();
$group = (int)$group;
$query = "SELECT * FROM #__k2_extra_fields WHERE `group`={$group} AND published=1 ORDER BY ordering";
$db->setQuery($query);
$rows = $db->loadObjectList();
return $rows;
}
function renderExtraField($extraField, $itemID = NULL)
{
$mainframe = JFactory::getApplication();
require_once (JPATH_COMPONENT_ADMINISTRATOR.DS.'lib'.DS.'JSON.php');
$json = new Services_JSON;
if (!is_null($itemID))
{
$item = JTable::getInstance('K2Item', 'Table');
$item->load($itemID);
}
$defaultValues = $json->decode($extraField->value);
foreach ($defaultValues as $value)
{
$required = isset($value->required) ? $value->required : 0;
$showNull = isset($value->showNull) ? $value->showNull : 0;
if ($extraField->type == 'textfield' || $extraField->type == 'csv' || $extraField->type == 'labels' || $extraField->type == 'date')
{
$active = $value->value;
}
elseif ($extraField->type == 'textarea')
{
$active[0] = $value->value;
$active[1] = $value->editor;
$active[2] = (int)$value->rows ? (int)$value->rows : 10;
$active[3] = (int)$value->cols ? (int)$value->cols : 40;
}
elseif ($extraField->type == 'link')
{
$active[0] = $value->name;
$active[1] = $value->value;
$active[2] = $value->target;
}
else
{
$active = '';
}
}
if (!isset($active))
{
$active = '';
}
if (isset($item))
{
$currentValues = $json->decode($item->extra_fields);
if (count($currentValues))
{
foreach ($currentValues as $value)
{
if ($value->id == $extraField->id)
{
if ($extraField->type == 'textarea')
{
$active[0] = $value->value;
}
else if ($extraField->type == 'date')
{
$active = (is_array($value->value)) ? $value->value[0] : $value->value;
}
else if ($extraField->type == 'header')
{
continue;
}
else
{
$active = $value->value;
}
}
}
}
}
$attributes = '';
if ($required)
{
$attributes .= 'class="k2Required"';
}
if ($showNull && in_array($extraField->type, array(
'select',
'multipleSelect'
)))
{
$nullOption = new stdClass;
$nullOption->name = JText::_('K2_PLEASE_SELECT');
$nullOption->value = '';
array_unshift($defaultValues, $nullOption);
}
if (in_array($extraField->type, array(
'textfield',
'labels',
'date',
'image'
)))
{
$active = htmlspecialchars($active, ENT_QUOTES, 'UTF-8');
}
switch ($extraField->type)
{
case 'textfield' :
$output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" value="'.$active.'" '.$attributes.' />';
break;
case 'labels' :
$output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" value="'.$active.'" '.$attributes.' /> '.JText::_('K2_COMMA_SEPARATED_VALUES');
break;
case 'textarea' :
if ($active[1])
{
if ($required)
{
$attributes = 'class="k2ExtraFieldEditor k2Required"';
}
else
{
$attributes = 'class="k2ExtraFieldEditor"';
}
}
$output = '<textarea name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" rows="'.$active[2].'" cols="'.$active[3].'" '.$attributes.'>'.htmlspecialchars($active[0], ENT_QUOTES, 'UTF-8').'</textarea>';
break;
case 'select' :
$attributes .= ' id="'.$extraField->id.'.$extraField->id"';
$output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id, $attributes, 'value', 'name', $active);
break;
case 'multipleSelect' :
$attributes .= ' id="'.$extraField->id.'.$extraField->id" multiple="multiple"';
$output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id.'[]', $attributes, 'value', 'name', $active);
break;
case 'radio' :
if (!$active && isset($defaultValues[0]))
{
$active = $defaultValues[0]->value;
}
$output = JHTML::_('select.radiolist', $defaultValues, 'K2ExtraField_'.$extraField->id, $attributes, 'value', 'name', $active);
break;
case 'link' :
$output = '<label>'.JText::_('K2_TEXT').'</label>';
$output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" value="'.htmlspecialchars($active[0], ENT_QUOTES, 'UTF-8').'" />';
$output .= '<label>'.JText::_('K2_URL').'</label>';
$output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" id="K2ExtraField_'.$extraField->id.'" value="'.htmlspecialchars($active[1], ENT_QUOTES, 'UTF-8').'" '.$attributes.'/>';
$output .= '<label>'.JText::_('K2_OPEN_IN').'</label>';
$targetOptions[] = JHTML::_('select.option', 'same', JText::_('K2_SAME_WINDOW'));
$targetOptions[] = JHTML::_('select.option', 'new', JText::_('K2_NEW_WINDOW'));
$targetOptions[] = JHTML::_('select.option', 'popup', JText::_('K2_CLASSIC_JAVASCRIPT_POPUP'));
$targetOptions[] = JHTML::_('select.option', 'lightbox', JText::_('K2_LIGHTBOX_POPUP'));
$output .= JHTML::_('select.genericlist', $targetOptions, 'K2ExtraField_'.$extraField->id.'[]', '', 'value', 'text', $active[2]);
break;
case 'csv' :
if ($active)
{
$attributes = '';
}
$output = '<input type="file" id="K2ExtraField_'.$extraField->id.'" name="K2ExtraField_'.$extraField->id.'[]" '.$attributes.' />';
if (is_array($active) && count($active))
{
$output .= '<input type="hidden" name="K2CSV_'.$extraField->id.'" value="'.htmlspecialchars($json->encode($active)).'"/>';
$output .= '<table class="csvTable">';
foreach ($active as $key => $row)
{
$output .= '<tr>';
foreach ($row as $cell)
{
$output .= ($key > 0) ? '<td>'.$cell.'</td>' : '<th>'.$cell.'</th>';
}
$output .= '</tr>';
}
$output .= '</table>';
$output .= '<label>'.JText::_('K2_DELETE_CSV_DATA').'</label>';
$output .= '<input type="checkbox" name="K2ResetCSV_'.$extraField->id.'"/>';
}
break;
case 'date' :
$output = JHTML::_('calendar', $active, 'K2ExtraField_'.$extraField->id, 'K2ExtraField_'.$extraField->id, '%Y-%m-%d', $attributes);
break;
case 'image' :
$output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" value="'.$active.'" '.$attributes.' />
<a class="k2ExtraFieldImageButton" href="'.JRoute::_('index.php?option=com_k2&view=media&type=image&tmpl=component&fieldID=K2ExtraField_'.$extraField->id).'">'.JText::_('K2_SELECT').'</a>';
break;
case 'header' :
$output = '';
break;
}
return $output;
}
function getExtraFieldInfo($fieldID)
{
$db = JFactory::getDBO();
$fieldID = (int)$fieldID;
$query = "SELECT * FROM #__k2_extra_fields WHERE published=1 AND id = ".$fieldID;
$db->setQuery($query, 0, 1);
$row = $db->loadObject();
return $row;
}
function getSearchValue($id, $currentValue)
{
$row = JTable::getInstance('K2ExtraField', 'Table');
$row->load($id);
require_once (JPATH_COMPONENT_ADMINISTRATOR.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;
}
}