Overview
Comment:+ Gestion des catégories de membres + Ajout de membre
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 2698edc3daed9c837ef71a384be14091bc77863f
User & Date: bohwaz on 2011-11-18 04:00:33
Other Links: manifest | tags
Context
2011-11-18
05:00
Logos et autres check-in: a4b06c698a user: bohwaz tags: trunk
04:00
+ Gestion des catégories de membres + Ajout de membre check-in: 2698edc3da user: bohwaz tags: trunk
03:57
Nouveaux facilitateurs de requête check-in: 1f8df74dab user: bohwaz tags: trunk
Changes

Modified DB_SCHEMA from [f4ec867b9c] to [62b90e11a1].

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

-- Droits affectés à chaque catégorie de membres
CREATE TABLE membres_categories_droits (
    id_categorie INTEGER,
    droit INTEGER
);

INSERT INTO membres_categories VALUES (1, 'Membre simple', '', 20);
INSERT INTO membres_categories VALUES (2, 'Membre tarif réduit', 'Chômeur / étudiant / RSA / etc.', 10);
INSERT INTO membres_categories VALUES (3, 'Membre du CA', '', -1);
INSERT INTO membres_categories VALUES (4, 'Membre du bureau', '', 0);

INSERT INTO membres_categories_droits VALUES (1, 'connexion');
INSERT INTO membres_categories_droits VALUES (1, 'wiki_lecture');

INSERT INTO membres_categories_droits VALUES (2, 'connexion');
INSERT INTO membres_categories_droits VALUES (2, 'wiki_lecture');

INSERT INTO membres_categories_droits VALUES (3, 'connexion');
INSERT INTO membres_categories_droits VALUES (3, 'wiki_lecture');
INSERT INTO membres_categories_droits VALUES (3, 'wiki_ecriture');

INSERT INTO membres_categories_droits VALUES (4, 'connexion');
INSERT INTO membres_categories_droits VALUES (4, 'wiki_lecture');
INSERT INTO membres_categories_droits VALUES (4, 'wiki_ecriture');
INSERT INTO membres_categories_droits VALUES (4, 'comptabilite');
INSERT INTO membres_categories_droits VALUES (4, 'gestion_membres');
INSERT INTO membres_categories_droits VALUES (4, 'gestion_membres');

-- Membres de l'asso
CREATE TABLE membres (
    id INTEGER PRIMARY KEY,
    id_categorie INTEGER,

    -- Connexion
    passe TEXT,







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







20
21
22
23
24
25
26






















27
28
29
30
31
32
33

-- Droits affectés à chaque catégorie de membres
CREATE TABLE membres_categories_droits (
    id_categorie INTEGER,
    droit INTEGER
);























-- Membres de l'asso
CREATE TABLE membres (
    id INTEGER PRIMARY KEY,
    id_categorie INTEGER,

    -- Connexion
    passe TEXT,
70
71
72
73
74
75
76


77
78
79
80
81
82
83

    date_inscription TEXT,
    date_connexion TEXT,

    -- Dernière cotisation enregistrée
    date_cotisation TEXT
);



--
-- COMPTA
--

CREATE TABLE compta_categories (
    id INTEGER PRIMARY KEY,







>
>







48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

    date_inscription TEXT,
    date_connexion TEXT,

    -- Dernière cotisation enregistrée
    date_cotisation TEXT
);

CREATE INDEX membres_id_categorie ON membres (id_categorie);

--
-- COMPTA
--

CREATE TABLE compta_categories (
    id INTEGER PRIMARY KEY,
107
108
109
110
111
112
113





114
115
116
117
118
119
120
    description TEXT,

    id_compte INTEGER,
    id_categorie INTEGER,
    id_auteur INTEGER
);






--
-- WIKI
--

CREATE TABLE wiki_pages (
    id INTEGER PRIMARY KEY,
    titre TEXT,







>
>
>
>
>







87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
    description TEXT,

    id_compte INTEGER,
    id_categorie INTEGER,
    id_auteur INTEGER
);


CREATE INDEX compta_operations_id_compte ON compta_operations (id_compte);
CREATE INDEX compta_operations_id_categorie ON compta_operations (id_categorie);
CREATE INDEX compta_operations_id_auteur ON compta_operations (id_auteur);

--
-- WIKI
--

CREATE TABLE wiki_pages (
    id INTEGER PRIMARY KEY,
    titre TEXT,
130
131
132
133
134
135
136
137
138
139



140
141
142
143
144
145


    suivi INTEGER, -- 0/1

    contenu TEXT,
    modification TEXT, -- Description des modifications effectuées

    chiffrement INTEGER, -- 0/1

    PRIMARY KEY(id_page, numero)
);




CREATE TABLE wiki_fichiers (
    id INTEGER PRIMARY KEY,
    id_page INTEGER,
    nom TEXT,
    hash TEXT
);









|


>
>
>






>
>
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
    suivi INTEGER, -- 0/1

    contenu TEXT,
    modification TEXT, -- Description des modifications effectuées

    chiffrement INTEGER, -- 0/1

    PRIMARY KEY(id_page, revision)
);

