]> git.agnieray.net Git - galette.git/blobdiff - galette/lib/Galette/DynamicFields/DynamicField.php
Typehint DynamicFields, add tests
[galette.git] / galette / lib / Galette / DynamicFields / DynamicField.php
index d87aba0ce2e2e689583067b112df28a4d8f78ef1..67e24a1e0c500b37b26440813a27203149e05896 100644 (file)
@@ -81,6 +81,9 @@ abstract class DynamicField
     /** File field (upload) */
     public const FILE = 6;
 
+    public const MOVE_UP = 'up';
+    public const MOVE_DOWN = 'down';
+
     public const PERM_USER_WRITE = 0;
     public const PERM_ADMIN = 1;
     public const PERM_STAFF = 2;
@@ -110,7 +113,7 @@ abstract class DynamicField
     protected $values;
     protected $form;
 
-    protected $errors;
+    protected $errors = [];
 
     protected $zdb;
 
@@ -126,7 +129,7 @@ abstract class DynamicField
 
         if (is_int($args)) {
             $this->load($args);
-        } elseif ($args !== null && is_object($args)) {
+        } elseif (is_object($args)) {
             $this->loadFromRs($args);
         }
     }
@@ -139,7 +142,7 @@ abstract class DynamicField
      *
      * @return DynamicField|false
      */
