]> git.agnieray.net Git - galette.git/commitdiff
Use same permissions in dynamic and core fields
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 4 Mar 2024 06:42:27 +0000 (07:42 +0100)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 4 Mar 2024 09:39:24 +0000 (10:39 +0100)
closes #1798

28 files changed:
galette/install/scripts/mysql.sql
galette/install/scripts/pgsql.sql
galette/install/scripts/sql/upgrade-to-1.10-mysql.sql
galette/install/scripts/sql/upgrade-to-1.10-pgsql.sql
galette/install/scripts/upgrade-to-1.10.php
galette/lib/Galette/Controllers/Crud/DynamicFieldsController.php
galette/lib/Galette/Controllers/GaletteController.php
galette/lib/Galette/DynamicFields/DynamicField.php
galette/lib/Galette/Entity/DynamicFieldsHandle.php
galette/lib/Galette/Entity/FieldsConfig.php
galette/lib/Galette/Features/Permissions.php [new file with mode: 0644]
galette/lib/Galette/Repository/DynamicFieldsSet.php
galette/templates/default/components/dynamic_fields.html.twig
galette/templates/default/elements/edit_core_fields.html.twig
galette/templates/default/elements/edit_dynamic_fields.html.twig
galette/templates/default/pages/configuration_dynamic_field_form.html.twig
tests/Galette/DynamicFields/tests/units/Boolean.php
tests/Galette/DynamicFields/tests/units/Choice.php
tests/Galette/DynamicFields/tests/units/Date.php
tests/Galette/DynamicFields/tests/units/DynamicField.php
tests/Galette/DynamicFields/tests/units/File.php
tests/Galette/DynamicFields/tests/units/Line.php
tests/Galette/DynamicFields/tests/units/Separator.php
tests/Galette/DynamicFields/tests/units/Text.php
tests/Galette/Entity/tests/units/FieldsConfig.php
tests/Galette/Entity/tests/units/PdfModel.php
tests/Galette/IO/tests/units/CsvIn.php
tests/Galette/Repository/tests/units/Members.php

