diff options
| author | 2013-12-30 21:29:51 +0100 | |
|---|---|---|
| committer | 2013-12-30 21:29:51 +0100 | |
| commit | 84be5ff618a59c510db7627c9b6447835f4364c7 (patch) | |
| tree | 7fae9b121e880b98cd8efef4d09c2d13736d282a | |
| parent | bd5d7a7bcb16cff1c01f4445ceee765fc11e3b50 (diff) | |
Champs utilisateurs plus stricts + SQL réutilisable
Utilisation de input pattern (HTML5).
Évite l'écriture de fichiers tableaux à la main (préfère var_export qui
s'occupe aussi des caractères spéciaux).
Séparation des requêtes SQL réutilisables.
| -rw-r--r-- | app/sql.php | 55 | ||||
| -rw-r--r-- | p/i/install.php | 116 | ||||
| -rw-r--r-- | p/themes/default/global.css | 4 | ||||
| -rw-r--r-- | p/themes/flat-design/global.css | 4 |
4 files changed, 85 insertions, 94 deletions
diff --git a/app/sql.php b/app/sql.php new file mode 100644 index 000000000..6951d7231 --- /dev/null +++ b/app/sql.php @@ -0,0 +1,55 @@ +<?php +define ('SQL_CREATE_DB', 'CREATE DATABASE %1$s DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); + +define ('SQL_CAT', 'CREATE TABLE IF NOT EXISTS `%1$scategory` ( + `id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7 + `name` varchar(255) NOT NULL, + `color` char(7), + PRIMARY KEY (`id`), + UNIQUE KEY (`name`) -- v0.7 +) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci +ENGINE = INNODB;'); + +define ('SQL_FEED', 'CREATE TABLE IF NOT EXISTS `%1$sfeed` ( + `id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7 + `url` varchar(511) CHARACTER SET latin1 NOT NULL, + `category` SMALLINT DEFAULT 0, -- v0.7 + `name` varchar(255) NOT NULL, + `website` varchar(255) CHARACTER SET latin1, + `description` text, + `lastUpdate` int(11) DEFAULT 0, + `priority` tinyint(2) NOT NULL DEFAULT 10, + `pathEntries` varchar(511) DEFAULT NULL, + `httpAuth` varchar(511) DEFAULT NULL, + `error` boolean DEFAULT 0, + `keep_history` MEDIUMINT NOT NULL DEFAULT -2, -- v0.7, -2 = default + `cache_nbEntries` int DEFAULT 0, -- v0.7 + `cache_nbUnreads` int DEFAULT 0, -- v0.7 + PRIMARY KEY (`id`), + FOREIGN KEY (`category`) REFERENCES `%1$scategory`(`id`) ON DELETE SET NULL ON UPDATE CASCADE, + UNIQUE KEY (`url`), -- v0.7 + INDEX (`name`), -- v0.7 + INDEX (`priority`), -- v0.7 + INDEX (`keep_history`) -- v0.7 +) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci +ENGINE = INNODB;'); + +define ('SQL_ENTRY', 'CREATE TABLE IF NOT EXISTS `%1$sentry` ( + `id` bigint NOT NULL, -- v0.7 + `guid` varchar(760) CHARACTER SET latin1 NOT NULL, -- Maximum for UNIQUE is 767B + `title` varchar(255) NOT NULL, + `author` varchar(255), + `content_bin` blob, -- v0.7 + `link` varchar(1023) CHARACTER SET latin1 NOT NULL, + `date` int(11), + `is_read` boolean NOT NULL DEFAULT 0, + `is_favorite` boolean NOT NULL DEFAULT 0, + `id_feed` SMALLINT, -- v0.7 + `tags` varchar(1023), + PRIMARY KEY (`id`), + FOREIGN KEY (`id_feed`) REFERENCES `%1$sfeed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE KEY (`id_feed`,`guid`), -- v0.7 + INDEX (`is_favorite`), -- v0.7 + INDEX (`is_read`) -- v0.7 +) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci +ENGINE = INNODB;'); diff --git a/p/i/install.php b/p/i/install.php index 8a74c4492..672f64b94 100644 --- a/p/i/install.php +++ b/p/i/install.php @@ -12,60 +12,7 @@ if (isset ($_GET['step'])) { define ('STEP', 1); } -define ('SQL_CREATE_DB', 'CREATE DATABASE %1$s DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;'); - -define ('SQL_CAT', 'CREATE TABLE IF NOT EXISTS `%1$scategory` ( - `id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7 - `name` varchar(255) NOT NULL, - `color` char(7), - PRIMARY KEY (`id`), - UNIQUE KEY (`name`) -- v0.7 -) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci -ENGINE = INNODB;'); - -define ('SQL_FEED', 'CREATE TABLE IF NOT EXISTS `%1$sfeed` ( - `id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7 - `url` varchar(511) CHARACTER SET latin1 NOT NULL, - `category` SMALLINT DEFAULT 0, -- v0.7 - `name` varchar(255) NOT NULL, - `website` varchar(255) CHARACTER SET latin1, - `description` text, - `lastUpdate` int(11) DEFAULT 0, - `priority` tinyint(2) NOT NULL DEFAULT 10, - `pathEntries` varchar(511) DEFAULT NULL, - `httpAuth` varchar(511) DEFAULT NULL, - `error` boolean DEFAULT 0, - `keep_history` MEDIUMINT NOT NULL DEFAULT -2, -- v0.7, -2 = default - `cache_nbEntries` int DEFAULT 0, -- v0.7 - `cache_nbUnreads` int DEFAULT 0, -- v0.7 - PRIMARY KEY (`id`), - FOREIGN KEY (`category`) REFERENCES `%1$scategory`(`id`) ON DELETE SET NULL ON UPDATE CASCADE, - UNIQUE KEY (`url`), -- v0.7 - INDEX (`name`), -- v0.7 - INDEX (`priority`), -- v0.7 - INDEX (`keep_history`) -- v0.7 -) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci -ENGINE = INNODB;'); - -define ('SQL_ENTRY', 'CREATE TABLE IF NOT EXISTS `%1$sentry` ( - `id` bigint NOT NULL, -- v0.7 - `guid` varchar(760) CHARACTER SET latin1 NOT NULL, -- Maximum for UNIQUE is 767B - `title` varchar(255) NOT NULL, - `author` varchar(255), - `content_bin` blob, -- v0.7 - `link` varchar(1023) CHARACTER SET latin1 NOT NULL, - `date` int(11), - `is_read` boolean NOT NULL DEFAULT 0, - `is_favorite` boolean NOT NULL DEFAULT 0, - `id_feed` SMALLINT, -- v0.7 - `tags` varchar(1023), - PRIMARY KEY (`id`), - FOREIGN KEY (`id_feed`) REFERENCES `%1$sfeed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, - UNIQUE KEY (`id_feed`,`guid`), -- v0.7 - INDEX (`is_favorite`), -- v0.7 - INDEX (`is_read`) -- v0.7 -) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci -ENGINE = INNODB;'); +include(APP_PATH . '/sql.php'); //<updates> define('SQL_SHOW_TABLES', 'SHOW tables;'); @@ -134,21 +81,6 @@ SET f.cache_nbEntries=x.nbEntries, f.cache_nbUnreads=x.nbUnreads define('SQL_UPDATE_HISTORYv007b', 'UPDATE `%1$sfeed` SET keep_history = CASE WHEN keep_history = 0 THEN -2 WHEN keep_history = 1 THEN -1 ELSE keep_history END;'); //</updates> -function writeLine ($f, $line) { - fwrite ($f, $line . "\n"); -} -function writeArray ($f, $array) { - foreach ($array as $key => $val) { - if (is_array ($val)) { - writeLine ($f, '\'' . $key . '\' => array ('); - writeArray ($f, $val); - writeLine ($f, '),'); - } else { - writeLine ($f, '\'' . $key . '\' => \'' . $val . '\','); - } - } -} - // gestion internationalisation $translates = array (); $actual = 'en'; @@ -220,33 +152,29 @@ function saveStep2 () { } $_SESSION['sel_application'] = sha1(uniqid(mt_rand(), true).implode('', stat(__FILE__))); - $_SESSION['title'] = addslashes(substr(trim($_POST['title']), 0, 25)); + $_SESSION['title'] = substr(trim($_POST['title']), 0, 25); $_SESSION['old_entries'] = $_POST['old_entries']; if ((!ctype_digit($_SESSION['old_entries'])) || ($_SESSION['old_entries'] < 1)) { $_SESSION['old_entries'] = 3; } - $_SESSION['mail_login'] = addslashes ($_POST['mail_login']); - $_SESSION['default_user'] = substr(preg_replace ('/[^a-zA-Z0-9]/', '', $_POST['default_user']), 0, 16); + $_SESSION['mail_login'] = filter_var($_POST['mail_login'], FILTER_VALIDATE_EMAIL); + $_SESSION['default_user'] = substr(preg_replace('/[^a-zA-Z0-9]/', '', $_POST['default_user']), 0, 16); $token = ''; if ($_SESSION['mail_login']) { $token = sha1($_SESSION['sel_application'] . $_SESSION['mail_login']); } - $file_data = DATA_PATH . '/' . $_SESSION['default_user'] . '_user.php'; - - @unlink($file_data); //To avoid access-rights problems - $f = fopen ($file_data, 'w'); - writeLine ($f, '<?php'); - writeLine ($f, 'return array ('); - writeArray ($f, array ( + $config_array = array ( 'language' => $_SESSION['language'], 'old_entries' => $_SESSION['old_entries'], 'mail_login' => $_SESSION['mail_login'], - 'token' => $token - )); - writeLine ($f, ');'); - fclose ($f); + 'token' => $token, + ); + + $configPath = DATA_PATH . '/' . $_SESSION['default_user'] . '_user.php'; + @unlink(configPath); //To avoid access-rights problems + file_put_contents($configPath, "<?php\n return " . var_export($config_array, true) . ';'); header ('Location: index.php?step=3'); } @@ -262,11 +190,11 @@ function saveStep3 () { } $_SESSION['bd_type'] = isset ($_POST['type']) ? $_POST['type'] : 'mysql'; - $_SESSION['bd_host'] = addslashes ($_POST['host']); - $_SESSION['bd_user'] = addslashes ($_POST['user']); - $_SESSION['bd_password'] = addslashes ($_POST['pass']); - $_SESSION['bd_base'] = addslashes ($_POST['base']); - $_SESSION['bd_prefix'] = addslashes ($_POST['prefix']); + $_SESSION['bd_host'] = $_POST['host']; + $_SESSION['bd_user'] = $_POST['user']; + $_SESSION['bd_password'] = $_POST['pass']; + $_SESSION['bd_base'] = substr($_POST['base'], 0, 64); + $_SESSION['bd_prefix'] = substr($_POST['prefix'], 0, 16); $_SESSION['bd_prefix_user'] = $_SESSION['bd_prefix'] . (empty($_SESSION['default_user']) ? '' : ($_SESSION['default_user'] . '_')); $ini_array = array( @@ -815,14 +743,14 @@ function printStep2 () { <div class="form-group"> <label class="group-name" for="old_entries"><?php echo _t ('delete_articles_every'); ?></label> <div class="group-controls"> - <input type="number" id="old_entries" name="old_entries" value="<?php echo isset ($_SESSION['old_entries']) ? $_SESSION['old_entries'] : '3'; ?>" /> <?php echo _t ('month'); ?> + <input type="number" id="old_entries" name="old_entries" required="required" min="1" max="1200" value="<?php echo isset ($_SESSION['old_entries']) ? $_SESSION['old_entries'] : '3'; ?>" /> <?php echo _t ('month'); ?> </div> </div> <div class="form-group"> <label class="group-name" for="default_user"><?php echo _t ('default_user'); ?></label> <div class="group-controls"> - <input type="text" id="default_user" name="default_user" maxlength="16" value="<?php echo isset ($_SESSION['default_user']) ? $_SESSION['default_user'] : ''; ?>" placeholder="<?php echo httpAuthUser() == '' ? 'user1' : httpAuthUser(); ?>" /> + <input type="text" id="default_user" name="default_user" required="required" size="16" maxlength="16" pattern="[0-9a-zA-Z]{1,16}" value="<?php echo isset ($_SESSION['default_user']) ? $_SESSION['default_user'] : ''; ?>" placeholder="<?php echo httpAuthUser() == '' ? 'user1' : httpAuthUser(); ?>" /> </div> </div> @@ -877,14 +805,14 @@ function printStep3 () { <div class="form-group"> <label class="group-name" for="host"><?php echo _t ('host'); ?></label> <div class="group-controls"> - <input type="text" id="host" name="host" value="<?php echo isset ($_SESSION['bd_host']) ? $_SESSION['bd_host'] : 'localhost'; ?>" /> + <input type="text" id="host" name="host" pattern="[0-9A-Za-z_.-]{1,64}" value="<?php echo isset ($_SESSION['bd_host']) ? $_SESSION['bd_host'] : 'localhost'; ?>" /> </div> </div> <div class="form-group"> <label class="group-name" for="user"><?php echo _t ('username'); ?></label> <div class="group-controls"> - <input type="text" id="user" name="user" value="<?php echo isset ($_SESSION['bd_user']) ? $_SESSION['bd_user'] : ''; ?>" /> + <input type="text" id="user" name="user" maxlength="16" pattern="[0-9A-Za-z_]{1,16}" value="<?php echo isset ($_SESSION['bd_user']) ? $_SESSION['bd_user'] : ''; ?>" /> </div> </div> @@ -898,14 +826,14 @@ function printStep3 () { <div class="form-group"> <label class="group-name" for="base"><?php echo _t ('bdd'); ?></label> <div class="group-controls"> - <input type="text" id="base" name="base" maxlength="64" value="<?php echo isset ($_SESSION['bd_base']) ? $_SESSION['bd_base'] : ''; ?>" placeholder="freshrss" /> + <input type="text" id="base" name="base" maxlength="64" pattern="[0-9A-Za-z_]{1,64}" value="<?php echo isset ($_SESSION['bd_base']) ? $_SESSION['bd_base'] : ''; ?>" placeholder="freshrss" /> </div> </div> <div class="form-group"> <label class="group-name" for="prefix"><?php echo _t ('prefix'); ?></label> <div class="group-controls"> - <input type="text" id="prefix" name="prefix" maxlength="16" value="<?php echo isset ($_SESSION['bd_prefix']) ? $_SESSION['bd_prefix'] : 'freshrss_'; ?>" /> + <input type="text" id="prefix" name="prefix" maxlength="16" pattern="[0-9A-Za-z_]{1,16}" value="<?php echo isset ($_SESSION['bd_prefix']) ? $_SESSION['bd_prefix'] : 'freshrss_'; ?>" /> </div> </div> diff --git a/p/themes/default/global.css b/p/themes/default/global.css index 440fc6e41..913da4b27 100644 --- a/p/themes/default/global.css +++ b/p/themes/default/global.css @@ -112,6 +112,10 @@ input, select, textarea { border-color: #33BBFF; box-shadow: 0 2px 2px #DDDDFF inset; } + input:invalid { + border-color: red; + box-shadow: 0 0 2px 1px red; + } .form-group { margin: 0; diff --git a/p/themes/flat-design/global.css b/p/themes/flat-design/global.css index 90b59d002..cb9495865 100644 --- a/p/themes/flat-design/global.css +++ b/p/themes/flat-design/global.css @@ -113,6 +113,10 @@ input, select, textarea { color: #333; border-color: #2980b9; } + input:invalid { + border-color: red; + box-shadow: 0 0 2px 1px red; + } .form-group { margin: 5px 0; |
