/administrator/components/com_k2/models/extrafield.php
PHP | 374 lines | 311 code | 55 blank | 8 comment | 68 complexity | cd8810f60512aa1ade7543ad792fd63e MD5 | raw file
- <?php
- /**
- * @version $Id: extrafield.php 1554 2012-04-19 12:22:40Z lefteris.kavadas $
- * @package K2
- * @author JoomlaWorks http://www.joomlaworks.net
- * @copyright Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
- * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
- */
- // no direct access
- defined('_JEXEC') or die('Restricted access');
- jimport('joomla.application.component.model');
- JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
- class K2ModelExtraField extends JModel
- {
- 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');
- $names = JRequest::getVar('option_name');
- $target = JRequest::getVar('option_target');
- $editor = JRequest::getVar('option_editor');
- 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]);
- }
- else
- {
- $object->set('value', $values[$i]);
- }
- $object->set('target', $target[$i]);
- 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)
- {
- if ($extraField->type == 'textfield' || $extraField->type == 'csv' || $extraField->type == 'labels' || $extraField->type == 'date')
- {
- $active = $value->value;
- }
- else if ($extraField->type == 'textarea')
- {
- $active[0] = $value->value;
- $active[1] = $value->editor;
- }
- else if ($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
- {
- $active = $value->value;
- }
- }
- }
- }
- }
- switch ($extraField->type)
- {
- case 'textfield' :
- $output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" value="'.$active.'"/>';
- break;
- case 'labels' :
- $output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" value="'.$active.'"/> '.JText::_('K2_COMMA_SEPARATED_VALUES');
- break;
- case 'textarea' :
- if ($active[1])
- {
- $output = '<textarea name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" rows="10" cols="40" class="k2ExtraFieldEditor">'.$active[0].'</textarea>';
- }
- else
- {
- $output = '<textarea name="K2ExtraField_'.$extraField->id.'" rows="10" cols="40">'.$active[0].'</textarea>';
- }
- break;
- case 'select' :
- $output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
- break;
- case 'multipleSelect' :
- $output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id.'[]', 'multiple="multiple"', 'value', 'name', $active);
- break;
- case 'radio' :
- $output = JHTML::_('select.radiolist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
- break;
- case 'link' :
- $output = '<label>'.JText::_('K2_TEXT').'</label>';
- $output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" value="'.$active[0].'"/>';
- $output .= '<label>'.JText::_('K2_URL').'</label>';
- $output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" value="'.$active[1].'"/>';
- $output .= '<label for="K2ExtraField_'.$extraField->id.'">'.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' :
- $output = '<input type="file" name="K2ExtraField_'.$extraField->id.'[]"/>';
- 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);
- 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;
- }
- }