| Server IP : 180.180.241.3 / Your IP : 216.73.216.35 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /AppServ/www/news/tmp/install_5333cea8259e5/admin/models/fields/ |
Upload File : |
<?php
/**
* @version $Id$
* @copyright Copyright (C) 2007 - 2009 Joomla! Vargas. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @author Guillermo Vargas (guille@vargas.co.cr)
*/
defined('_JEXEC') or die;
jimport('joomla.html.html');
require_once JPATH_LIBRARIES . '/joomla/form/fields/list.php';
/**
* Menus Form Field class for the Xmap Component
*
* @package Xmap
* @subpackage com_xmap
* @since 2.0
*/
class JFormFieldXmapmenus extends JFormFieldList
{
/**
* The field type.
*
* @var string
*/
public $type = 'Xmapmenus';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*/
protected function _getOptions()
{
$db = JFactory::getDbo();
$query = $db->getQuery(true);
//$currentMenus = array_keys(get_object_vars($this->value));
$currentMenus = array();
$query->select('menutype As value, title As text');
$query->from('#__menu_types AS a');
$query->order('a.title');
// Get the options.
$db->setQuery($query);
// echo $db->getQuery();
$menus = $db->loadObjectList('value');
$options = array();
// Add the current sitemap menus in the defined order to the list
foreach ($currentMenus as $menutype) {
if (!empty($menus[$menutype])) {
$options[] = $menus[$menutype];
}
}
// Add the rest of the menus to the list (if any)
foreach ($menus as $menutype => $menu) {
if (!in_array($menutype, $currentMenus)) {
$options[] = $menu;
}
}
// Check for a database error.
if ($db->getErrorNum()) {
JError::raiseWarning(500, $db->getErrorMsg());
}
$options = array_merge(
parent::getOptions(),
$options
);
return $options;
}
/**
* Method to get the field input.
*
* @return string The field input.
*/
protected function getInput()
{
$disabled = $this->element['disabled'] == 'true' ? true : false;
$readonly = $this->element['readonly'] == 'true' ? true : false;
$attributes = ' ';
$type = 'radio';
if ($v = $this->element['size']) {
$attributes .= 'size="' . $v . '" ';
}
if ($v = $this->element['class']) {
$attributes .= 'class="' . $v . '" ';
} else {
$attributes .= 'class="inputbox" ';
}
if ($m = $this->element['multiple']) {
$type = 'checkbox';
}
$value = $this->value;
if (!is_array($value)) {
// Convert the selections field to an array.
$registry = new JRegistry;
$registry->loadString($value);
$value = $registry->toArray();
}
$doc = JFactory::getDocument();
$doc->addScriptDeclaration("
window.addEvent('domready',function(){
\$\$('div.xmap-menu-options select').addEvent('mouseover',function(event){xmapMenusSortable.detach();})
\$\$('div.xmap-menu-options select').addEvent('mouseout',function(event){xmapMenusSortable.attach();})
var xmapMenusSortable = new Sortables(\$('ul_" . $this->inputId . "'),{
clone:true,
revert: true,
preventDefault: true,
onStart: function(el) {
el.setStyle('background','#bbb');
},
onComplete: function(el) {
el.setStyle('background','#eee');
}
});
});");
if ($disabled || $readonly) {
$attributes .= 'disabled="disabled"';
}
$options = (array) $this->_getOptions();
$return = '<ul id="ul_' . $this->inputId . '" class="ul_sortable">';
// Create a regular list.
$i = 0;
//Lets show the enabled menus first
$this->currentItems = array_keys($value);
// Sort the menu options
uasort($options, array($this, 'myCompare'));
foreach ($options as $option) {
$prioritiesName = preg_replace('/(jform\[[^\]]+)(\].*)/', '$1_priority$2', $this->name);
$changefreqName = preg_replace('/(jform\[[^\]]+)(\].*)/', '$1_changefreq$2', $this->name);
$selected = (isset($value[$option->value]) ? ' checked="checked"' : '');
$i++;
$return .= '<li id="menu_' . $i . '">';
$return .= '<input type="' . $type . '" id="' . $this->id . '_' . $i . '" name="' . $this->name . '" value="' . $option->value . '"' . $attributes . $selected . ' />';
$return .= '<label for="' . $this->id . '_' . $i . '" class="menu_label">' . $option->text . '</label>';
$return .= '<div class="xmap-menu-options" id="menu_options_' . $i . '">';
$return .= '<label class="control-label">' . JText::_('XMAP_PRIORITY') . '</label>';
$return .= '<div class="controls">' . JHTML::_('xmap.priorities', $prioritiesName, ($selected ? $value[$option->value]['priority'] : '0.5'), $i) . '</div>';
$return .= '<label class="control-label">' . JText::_('XMAP_CHANGE_FREQUENCY') . '</label>';
$return .= '<div class="controls">' . JHTML::_('xmap.changefrequency', $changefreqName, ($selected ? $value[$option->value]['changefreq'] : 'weekly'), $i) . '</div>';
$return .= '</div>';
$return .= '</li>';
}
$return .= "</ul>";
return $return;
}
public function myCompare($a, $b) {
$indexA = array_search($a->value, $this->currentItems);
$indexB = array_search($b->value, $this->currentItems);
if ($indexA === $indexB && $indexA !== false) {
return 0;
}
if ($indexA === false && $indexA === $indexB) {
return ($a->value < $b->value) ? -1 : 1;
}
if ($indexA === false) {
return 1;
}
if ($indexB === false) {
return -1;
}
return ($indexA < $indexB) ? -1 : 1;
}
}