index 5e040af302d84c4842ac05014e5c5e42007e4495..9896af3e88d475988e8f19c19256be7e3802ac80 100644 (file)
@@ -132,7 +132,7 @@ CREATE TABLE galette_field_types (
     field_form varchar(10) NOT NULL,
     field_index int(10) NOT NULL default '0',
     field_name varchar(255) NOT NULL default '',
-    field_perm int(10) NOT NULL default '0',
+    field_perm int(10) NOT NULL default 1,
     field_type int(10) NOT NULL default '0',
     field_required tinyint(1) NOT NULL default 0,
     field_pos int(10) NOT NULL default '0',
index 8dd0f6d170cf1a7a13d0e10436fe52fdc361f3a9..16572bbcb5dc6696ab1be8581db10668c535315b 100644 (file)
@@ -296,7 +296,7 @@ CREATE TABLE galette_field_types (
   field_form character varying(10) NOT NULL,
   field_index integer DEFAULT '0' NOT NULL,
   field_name character varying(255) DEFAULT '' NOT NULL,
-  field_perm integer DEFAULT '0' NOT NULL,
+  field_perm integer DEFAULT 1 NOT NULL,
   field_type integer DEFAULT '0' NOT NULL,
   field_required boolean DEFAULT FALSE,
   field_pos integer DEFAULT '0' NOT NULL,
index 99e716233077b24c9568f1d2afc9391bf94c64fc..22819b82e79de6681b4a440324a6a29d357e0e54 100644 (file)
@@ -44,3 +44,6 @@ ALTER TABLE galette_tmplinks CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_un
 ALTER TABLE galette_tmppasswds CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
 ALTER TABLE galette_transactions CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
 ALTER TABLE galette_types_cotisation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+
+-- change dynamic fields permissions
+ALTER TABLE galette_field_types CHANGE field_perm field_perm INT(10) NOT NULL DEFAULT 1;
index 9d0f08e3cf11a1d0e28b708a62aec7edd6623af1..dba2f0e2cae0ea55092cb71829796b5ff27d122d 100644 (file)
@@ -13,3 +13,6 @@ ALTER TABLE galette_fields_config ADD width_in_forms integer DEFAULT '1' NOT NUL
 -- Add display properties to dynamic fields
 ALTER TABLE galette_field_types ADD field_width_in_forms integer DEFAULT '1' NOT NULL;
 ALTER TABLE galette_field_types ADD field_information_above boolean DEFAULT FALSE;
+
+-- change dynamic fields permissions
+ALTER TABLE galette_field_types ALTER COLUMN field_perm SET DEFAULT 1;
index 386af0e91faa6dce80d353cf5e89cd0039394d7f..2d585ee67464f6140dc270eae42e023624118361 100644 (file)
@@ -21,6 +21,7 @@
 namespace Galette\Updates;
 
 use Analog\Analog;
+use Galette\DynamicFields\DynamicField;
 use Galette\Entity\ContributionsTypes;
 use Galette\Updater\AbstractUpdater;
 use GalettePaypal\Paypal;
@@ -50,7 +51,37 @@ class UpgradeTo110 extends AbstractUpdater
      */
     protected function update(): bool
     {
-        //to satisfy inheritance
+        $this->zdb->connection->beginTransaction();
+
+        $results = $this->zdb->selectAll(DynamicField::TABLE);
+        $results = $results->toArray();
+
+        $mapping = [
+            0 => 1, //DynamicField::PERM_USER_WRITE / 0 => FieldsConfig::USER_WRITE / 1
+            2 => 3, //DynamicField::PERM_STAFF      / 2 => FieldsConfig::STAFF      / 3
+            1 => 2, //DynamicField::PERM_ADMIN      / 1 => FieldsConfig::ADMIN      / 2
+            3 => 4, //DynamicField::PERM_MANAGER    / 3 => FieldsConfig::MANAGER    / 4
+            4 => 5 //DynamicField::PERM_USER_READ   / 4 => FieldsConfig::USER_READ  / 5
+        ];
+
+        $stmt = null;
+        foreach ($results as $result) {
+            if ($stmt === null) {
+                $update = $this->zdb->update(DynamicField::TABLE);
+                $update->set(['field_perm' => ':perm']);
+                $update->where([DynamicField::PK => ':' . DynamicField::PK]);
+                $stmt = $this->zdb->sql->prepareStatementForSqlObject($update);
+            }
+
+            $stmt->execute(
+                array(
+                    'perm' => $mapping[$result['field_perm']],
+                    DynamicField::PK => $result[DynamicField::PK]
+                )
+            );
+        }
+
+        $this->zdb->connection->commit();
         return true;
     }
 
@@ -100,7 +131,6 @@ class UpgradeTo110 extends AbstractUpdater
                         )
                     );
                 }
-
             }
         }
         return true;
index b7264569994afb968e0d7c2eee6d56809f86fe46..3b6f97be43aef592632985e539a59bc2b14ce713 100644 (file)
@@ -56,7 +56,7 @@ class DynamicFieldsController extends CrudController
             'page_title'        => _T("Add field"),
             'form_name'         => $form_name,
             'action'            => 'add',
-            'perm_names'        => DynamicField::getPermsNames(),
+            'perm_names'        => DynamicField::getPermissionsList(),
             'mode'              => (($request->getHeaderLine('X-Requested-With') === 'XMLHttpRequest') ? 'ajax' : ''),
             'field_type_names'  => DynamicField::getFieldsTypesNames()
         ];
@@ -408,7 +408,7 @@ class DynamicFieldsController extends CrudController
             'page_title'    => _T("Edit field"),
             'action'        => 'edit',
             'form_name'     => $form_name,
-            'perm_names'    => DynamicField::getPermsNames(),
+            'perm_names'    => DynamicField::getPermissionsList(),
             'mode'          => (($request->getHeaderLine('X-Requested-With') === 'XMLHttpRequest') ? 'ajax' : ''),
             'df'            => $df,
             'html_editor'   => true,
index ab5e18a88489e820f02b0b0dc94629580c14e5bd..074d1f72338116794dee113f41f3f1371aa46e61 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Galette\Controllers;
 
+use Galette\Entity\FieldsConfig;
 use Galette\Entity\Social;
 use Galette\Repository\PaymentTypes;
 use Slim\Psr7\Request;
