Overview
Comment:Process d'installation fonctionnel !
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 813042295e60e7a1f60db6be02ffa6f9f66d6f20
User & Date: bohwaz on 2011-11-22 01:50:37
Other Links: manifest | tags
Context
2011-12-11
02:05
Suggestion de passphrase quand c'est utile check-in: f89beea778 user: bohwaz tags: trunk
2011-11-22
01:50
Process d'installation fonctionnel ! check-in: 813042295e user: bohwaz tags: trunk
2011-11-21
18:51
On commence à faire fonctionner l'installation check-in: 99614456b7 user: bohwaz tags: trunk
Changes

Modified include/class.config.php from [97ebae433c] to [f37b17768a].

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
76
77
78
79
80
81
82
83
84
85
86
87







88
89
90
91
92


93
94
95
96
97
98
99

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

        $db = Garradin_DB::getInstance();

        $this->config = $db->queryAssociativeFetch('SELECT cle, valeur FROM config ORDER BY cle;');

        foreach ($this->config as $key=>&$value)
        {
            if (!array_key_exists($key, $this->fields_types))
            {
                throw new OutOfBoundsException('Le champ "'.$key.'" est inconnu.');
            }

            if (is_array($this->fields_types[$key]))
            {
                $value = json_decode($value, true);
            }
            else
            {
                settype($value, gettype($this->fields_types[$key]));
            }
        }
    }

    public function __destruct()
    {
        if (!empty($this->modified))
        {
            $this->save();
        }
    }

    public function save()
    {
        if (empty($this->modified))
            return true;

        $values = array();

        $db = Garradin_DB::getInstance();
        $db->exec('BEGIN;');

        foreach ($this->modified as $key=>$modified)
        {







            $db->simpleExec('INSERT OR REPLACE INTO config (cle, valeur) VALUES (?, ?);',
                $key, $this->config[$key]);
        }

        $db->exec('END;');



        return true;
    }

    public function get($key)
    {
        if (!array_key_exists($key, $this->config))







|










|












|















>
>
>
>
>
>
>

|



>
>







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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

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

        $db = Garradin_DB::getInstance();

        $this->config = $db->simpleStatementFetchAssoc('SELECT cle, valeur FROM config ORDER BY cle;');

        foreach ($this->config as $key=>&$value)
        {
            if (!array_key_exists($key, $this->fields_types))
            {
                throw new OutOfBoundsException('Le champ "'.$key.'" est inconnu.');
            }

            if (is_array($this->fields_types[$key]))
            {
                $value = explode(',', $value);
            }
            else
            {
                settype($value, gettype($this->fields_types[$key]));
            }
        }
    }

    public function __destruct()
    {
        if (!empty($this->modified))
        {
            //echo '<div style="color: red; background: #fff;">Il y a des champs modifiés non sauvés dans '.__CLASS__.' !</div>';
        }
    }

    public function save()
    {
        if (empty($this->modified))
            return true;

        $values = array();

        $db = Garradin_DB::getInstance();
        $db->exec('BEGIN;');

        foreach ($this->modified as $key=>$modified)
        {
            $value = $this->config[$key];

            if (is_array($value))
            {
                $value = implode(',', $value);
            }

            $db->simpleExec('INSERT OR REPLACE INTO config (cle, valeur) VALUES (?, ?);',
                $key, $value);
        }

        $db->exec('END;');

        $this->modified = array();

        return true;
    }

    public function get($key)
    {
        if (!array_key_exists($key, $this->config))
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
        {
            $value = (string) $value;
        }

        switch ($key)
        {
            case 'nom_asso':
            case 'adresse_asso':
            {
                if (!trim($value))
                {
                    throw new UserException('Le champ '.$key.' ne peut reste vide !');
                }
                break;
            }
            case 'email_asso':
            case 'email_envoi_automatique':
            {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL))
                {
                    throw new UserException('Adresse e-mail '.$key.' invalide.');
                }
                break;
            }
            case 'champs_obligatoires':
            {
                foreach ($value as $name)
                {







<



|








|







140
141
142
143
144
145
146

147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
        {
            $value = (string) $value;
        }

        switch ($key)
        {
            case 'nom_asso':

            {
                if (!trim($value))
                {
                    throw new UserException('Le nom de l\'association ne peut rester vide.');
                }
                break;
            }
            case 'email_asso':
            case 'email_envoi_automatique':
            {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL))
                {
                    throw new UserException('Adresse e-mail invalide.');
                }
                break;
            }
            case 'champs_obligatoires':
            {
                foreach ($value as $name)
                {
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
                }
                break;
            }
            default:
                break;
        }

        if ($value !== $this->config[$key])
        {
            $this->config[$key] = $value;
            $this->modified[$key] = true;
        }

        return true;
    }
}

