public function __construct($name, $configuration = null)
 {
     if (empty($name)) {
         throw new InvalidArgumentException('`$name`cannot be empty');
     }
     $this->name = $name;
     $this->home_automation_controller = BaseHomeAutomationController::create($this->name, $configuration);
     parent::__construct();
 }
Example #2
0
 public function executeUpdate(sfWebRequest $request)
 {
     $this->forward404Unless($request->isMethod('post'));
     $post_parameters = $request->getParameter('configuration');
     $this->nb_controller = intval($post_parameters['number_of_physical_access']);
     $this->nb_home_automation = intval($post_parameters['number_of_home_automation']);
     $this->physical_access_controllers = BasePhysicalAccessController::getControllers();
     $this->home_automation_controllers = BaseHomeAutomationController::getControllers();
     $this->form = new ConfigurationForm(null, array('nb_pac' => $this->nb_controller, 'nb_hac' => $this->nb_home_automation));
     if ($this->nb_controller > $this->form->getMaxControllers()) {
         $this->nb_controller = $this->form->getMaxControllers();
     }
     if ($this->nb_home_automation > $this->form->getMaxHomeAutomation()) {
         $this->nb_home_automation = $this->form->getMaxHomeAutomation();
     }
     // Gestion des contrôleurs d'accès supplémentaires et de leurs valeurs par défaut (si l'on augmente le nombre de contrôleurs d'accès)
     for ($i = 1; $i <= $this->nb_controller; $i++) {
         if (!isset($post_parameters['physical_access_controller' . $i])) {
             foreach ($this->physical_access_controllers as $pac => $name) {
                 $controller = BasePhysicalAccessController::create($pac);
                 $post_parameters[$pac . $i] = $controller->getDefaultValues();
                 // On modifie le nom identifiant par défaut et on y ajoute i
                 $post_parameters[$pac . $i]['controller_name'] = $controller->getName() . $i;
             }
         }
     }
     // Gestion des contrôleurs domotiques supplémentaires et de leurs valeurs par défaut (si l'on augmente le nombre de contrôleurs domotiques)
     for ($i = 1; $i <= $this->nb_home_automation; $i++) {
         if (!isset($post_parameters['home_automation_controller' . $i])) {
             foreach ($this->home_automation_controllers as $hac => $name) {
                 $controller = BaseHomeAutomationController::create($hac);
                 $post_parameters[$hac . $i] = $controller->getDefaultValues();
                 // On modifie le nom identifiant par défaut et on y ajoute i
                 $post_parameters[$hac . $i]['controller_name'] = $controller->getName() . $i;
             }
         }
     }
     // Gestion des contrôleurs d'accès en trop (si l'on réduit le nombre de contrôleurs d'accès)
     for ($i = $this->nb_controller + 1; $i <= $this->form->getMaxControllers(); $i++) {
         if (isset($post_parameters['physical_access_controller' . $i])) {
             unset($post_parameters['physical_access_controller' . $i]);
             foreach ($this->physical_access_controllers as $pac => $name) {
                 unset($post_parameters[$pac . $i]);
             }
         }
     }
     // Gestion des contrôleurs domotiques en trop (si l'on réduit le nombre de contrôleurs domotiques)
     for ($i = $this->nb_home_automation + 1; $i <= $this->form->getMaxHomeAutomation(); $i++) {
         if (isset($post_parameters['home_automation_controller' . $i])) {
             unset($post_parameters['home_automation_controller' . $i]);
             foreach ($this->home_automation_controllers as $hac => $name) {
                 unset($post_parameters[$hac . $i]);
             }
         }
     }
     $this->form->bind($post_parameters, $request->getFiles($this->form->getName()));
     if ($this->form->isValid()) {
         $isout = false;
         // Modifie les noms de chaque profil d'accès si un nom identifiant change et vérifie que chaque nom est unique
         if (!empty($this->physical_access_controllers)) {
             for ($i = 1; $i <= $this->nb_controller; $i++) {
                 foreach ($this->physical_access_controllers as $key => $value) {
                     $roomprofiles = array();
                     $controller_name = $key . $i;
                     // print  '<br/>------------------------------<br/>'.$controller_name.'<br />';
                     $params = $post_parameters[$controller_name];
                     $exname = ConfigurationHelper::getParameter($controller_name, 'controller_name');
                     $newname = $params['controller_name'];
                     // print 'ex-new : '.$exname.' - '.$newname.'<br />';
                     if ($exname != $newname) {
                         $roomprofiles = RoomprofilePeer::setAllNewIdentifierName($exname, $newname);
                     }
                     $this->checkError = ConfigurationHelper::checkControllersIdentifierName($controller_name, $newname, $this->nb_controller);
                     if (!$this->checkError['valid']) {
                         $isout = true;
                         break;
                     }
                     if (isset($roomprofiles)) {
                         if (!empty($roomprofiles)) {
                             foreach ($roomprofiles as $roomprofile) {
                                 $roomprofile->save();
                             }
                         }
                     }
                 }
                 if ($isout) {
                     break;
                 }
             }
         }
         // Modifie les noms de chaque contrôleur domotique si un nom identifiant change et vérifie que chaque nom est unique
         if (!empty($this->home_automation_controllers) && !$isout) {
             for ($i = 1; $i <= $this->nb_home_automation; $i++) {
                 foreach ($this->home_automation_controllers as $key => $value) {
                     $energyactions = array();
                     $controller_name = $key . $i;
                     // print  '<br/>------------------------------<br/>'.$controller_name.'<br />';
                     $params = $post_parameters[$controller_name];
                     $exname = ConfigurationHelper::getParameter($controller_name, 'controller_name');
                     $newname = $params['controller_name'];
                     // print 'ex-new : '.$exname.' - '.$newname.'<br />';
                     if ($exname != $newname) {
                         $energyactions = EnergyactionPeer::setAllNewIdentifierName($exname, $newname);
                     }
                     $this->checkError = ConfigurationHelper::checkAutomationsIdentifierName($controller_name, $newname, $this->nb_home_automation);
                     if (!$this->checkError['valid']) {
                         $isout = true;
                         break;
                     }
                     if (isset($energyactions)) {
                         if (!empty($energyactions)) {
                             foreach ($energyactions as $energyaction) {
                                 $energyaction->save();
                             }
                         }
                     }
                 }
                 if ($isout) {
                     break;
                 }
             }
         }
         if (!$isout) {
             $this->form->save();
             $this->saved = true;
         } else {
             $this->saved = false;
         }
     } else {
         $this->saved = false;
     }
     $this->setTemplate('home');
 }
 public function configure()
 {
     $physical_access_controllers = BasePhysicalAccessController::getControllers();
     $home_automation_controllers = BaseHomeAutomationController::getControllers();
     $this->widgetSchema['number_of_physical_access'] = new sfWidgetFormInput();
     $this->validatorSchema['number_of_physical_access'] = new sfValidatorInteger(array('min' => 0, 'max' => $this->max_controllers, 'required' => true));
     $this->widgetSchema->setLabel('number_of_physical_access', 'Number of physical access controllers');
     if (!is_null($this->getOption('nb_pac'))) {
         $nb_pac = $this->getOption('nb_pac');
     } else {
         $nb_pac = ConfigurationHelper::getParameter(null, 'number_of_physical_access');
     }
     if ($nb_pac > $this->max_controllers) {
         $nb_pac = $this->max_controllers;
     }
     if (count($physical_access_controllers) > 0) {
         for ($i = 1; $i <= $nb_pac; $i++) {
             $this->widgetSchema['physical_access_controller' . $i] = new sfWidgetFormChoice(array('choices' => $physical_access_controllers));
             $this->validatorSchema['physical_access_controller' . $i] = new sfValidatorChoice(array('choices' => array_keys($physical_access_controllers), 'required' => false));
             $this->widgetSchema->setLabel('physical_access_controller' . $i, 'Physical Access Controller');
             foreach ($physical_access_controllers as $physical_access_controller => $name) {
                 $form = PhysicalAccessControllerConfigurationForm::create($physical_access_controller, null);
                 $labelName = $form->getPhysicalAccessController()->getName() . $i;
                 $this->embedForm($labelName, $form);
                 $this->widgetSchema->setLabel($labelName, $name);
             }
         }
     }
     $this->widgetSchema['number_of_home_automation'] = new sfWidgetFormInput();
     $this->validatorSchema['number_of_home_automation'] = new sfValidatorInteger(array('min' => 0, 'max' => $this->max_home_automation, 'required' => true));
     $this->widgetSchema->setLabel('number_of_home_automation', 'Number of home automation controllers');
     if (!is_null($this->getOption('nb_hac'))) {
         $nb_hac = $this->getOption('nb_hac');
     } else {
         $nb_hac = ConfigurationHelper::getParameter(null, 'number_of_home_automation');
     }
     if ($nb_hac > $this->max_home_automation) {
         $nb_hac = $this->max_home_automation;
     }
     if (count($home_automation_controllers) > 0) {
         for ($i = 1; $i <= $nb_hac; $i++) {
             $this->widgetSchema['home_automation_controller' . $i] = new sfWidgetFormChoice(array('choices' => $home_automation_controllers));
             $this->validatorSchema['home_automation_controller' . $i] = new sfValidatorChoice(array('choices' => array_keys($home_automation_controllers), 'required' => false));
             $this->widgetSchema->setLabel('home_automation_controller' . $i, 'Home automation controller');
             foreach ($home_automation_controllers as $home_automation_controller => $name) {
                 $form = HomeAutomationControllerConfigurationForm::create($home_automation_controller, null);
                 $labelName = $form->getHomeAutomationController()->getName() . $i;
                 $this->embedForm($labelName, $form);
                 $this->widgetSchema->setLabel($labelName, $name);
             }
         }
     }
     $this->addSubConfigurationForm('Network', 'Network');
     $this->addSubConfigurationForm('Email', 'Email');
     $this->addSubConfigurationForm('General', 'General');
     $this->addSubConfigurationForm('Rename', 'Rename');
     $this->addSubConfigurationForm('Backup', 'Backup');
     $this->addSubConfigurationForm('Print', 'Print');
     $this->setDefault('number_of_physical_access', 1);
     $this->setDefault('number_of_home_automation', 1);
     $this->setDefaults(ConfigurationHelper::get());
     $this->widgetSchema->setNameFormat('configuration[%s]');
     $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
 }
 private static function findHac($action)
 {
     $action_controllername = $action->getConfiguredControllerName();
     $hac_infos = BaseHomeAutomationController::findHacFromNameIdentifier($action_controllername);
     // var_dump($action_controllername);
     if (is_null($hac_infos)) {
         return null;
     }
     $hac_name = $hac_infos['name'];
     // print 'hac_name: ';
     // var_dump($hac_name);
     $hac_id = $hac_infos['id'];
     // print 'hac_id: ';
     // var_dump($hac_id);
     $hac_selec = ConfigurationHelper::getParameter(null, $hac_name);
     // print 'hac_selec: ';
     // var_dump($hac_selec);
     $hac_conf = ConfigurationHelper::getNamespace($hac_selec . $hac_id);
     // print 'hac_conf: ';
     // var_dump($hac_conf);
     // var_dump($hac_infos);
     $hac = BaseHomeAutomationController::create($hac_selec, $hac_conf);
     // var_dump($hac);
     return $hac;
 }
Example #5
0
 public static function checkAutomationsIdentifierName($controller, $name, $nb_controller)
 {
     $controllers = BaseHomeAutomationController::getControllers();
     $results = array();
     if (!empty($controllers)) {
         for ($i = 1; $i <= $nb_controller; $i++) {
             foreach ($controllers as $key => $value) {
                 $c_name = $key . $i;
                 // print '<br /> ====> '.$c_name.' : ';
                 $i_name = self::getParameter($c_name, 'controller_name');
                 // print $i_name.'<br />';
                 // print '<br /> SI '.$name.' == '.$i_name.' ET SI '.$c_name.' != '.$controller.'<br /><br />';
                 if ($name == $i_name && $c_name != $controller) {
                     // print '<br /> ERREUR : NOM RETROUVE <br/>';
                     $results['valid'] = false;
                     $results['cname1'] = $c_name;
                     $results['cname2'] = $controller;
                     return $results;
                 }
             }
         }
     }
     // print '<br/> OK : NOM DISPO <br/>';
     $results['valid'] = true;
     return $results;
 }