o_tab <-- dummy object, collects HTML posts, displays ui |->a_handles <-- tab object for each given dn |->tab object for dn 1 |->tab object for dn 2 ... |->tab object for dn n */ /*! \brief Handles multiple edits for a given set of dns. \author Fabian Hickert \version 1.01 \date 2007/12/07 This class edits multiple tab objects at once. 1. There is a dummy tab object initialized that collects the user input. 2. All given objects specified by '$dn' will be initialized and the collected data from the dummy object will be populated to them. */ class multi_plug { /* Tab handler for each given dn entry */ public $a_handles = array(); /* Dummy handler which collects the data */ private $o_tab = NULL; public $dn = array(); public $config = NULL; private $s_class= ""; public $current = ""; /*! \brief Creates a multi_plug object @param object $config GOsa Configuration object @param string $class The class name of the tab we want to edit. e.g. usertabs @param string $tab The config tab name e.g. USERTABS @param array $dns The object dns we want to edit. @return object multi_plug */ public function __construct($config,$class,$tab,$dns) { $this->dn = $dns; $this->config = $config; $this->s_class = $class; /* Initialize collector object * Used to display the ui and to collect the user input. */ $this->o_tab = new $class($config,$tab,"new"); /* Check if the specified tab object supports multiple edits */ if($this->o_tab->multiple_support_available()){ /* Enable multiple actions for the collector object */ $this->o_tab->enable_multiple_support(); /* Initialize the objects we want to edit at once */ foreach($dns as $dn){ $this->a_handles[] = new $class($config,$tab,$dn); } } } /*! \brief Returns the edit ui for multiple edit. @return string HTML User interface for given tab object. */ public function execute() { return($this->o_tab->execute()); } /*! \brief Checks if one of the objects we want to edit is locked. @return boolean Returns TRUE if at least one entry is locked, else false. */ public function entries_locked() { return(FALSE); } /*! \brief Generates a lock message that can be displayed if an entry is locked. @return string Returns a list of locked entries */ public function display_lock_message() { return("sdf"); } /*! \brief Locks all currently managed objects (array $this->dn) @return boolean Returns TRUE */ public function lock_entries($uid) { return(TRUE); } /*! \brief Checks if the given tab object supports multiple edit. @return boolean Returns TRUE if the given tab objects supports multiple edit else FALSE. */ public function multiple_available() { return($this->o_tab->multiple_support_available()); } /*! \brief Sets the currently active tab. The tab that will be displayed by $this->execute(). */ public function set_active_tab($str) { $this->current = $str; } /*! \brief Returns the object info string, that can be displayed in the tab header. @return string Returns an information string, containing the list of currently edited dns. */ public function get_object_info() { return("Oi -----"); } /*! \brief Handles all HTML posts from the dummy tab object. */ public function save_object() { $this->o_tab->save_object(); } /*! \brief Checks if the values fetched by $this->save_object() are valid. @param array Returns an array containig all error messages. */ public function check() { $this->populate_values(); $messages = $this->o_tab->check(); foreach($this->a_handles as $key => $obj){ $msgs = $obj->check(); foreach($msgs as $msg){ $messages[] = $msg; } } return($messages); } /*! \brief Currently not implemented, later be used to trigger password changes. @param boolean Returns TRUE if a password change is needed. */ public function password_change_needed() { return(FALSE); } /*! \brief Populate all collected values to the target tab objects ($this->o_handles) */ public function populate_values() { if($this->multiple_available() && is_array($this->a_handles)){ foreach($this->o_tab->by_object as $name => $obj){ $values = $this->o_tab->by_object[$name]->get_multi_edit_values(); foreach($values as $a_name => $a_value){ foreach($this->a_handles as $i_id => $o_handle){ $o_handle->by_object[$name]->$a_name = $a_value; } } } } } /*! \brief Save all edited tab objects ($this->o_handles). */ public function save() { if($this->multiple_available() && is_array($this->a_handles)){ $this->populate_values(); foreach($this->a_handles as $i_id => $o_handle){ $o_handle->save(); } } } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>