PageRenderTime 38ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

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

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