class_baseSelector.inc 10.59 KiB
<?php
/*
  This code is part of FusionDirectory (http://www.fusiondirectory.org/)
  Copyright (C) 2003-2010  Cajus Pollmeier
  Copyright (C) 2011-2018  FusionDirectory
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
/*!
 * \file class_baseSelector.inc
 * Source code for Class Base Selector
/*!
 * \brief Class Base Selector
class baseSelector
  private $base;
  protected $pid;
  private $action;
  private $height       = 500;
  private $submitButton = TRUE;
  protected $tree;
  protected $pathMapping;
  protected $lastState;
  /*!
   * \brief baseSelector contructor
   * \param Array $bases The Bases
   * \param String $base Empty string
  function __construct($bases, $base = "")
    // Initialize pid
    $this->pid = preg_replace("/[^0-9]/", "", microtime(TRUE));
    // Transfer data
    $this->setBases($bases);
    $this->setBase($base);
  /*!
   * \brief Returns id of the html field
  function getInputHtmlId()
    return 'bs_input_'.$this->pid;
  /*!
   * \brief Set a new flag to the submit button
   * \param Boolean $flag Flag for the submit button
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
function setSubmitButton($flag) { $this->submitButton = $flag; } /*! * \brief Set a new value of the member height * * \param Integer $value The new value of the height */ function setHeight($value) { $this->height = $value; } /*! * \brief Set a new value of the member base * * \param String $base The new value of the base */ function setBase($base) { if (isset($this->pathMapping[$base])) { $this->base = $base; $this->lastState = TRUE; return $this->update(TRUE); } else { $this->lastState = FALSE; return FALSE; } } /*! * \brief Check the last base value updated * * \return Boolean the last state of the object */ function checkLastBaseUpdate() { return $this->lastState; } /*! * \brief Set new bases * * \param Array $bases The new value of the bases */ function setBases($bases) { global $config; $this->pathMapping = array(); foreach ($bases as $base => $dummy) { // Build path style display $elements = explode(',', substr($base, 0, strlen($base) - strlen($config->current['BASE']))); $elements = array_reverse($elements, TRUE); $this->pathMapping[$base] = (($base == $config->current['BASE']) ? '/' : preg_replace('/(^|,)[a-z0-9]+=/i', '/', implode(',', $elements))); } // Save bases to session for autocompletion session::set('pathMapping', $this->pathMapping); } /*! * \brief Update the base * * \param Boolean $force FALSE */
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
function update($force = FALSE) { if (!isset($this->base) || ($this->base == '')) { $this->lastState = FALSE; return FALSE; } // Analyze for base changes if needed $this->action = NULL; $last_base = $this->base; if (isset($_REQUEST['BPID']) && $_REQUEST['BPID'] == $this->pid) { if (!empty($_POST['bs_rebase_'.$this->pid])) { $new_base = base64_decode($_POST['bs_rebase_'.$this->pid]); if (isset($this->pathMapping[$new_base])) { $this->base = $new_base; $this->action = 'rebase'; } else { $this->lastState = FALSE; return FALSE; } } elseif (isset($_POST[$this->getInputHtmlId()])) { // Take over input field base if (($this->submitButton && isset($_POST['submit_base_'.$this->pid.'_x'])) || !$this->submitButton) { // Check if base is available $this->lastState = FALSE; foreach ($this->pathMapping as $key => $path) { if (mb_strtolower($path) == mb_strtolower($_POST[$this->getInputHtmlId()])) { $this->base = $key; $this->lastState = TRUE; break; } } } } } /* Skip if there's no change */ if ($this->tree && ($this->base == $last_base) && !$force) { $this->lastState = TRUE; return TRUE; } $this->renderTree(); $this->lastState = TRUE; return TRUE; } protected function renderTree() { global $config; $link = "onclick=\"\$('bs_rebase_".$this->pid."').value='".base64_encode($config->current['BASE'])."'; $('submit_tree_base_".$this->pid."').click();\""; $this->tree = '<input class="base-selector" type="text" name="'.$this->getInputHtmlId().'"'. ' id="'.$this->getInputHtmlId().'"'. ' onkeydown="$(\'bs_'.$this->pid.'\').hide()"'. ' onfocus="$(\'bs_'.$this->pid.'\').hide()"'. ' onmouseover="Element.clonePosition($(\'bs_'.$this->pid.'\'), \''.$this->getInputHtmlId().'\', {setHeight: false, setWidth: false, offsetTop:(Element.getHeight(\''.$this->getInputHtmlId().'\'))});$(\'bs_'.$this->pid.'\').show();"'. ' onmouseout="rtimer= Element.hide.delay(0.25, \'bs_'.$this->pid.'\')"'. ' value="'.htmlentities($this->pathMapping[$this->base], ENT_COMPAT, 'UTF-8').'"/>'; // Autocompleter $this->tree .= "<div id='autocomplete_".$this->pid."' class='autocomplete'></div>". "<script type='text/javascript'>". "new Ajax.Autocompleter('".$this->getInputHtmlId()."', 'autocomplete_".$this->pid."', 'autocomplete.php?type=base', { minChars: 3, frequency: 0.5 });"; if ($this->submitButton) { $this->tree .= "$('".$this->getInputHtmlId()."').observe('keypress', function(event) { if(event.keyCode == Event.KEY_RETURN) { $('submit_base_".$this->pid."').click(); } });"; } $this->tree .= "</script>";