PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/system/molajo/molajo.php

https://github.com/ot2sen/Molajo
PHP | 299 lines | 150 code | 32 blank | 117 comment | 48 complexity | 02a45c16e716373718893099d2aa5041 MD5 | raw file
  1. <?php
  2. /**
  3. * @package Molajo
  4. * @subpackage System Plugin
  5. * @copyright Copyright (C) 2011 Amy Stephen. All rights reserved.
  6. * @license GNU General Public License Version 2, or later http://www.gnu.org/licenses/gpl.html
  7. */
  8. defined('MOLAJO') or die;
  9. /**
  10. * Molajo System Plugin
  11. */
  12. class plgSystemMolajo extends JPlugin
  13. {
  14. /**
  15. * System Event: onAfterInitialise
  16. *
  17. * @return string
  18. */
  19. public function __construct(& $subject, $config = array())
  20. {
  21. parent::__construct($subject, $config);
  22. $this->loadLanguage();
  23. }
  24. /**
  25. * System Event: onAfterInitialise
  26. * @return bool
  27. */
  28. function onAfterInitialise() {}
  29. /**
  30. * onContentPrepareData
  31. *
  32. * Not needed since all parameter data is stored in the database in the params column
  33. *
  34. * @param string $context The context for the content passed to the plugin.
  35. * @param object $data The data relating to the content that is being prepared for save.
  36. * @return boolean
  37. * @since 1.6
  38. */
  39. public function onContentPrepareData($context, $data) {}
  40. /**
  41. * onContentPrepareForm
  42. *
  43. * Save Method: augments primary form fields with additional custom data
  44. *
  45. * @param object $form Form object to be used during save
  46. * @param object $data Data returned from the model as validated
  47. * @return boolean
  48. * @return string
  49. * @since 1.6
  50. */
  51. public function onContentPrepareForm($form, $data)
  52. {
  53. /** Only run for Component Configuration */
  54. if (($form instanceof JForm)) {
  55. } else {
  56. return false;
  57. }
  58. /** initialize */
  59. $loadParameterSetsArray = array();
  60. /** retrieve parameter sets required for this component */
  61. if ($form->getName() == 'com_config.component') {
  62. $loadParameterSetsArray = $this->getComponentParameterSets();
  63. if ($loadParameterSetsArray === false || count($loadParameterSetsArray) == 0) {
  64. return true;
  65. }
  66. /** retrieve parameter sets required for this menu item */
  67. } else if ($form->getName() == 'com_menus.item') {
  68. $loadParameterSetsArray = $this->getMenuItemParameterSets($data);
  69. if ($loadParameterSetsArray === false || count($loadParameterSetsArray) == 0) {
  70. return true;
  71. }
  72. } else if ($form->getName() == JRequest::getVar('option').'.'.JRequest::getCmd('view').'.'.JRequest::getCmd('layout').'.'.JRequest::getCmd('task').'.'.JRequest::getInt('id').'.'.JRequest::getVar('datakey')) {
  73. $loadParameterSetsArray = $this->getDetailItemParameterSets($data);
  74. if ($loadParameterSetsArray === false || count($loadParameterSetsArray) == 0) {
  75. return true;
  76. }
  77. }
  78. /** load each parameter set one at a time */
  79. $parameterSetAdded = false;
  80. foreach($loadParameterSetsArray as $parameterSet) {
  81. $results = $this->loadParameterSetsToForm ($parameterSet, $form);
  82. if ($results === true) {
  83. $parameterSetAdded = true;
  84. }
  85. }
  86. /** if any parameter sets were loaded, bind data to form (data stored in database and therefore already available) */
  87. if ($parameterSetAdded) {
  88. $form->bind($data);
  89. }
  90. return true;
  91. }
  92. /**
  93. * getComponentParameterSets
  94. *
  95. * Retrieve the set of Layouts for which Parameter sets are needed
  96. *
  97. * @return object
  98. */
  99. function getComponentParameterSets ()
  100. {
  101. $params = JComponentHelper::getParams(JRequest::getVar('component'));
  102. $layoutParameters = $this->getSiteLayouts (JRequest::getVar('component'));
  103. return $this->getLayoutParameterOptions ($layoutParameters, $params);
  104. }
  105. /**
  106. * getMenuItemParameterSets
  107. *
  108. * Retrieve the set of Layouts for which Parameter sets are needed
  109. * @param $params
  110. * @param $data
  111. * @return object
  112. */
  113. function getDetailItemParameterSets($data)
  114. {
  115. $params = JComponentHelper::getParams(JRequest::getVar('option'));
  116. return $this->getLayoutParameterOptions (array('config_component_single_item_parameter'), $params);
  117. }
  118. /**
  119. * getMenuItemParameterSets
  120. *
  121. * Retrieve the set of Layouts for which Parameter sets are needed
  122. * @param $params
  123. * @param $data
  124. * @return object
  125. */
  126. function getMenuItemParameterSets($data)
  127. {
  128. $option = '';
  129. $view = '';
  130. $layout = 'default';
  131. foreach ($data['request'] as $name => $value ) {
  132. if ($name == 'option') {
  133. $option = $value;
  134. } else if ($name == 'view') {
  135. $view = $value;
  136. } else if ($name == 'layout') {
  137. $layout = $value;
  138. }
  139. }
  140. if ($option == '') {
  141. return true;
  142. }
  143. $this->getSiteLayouts($option);
  144. $typeArray = array('config_component_'.$view.'_'.$layout.'_parameter');
  145. $params = JComponentHelper::getParams($option);
  146. return $this->getLayoutParameterOptions ($typeArray, $params);
  147. }
  148. /**
  149. * getLayoutParameterOptions
  150. *
  151. * Given values specified in $typeArray, retrieve the parameter form object file names
  152. * @param $typeArray
  153. * @return
  154. */
  155. function getLayoutParameterOptions ($typeArray, $params)
  156. {
  157. $loadParameterSetsArray = array();
  158. /** loop through layout parameter types */
  159. foreach ($typeArray as $layoutParameterType) {
  160. /** loop thru ParameterSet options **/
  161. for ($i=1; $i < 1000; $i++) {
  162. $parameterSetName = $params->def($layoutParameterType.$i);
  163. /** encountered end of ParameterSets **/
  164. if ($parameterSetName == null) {
  165. break;
  166. }
  167. /** no ParameterSet was selected for configuration option **/
  168. if (in_array($parameterSetName, $loadParameterSetsArray)) {
  169. /** no ParameterSet was selected for configuration option **/
  170. } else if ($parameterSetName == '0') {
  171. /** configuration option set for ParameterSet list **/
  172. } else {
  173. /** save so it does not get added multiple times **/
  174. $loadParameterSetsArray[] = $parameterSetName;
  175. }
  176. }
  177. }
  178. return $loadParameterSetsArray;
  179. }
  180. /**
  181. * loadParameterSetToForm
  182. *
  183. * Loads Parameter Sets into the Form
  184. *
  185. * @param string $parameterSet
  186. * @param object $form
  187. * @param object $content
  188. * @return boolean
  189. */
  190. function loadParameterSetsToForm ($parameterSet, $form)
  191. {
  192. $path = $this->getParameterSetPath ($parameterSet);
  193. if ($path === false) {
  194. return false;
  195. }
  196. $form->loadFile($path, false);
  197. return true;
  198. }
  199. /**
  200. * getParameterSetPath
  201. *
  202. * Loads Custom Fields into the Form for a specific Content Type
  203. *
  204. * @param string $parameterSet
  205. * @param object $form
  206. * @param object $content
  207. * @return boolean
  208. */
  209. function getParameterSetPath ($parameterSet)
  210. {
  211. /** Amy_TODO: figure this out. site template parameters */
  212. $path = JPATH_SITE.'/templates/'.MolajoFactory::getApplication('site')->getTemplate().'/'.'parameters/'.$parameterSet.'.xml';
  213. if(is_file($path)) {
  214. return $path;
  215. }
  216. /** admin template parameters */
  217. $path = JPATH_ADMINISTRATOR.'/templates/'.MolajoFactory::getApplication('administrator')->getTemplate().'/'.'parameters/'.$parameterSet.'.xml';
  218. if(is_file($path)) {
  219. return $path;
  220. }
  221. /** component parameters */
  222. $path = JPATH_SITE.'/components/'.JRequest::getVar('component').'/'.'parameters/'.$parameterSet.'.xml';
  223. if(is_file($path)) {
  224. return $path;
  225. }
  226. /** administrator component */
  227. $path = JPATH_ADMINISTRATOR.'/components/'.JRequest::getVar('component').'/'.'parameters/'.$parameterSet.'.xml';
  228. if(is_file($path)) {
  229. return $path;
  230. }
  231. /** library */
  232. $path = JPATH_ROOT.MOLAJO_LAYOUTS_PARAMETERS.'/'.$parameterSet.'.xml';
  233. if(is_file($path)) {
  234. return $path;
  235. }
  236. }
  237. /**
  238. * getSiteLayouts
  239. * @param $option
  240. * @return void
  241. */
  242. function getSiteLayouts ($option)
  243. {
  244. /** component view location */
  245. $path = JPATH_SITE.'/components/'.$option.'/views';
  246. /** retrieve all folder names for destination **/
  247. $folders = JFolder::folders($path, $filter='', $recurse=true, $fullpath=true, $exclude = array('.svn', 'CVS'));
  248. $view = '';
  249. $layout = '';
  250. $viewLayout = array();
  251. /** process files in each folder **/
  252. foreach ($folders as $folder) {
  253. /** rename files that do not fit the pattern **/
  254. if (basename($folder) == 'tmpl') {
  255. $files = JFolder::files($folder, $filter = '.php', $recurse = false, $full = false, $exclude = array(), $excludefilter = array('^\..*','.*~','*_*.php'));
  256. /** process each file **/
  257. foreach ($files as $file) {
  258. $layout = substr($file, 0, strlen($file)-4);
  259. $viewLayout[] = 'config_component_'.$view.'_'.$layout.'_parameter';
  260. }
  261. } else {
  262. $view = basename($folder);
  263. }
  264. }
  265. return array_unique($viewLayout);
  266. }
  267. }