[Alba-desarrollo] SVN Alba r5441 - prosistem/alba/trunk/alba/apps/principal/lib

commits en pressenter.com.ar commits en pressenter.com.ar
Mie Feb 6 15:25:45 CET 2008


Author: hsanchez
Date: 2008-02-06 12:25:45 -0200 (Wed, 06 Feb 2008)
New Revision: 5441

Added:
   prosistem/alba/trunk/alba/apps/principal/lib/sfCustomUniqueValidator.php
Log:
Agregando el validador sfCustomUniqueValidator modificado

Added: prosistem/alba/trunk/alba/apps/principal/lib/sfCustomUniqueValidator.php
===================================================================
--- prosistem/alba/trunk/alba/apps/principal/lib/sfCustomUniqueValidator.php	                        (rev 0)
+++ prosistem/alba/trunk/alba/apps/principal/lib/sfCustomUniqueValidator.php	2008-02-06 14:25:45 UTC (rev 5441)
@@ -0,0 +1,103 @@
+<?php
+  /**
+ * sfCustomUniqueValidator checks if a record exist in the database with all the mentionned fields.
+ *
+ * ex: Check if a companie with company_name exist in country_id 
+ *   class:            sfCustomUniqueValidator
+ *   param:
+ *     class:          Companies    //the class on which the search is performed
+ *     nb_fields:      2            //the number of fields on which the comparison is done
+ *     field_1:        company_name //First field of the comparison
+ *     field_2:        country_id   //Other country for the comparison
+ *
+ * @package    lib
+ * @author     Joachim Martin
+ * @date       15/06/2007
+ */
+ 
+class sfCustomUniqueValidator extends sfValidator {
+ 
+   /**
+   * Executes this validator.
+   *
+   * @param mixed A file or parameter value/array
+   * @param error An error message reference
+   *
+   * @return bool true, if this validator executes successfully, otherwise false
+   */
+ 
+    public function execute(&$value, &$error) {
+ 
+        $className  = $this->getParameter('class').'Peer';
+ 
+        //Get fields number
+        $nb_fields = $this->getParameter('nb_fields')
+            ;
+        //Define new criteria       
+        $c = new Criteria();
+        $myClass =  strtolower($this->getParameterHolder()->get("class"));
+        $values = $this->getContext()->getRequest()->getParameter("$myClass");
+        $values["fk_establecimiento_id"] = $this->getContext()->getRequest()->getParameter("fk_establecimiento_id");
+
+        //Loop on the fields
+        for($i = 1; $i <= $nb_fields ; $i++) {
+            //Retrieve field_$i
+            $check_param = $this->getParameterHolder()->get("field_$i");
+            $check_value = $values["$check_param"];
+
+            //If check value defined        
+            if ($check_value != '') {   
+                //Adding field to the criteria
+                $columnName = call_user_func(array($className, 'translateFieldName'), $check_param, BasePeer::TYPE_FIELDNAME, 
+                    BasePeer::TYPE_COLNAME);
+                $c->add($columnName, $check_value);
+            }
+        }
+        $object = call_user_func(array($className, 'doSelectOne'), $c);
+ 
+        if ($object)
+        {
+          $tableMap = call_user_func(array($className, 'getTableMap'));
+          foreach ($tableMap->getColumns() as $column)
+          {
+            if (!$column->isPrimaryKey())
+            {
+              continue;
+            }
+            $method = 'get'.$column->getPhpName();
+            $primaryKey = call_user_func(array($className, 'translateFieldName'), $column->getPhpName(), BasePeer::TYPE_PHPNAME, 
+BasePeer::TYPE_FIELDNAME);
+            if ($object->$method() != $this->getContext()->getRequest()->getParameter($primaryKey))
+            {
+              $error = $this->getParameter('custom_unique_error');
+ 
+              return false;
+            }
+          }
+        }
+        return true;
+    } 
+ 
+    public function initialize ($context, $parameters = null) {
+        // initialize parent
+        parent::initialize($context);
+ 
+        //Set default parameters value
+        $this->setParameter('custom_unique_error','The value is not unique');
+ 
+        $this->getParameterHolder()->add($parameters);
+ 
+        // check parameters
+        if (!$this->getParameter('class'))
+        {
+          throw new sfValidatorException('The "class" parameter is mandatory for the sfCustomUniqueValidator validator.');
+        }
+ 
+        if (!$this->getParameter('nb_fields'))
+        {
+          throw new sfValidatorException('The "nb_fields" parameter is mandatory for the sfCustomUniqueValidator validator.');
+        }
+ 
+        return true;
+    }
+}




Más información sobre la lista de distribución Alba-desarrollo