@@ -491,7 +492,8 @@ class GaletteController extends AbstractController
             'time'                  => time(),
             'categories'            => FieldsCategories::getList($this->zdb),
             'categorized_fields'    => $fc->getCategorizedFields(),
-            'non_required'          => $fc->getNonRequired()
+            'non_required'          => $fc->getNonRequired(),
+            'perm_names'            => FieldsConfig::getPermissionsList()
         ];
 
         // display page
index 8b551bec78c54e7ae90a58d2ae59e7ab2d71748b..24eeef96f7ca8912a1a0f68cc22521f399ce52f6 100644 (file)
@@ -22,6 +22,7 @@
 namespace Galette\DynamicFields;
 
 use ArrayObject;
+use Galette\Features\Permissions;
 use Throwable;
 use Analog\Analog;
 use Galette\Core\Db;
@@ -41,6 +42,7 @@ abstract class DynamicField
 {
     use Translatable;
     use I18n;
+    use Permissions;
 
     public const TABLE = 'field_types';
     public const PK = 'field_id';
@@ -63,12 +65,6 @@ abstract class DynamicField
     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;
-    public const PERM_MANAGER = 3;
-    public const PERM_USER_READ = 4;
-
     public const DEFAULT_MAX_FILE_SIZE = 1024;
     public const VALUES_FIELD_LENGTH = 100;
 
@@ -83,7 +79,6 @@ abstract class DynamicField
 
     protected ?int $id = null;
     protected ?int $index = null;
-    protected ?int $perm = null;
     protected bool $required = false;
     protected ?int $width_in_forms = 1;
     protected bool $information_above = false;
@@ -237,7 +232,7 @@ abstract class DynamicField
         $this->id = (int)$rs->field_id;
         $this->name = $rs->field_name;
         $this->index = (int)$rs->field_index;
-        $this->perm = (int)$rs->field_perm;
+        $this->permission = (int)$rs->field_perm;
         $this->required = $rs->field_required == 1;
         $this->min_size = $rs->field_min_size;
         $this->width_in_forms = (int)$rs->field_width_in_forms;
@@ -417,16 +412,6 @@ abstract class DynamicField
         return $this->id;
     }
 