?>







|










190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
                }
                break;
            }
            default:
                break;
        }

        if (!isset($this->config[$key]) || $value !== $this->config[$key])
        {
            $this->config[$key] = $value;
            $this->modified[$key] = true;
        }

        return true;
    }
}

?>

Modified include/class.db.php from [c38158224a] to [5931695276].

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    {
    }

    public function __construct()
    {
        $exists = file_exists(GARRADIN_DB_FILE) ? true : false;

        parent::__construct(GARRADIN_DB_FILE);

        if (!$exists)
        {
            $this->exec('BEGIN;');
            $this->exec(file_get_contents(GARRADIN_DB_SCHEMA));
            $this->exec('END;');
        }







|







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    {
    }

    public function __construct()
    {
        $exists = file_exists(GARRADIN_DB_FILE) ? true : false;

        parent::__construct(GARRADIN_DB_FILE, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);

        if (!$exists)
        {
            $this->exec('BEGIN;');
            $this->exec(file_get_contents(GARRADIN_DB_SCHEMA));
            $this->exec('END;');
        }
91
92
93
94
95
96
97













98
99
100
101
102
103
104
        return $statement->execute();
    }

    public function simpleStatementFetch($query, $mode = SQLITE3_BOTH)
    {
        return $this->_fetchResult($this->simpleStatement($query), $mode);
    }














    public function escapeAuto($value, $name = '')
    {
        $type = $this->_getArgType($value, $name);

        switch ($type)
        {







>
>
>
>
>
>
>
>
>
>
>
>
>







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
        return $statement->execute();
    }

    public function simpleStatementFetch($query, $mode = SQLITE3_BOTH)
    {
        return $this->_fetchResult($this->simpleStatement($query), $mode);
    }

    public function simpleStatementFetchAssoc($query)
    {
        $result = $this->simpleStatement($query);
        $out = array();

        while ($row = $result->fetchArray(SQLITE3_NUM))
        {
            $out[$row[0]] = $row[1];
        }

        return $out;
    }

    public function escapeAuto($value, $name = '')
    {
        $type = $this->_getArgType($value, $name);

        switch ($type)
        {
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
        }

        $res->finalize();
        unset($res, $row);

        return $out;
    }

    public function __destruct()
    {
        $this->close();
    }
}

?>







<
<
<
<
<



225
226
227
228
229
230
231





232
233
234
        }

        $res->finalize();
        unset($res, $row);

        return $out;
    }





}

?>

Modified include/class.membres.php from [328c22ff92] to [8f4a33e748].

16
17
18
19
20
21
22



23
24
25

26
27
28
29
30
31
32
    const DROIT_MEMBRE_ADMIN = 23;

    const DROIT_COMPTA_GESTION = 30;
    const DROIT_COMPTA_ADMIN = 31;

    protected function _getSalt($length)
    {



        return implode('',
            array_rand(
                shuffle(str_split('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')),

                $length)
        );
    }

    protected function _hashPassword($password)
    {
        $salt = '$2a$08$' . $this->_getSalt(22);







>
>
>


<
>







16
17
18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
35
    const DROIT_MEMBRE_ADMIN = 23;

    const DROIT_COMPTA_GESTION = 30;
    const DROIT_COMPTA_ADMIN = 31;

    protected function _getSalt($length)
    {
        $str = str_split('./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');
        shuffle($str);

        return implode('',
            array_rand(

                $str,
                $length)
        );
    }

    protected function _hashPassword($password)
    {
        $salt = '$2a$08$' . $this->_getSalt(22);
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
        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







|
















|







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
        return true;
    }

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

        if (!empty($data['passe']) && 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(\'now\'), NULL, NULL);',
            $data);
    }

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

Modified include/class.membres_categories.php from [f70747500c] to [e729145e71].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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.');
        }











