From 6357a3f5b398532b7e53b2bed90593601ea439b2 Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@afi-sa.fr>
Date: Tue, 3 Mar 2015 11:14:15 +0100
Subject: [PATCH] rd #14085 pnb

Admin var afterSave refactoring: now each variable can have its own hook
---
 .../admin/controllers/IndexController.php     |  2 +-
 library/Class/AdminVar.php                    | 47 ++++++++++---------
 library/ZendAfi/Form/Admin/AdminVar.php       |  3 +-
 tests/bootstrap_frontcontroller.php           |  2 +
 4 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/application/modules/admin/controllers/IndexController.php b/application/modules/admin/controllers/IndexController.php
index 83422875508..de4c24e2031 100644
--- a/application/modules/admin/controllers/IndexController.php
+++ b/application/modules/admin/controllers/IndexController.php
@@ -70,7 +70,7 @@ class Admin_IndexController extends ZendAfi_Controller_Action {
 		$id = $this->_getParam('cle');
 		$var = Class_AdminVar::find($id);
 
-		$form = ZendAfi_Form_Admin_AdminVar::newWith($var);
+		$form = ZendAfi_Form_Admin_AdminVar::newWithAdminVar($var);
 		$form->setAction($this->view->url());
 		$form->setAttrib('data-backurl',
 										 $this->view->url(['action' => 'adminvar']));
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index e39899d1748..aab5c7346d6 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -378,6 +378,7 @@ class Class_AdminVar extends Storm_Model_Abstract {
 						'[{"id":10, "label":"À valider niveau 2"}, {"id":11, "label":"À valider niveau 3"}]',
 						'Les identifiants 1 à 5 sont réservés'
 					]),
+											 'after_save' => 'setWorkflowPermissions',
 				],
 				'WORKFLOW_TEXT_MAIL_ARTICLE_PENDING' => [
 					'description' => 'Contenu de l\'email de notification d\'article en attente de validation',
@@ -601,19 +602,6 @@ class Class_AdminVar extends Storm_Model_Abstract {
 	}
 
 
-	/**
-	 * @param $name string
-	 * @return string
-	 */
-	public static function helpFor($name) {
-		$known_vars = static::getKnownVars();
-		if (!isset($known_vars[$name]['description']))
-			return '';
-		return $known_vars[$name]['description'];
-	}
-
-
-
 	/** @return bool */
 	public static function isCacheEnabled() {
 		return self::isModuleEnabled('CACHE_ACTIF');
@@ -676,15 +664,28 @@ class Class_AdminVar extends Storm_Model_Abstract {
 		return static::helpFor($this->getId());
 	}
 
-
-	public function getType() {
+	public function getVarMetaDataIfNone($key, $default_value) {
 		$known_vars = static::getKnownVars();
 		$name = $this->getId();
-		if (!isset($known_vars[$name]['type']))
-			return self::TYPE_DEFAULT;
-		return $known_vars[$name]['type'];
+		if (!isset($known_vars[$name][$key]))
+			return $default_value;
+		return $known_vars[$name][$key];
+	}
+
+	public function getType() {
+		return $this->getVarMetaDataIfNone('type', self::TYPE_DEFAULT);
+	}
+
+
+	/**
+	 * @param $name string
+	 * @return string
+	 */
+	public static function helpFor($name) {
+		return static::find($name)->getVarMetaDataIfNone('description', '');
 	}
 
+
 	public function isOnOff() {
 		return $this->getType() == self::TYPE_ON_OFF;
 	}
@@ -746,10 +747,14 @@ class Class_AdminVar extends Storm_Model_Abstract {
 
 
 	public function afterSave() {
-		if ('WORKFLOW' != $this->getId())
-			return;
+		if ($afterSaveHook = $this->getVarMetaDataIfNone('after_save', null)) {
+			call_user_func([$this, $afterSaveHook]);
+		}
+	}
+
 
-		$statuses = json_decode($this->getValeur());
+	protected function setWorkflowPermissions() {
+			$statuses = json_decode($this->getValeur());
 		if (!is_array($statuses)) {
 			Class_Permission::cleanDynamicWorkflow();
 			return;
diff --git a/library/ZendAfi/Form/Admin/AdminVar.php b/library/ZendAfi/Form/Admin/AdminVar.php
index bd8ab8b07b7..1d9a0948036 100644
--- a/library/ZendAfi/Form/Admin/AdminVar.php
+++ b/library/ZendAfi/Form/Admin/AdminVar.php
@@ -28,7 +28,8 @@ class ZendAfi_Form_Admin_AdminVar extends ZendAfi_Form {
 		 Class_AdminVar::TYPE_ENCODED_DATA => 'ZendAfi_Form_Admin_AdminVar_EncodedData',
 		];
 
-	public static function newWith($admin_var) {
+
+	public static function newWithAdminVar($admin_var) {
 		$form_class = static::$_FORM_CLASSES[$admin_var->getType()];
 
 		$form = (new $form_class());
diff --git a/tests/bootstrap_frontcontroller.php b/tests/bootstrap_frontcontroller.php
index af4c0de2ba1..8b82fc7e6ce 100644
--- a/tests/bootstrap_frontcontroller.php
+++ b/tests/bootstrap_frontcontroller.php
@@ -31,4 +31,6 @@ $controller = newFrontController()->throwExceptions(true);
 Zend_Controller_Action_HelperBroker::addHelper(new ZendAfi_Controller_Action_Helper_ViewRenderer());
 
 setupRoutes($controller, new Zend_Config([]));
+
+$controller->getRouter()->addDefaultRoutes();
 ?>
\ No newline at end of file
-- 
GitLab