-    /**
-     * Get field Permissions
-     *
-     * @return integer|null
-     */
-    public function getPerm(): ?int
-    {
-        return $this->perm;
-    }
-
     /**
      * Is field required?
      *
@@ -537,22 +522,6 @@ abstract class DynamicField
         return $this->information_above;
     }
 
-    /**
-     * Retrieve permissions names for display
-     *
-     * @return array<int,string>
-     */
-    public static function getPermsNames(): array
-    {
-        return [
-            self::PERM_USER_WRITE => _T("User, read/write"),
-            self::PERM_STAFF      => _T("Staff member"),
-            self::PERM_ADMIN      => _T("Administrator"),
-            self::PERM_MANAGER    => _T("Group manager"),
-            self::PERM_USER_READ  => _T("User, read only")
-        ];
-    }
-
     /**
      * Retrieve forms names
      *
@@ -580,17 +549,6 @@ abstract class DynamicField
         return $names[$form_name];
     }
 
-    /**
-     * Get permission name
-     *
-     * @return string
-     */
-    public function getPermName(): string
-    {
-        $perms = self::getPermsNames();
-        return $perms[$this->getPerm()];
-    }
-
     /**
      * Get form
      *
@@ -648,8 +606,8 @@ abstract class DynamicField
         if (!isset($values['field_perm']) || $values['field_perm'] === '') {
             $this->errors[] = _T('Missing required field permissions!');
         } else {
-            if (in_array($values['field_perm'], array_keys(self::getPermsNames()))) {
-                $this->perm = $values['field_perm'];
+            if (in_array($values['field_perm'], array_keys(self::getPermissionsList()))) {
+                $this->permission = $values['field_perm'];
             } else {
                 $this->errors[] = _T('Unknown permission!');
             }
@@ -786,7 +744,7 @@ abstract class DynamicField
         try {
             $values = array(
                 'field_name'              => strip_tags($this->name),
-                'field_perm'              => $this->perm,
+                'field_perm'              => $this->permission,
                 'field_required'          => $this->required,
                 'field_width_in_forms'    => $this->width_in_forms,
                 'field_width'             => ($this->width === null ? new Expression('NULL') : $this->width),
index b7dd7d613a9a13cca7465129514fab31d45240db..eeae1c7943247b4cad8a8f40c1be53d9aa461fc0 100644 (file)
@@ -511,13 +511,13 @@ class DynamicFieldsHandle
         $access_level = $this->login->getAccessLevel();
 
         foreach ($this->dynamic_fields as $field) {
-            $perm = $field->getPerm();
+            $perm = $field->getPermission();
             if (
-                ($perm == DynamicField::PERM_MANAGER &&
+                ($perm == FieldsConfig::MANAGER &&
                     $access_level < Authentication::ACCESS_MANAGER) ||
-                ($perm == DynamicField::PERM_STAFF &&
+                ($perm == FieldsConfig::STAFF &&
                         $access_level < Authentication::ACCESS_STAFF) ||
-                ($perm == DynamicField::PERM_ADMIN &&
+                ($perm == FieldsConfig::ADMIN &&
                     $access_level < Authentication::ACCESS_ADMIN)
             ) {
                 continue;
index 40c5e00eef927d86e007de43b4bc51ed23a7490c..14fc5c7fab111a26be05c50c728700c7208d28d4 100644 (file)
@@ -22,6 +22,7 @@
 namespace Galette\Entity;
 
 use ArrayObject;
+use Galette\Features\Permissions;
 use Throwable;
 use Analog\Analog;
 use Laminas\Db\Adapter\Adapter;
@@ -38,12 +39,15 @@ use Galette\Core\Authentication;
  */
 class FieldsConfig
 {
+    use Permissions;
+
     public const NOBODY = 0;
     public const USER_WRITE = 1;
     public const ADMIN = 2;
     public const STAFF = 3;
     public const MANAGER = 4;
     public const USER_READ = 5;
+    public const ALL = 10;
 
     public const TYPE_STR = 0;
     public const TYPE_HIDDEN = 1;
diff --git a/galette/lib/Galette/Features/Permissions.php b/galette/lib/Galette/Features/Permissions.php
new file mode 100644 (file)
index 0000000..9580a34
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * Copyright © 2003-2024 The Galette Team
+ *
+ * This file is part of Galette (https://galette.eu).
+ *
+ * Galette is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Galette is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Galette. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace Galette\Features;
+
+use Galette\Entity\FieldsConfig;
+use Throwable;
+use Analog\Analog;
+use Galette\Core\L10n;
+use Laminas\Db\Sql\Expression;
+
+/**
+ * Permissions
+ *
+ * @author Johan Cwiklinski <johan@x-tnd.be>
+ */
+
+trait Permissions
+{
+    protected ?int $permission = null;
+
+    /* FIXME/ requires PHP 8.2
+    public const NOBODY = 0;
+    public const USER_WRITE = 1;
+    public const ADMIN = 2;
+    public const STAFF = 3;
+    public const MANAGER = 4;
+    public const USER_READ = 5;
+    public const ALL = 10;*/
+
+    /**
+     * Get permissions list
+     *
+     * @param bool $can_public Can have "public" permission
+     *
+     * @return array<int, string>
+     */
+    public static function getPermissionsList(bool $can_public = false): array
+    {
+        $list = [
+            FieldsConfig::NOBODY => _T("Inaccessible"),
+            FieldsConfig::USER_READ => _T("Read only"),
+            FieldsConfig::USER_WRITE => _T("Read/Write"),
+            FieldsConfig::MANAGER => _T("Group manager"),
+            FieldsConfig::STAFF => _T("Staff member"),
+            FieldsConfig::ADMIN => _T("Administrator"),
+        ];
+
+        if ($can_public) {
+            $all = [FieldsConfig::ALL => _T("Public")];
+            $list = array_unshift($all);
+        }
+
+        return $list;
+    }
+
+    /**
+     * Get permission name
+     *
+     * @return string
+     */
+    public function getPermissionName(): string
+    {
+        $perms = self::getPermissionsList();
+        return $perms[$this->getPermission()];
+    }
+
+    /**
+     * Get current permissions
+     *
+     * @return integer|null
+     */
+    public function getPermission(): ?int
+    {
+        return $this->permission;
+    }
+}
index e13ec01d385cc05c7166b6eaf9927e8e566c8c34..353e58cb8172dc2ec7a39e692763ab116b306356 100644 (file)
@@ -27,6 +27,7 @@ use Galette\Core\Db;
 use Galette\Core\Authentication;
 use Galette\Core\Login;
 use Galette\DynamicFields\DynamicField;
+use Galette\Entity\FieldsConfig;
 
 /**
  * Dynamic field descriptors set
@@ -90,11 +91,11 @@ class DynamicFieldsSet
                 /** @var ArrayObject<string, int|string> $r */
                 $perm = $r['field_perm'];
                 if (
-                    ($perm == DynamicField::PERM_MANAGER &&
+                    ($perm == FieldsConfig::MANAGER &&
                         $access_level < Authentication::ACCESS_MANAGER) ||
-                    ($perm == DynamicField::PERM_STAFF &&
+                    ($perm == FieldsConfig::STAFF &&
                          $access_level < Authentication::ACCESS_STAFF) ||
-                    ($perm == DynamicField::PERM_ADMIN &&
+                    ($perm == FieldsConfig::ADMIN &&
                         $access_level < Authentication::ACCESS_ADMIN)
                 ) {
                     continue;
index a09c49d1436fe8e1b767571a955af84bea542ffb..4b53f6f811228aad3204e16cdb74bec34431b470 100644 (file)
                 <div class="ui{% if preferences.pref_member_form_grid is defined %} {{ preferences.pref_member_form_grid }}{% endif %} column stackable grid">
                 {% set access_level = login.getAccessLevel() %}
                 {% for field in fields %}
-                    {% set perm = field.getPerm() %}
+                    {% set perm = field.getPermission() %}
                     {% if get_class(field) == 'Galette\\DynamicFields\\Separator' %}
                     <div class="sixteen wide column">
                         <div class="ui horizontal divider">{{ field.getName()|escape }}</div>
index 11c55001c546e92073d448976b199a6b21cd62e8..24c6f02a70decc1034bdba8b65f94293d9e6eb06 100644 (file)
                     <td class="visibility_cell" data-col-label="{{ _T("Permissions") }}">
                         <span data-prop-label="{{ _T("Permissions") }}" class="visible" title="{{ _T("Change '%field' permissions")|replace({'%field': field.label}) }}">
                             <select name="{{ fid }}_visible" id="{{ fid }}_visible" class="ui dropdown">
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::NOBODY') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::NOBODY') %} selected="selected"{% endif %}>{{ _T("Inaccessible") }}</option>
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::ADMIN') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::ADMIN') %} selected="selected"{% endif %}>{{ _T("Administrator") }}</option>
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::STAFF') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::STAFF') %} selected="selected"{% endif %}>{{ _T("Staff member") }}</option>
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::MANAGER') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::MANAGER') %} selected="selected"{% endif %}>{{ _T("Group manager") }}</option>
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::USER_READ') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::USER_READ') %} selected="selected"{% endif %}>{{ _T("Read only") }}</option>
-                                <option value="{{ constant('Galette\\Entity\\FieldsConfig::USER_WRITE') }}"{% if field.visible == constant('Galette\\Entity\\FieldsConfig::USER_WRITE') %} selected="selected"{% endif %}>{{ _T("Read/Write") }}</option>
+                                {% for key, value in perm_names %}
+                                    <option value="{{ key }}"{% if key == field.visible %} selected="selected"{% endif %}>{{ value }}</option>
+                                {% endfor %}
                             </select>
                         </span>
                     </td>
