/** * @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)); } } }
/** * @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; }
/** * @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"); }
/** * 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; }
/** * 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; }