CREATE INDEX wiki_revisions_id_page ON wiki_revisions (id_page);
CREATE INDEX wiki_revisions_id_auteur ON wiki_revisions (id_auteur, suivi);

CREATE TABLE wiki_fichiers (
    id INTEGER PRIMARY KEY,
    id_page INTEGER,
    nom TEXT,
    hash TEXT
);

CREATE INDEX wiki_fichiers_id_page ON wiki_fichiers (id_page);

Modified include/class.config.php from [d82b85b630] to [21aeaf7eb3].

30
31
32
33
34
35
36

37
38
39
40
41
42
43
            'adresse_asso'          =>  $string,
            'email_asso'            =>  $string,
            'site_asso'             =>  $string,

            'email_envoi_automatique'=> $string,

            'champs_obligatoires'   =>  $array,


            'categorie_dons'        =>  $int,
            'categorie_cotisations' =>  $int,
        );

        $db = Garradin_DB::getInstance();








>







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
            'adresse_asso'          =>  $string,
            'email_asso'            =>  $string,
            'site_asso'             =>  $string,

            'email_envoi_automatique'=> $string,

            'champs_obligatoires'   =>  $array,
            'categorie_membres'     =>  $int,

            'categorie_dons'        =>  $int,
            'categorie_cotisations' =>  $int,
        );

        $db = Garradin_DB::getInstance();

Modified include/class.membres.php from [94deebcaa3] to [328c22ff92].

1
2
3
4
5
6
7
8
9
10
<?php

class Garradin_Membres extends Garradin_DB
{
    const DROIT_CONNEXION = 1;
    const DROIT_INSCRIPTION = 2;

    const DROIT_WIKI_LIRE = 10;
    const DROIT_WIKI_ECRIRE = 11;
    const DROIT_WIKI_FICHIERS = 12;


|







1
2
3
4
5
6
7
8
9
10
<?php

class Garradin_Membres
{
    const DROIT_CONNEXION = 1;
    const DROIT_INSCRIPTION = 2;

    const DROIT_WIKI_LIRE = 10;
    const DROIT_WIKI_ECRIRE = 11;
    const DROIT_WIKI_FICHIERS = 12;
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117



















118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
        $_SESSION = array();
        setcookie(session_name(), '', 0, '/');
        return true;
    }

    public function _checkFields($data)
    {
        $mandatory = Config::getInstance()->get('champs_obligatoires');

        foreach ($mandatory as $field)
        {
            if (!array_key_exists($field, $data) || !trim($data[$field]))
            {
                throw new UserException('Le champ \''.$field.'\' ne peut rester vide.');
            }
        }

        if (isset($data['email']) && !filter_var($data['email'], FILTER_VALIDATE_EMAIL))
        {
            throw new UserException('Adresse e-mail \''.$field.'\' invalide.');
        }

        return true;
    }

    public function add($data = array())
    {
        $this->_checkFields($data);
        // INSERT SQL



















    }