index df71c29883540cdbf9b090da962f4635b97f5cea..f74868418e0f4396f68f155ac3ec6964eefe11ab 100644 (file)
@@ -47,7 +47,7 @@
                 <tr>
                     <td data-scope="id" class="collapsing">{{ field.getIndex() }}</td>
                     <td class="left" data-scope="row">{{ field.getName()|escape }}</td>
-                    <td class="left" data-col-label="{{ _T("Permissions") }}">{{ field.getPermName() }}</td>
+                    <td class="left" data-col-label="{{ _T("Permissions") }}">{{ field.getPermissionName() }}</td>
                     <td class="left" data-col-label="{{ _T("Type") }}">{{ field.getTypeName() }}</td>
                     <td data-col-label="{{ _T("Required") }}">
     {% if field.getType != 0 %}
index 5e2744e0905ce279e5db9332e676d55621c4ca5d..7a4c1b97ae5717d1c6b917ea77bacd6f25dacc25 100644 (file)
@@ -38,7 +38,7 @@
                     <label for="field_perm">{{ _T("Permissions:") }}</label>
                     <select name="field_perm" id="field_perm" class="ui dropdown">
                         {% for key, value in perm_names %}
-                            <option value="{{ key }}"{% if key == df.getPerm() %} selected="selected"{% endif %}>{{ value }}</option>
+                            <option value="{{ key }}"{% if key == df.getPermission() %} selected="selected"{% endif %}>{{ value }}</option>
                         {% endfor %}
                     </select>
                 </div>
                     <select name="field_perm" id="field_perm" class="ui dropdown">
                         {% set perm = 0 %}
                         {% if df is defined %}
