Exemplo n.º 1
0
 /**
  * @param CEvent $event
  */
 public function afterDelete($event)
 {
     $relations = $this->owner->relations();
     // La relation définie dans la méthode relations() du propriétaire permet de déterminer :
     // - la classe du modèle à supprimer, donc la table associée
     // - le nom du champ distant pour la jointure. Le champ local est en principe la clé primaire du modèle.
     // @internal Pour le moment on suppose que la clé primaire ne porte que sur un seul champ.
     // - les conditions supplémentaires de jointure que l'on s'attend à trouver dans le paramètre 'conditions' de la relation
     foreach ($this->processRelations as $it) {
         if ($relation = hArray::getAt($it, $relations, false)) {
             /** @noinspection PhpUndefinedMethodInspection */
             $relatedModel = $relation[1]::model();
             $relatedTable = $relatedModel->tableSchema->name;
             $relatedPrimaryField = $relation[2];
             $conditions = array("{$relatedTable}.{$relatedPrimaryField} = {$this->owner->primaryKey}");
             // S'il y a des conditions supplémentaires, on les applique
             // @todo Voir si d'autres clauses doivent être ajoutées
             if ($where = hArray::getAt('condition', $relation, false)) {
                 $conditions[] = $where;
             }
             // On peut à présent supprimer les enregistrements liés à $this->owner
             Yii::app()->db->createCommand()->delete($relatedTable, implode(' AND ', $conditions));
         }
     }
 }
Exemplo n.º 2
0
 /**
  * @return BadUrlLog $this
  */
 public function initializeFromGlobalVariables()
 {
     $this->cookie_data = serialize($_COOKIE);
     $this->server_data = serialize($_SERVER);
     $this->remote_addr = \hArray::getAt('REMOTE_ADDR', $_SERVER);
     $this->remote_port = \hArray::getAt('REMOTE_PORT', $_SERVER);
     $this->request_method = \hArray::getAt('REQUEST_METHOD', $_SERVER);
     $this->request_uri = \hArray::getAt('REQUEST_URI', $_SERVER);
     $this->query_string = \hArray::getAt('QUERY_STRING', $_SERVER);
     return $this;
 }
Exemplo n.º 3
0
 /**
  * @test
  */
 public function getAt()
 {
     // Tableau associatif
     $array = array("un" => 1, "deux" => 2, "trois" => 3);
     $this->assertFalse(hArray::getAt("aaa", $array, false));
     $this->assertEquals(hArray::getAt("un", $array), 1);
     $this->assertEquals(hArray::getAt("deux", $array), 2);
     $this->assertEquals(hArray::getAt("trois", $array), 3);
     // Tableau standard
     $array = array("un", "deux", "trois");
     $this->assertFalse(hArray::getAt(5, $array, false));
     $this->assertEquals(hArray::getAt(0, $array), "un");
     $this->assertEquals(hArray::getAt(1, $array), "deux");
     $this->assertEquals(hArray::getAt(2, $array), "trois");
 }
Exemplo n.º 4
0
 /**
  * Renseigne les variables de session permettant de recharger automatiquement les filtres et de retrouver
  * la page courante dans la page admin du backend
  * @internal exploite les informations d'une CGridView
  * @param string $key Clé à lire dans $_GET : AccountingEntry, DictionaryEntry, etc. (cf. la CGridView)
  * @return \CHttpSession
  */
 protected function setAdminGridViewSessionVariables($key)
 {
     /** @var \CHttpSession $session */
     $session = \Yii::app()->session;
     if (!$_GET) {
         // Affichage initial, rafraichissement (F5) ou redirection depuis les actions update/create
         if ($session->get('admin_reloadFilters')) {
             // On recharge une seule fois $model à partir des filtres en session
             $session->remove('admin_reloadFilters');
         } else {
             // on vide les filtres en session pour repartir sur un $model vierge
             $session->remove('admin_current_filter');
             $session->remove('admin_current_page');
         }
     } else {
         $gridViewId = \hArray::getAt('ajax', $_GET);
         // Réglage de la page
         if ($gridViewId) {
             $session->add('admin_current_page', \hArray::getAt('page', $_GET, 1));
         }
         // Réglage des filtres
         if (isset($_GET[$key])) {
             $session->add('admin_current_filter', $_GET[$key]);
         } elseif (!\hArray::getAt('filter', $_GET)) {
             $session->remove('admin_current_filter');
         }
     }
     return $session;
 }
Exemplo n.º 5
0
 /**
  * Enregistre dans le cache le résultat de la recherche pour éviter les accès répétitifs à la base de données
  * @param array $criteria
  * @return Language|mixed
  */
 private static function cachedFindByAttributes(array $criteria)
 {
     $key = serialize($criteria);
     if (!($out = hArray::getAt($key, self::$searchCache))) {
         // L'objet n'est pas encore dans le cache, on le cherche
         $out = self::model()->findByAttributes($criteria);
         self::$searchCache[$key] = $out;
     }
     return $out;
 }