    public function edit($id, $data = array())
    {
        $this->_checkFields($data);
        // UPDATE SQL
    }

    public function remove($id)
    {
    }

    public function search($query)
    {
    }

    public function getList($page = 1)
    {
    }

    public function
}

?>







|




















|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




















<



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156

157
158
159
        $_SESSION = array();
        setcookie(session_name(), '', 0, '/');
        return true;
    }

    public function _checkFields($data)
    {
        $mandatory = Garradin_Config::getInstance()->get('champs_obligatoires');

        foreach ($mandatory as $field)
        {
            if (!array_key_exists($field, $data) || !trim($data[$field]))
            {
                throw new UserException('Le champ \''.$field.'\' ne peut rester vide.');
            }
        }

        if (isset($data['email']) && !filter_var($data['email'], FILTER_VALIDATE_EMAIL))
        {
            throw new UserException('Adresse e-mail \''.$field.'\' invalide.');
        }

        return true;
    }

    public function add($data = array())
    {
        $this->_checkFields($data);

        if (!trim($data['passe']))
        {
            $data['passe'] = $this->_hashPassword($data['passe']);
        }

        if (!isset($data['id_categorie']))
        {
            $data['id_categorie'] = Garradin_Config::getInstance()->get('categorie_membres');
        }

        $db = Garradin_DB::getInstance();

        return $db->simpleExec('INSERT INTO membres
            (id_categorie, passe, nom, email, adresse, code_postal, ville, pays, telephone,
            date_anniversaire, details, date_inscription, date_connexion, date_cotisation)
            VALUES
            (:id_categorie, :passe, :nom, :email, :adresse, :code_postal, :ville, :pays, :telephone,
            :date_anniversaire, :details, :date_inscription, :date_connexion, :date_cotisation);',
            $data);
    }

    public function edit($id, $data = array())
    {
        $this->_checkFields($data);
        // UPDATE SQL
    }

    public function remove($id)
    {
    }

    public function search($query)
    {
    }

    public function getList($page = 1)
    {
    }


}

?>

Added include/class.membres_categories.php version [4d0bffdf85].























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php

require_once GARRADIN_ROOT . '/include/class.membres.php';

class Garradin_Membres_Categories
{
    public function add($data)
    {
        if (!isset($data['nom']) || !trim($data['nom']))
        {
            throw new UserException('Le nom ne peut rester vide.');
        }

        if (!isset($data['montant_cotisation']) || !is_numeric($data['montant_cotisation']))
        {
            throw new UserException('Le montant de cotisation doit être un chiffre.');
        }

        $db = Garradin_DB::getInstance();

        return $db->simpleExec(
            'INSERT INTO membres_categories (nom, description, montant_cotisation, duree_cotisation) VALUES (?, ?, ?, ?);',
            $data['nom'],
            !empty($data['description']) ? trim($data['description']) : '',
            (float) $data['montant_cotisation'],
            12
        );
    }

    public function edit($id, $data)
    {
        if (!isset($data['nom']) || !trim($data['nom']))
        {
            throw new UserException('Le nom ne peut rester vide.');
        }

        if (!isset($data['montant_cotisation']) || !is_numeric($data['montant_cotisation']))
        {
            throw new UserException('Le montant de cotisation doit être un chiffre.');
        }

        $db = Garradin_DB::getInstance();

        return $db->simpleExec(
            'UPDATE membres_categories SET nom = ?, description = ?, montant_cotisation = ?, duree_cotisation = ?) WHERE id = ?',
            $data['nom'],
            !empty($data['description']) ? trim($data['description']) : '',
            (float) $data['montant_cotisation'],
            12,
            (int) $id
        );
    }

    public function get($id)
    {
        $db = Garradin_DB::getInstance();

        return $db->simpleQuerySingle('SELECT * FROM membres_categories WHERE id = ?;',
            true, (int) $id);
    }

    public function remove($id)
    {
        $db = Garradin_DB::getInstance();

        if ($db->simpleQuerySingle('SELECT 1 FROM membres WHERE id_categorie = ?;', false, (int)$id))
        {
            throw new UserException('La catégorie contient encore des membres, il n\'est pas possible de la supprimer.');
        }

        return $db->simpleExec('DELETE FROM membres_categories WHERE id = ?;', (int) $id);
    }
}