-                            {% set perm = df.getPerm() %}
+                            {% set perm = df.getPermission() %}
                         {% endif %}
                         {% for key, value in perm_names %}
                             <option value="{{ key }}"{% if key == perm %} selected="selected"{% endif %}>{{ value }}</option>
index 4214b313bd6fb3ff75b93d9dd218cad9d44ba37e..f59bfee52c43439c0f6c14059353402791df5785 100644 (file)
@@ -96,7 +96,7 @@ class Boolean extends TestCase
         $has_s = $this->bool->hasSize();
         $this->assertFalse($has_s);
 
-        $perms = $this->bool->getPerm();
+        $perms = $this->bool->getPermission();
         $this->assertNull($perms);
 
         $width = $this->bool->getWidth();
index e66a36dbc5bf4802ffac512071fe49f7dc535aa6..e71fcd6294af888603814710eedfba624040d049 100644 (file)
@@ -96,7 +96,7 @@ class Choice extends TestCase
         $has_s = $this->choice->hasSize();
         $this->assertFalse($has_s);
 
-        $perms = $this->choice->getPerm();
+        $perms = $this->choice->getPermission();
         $this->assertNull($perms);
 
         $width = $this->choice->getWidth();
index ab14e16430d7effa874b5a3038a696a08afb98d2..e81640e1066f1e027287c34980aca18ab4cd5015 100644 (file)
@@ -96,7 +96,7 @@ class Date extends TestCase
         $has_s = $this->date->hasSize();
         $this->assertFalse($has_s);
 
-        $perms = $this->date->getPerm();
+        $perms = $this->date->getPermission();
         $this->assertNull($perms);
 
         $width = $this->date->getWidth();
index 5d7aac72a275b8fb77070ed6bd0ddfae19af5441..984fc71e492a1b6be93531d15ef203bf459d5478 100644 (file)
@@ -78,7 +78,7 @@ class DynamicField extends TestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic text field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::TEXT,
             'field_required'    => true,
             'field_repeat'      => 1
@@ -138,47 +138,39 @@ class DynamicField extends TestCase
      */
     public static function permsProvider(): array
     {
-        return [
-            [
-                'perm' => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
-                'name' => "User, read/write"
-            ],
-            [
-                'perm' => \Galette\DynamicFields\DynamicField::PERM_STAFF,
-                'name' => "Staff member"
-            ],
-            [
-                'perm' => \Galette\DynamicFields\DynamicField::PERM_ADMIN,
-                'name' => "Administrator"
-            ],
-            [
-                'perm' => \Galette\DynamicFields\DynamicField::PERM_MANAGER,
-                'name' => "Group manager"
-            ],
-            [
-                'perm' => \Galette\DynamicFields\DynamicField::PERM_USER_READ,
-                'name' => "User, read only"
-            ]
-        ];
+        $list = \Galette\DynamicFields\DynamicField::getPermissionsList();
+        $perms = [];
+        foreach ($list as $perm => $name) {
+            $perms[] = [
+                'perm' => $perm,
+                'name' => $name
+            ];
+        }
+        return $perms;
     }
 
     /**
-     * Test getPermsNames
+     * Test getPermissionsList
      *
      * @return void
      */