-    public static function loadFieldType(Db $zdb, $id)
+    public static function loadFieldType(Db $zdb, int $id)
     {
         try {
             $select = $zdb->select(self::TABLE);
@@ -167,13 +170,13 @@ abstract class DynamicField
     /**
      * Get correct field type instance
      *
-     * @param Db  $zdb Database instance
-     * @param int $t   Field type
-     * @param int $id  Optional dynamic field id (to load data)
+     * @param Db       $zdb Database instance
+     * @param int      $t   Field type
+     * @param int|null $id  Optional dynamic field id (to load data)
      *
      * @return DynamicField
      */
-    public static function getFieldType(Db $zdb, $t, $id = null)
+    public static function getFieldType(Db $zdb, int $t, int $id = null)
     {
         $df = null;
         switch ($t) {
@@ -200,7 +203,6 @@ abstract class DynamicField
                 break;
             default:
                 throw new \Exception('Unknown field type ' . $t . '!');
-                break;
         }
         return $df;
     }
@@ -212,7 +214,7 @@ abstract class DynamicField
      *
      * @return void
      */
-    public function load($id)
+    public function load(int $id): void
     {
         try {
             $select = $this->zdb->select(self::TABLE);
@@ -241,16 +243,16 @@ abstract class DynamicField
      *
      * @return void
      */
-    public function loadFromRs($rs, $values = true)
+    public function loadFromRs($rs, bool $values = true): void
     {
         $this->id = (int)$rs->field_id;
         $this->name = $rs->field_name;
         $this->index = (int)$rs->field_index;
         $this->perm = (int)$rs->field_perm;
-        $this->required = ($rs->field_required == 1 ? true : false);
+        $this->required = $rs->field_required == 1;
         $this->width = $rs->field_width;
         $this->height = $rs->field_height;
-        $this->repeat = $rs->field_repeat;
+        $this->repeat = (int)$rs->field_repeat;
         $this->size = $rs->field_size;
         $this->form = $rs->field_form;
         if ($values && $this->hasFixedValues()) {
@@ -266,7 +268,7 @@ abstract class DynamicField
      *
      * @return string
      */
-    public static function getFixedValuesTableName($id, $prefixed = false)
+    public static function getFixedValuesTableName(int $id, bool $prefixed = false): string
     {
         $name = 'field_contents_' . $id;
         if ($prefixed === true) {
@@ -313,21 +315,21 @@ abstract class DynamicField
      *
      * @return integer
      */
-    abstract public function getType();
+    abstract public function getType(): int;
 
     /**
      * Get field type name
      *
      * @return String
      */
-    public function getTypeName()
+    public function getTypeName(): string
     {
         $types = $this->getFieldsTypesNames();
         if (isset($types[$this->getType()])) {
             return $types[$this->getType()];
         } else {
             throw new \RuntimeException(
-                'Unknow type ' . $this->getType()
+                'Unknown type ' . $this->getType()
             );
         }
     }
@@ -337,9 +339,9 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasData()
+    public function hasData(): bool
     {
-        return $this->has_data;
+        return (bool)$this->has_data;
     }
 
     /**
@@ -347,9 +349,9 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasWidth()
+    public function hasWidth(): bool
     {
-        return $this->has_width;
+        return (bool)$this->has_width;
     }
 
     /**
@@ -357,9 +359,9 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasHeight()
+    public function hasHeight(): bool
     {
-        return $this->has_height;
+        return (bool)$this->has_height;
     }
 
     /**
@@ -367,19 +369,19 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasSize()
+    public function hasSize(): bool
     {
-        return $this->has_size;
+        return (bool)$this->has_size;
     }
 
     /**
-     * Is the field multi valued?
+     * Is the field multivalued?
      *
      * @return boolean
      */
-    public function isMultiValued()
+    public function isMultiValued(): bool
     {
-        return $this->multi_valued;
+        return (bool)$this->multi_valued;
     }
 
     /**
@@ -387,9 +389,9 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasFixedValues()
+    public function hasFixedValues(): bool
     {
-        return $this->fixed_values;
+        return (bool)$this->fixed_values;
     }
 
     /**
@@ -397,18 +399,18 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function hasPermissions()
+    public function hasPermissions(): bool
     {
-        return $this->has_permissions;
+        return (bool)$this->has_permissions;
     }
 
 
     /**
      * Get field id
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getId()
+    public function getId(): ?int
     {
         return $this->id;
     }
@@ -416,9 +418,9 @@ abstract class DynamicField
     /**
      * Get field Permissions
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getPerm()
+    public function getPerm(): ?int
     {
         return $this->perm;
     }
@@ -429,17 +431,17 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function isRequired()
+    public function isRequired(): bool
     {
-        return $this->required;
+        return (bool)$this->required;
     }
 
     /**
      * Get field width
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getWidth()
+    public function getWidth(): ?int
     {
         return $this->width;
     }
@@ -447,9 +449,9 @@ abstract class DynamicField
     /**
      * Get field height
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getHeight()
+    public function getHeight(): ?int
     {
         return $this->height;
     }
@@ -459,7 +461,7 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function isRepeatable()
+    public function isRepeatable(): bool
     {
         return $this->repeat != null && trim($this->repeat) != '' && (int)$this->repeat >= 0;
     }
@@ -467,9 +469,9 @@ abstract class DynamicField
     /**
      * Get fields repetitions
      *
-     * @return integer|boolean
+     * @return integer|null
      */
-    public function getRepeat()
+    public function getRepeat(): ?int
     {
         return $this->repeat;
     }
@@ -477,9 +479,9 @@ abstract class DynamicField
     /**
      * Get field size
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getSize()
+    public function getSize(): ?int
     {
         return $this->size;
     }
@@ -487,9 +489,9 @@ abstract class DynamicField
     /**
      * Get field index
      *
-     * @return integer
+     * @return integer|null
      */
-    public function getIndex()
+    public function getIndex(): ?int
     {
         return $this->index;
     }
@@ -499,7 +501,7 @@ abstract class DynamicField
      *
      * @return array
      */
-    public static function getPermsNames()
+    public static function getPermsNames(): array
     {
         return [
             self::PERM_USER_WRITE => _T("User, read/write"),
@@ -515,7 +517,7 @@ abstract class DynamicField
      *
      * @return array
      */
-    public static function getFormsNames()
+    public static function getFormsNames(): array
     {
         return [
             'adh'       => _T("Members"),
@@ -531,7 +533,7 @@ abstract class DynamicField
      *
      * @return string
      */
-    public static function getFormTitle($form_name)
+    public static function getFormTitle(string $form_name): string
     {
         $names = self::getFormsNames();
         return $names[$form_name];
@@ -542,7 +544,7 @@ abstract class DynamicField
      *
      * @return string
      */
-    public function getPermName()
+    public function getPermName(): string
     {
         $perms = self::getPermsNames();
         return $perms[$this->getPerm()];
@@ -553,7 +555,7 @@ abstract class DynamicField
      *
      * @return string
      */
-    public function getForm()
+    public function getForm(): string
     {
         return $this->form;
     }
@@ -563,9 +565,9 @@ abstract class DynamicField
      *
      * @param boolean $imploded Whether to implode values
      *
-     * @return array
+     * @return array|string|false
      */
-    public function getValues($imploded = false)
+    public function getValues(bool $imploded = false)
     {
         if (!is_array($this->values)) {
             return false;
@@ -585,7 +587,7 @@ abstract class DynamicField
      *
      * @return true|array
      */
-    public function check($values)
+    public function check(array $values)
     {
         $this->errors = [];
         $this->warnings = [];
@@ -684,7 +686,7 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function store($values)
+    public function store(array $values): bool
     {
         if (!$this->check($values)) {
             return false;
@@ -807,7 +809,7 @@ abstract class DynamicField
      *
      * @return integer
      */
-    protected function getNewIndex()
+    protected function getNewIndex(): int
     {
         $select = $this->zdb->select(self::TABLE);
         $select->columns(
@@ -819,7 +821,7 @@ abstract class DynamicField
         $results = $this->zdb->execute($select);
         $result = $results->current();
         $idx = $result->idx;
-        return $idx;
+        return (int)$idx;
     }
 
     /**
@@ -827,7 +829,7 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function isDuplicate()
+    public function isDuplicate(): bool
     {
         //let's consider field is duplicated, in case of future errors
         $duplicated = true;
@@ -867,21 +869,26 @@ abstract class DynamicField
         }
         return $duplicated;
     }
+
     /**
      * Move a dynamic field
      *
-     * @param string $action What to do (either 'up' or 'down')
+     * @param string $action What to do (one of self::MOVE_*)
      *
      * @return boolean
      */
-    public function move($action)
+    public function move(string $action): bool
     {
+        if ($action !== self::MOVE_UP && $action !== self::MOVE_DOWN) {
+            throw new \RuntimeException(('Unknown action ' . $action));
+        }
+
         try {
             $this->zdb->connection->beginTransaction();
 
             $old_rank = $this->index;
 
-            $direction = $action == 'up' ? -1 : 1;
+            $direction = $action == self::MOVE_UP ? -1 : 1;
             $new_rank = $old_rank + $direction;
             $update = $this->zdb->update(self::TABLE);
             $update->set([
@@ -922,7 +929,7 @@ abstract class DynamicField
      *
      * @return boolean
      */
-    public function remove()
+    public function remove(): bool
     {
         try {
             if ($this->hasFixedValues()) {
@@ -992,7 +999,7 @@ abstract class DynamicField
      *
      * @return array
      */
-    public static function getFieldsTypesNames()
+    public static function getFieldsTypesNames(): array
     {
         $names = [
             self::SEPARATOR => _T("separator"),
@@ -1011,7 +1018,7 @@ abstract class DynamicField
      *
      * @return array
      */
-    public function getErrors()
+    public function getErrors(): array
     {
         return $this->errors;
     }
@@ -1021,7 +1028,7 @@ abstract class DynamicField
      *
      * @return array
      */
-    public function getWarnings()
+    public function getWarnings(): array
     {
         return $this->warnings;
     }