PageRenderTime 46ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://getk2.googlecode.com/
PHP | 374 lines | 311 code | 55 blank | 8 comment | 68 complexity | cd8810f60512aa1ade7543ad792fd63e MD5 | raw file
  1. <?php
  2. /**
  3. * @version $Id: extrafield.php 1554 2012-04-19 12:22:40Z lefteris.kavadas $
  4. * @package K2
  5. * @author JoomlaWorks http://www.joomlaworks.net
  6. * @copyright Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
  7. * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
  8. */
  9. // no direct access
  10. defined('_JEXEC') or die('Restricted access');
  11. jimport('joomla.application.component.model');
  12. JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
  13. class K2ModelExtraField extends JModel
  14. {
  15. function getData()
  16. {
  17. $cid = JRequest::getVar('cid');
  18. $row = &JTable::getInstance('K2ExtraField', 'Table');
  19. $row->load($cid);
  20. return $row;
  21. }
  22. function save()
  23. {
  24. $mainframe = &JFactory::getApplication();
  25. $row = &JTable::getInstance('K2ExtraField', 'Table');
  26. if (!$row->bind(JRequest::get('post')))
  27. {
  28. $mainframe->redirect('index.php?option=com_k2&view=extrafields', $row->getError(), 'error');
  29. }
  30. $isNewGroup = JRequest::getInt('isNew');
  31. if ($isNewGroup)
  32. {
  33. $group = &JTable::getInstance('K2ExtraFieldsGroup', 'Table');
  34. $group->set('name', JRequest::getVar('group'));
  35. $group->store();
  36. $row->group = $group->id;
  37. }
  38. if (!$row->id)
  39. {
  40. $row->ordering = $row->getNextOrder("`group` = {$row->group}");
  41. }
  42. $objects = array();
  43. $values = JRequest::getVar('option_value');
  44. $names = JRequest::getVar('option_name');
  45. $target = JRequest::getVar('option_target');
  46. $editor = JRequest::getVar('option_editor');
  47. for ($i = 0; $i < sizeof($values); $i++)
  48. {
  49. $object = new JObject;
  50. $object->set('name', $names[$i]);
  51. if ($row->type == 'select' || $row->type == 'multipleSelect' || $row->type == 'radio')
  52. {
  53. $object->set('value', $i + 1);
  54. }
  55. elseif ($row->type == 'link')
  56. {
  57. if (substr($values[$i], 0, 7) == 'http://')
  58. {
  59. $values[$i] = $values[$i];
  60. }
  61. else
  62. {
  63. $values[$i] = 'http://'.$values[$i];
  64. }
  65. $object->set('value', $values[$i]);
  66. }
  67. elseif ($row->type == 'csv')
  68. {
  69. $file = JRequest::getVar('csv_file', NULL, 'FILES');
  70. $csvFile = $file['tmp_name'];
  71. if (!empty($csvFile) && JFile::getExt($file['name']) == 'csv')
  72. {
  73. $handle = @fopen($csvFile, 'r');
  74. $csvData = array();
  75. while (($data = fgetcsv($handle, 1000)) !== FALSE)
  76. {
  77. $csvData[] = $data;
  78. }
  79. fclose($handle);
  80. $object->set('value', $csvData);
  81. }
  82. else
  83. {
  84. require_once (JPATH_COMPONENT.DS.'lib'.DS.'JSON.php');
  85. $json = new Services_JSON;
  86. $object->set('value', $json->decode($values[$i]));
  87. if (JRequest::getBool('K2ResetCSV'))
  88. $object->set('value', null);
  89. }
  90. }
  91. elseif ($row->type == 'textarea')
  92. {
  93. $object->set('value', $values[$i]);
  94. $object->set('editor', $editor[$i]);
  95. }
  96. else
  97. {
  98. $object->set('value', $values[$i]);
  99. }
  100. $object->set('target', $target[$i]);
  101. unset($object->_errors);
  102. $objects[] = $object;
  103. }
  104. require_once (JPATH_COMPONENT.DS.'lib'.DS.'JSON.php');
  105. $json = new Services_JSON;
  106. $row->value = $json->encode($objects);
  107. if (!$row->check())
  108. {
  109. $mainframe->redirect('index.php?option=com_k2&view=extrafield&cid='.$row->id, $row->getError(), 'error');
  110. }
  111. if (!$row->store())
  112. {
  113. $mainframe->redirect('index.php?option=com_k2&view=extrafields', $row->getError(), 'error');
  114. }
  115. $params = &JComponentHelper::getParams('com_k2');
  116. if (!$params->get('disableCompactOrdering'))
  117. $row->reorder("`group` = {$row->group}");
  118. $cache = &JFactory::getCache('com_k2');
  119. $cache->clean();
  120. switch(JRequest::getCmd('task'))
  121. {
  122. case 'apply' :
  123. $msg = JText::_('K2_CHANGES_TO_EXTRA_FIELD_SAVED');
  124. $link = 'index.php?option=com_k2&view=extrafield&cid='.$row->id;
  125. break;
  126. case 'save' :
  127. default :
  128. $msg = JText::_('K2_EXTRA_FIELD_SAVED');
  129. $link = 'index.php?option=com_k2&view=extrafields';
  130. break;
  131. }
  132. $mainframe->redirect($link, $msg);
  133. }
  134. function getExtraFieldsByGroup($group)
  135. {
  136. $db = &JFactory::getDBO();
  137. $group = (int)$group;
  138. $query = "SELECT * FROM #__k2_extra_fields WHERE `group`={$group} AND published=1 ORDER BY ordering";
  139. $db->setQuery($query);
  140. $rows = $db->loadObjectList();
  141. return $rows;
  142. }
  143. function renderExtraField($extraField, $itemID = NULL)
  144. {
  145. $mainframe = &JFactory::getApplication();
  146. require_once (JPATH_COMPONENT_ADMINISTRATOR.DS.'lib'.DS.'JSON.php');
  147. $json = new Services_JSON;
  148. if (!is_null($itemID))
  149. {
  150. $item = &JTable::getInstance('K2Item', 'Table');
  151. $item->load($itemID);
  152. }
  153. $defaultValues = $json->decode($extraField->value);
  154. foreach ($defaultValues as $value)
  155. {
  156. if ($extraField->type == 'textfield' || $extraField->type == 'csv' || $extraField->type == 'labels' || $extraField->type == 'date')
  157. {
  158. $active = $value->value;
  159. }
  160. else if ($extraField->type == 'textarea')
  161. {
  162. $active[0] = $value->value;
  163. $active[1] = $value->editor;
  164. }
  165. else if ($extraField->type == 'link')
  166. {
  167. $active[0] = $value->name;
  168. $active[1] = $value->value;
  169. $active[2] = $value->target;
  170. }
  171. else
  172. {
  173. $active = '';
  174. }
  175. }
  176. if (!isset($active))
  177. {
  178. $active = '';
  179. }
  180. if (isset($item))
  181. {
  182. $currentValues = $json->decode($item->extra_fields);
  183. if (count($currentValues))
  184. {
  185. foreach ($currentValues as $value)
  186. {
  187. if ($value->id == $extraField->id)
  188. {
  189. if ($extraField->type == 'textarea')
  190. {
  191. $active[0] = $value->value;
  192. }
  193. else if ($extraField->type == 'date')
  194. {
  195. $active = (is_array($value->value)) ? $value->value[0] : $value->value;
  196. }
  197. else
  198. {
  199. $active = $value->value;
  200. }
  201. }
  202. }
  203. }
  204. }
  205. switch ($extraField->type)
  206. {
  207. case 'textfield' :
  208. $output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" value="'.$active.'"/>';
  209. break;
  210. case 'labels' :
  211. $output = '<input type="text" name="K2ExtraField_'.$extraField->id.'" value="'.$active.'"/> '.JText::_('K2_COMMA_SEPARATED_VALUES');
  212. break;
  213. case 'textarea' :
  214. if ($active[1])
  215. {
  216. $output = '<textarea name="K2ExtraField_'.$extraField->id.'" id="K2ExtraField_'.$extraField->id.'" rows="10" cols="40" class="k2ExtraFieldEditor">'.$active[0].'</textarea>';
  217. }
  218. else
  219. {
  220. $output = '<textarea name="K2ExtraField_'.$extraField->id.'" rows="10" cols="40">'.$active[0].'</textarea>';
  221. }
  222. break;
  223. case 'select' :
  224. $output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
  225. break;
  226. case 'multipleSelect' :
  227. $output = JHTML::_('select.genericlist', $defaultValues, 'K2ExtraField_'.$extraField->id.'[]', 'multiple="multiple"', 'value', 'name', $active);
  228. break;
  229. case 'radio' :
  230. $output = JHTML::_('select.radiolist', $defaultValues, 'K2ExtraField_'.$extraField->id, '', 'value', 'name', $active);
  231. break;
  232. case 'link' :
  233. $output = '<label>'.JText::_('K2_TEXT').'</label>';
  234. $output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" value="'.$active[0].'"/>';
  235. $output .= '<label>'.JText::_('K2_URL').'</label>';
  236. $output .= '<input type="text" name="K2ExtraField_'.$extraField->id.'[]" value="'.$active[1].'"/>';
  237. $output .= '<label for="K2ExtraField_'.$extraField->id.'">'.JText::_('K2_OPEN_IN').'</label>';
  238. $targetOptions[] = JHTML::_('select.option', 'same', JText::_('K2_SAME_WINDOW'));
  239. $targetOptions[] = JHTML::_('select.option', 'new', JText::_('K2_NEW_WINDOW'));
  240. $targetOptions[] = JHTML::_('select.option', 'popup', JText::_('K2_CLASSIC_JAVASCRIPT_POPUP'));
  241. $targetOptions[] = JHTML::_('select.option', 'lightbox', JText::_('K2_LIGHTBOX_POPUP'));
  242. $output .= JHTML::_('select.genericlist', $targetOptions, 'K2ExtraField_'.$extraField->id.'[]', '', 'value', 'text', $active[2]);
  243. break;
  244. case 'csv' :
  245. $output = '<input type="file" name="K2ExtraField_'.$extraField->id.'[]"/>';
  246. if (is_array($active) && count($active))
  247. {
  248. $output .= '<input type="hidden" name="K2CSV_'.$extraField->id.'" value="'.htmlspecialchars($json->encode($active)).'"/>';
  249. $output .= '<table class="csvTable">';
  250. foreach ($active as $key => $row)
  251. {
  252. $output .= '<tr>';
  253. foreach ($row as $cell)
  254. {
  255. $output .= ($key > 0) ? '<td>'.$cell.'</td>' : '<th>'.$cell.'</th>';
  256. }
  257. $output .= '</tr>';
  258. }
  259. $output .= '</table>';
  260. $output .= '<label>'.JText::_('K2_DELETE_CSV_DATA').'</label>';
  261. $output .= '<input type="checkbox" name="K2ResetCSV_'.$extraField->id.'"/>';
  262. }
  263. break;
  264. case 'date' :
  265. $output = JHTML::_('calendar', $active, 'K2ExtraField_'.$extraField->id, 'K2ExtraField_'.$extraField->id);
  266. break;
  267. }
  268. return $output;
  269. }
  270. function getExtraFieldInfo($fieldID)
  271. {
  272. $db = &JFactory::getDBO();
  273. $fieldID = (int)$fieldID;
  274. $query = "SELECT * FROM #__k2_extra_fields WHERE published=1 AND id = ".$fieldID;
  275. $db->setQuery($query, 0, 1);
  276. $row = $db->loadObject();
  277. return $row;
  278. }
  279. function getSearchValue($id, $currentValue)
  280. {
  281. $row = &JTable::getInstance('K2ExtraField', 'Table');
  282. $row->load($id);
  283. require_once (JPATH_COMPONENT_ADMINISTRATOR.DS.'lib'.DS.'JSON.php');
  284. $json = new Services_JSON;
  285. $jsonObject = $json->decode($row->value);
  286. $value = '';
  287. if ($row->type == 'textfield' || $row->type == 'textarea')
  288. {
  289. $value = $currentValue;
  290. }
  291. else if ($row->type == 'multipleSelect')
  292. {
  293. foreach ($jsonObject as $option)
  294. {
  295. if (in_array($option->value, $currentValue))
  296. $value .= $option->name.' ';
  297. }
  298. }
  299. else if ($row->type == 'link')
  300. {
  301. $value .= $currentValue[0].' ';
  302. $value .= $currentValue[1].' ';
  303. }
  304. else if ($row->type == 'labels')
  305. {
  306. $parts = explode(',', $currentValue);
  307. $value .= implode(' ', $parts);
  308. }
  309. else
  310. {
  311. foreach ($jsonObject as $option)
  312. {
  313. if ($option->value == $currentValue)
  314. $value .= $option->name;
  315. }
  316. }
  317. return $value;
  318. }
  319. }