-    public function testGetPermsNames()
+    public function testGetPermissionsList()
     {
         $expected = [];
         foreach (self::permsProvider() as $perm) {
             $expected[$perm['perm']] = $perm['name'];
         }
 
-        $this->assertSame($expected, \Galette\DynamicFields\DynamicField::getPermsNames());
+        $this->assertArrayNotHasKey(
+            \Galette\Entity\FieldsConfig::ALL,
+            \Galette\DynamicFields\DynamicField::getPermissionsList()
+        );
+
+        $this->assertSame($expected, \Galette\DynamicFields\DynamicField::getPermissionsList());
     }
 
     /**
-     * Tets getPermName
+     * Test getPermissionName
      *
      * @param integer $perm Permission
      * @param string  $name Name
@@ -187,7 +179,7 @@ class DynamicField extends TestCase
      *
      * @return void
      */
-    public function testGetPermName(int $perm, string $name)
+    public function testGetPermissionName(int $perm, string $name)
     {
         $field_data = [
             'form_name'         => 'adh',
@@ -208,7 +200,7 @@ class DynamicField extends TestCase
             )
         );
         $this->assertTrue($stored);
-        $this->assertSame($name, $df->getPermName());
+        $this->assertSame($name, $df->getPermissionName());
     }
 
     /**
@@ -285,7 +277,7 @@ class DynamicField extends TestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::CHOICE,
             'field_required'    => false,
             'field_repeat'      => null,
@@ -323,7 +315,7 @@ class DynamicField extends TestCase
         $values = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::CHOICE,
             'field_required'    => false,
             'field_repeat'      => null,
@@ -385,7 +377,7 @@ class DynamicField extends TestCase
         $values = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::TEXT,
             'field_required'    => false,
             'field_repeat'      => null
@@ -419,7 +411,7 @@ class DynamicField extends TestCase
         $values = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::LINE,
             'field_required'    => false,
             'field_repeat'      => null
@@ -484,7 +476,7 @@ class DynamicField extends TestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'A first text field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::TEXT,
             'field_required'    => true,
             'field_repeat'      => 1
@@ -575,7 +567,7 @@ class DynamicField extends TestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::CHOICE,
             'field_required'    => false,
             'field_repeat'      => null,
@@ -620,7 +612,7 @@ class DynamicField extends TestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'A first text field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::TEXT,
             'field_information' => '<p>This is an important information.</p><p>And here an xss...  <img src=img.png onerror=alert(1) /></p>'
         ];
index 08474093cbbef2e0c06a369aaf7358eaeb26f40f..4cb0247595fe66d902f0640f7c00236792310452 100644 (file)
@@ -96,7 +96,7 @@ class File extends TestCase
         $has_s = $this->file->hasSize();
         $this->assertTrue($has_s);
 
-        $perms = $this->file->getPerm();
+        $perms = $this->file->getPermission();
         $this->assertNull($perms);
 
         $width = $this->file->getWidth();
index 2dd201cff2ef181f12dda8d4ce2aae4040c98934..16f77787f27430bea49a6c738c4c062bfb56ec7e 100644 (file)
@@ -96,7 +96,7 @@ class Line extends TestCase
         $has_s = $this->line->hasSize();
         $this->assertTrue($has_s);
 
-        $perms = $this->line->getPerm();
+        $perms = $this->line->getPermission();
         $this->assertNull($perms);
 
         $width = $this->line->getWidth();
index 6c68f906bf4c509c15e3d191303d545736af17ec..4d5470901bf50637d79eb5a9daba00804935b789 100644 (file)
@@ -96,7 +96,7 @@ class Separator extends TestCase
         $has_s = $this->separator->hasSize();
         $this->assertFalse($has_s);
 
-        $perms = $this->separator->getPerm();
+        $perms = $this->separator->getPermission();
         $this->assertNull($perms);
 
         $width = $this->separator->getWidth();
index 8a0f990717bc8c77c6d74d41fd2f509f930716d2..48883b22c241c94dd156374fbee753de2f8051aa 100644 (file)
@@ -96,7 +96,7 @@ class Text extends TestCase
         $has_s = $this->text->hasSize();
         $this->assertFalse($has_s);
 
-        $perms = $this->text->getPerm();
+        $perms = $this->text->getPermission();
         $this->assertNull($perms);
 
         $width = $this->text->getWidth();
index a5495ae0be67f7eca3d7327ca101c1836748b551..e634f863a0bd124dfd34854d7d13e37866455259 100644 (file)
@@ -496,4 +496,15 @@ class FieldsConfig extends TestCase
 
         $this->assertCount(2, $elements['hiddens']);
     }
+
+    /**
+     * Test permissions list
+     *
+     * @return void
+     */
+    public function testGetPermissionsList(): void
+    {
+        $list = \Galette\Entity\FieldsConfig::getPermissionsList();
+        $this->assertArrayNotHasKey(\Galette\Entity\FieldsConfig::ALL, $list);
+    }
 }