|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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 de catégorie 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.');
        }

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
        }

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

    public function setAccess($cat)
    {
        for ($i = 1; $i <= func_num_args(); $i++)
        {
            $access = func_get_arg($i);
            if (!is_int($access))
            {
                throw new UnexpectedValueException($access . ' is not a valid access right');
            }








|







71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
        }

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

    public function setAccess($cat)
    {
        for ($i = 1; $i < func_num_args(); $i++)
        {
            $access = func_get_arg($i);
            if (!is_int($access))
            {
                throw new UnexpectedValueException($access . ' is not a valid access right');
            }

Modified include/init.php from [d55d1c56bc] to [e68cf2e9a8].

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
<?php

/*
 * 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('WWW_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;
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}











|








|
|
>
>
|







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
<?php

/*
 * 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(GARRADIN_ROOT . '/www', strlen($_SERVER['DOCUMENT_ROOT']));
$path = (!empty($path[0]) && $path[0] != '/') ? '/' . $path : $path;
$path = (substr($path, -1) != '/') ? $path . '/' : $path;
define('WWW_URL', 'http' . (!empty($_SERVER['HTTPS']) ? 's' : '') . '://' . $_SERVER['HTTP_HOST'] . $path);

/*
 * Gestion des erreurs et exceptions
 */

class UserException extends LogicException
{
}

error_reporting(-1);

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

Modified include/lib.utils.php from [cfe63c4d0f] to [e73296c958].

1
2
3
4


5
6
7
8
9
10
11
<?php

class utils
{


    static protected $country_list = null;

    static private $french_date_names = array(
        'January'=>'Janvier', 'February'=>'Février', 'March'=>'Mars', 'April'=>'Avril', 'May'=>'Mai',
        'June'=>'Juin', 'July'=>'Juillet', 'August'=>'Août', 'September'=>'Septembre', 'October'=>'Octobre',
        'November'=>'Novembre', 'December'=>'Décembre', 'Monday'=>'Lundi', 'Tuesday'=>'Mardi', 'Wednesday'=>'Mercredi',
        'Thursday'=>'Jeudi','Friday'=>'Vendredi','Saturday'=>'Samedi','Sunday'=>'Dimanche',




>
>







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

class utils
{
    static public $random_hash = 'abcd';

    static protected $country_list = null;

    static private $french_date_names = array(
        'January'=>'Janvier', 'February'=>'Février', 'March'=>'Mars', 'April'=>'Avril', 'May'=>'Mai',
        'June'=>'Juin', 'July'=>'Juillet', 'August'=>'Août', 'September'=>'Septembre', 'October'=>'Octobre',
        'November'=>'Novembre', 'December'=>'Décembre', 'Monday'=>'Lundi', 'Tuesday'=>'Mardi', 'Wednesday'=>'Mercredi',
        'Thursday'=>'Jeudi','Friday'=>'Vendredi','Saturday'=>'Samedi','Sunday'=>'Dimanche',
142
143
144
145
146
147
148


149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166





167
168
169
170
171
172
173

        if (empty($_SESSION['csrf'][$key]))
            return false;

        if ($_SESSION['csrf'][$key] != $hash)
            return false;



        return true;
    }

    static public function CSRF_field_name($key)
    {
        return 'gecko/'.base64_encode(sha1($key, true));
    }

    static public function generatePassword($length, $chars='abcdefghijklmnopqrstuvwxyz1234567890')
    {
        $string = '';
        for ($i = 0; $i < $length; $i++)
        {
            $pos = rand(0, strlen($chars)-1);
            $string .= $chars{$pos};
        }
        return $string;
    }






    static public function getIP()
    {
        if (!empty($_SERVER['REMOTE_ADDR']))
            return $_SERVER['REMOTE_ADDR'];
        return '';
    }







>
>


















>
>
>
>
>







144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

        if (empty($_SESSION['csrf'][$key]))
            return false;

        if ($_SESSION['csrf'][$key] != $hash)
            return false;

        unset($_SESSION['csrf'][$key]);

        return true;
    }

    static public function CSRF_field_name($key)
    {
        return 'gecko/'.base64_encode(sha1($key, true));
    }

    static public function generatePassword($length, $chars='abcdefghijklmnopqrstuvwxyz1234567890')
    {
        $string = '';
        for ($i = 0; $i < $length; $i++)
        {
            $pos = rand(0, strlen($chars)-1);
            $string .= $chars{$pos};
        }
        return $string;
    }

    static public function post($key)
    {
        return isset($_POST[$key]) ? $_POST[$key] : '';
    }

    static public function getIP()
    {
        if (!empty($_SERVER['REMOTE_ADDR']))
            return $_SERVER['REMOTE_ADDR'];
        return '';
    }
261
262
263
264
265
266
267
268


269
        if ($current < $total) {
            $out[] = array('id' => $current + 1, 'label' => 'Page suivante' . ' »', 'class' => 'next', 'accesskey' => 'z');
        }

        return $out;
    }
}



?>








>
>

270
271
272
273
274
275
276
277
278
279
280
        if ($current < $total) {
            $out[] = array('id' => $current + 1, 'label' => 'Page suivante' . ' »', 'class' => 'next', 'accesskey' => 'z');
        }

        return $out;
    }
}

utils::$random_hash = uniqid();

?>

Modified include/template.php from [d2f6f7e2f5] to [b6822c595b].

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










21
<?php

require_once GARRADIN_ROOT . '/include/template_lite/class.template.php';

$tpl = new Template_Lite;

$tpl->cache = false;

$tpl->compile_dir = GARRADIN_ROOT . '/cache/compiled';
$tpl->template_dir = GARRADIN_ROOT . '/templates';

$tpl->compile_check = true;

$tpl->reserved_template_varname = 'smarty';

$tpl->assign('www_url', WWW_URL);
$tpl->assign('self_url', utils::getSelfUrl());

$tpl->assign('is_logged', false);











?>













|






>
>
>
>
>
>
>
>
>
>

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
<?php

require_once GARRADIN_ROOT . '/include/template_lite/class.template.php';

$tpl = new Template_Lite;

$tpl->cache = false;

$tpl->compile_dir = GARRADIN_ROOT . '/cache/compiled';
$tpl->template_dir = GARRADIN_ROOT . '/templates';

$tpl->compile_check = true;

$tpl->reserved_template_varname = 'tpl';

$tpl->assign('www_url', WWW_URL);
$tpl->assign('self_url', utils::getSelfUrl());

$tpl->assign('is_logged', false);

function tpl_csrf_field($params)
{
    $name = utils::CSRF_field_name($params['key']);
    $value = utils::CSRF_create($params['key']);

    return '<input type="hidden" name="'.$name.'" value="'.$value.'" />';
}

$tpl->register_function('csrf_field', 'tpl_csrf_field');

?>

Modified templates/install.tpl from [388b742969] to [7a6231c691].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16








17
18









































19
20
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Garradin - Installation</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="{$www_url}styles/admin.css" media="screen,projection,handheld" />
</head>

<body>

<h1>Installation de Garradin</h1>

{if $disabled}
    <p class="error">Garradin est déjà installé.</p>
{else}








{/if}










































</body>
</html>
|


|


|









>
>
>
>
>
>
>
>
|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta charset="utf-8" />
    <title>Garradin - Installation</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="{$www_url}style/admin.css" media="screen,projection,handheld" />
</head>

<body>

<h1>Installation de Garradin</h1>

{if $disabled}
    <p class="error">Garradin est déjà installé.</p>
{else}
    <p class="intro">
        Bienvenue dans Garradin !
        Veuillez remplir les quelques informations suivantes pour terminer
        l'installation.
    </p>

    {if !empty($error)}
        <p class="error">{$error|escape}</p>
    {/if}

    <form method="post" action="{$self_url}">

    <fieldset>
        <legend>Informations sur l'association</legend>
        <dl>
            <dt><label for="f_nom_asso">Nom</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="text" name="nom_asso" id="f_nom_asso" value="{if !empty($tpl.post.nom_asso)}{$tpl.post.nom_asso|escape}{/if}" /></dd>
            <dt><label for="f_email_asso">Adresse E-Mail</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="email" name="email_asso" id="f_email_asso" value="{if !empty($tpl.post.email_asso)}{$tpl.post.email_asso|escape}{/if}" /></dd>
            <dt><label for="f_adresse_asso">Adresse postale</label></dt>
            <dd><textarea cols="50" rows="5" name="adresse_asso" id="f_adresse_asso">{if !empty($tpl.post.adresse_asso)}{$tpl.post.adresse_asso|escape}{/if}</textarea></dd>
            <dt><label for="f_site_asso">Site web</label></dt>
            <dd><input type="url" name="site_asso" id="f_site_asso" value="{if !empty($tpl.post.site_asso)}{$tpl.post.site_asso|escape}{/if}" /></dd>
        </dl>
    </fieldset>

    <fieldset>
        <legend>Informations sur le premier membre</legend>
        <dl>
            <dt><label for="f_nom_membre">Nom et prénom</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="text" name="nom_membre" id="f_nom_membre" value="{if !empty($tpl.post.nom_membre)}{$tpl.post.nom_membre|escape}{/if}" /></dd>
            <dt><label for="f_cat_membre">Catégorie du membre</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd class="tip">Par exemple : bureau, conseil d'administration, présidente, trésorier, etc.</dd>
            <dd><input type="text" name="cat_membre" id="f_cat_membre" value="{if !empty($tpl.post.cat_membre)}{$tpl.post.cat_membre|escape}{/if}" /></dd>
            <dt><label for="f_email_membre">Adresse E-Mail</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="email" name="email_membre" id="f_email_membre" value="{if !empty($tpl.post.email_membre)}{$tpl.post.email_membre|escape}{/if}" /></dd>
            <dt><label for="f_passe_membre">Mot de passe</label> <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="password" name="passe_membre" id="f_passe_membre" value="{if !empty($tpl.post.passe_membre)}{$tpl.post.passe_membre|escape}{/if}" /></dd>
            <dt><label for="f_repasse_membre">Encore le mot de passe</label> (vérification) <b title="(Champ obligatoire)">obligatoire</b></dt>
            <dd><input type="password" name="repasse_membre" id="f_repasse_membre" value="{if !empty($tpl.post.repasse_membre)}{$tpl.post.repasse_membre|escape}{/if}" /></dd>
        </dl>
    </fieldset>

    <p class="submit">
        {csrf_field key="install"}
        <input type="submit" name="save" value="Terminer l'installation &rarr;" />
    </p>

    </form>
{/if}

</body>
</html>

Modified www/admin/install.php from [078ce1a2a3] to [ba4677e9dc].

56
57
58
59
60
61
62




63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82


83



84
85


86
87



88

















89
90
91
92
93
94
95
    $tpl->assign('disabled', false);
    $error = false;

    if (!empty($_POST['save']))
    {
        if (!utils::CSRF_check('install'))
        {




            $error = 'OTHER';
        }
        else
        {
            try {
                require_once GARRADIN_ROOT . '/include/class.db.php';
                require_once GARRADIN_ROOT . '/include/class.config.php';

                $config = Garradin_Config::getInstance();
                $config->set('nom_asso', $_POST['nom_asso']);
                $config->set('adresse_asso', $_POST['nom_asso']);
                $config->set('email_asso', $_POST['email_asso']);
                $config->set('site_asso', $_POST['site_asso']);
                $config->set('email_envoi_automatique', $_POST['email_asso']);
                $config->set('champs_obligatoires', array('passe', 'email', 'nom'));

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

                $cats = new Garradin_Membres_Categories;
                $id = $cats->add(array('nom' => 'Membres actifs', 'montant_cotisation' => 10));


                $cats->setAccess($id, Membres::DROIT_CONNEXION, Membres::DROIT_WIKI_LIRE, Membres::DROIT_WIKI_ECRIRE);



                $config->set('categorie_membres', $id);



                $id = $membres_cats->add(array('nom' => 'Conseil d\'administration', 'montant_cotisation' => 0));
                $cats->setAccess($id, Membres::DROIT_CONNEXION, Membres::DROIT_WIKI_ADMIN,



                    Membres::DROIT_MEMBRES_ADMIN, Membres::DROIT_COMPTA_ADMIN);

















            }
            catch (UserException $e)
            {
                @unlink(GARRADIN_DB_FILE);
                $error = $e->getMessage();
            }
        }







>
>
>
>
|








|
|
|
|
|





|
>
>
|
>
>
>


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







56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
    $tpl->assign('disabled', false);
    $error = false;

    if (!empty($_POST['save']))
    {
        if (!utils::CSRF_check('install'))
        {
            $error = 'Une erreur est survenue, merci de renvoyer le formulaire.';
        }
        elseif (utils::post('passe_membre') != utils::post('repasse_membre'))
        {
            $error = 'La vérification ne correspond pas au mot de passe.';
        }
        else
        {
            try {
                require_once GARRADIN_ROOT . '/include/class.db.php';
                require_once GARRADIN_ROOT . '/include/class.config.php';

                $config = Garradin_Config::getInstance();
                $config->set('nom_asso', utils::post('nom_asso'));
                $config->set('adresse_asso', utils::post('adresse_asso'));
                $config->set('email_asso', utils::post('email_asso'));
                $config->set('site_asso', utils::post('site_asso'));
                $config->set('email_envoi_automatique', utils::post('email_asso'));
                $config->set('champs_obligatoires', array('passe', 'email', 'nom'));

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

                $cats = new Garradin_Membres_Categories;
                $id = $cats->add(array(
                    'nom' => 'Membres actifs',
                    'montant_cotisation' => 10));
                $cats->setAccess($id,
                    Garradin_Membres::DROIT_CONNEXION,
                    Garradin_Membres::DROIT_WIKI_LIRE,
                    Garradin_Membres::DROIT_WIKI_ECRIRE);
                $config->set('categorie_membres', $id);

                $id = $cats->add(array(
                    'nom' => ucfirst(utils::post('cat_membre')),
                    'montant_cotisation' => 0));
                $cats->setAccess($id,
                    Garradin_Membres::DROIT_CONNEXION,
                    Garradin_Membres::DROIT_WIKI_ADMIN,
                    Garradin_Membres::DROIT_MEMBRE_ADMIN,
                    Garradin_Membres::DROIT_COMPTA_ADMIN);

                $membres = new Garradin_Membres;
                $membres->add(array(
                    'id_categorie'  =>  $id,
                    'nom'           =>  utils::post('nom_membre'),
                    'email'         =>  utils::post('email_membre'),
                    'passe'         =>  utils::post('passe_membre'),
                    'telephone'     =>  '',
                    'code_postal'   =>  '',
                    'adresse'       =>  '',
                    'ville'         =>  '',
                    'pays'          =>  '',
                    'date_anniversaire' => '',
                    'details'       =>  '',
                ));

                $config->save();
            }
            catch (UserException $e)
            {
                @unlink(GARRADIN_DB_FILE);
                $error = $e->getMessage();
            }
        }

Added www/style/admin.css version [d556ecf768].



































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
* { margin: 0; padding: 0; }

body {
    font-size: 100%;
    padding: 1.5%;
    background: #fff;
    color: #000;
    font-family: Sans-serif;
}

h1 {
    text-align: center;
    margin: -1% -1% 1% -1%;
    padding: 0.5%;
    background: #c85;
    color: #fff;
}

p.error {
    border: 1px solid #c00;
    background: #fcc;
    padding: 0.5em;
    margin-bottom: 1em;
}

p.confirm {
    border: 1px solid #0c0;
    background: #cfc;
    padding: 0.5em;
    margin-bottom: 1em;
}

p.alert {
    border: 1px solid #cc0;
    background: #ffc;
    padding: 0.5em;
    margin-bottom: 1em;
}

p.intro {
    margin: 1em;
}

/* Formulaires */
fieldset {
    border: 1px solid #ccc;
    padding: 0.8em;
    margin-bottom: 1em;
}

fieldset legend {
    padding: 0 0.5em;
    font-weight: bold;
}

label:hover {
    cursor: pointer;
    border-bottom: 1px dotted #900;
}

dl dt label {
    font-weight: bold;
}

fieldset dl dt b {
    color: #900;
    font-size: 0.7em;
    font-weight: normal;
    vertical-align: super;
}

fieldset dl dd.tip {
    color: #666;
}

fieldset dl dd {
    padding: 0.2em 0.5em 0.2em 1em;
}

input[type=text],textarea,input[type=password],input[type=number],input[type=email],input[type=url] {
    padding: 0.2em 0.4em;
    font-family: Sans-serif;
    min-width: 20em;
}

input[type=submit], input[type=button] {
    padding: 0.3em;
    cursor: pointer;
}

p.submit {
    margin: 1em;
}

.submit input[type=submit] {
    font-size: 1.2em;
}