/joomla/administrator/components/com_finder/models/fields/contentmap.php

https://gitlab.com/ricardosanchez/prueba · PHP · 123 lines · 73 code · 18 blank · 32 comment · 5 complexity · 0efc9efd6b36c6ef2f9fef1cbffb628b MD5 · raw file

  1. <?php
  2. /**
  3. * @package Joomla.Administrator
  4. * @subpackage com_finder
  5. *
  6. * @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
  7. * @license GNU General Public License version 2 or later; see LICENSE
  8. */
  9. defined('JPATH_PLATFORM') or die;
  10. JFormHelper::loadFieldClass('groupedlist');
  11. JLoader::register('FinderHelperLanguage', JPATH_ADMINISTRATOR . '/components/com_finder/helpers/language.php');
  12. /**
  13. * Form Field class for the Joomla CMS.
  14. * Supports a select grouped list of finder content map.
  15. *
  16. * @since 3.6.0
  17. */
  18. class JFormFieldContentMap extends JFormFieldGroupedList
  19. {
  20. /**
  21. * The form field type.
  22. *
  23. * @var string
  24. * @since 3.6.0
  25. */
  26. public $type = 'ContentMap';
  27. /**
  28. * Method to get the list of content map options grouped by first level.
  29. *
  30. * @return array The field option objects as a nested array in groups.
  31. *
  32. * @since 3.6.0
  33. */
  34. protected function getGroups()
  35. {
  36. $groups = array();
  37. // Get the database object and a new query object.
  38. $db = JFactory::getDbo();
  39. // Levels subquery.
  40. $levelQuery = $db->getQuery(true);
  41. $levelQuery->select('title AS branch_title, 1 as level')
  42. ->select($db->quoteName('id'))
  43. ->from($db->quoteName('#__finder_taxonomy'))
  44. ->where($db->quoteName('parent_id') . ' = 1');
  45. $levelQuery2 = $db->getQuery(true);
  46. $levelQuery2->select('b.title AS branch_title, 2 as level')
  47. ->select($db->quoteName('a.id'))
  48. ->from($db->quoteName('#__finder_taxonomy', 'a'))
  49. ->join('LEFT', $db->quoteName('#__finder_taxonomy', 'b') . ' ON ' . $db->qn('a.parent_id') . ' = ' . $db->qn('b.id'))
  50. ->where($db->quoteName('a.parent_id') . ' NOT IN (0, 1)');
  51. $levelQuery->union($levelQuery2);
  52. // Main query.
  53. $query = $db->getQuery(true)
  54. ->select($db->quoteName('a.title', 'text'))
  55. ->select($db->quoteName('a.id', 'value'))
  56. ->select($db->quoteName('d.level'))
  57. ->from($db->quoteName('#__finder_taxonomy', 'a'))
  58. ->join('LEFT', '(' . $levelQuery . ') AS d ON ' . $db->qn('d.id') . ' = ' . $db->qn('a.id'))
  59. ->where($db->quoteName('a.parent_id') . ' <> 0')
  60. ->order('d.branch_title ASC, d.level ASC, a.title ASC');
  61. $db->setQuery($query);
  62. try
  63. {
  64. $contentMap = $db->loadObjectList();
  65. }
  66. catch (RuntimeException $e)
  67. {
  68. return;
  69. }
  70. // Build the grouped list array.
  71. if ($contentMap)
  72. {
  73. $lang = JFactory::getLanguage();
  74. foreach ($contentMap as $branch)
  75. {
  76. if ((int) $branch->level === 1)
  77. {
  78. $name = $branch->text;
  79. }
  80. else
  81. {
  82. $levelPrefix = str_repeat('- ', max(0, $branch->level - 1));
  83. if (trim($name, '**') == 'Language')
  84. {
  85. $text = FinderHelperLanguage::branchLanguageTitle($branch->text);
  86. }
  87. else
  88. {
  89. $key = FinderHelperLanguage::branchSingular($branch->text);
  90. $text = $lang->hasKey($key) ? JText::_($key) : $branch->text;
  91. }
  92. // Initialize the group if necessary.
  93. if (!isset($groups[$name]))
  94. {
  95. $groups[$name] = array();
  96. }
  97. $groups[$name][] = JHtml::_('select.option', $branch->value, $levelPrefix . $text);
  98. }
  99. }
  100. }
  101. // Merge any additional groups in the XML definition.
  102. $groups = array_merge(parent::getGroups(), $groups);
  103. return $groups;
  104. }
  105. }