index 8016826db493023382eff74465dbd426f884bf2e..aa2443988beb75dc32b0c8254bf1457f7e2c3a16 100644 (file)
@@ -234,7 +234,7 @@ class PdfModel extends GaletteTestCase
         $field_data = [
             'form_name'        => 'adh',
             'field_name'        => 'Dynamic text field',
-            'field_perm'        => DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => DynamicField::TEXT,
             'field_required'    => 1,
             'field_repeat'      => 1
@@ -259,7 +259,7 @@ class PdfModel extends GaletteTestCase
             'form_name'         => 'contrib',
             'field_form'        => 'contrib',
             'field_name'        => 'Dynamic date field',
-            'field_perm'        => DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => DynamicField::DATE,
             'field_required'    => 1,
             'field_repeat'      => 1
index b3e5c97360ef5b0371216feb8f1f30ddce135d7d..3dda85b98bf1935ad87ee85d5e3ac4281207d7b4 100644 (file)
@@ -21,6 +21,7 @@
 
 namespace Galette\IO\test\units;
 
+use Galette\Entity\FieldsConfig;
 use PHPUnit\Framework\TestCase;
 use Galette\Entity\Adherent;
 use Galette\DynamicFields\DynamicField;
@@ -310,7 +311,7 @@ class CsvIn extends GaletteTestCase
         $field_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic text field',
-            'field_perm'        => DynamicField::PERM_USER_WRITE,
+            'field_perm'        => FieldsConfig::USER_WRITE,
             'field_type'        => DynamicField::TEXT,
             'field_required'    => 1,
             'field_repeat'      => 1
@@ -409,7 +410,7 @@ class CsvIn extends GaletteTestCase
         $cfield_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic choice field',
-            'field_perm'        => DynamicField::PERM_USER_WRITE,
+            'field_perm'        => FieldsConfig::USER_WRITE,
             'field_type'        => DynamicField::CHOICE,
             'field_required'    => 0,
             'field_repeat'      => 1,
@@ -476,7 +477,7 @@ class CsvIn extends GaletteTestCase
         $cfield_data = [
             'form_name'         => 'adh',
             'field_name'        => 'Dynamic date field',
-            'field_perm'        => DynamicField::PERM_USER_WRITE,
+            'field_perm'        => FieldsConfig::USER_WRITE,
             'field_type'        => DynamicField::DATE,
             'field_required'    => 0,
             'field_repeat'      => 1
index 75e0745adcb3a2c718ac0106e4a8ce8afba714d2..6d9b58488c955d22130d510a5493d6c8609be7b9 100644 (file)
@@ -621,7 +621,7 @@ class Members extends GaletteTestCase
         $field_data = [
             'form_name'         => 'contrib',
             'field_name'        => 'Dynamic text field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::TEXT,
             'field_required'    => 1,
             'field_repeat'      => 1
@@ -651,7 +651,7 @@ class Members extends GaletteTestCase
         $field_data = [
             'form_name'         => 'contrib',
             'field_name'        => 'Dynamic choice field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::CHOICE,
             'field_required'    => 0,
             'field_repeat'      => 1,
@@ -679,7 +679,7 @@ class Members extends GaletteTestCase
         $field_data = [
             'form_name'         => 'contrib',
             'field_name'        => 'Dynamic date field',
-            'field_perm'        => \Galette\DynamicFields\DynamicField::PERM_USER_WRITE,
+            'field_perm'        => \Galette\Entity\FieldsConfig::USER_WRITE,
             'field_type'        => \Galette\DynamicFields\DynamicField::DATE,
             'field_required'    => 0,
             'field_repeat'      => 1