?>

Modified include/init.php from [d630745c30] to [90245af837].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

/*
 * Tests : vérification que les conditions pour s'exécuter sont remplies
 */

$tests = array(
    'Version de PHP installée inférieure à 5.3'
        =>  version_compare(phpversion(), '5.3', '<'),
    'Algorithme Blowfish de hashage de mot de passe non-présent'
        =>  !defined('CRYPT_BLOWFISH') || !CRYPT_BLOWFISH,
    'Module de bases de données SQLite3 n\'est pas installé'
        =>  !class_exists('SQLite3'),
    'Dummy' => true,
);

$fail = false;

if (PHP_SAPI != 'cli' && array_sum($tests) > 0)
    echo '<pre>';














|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

/*
 * Tests : vérification que les conditions pour s'exécuter sont remplies
 */

$tests = array(
    'Version de PHP installée inférieure à 5.3'
        =>  version_compare(phpversion(), '5.3', '<'),
    'Algorithme Blowfish de hashage de mot de passe non-présent'
        =>  !defined('CRYPT_BLOWFISH') || !CRYPT_BLOWFISH,
    'Module de bases de données SQLite3 n\'est pas installé'
        =>  !class_exists('SQLite3'),
    #'Dummy' => true,
);

$fail = false;

if (PHP_SAPI != 'cli' && array_sum($tests) > 0)
    echo '<pre>';

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
}

/*
 * Configuration globale
 */

define('GARRADIN_ROOT', dirname(__DIR__));
define('GARRADIN_DB_FILE', GARRADIN_ROOT . '/garradin_asso.db');
define('GARRADIN_DB_SCHEMA', GARRADIN_ROOT . '/DB_SCHEMA');

// Automagic URL discover
$path = substr(__DIR__ . '/www', strlen($_SERVER['DOCUMENT_ROOT']));
$path = (!empty($path[0]) && $path[0] != '/') ? '/' . $path : $path;
$path = (substr($path, -1) != '/') ? $path . '/' : $path;
define('LOCAL_URL', 'http' . (!empty($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $path);

/*
 * Gestion des erreurs et exceptions
 */

class UserException extends Garradin_Exception {};

error_reporting(E_ALL);

function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    // For @ ignored errors
    if (error_reporting() === 0) return;







|












|







38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
}

/*
 * Configuration globale
 */

define('GARRADIN_ROOT', dirname(__DIR__));
define('GARRADIN_DB_FILE', GARRADIN_ROOT . '/association.db');
define('GARRADIN_DB_SCHEMA', GARRADIN_ROOT . '/DB_SCHEMA');

// Automagic URL discover
$path = substr(__DIR__ . '/www', strlen($_SERVER['DOCUMENT_ROOT']));
$path = (!empty($path[0]) && $path[0] != '/') ? '/' . $path : $path;
$path = (substr($path, -1) != '/') ? $path . '/' : $path;
define('LOCAL_URL', 'http' . (!empty($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $path);

/*
 * Gestion des erreurs et exceptions
 */

class UserException extends LogicException {};

error_reporting(E_ALL);

function exception_error_handler($errno, $errstr, $errfile, $errline )
{
    // For @ ignored errors
    if (error_reporting() === 0) return;
86
87
88
89
90
91
92
93




94

    echo $error;
    exit;
}

set_error_handler("exception_error_handler");
set_exception_handler("exception_handler");





?>








>
>
>
>

86
87
88
89
90
91
92
93
94
95
96
97
98

    echo $error;
    exit;
}

set_error_handler("exception_error_handler");
set_exception_handler("exception_handler");

require_once GARRADIN_ROOT . '/include/class.db.php';
require_once GARRADIN_ROOT . '/include/class.config.php';


?>

Added www/index.php version [b30fdfba06].











>
>
>
>
>
1
2
3
4
5
<?php

require __DIR__ . '/../include/init.php';

?>