joomla-platform / libraries / joomla / form / fields / user.php

<?php
/**
 * @package     Joomla.Platform
 * @subpackage  Form
 *
 * @copyright   Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 */

defined('JPATH_PLATFORM') or die;

jimport('joomla.form.formfield');

/**
 * Field to select a user id from a modal list.
 *
 * @package     Joomla.Platform
 * @subpackage  com_users
 * @since       11.1
 */
class JFormFieldUser extends JFormField
{
    /**
     * The form field type.
     *
     * @var     string
     * @since   11.1
     */
    public $type = 'User';

    /**
     * Method to get the field input markup.
     *
     * @return  string  The field input markup.
     * @since   11.1
     */
    protected function getInput()
    {
        // Initialize variables.
        $html = array();
        $groups = $this->getGroups();
        $excluded = $this->getExcluded();
        $link = 'index.php?option=com_users&amp;view=users&amp;layout=modal&amp;tmpl=component&amp;field='.$this->id.(isset($groups) ? ('&amp;groups='.base64_encode(json_encode($groups))) : '').(isset($excluded) ? ('&amp;excluded='.base64_encode(json_encode($excluded))) : '');

        // Initialize some field attributes.
        $attr = $this->element['class'] ? ' class="'.(string) $this->element['class'].'"' : '';
        $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : '';

        // Initialize JavaScript field attributes.
        $onchange = (string) $this->element['onchange'];

        // Load the modal behavior script.
        JHtml::_('behavior.modal', 'a.modal_'.$this->id);

        // Build the script.
        $script = array();
        $script[] = '   function jSelectUser_'.$this->id.'(id, title) {';
        $script[] = '       var old_id = document.getElementById("'.$this->id.'_id").value;';
        $script[] = '       if (old_id != id) {';
        $script[] = '           document.getElementById("'.$this->id.'_id").value = id;';
        $script[] = '           document.getElementById("'.$this->id.'_name").value = title;';
        $script[] = '           '.$onchange;
        $script[] = '       }';
        $script[] = '       SqueezeBox.close();';
        $script[] = '   }';

        // Add the script to the document head.
        JFactory::getDocument()->addScriptDeclaration(implode("\n", $script));

        // Load the current username if available.
        $table = JTable::getInstance('user');
        if ($this->value) {
            $table->load($this->value);
        } else {
            $table->username = JText::_('JLIB_FORM_SELECT_USER');
        }

        // Create a dummy text field with the user name.
        $html[] = '<div class="fltlft">';
        $html[] = ' <input type="text" id="'.$this->id.'_name"' .
                    ' value="'.htmlspecialchars($table->username, ENT_COMPAT, 'UTF-8').'"' .
                    ' disabled="disabled"'.$attr.' />';
        $html[] = '</div>';

        // Create the user select button.
        $html[] = '<div class="button2-left">';
        $html[] = '  <div class="blank">';
        if ($this->element['readonly'] != 'true') {
            $html[] = '     <a class="modal_'.$this->id.'" title="'.JText::_('JLIB_FORM_CHANGE_USER').'"' .
                            ' href="'.$link.'"' .
                            ' rel="{handler: \'iframe\', size: {x: 800, y: 500}}">';
            $html[] = '         '.JText::_('JLIB_FORM_CHANGE_USER').'</a>';
        }
        $html[] = '  </div>';
        $html[] = '</div>';

        // Create the real field, hidden, that stored the user id.
        $html[] = '<input type="hidden" id="'.$this->id.'_id" name="'.$this->name.'" value="'.(int) $this->value.'" />';

        return implode("\n", $html);
    }

    /**
     * Method to get the filtering groups (null means no filtering)
     *
     * @return  array|null  array of filtering groups or null.
     * @since   11.1
     */
    protected function getGroups()
    {
        return null;
    }

    /**
     * Method to get the users to exclude from the list of users
     *
     * @return  array|null array of users to exclude or null to to not exclude them
     * @since   11.1
     */
    protected function getExcluded()
    {
        return null;
    }
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.