PageRenderTime 64ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 2ms

/iGal/galerie.php

https://github.com/shlag/FSG2010
PHP | 8809 lines | 7143 code | 992 blank | 674 comment | 1841 complexity | 93962c4e8ff61ffaefb372980b6b391d MD5 | raw file
Possible License(s): GPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. /********************************************************************
  3. iGalerie - script de galerie d'images
  4. Copyright (C) 2006-2007 - http://www.igalerie.org/
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  16. ********************************************************************/
  17. error_reporting(E_ALL);
  18. if (@extension_loaded('zlib')
  19. && !@ini_get('zlib.output_compression')) {
  20. @ob_start('ob_gzhandler');
  21. }
  22. ignore_user_abort(TRUE);
  23. if (function_exists('set_time_limit')) {
  24. @set_time_limit(30);
  25. }
  26. // On mémorise l'heure exacte du début du script.
  27. global $_TIMESTART;
  28. $_TIMESTART = explode(' ', microtime());
  29. // Debug : requętes SQL.
  30. global $_MYSQL;
  31. $_MYSQL = array();
  32. $_MYSQL['debug'] = 0;
  33. $_MYSQL['mysql_requetes'] = 0;
  34. $_MYSQL['nb_requetes'] = 0;
  35. // Paramčtres de langue.
  36. setlocale(LC_ALL, 'fr');
  37. setlocale(LC_ALL, 'fr_FR');
  38. setlocale(LC_ALL, 'french');
  39. setlocale(LC_ALL, 'fr_FR.ISO8859-1');
  40. setlocale(LC_NUMERIC, 'en');
  41. setlocale(LC_NUMERIC, 'en_US');
  42. setlocale(LC_NUMERIC, 'english');
  43. setlocale(LC_NUMERIC, 'en_US.ISO8859-1');
  44. // On annule la fonction magic_quotes_gpc.
  45. function strip_magic_quotes(&$valeur) {
  46. if (is_array($valeur)) {
  47. array_walk($valeur, 'strip_magic_quotes');
  48. } else {
  49. $valeur = stripslashes($valeur);
  50. }
  51. }
  52. if (get_magic_quotes_gpc()) {
  53. array_walk($_GET, 'strip_magic_quotes');
  54. array_walk($_POST, 'strip_magic_quotes');
  55. array_walk($_COOKIE, 'strip_magic_quotes');
  56. array_walk($_REQUEST, 'strip_magic_quotes');
  57. }
  58. // On désactive la fonction magic_quotes_runtime
  59. if (get_magic_quotes_runtime() &&
  60. function_exists('set_magic_quotes_runtime')) {
  61. set_magic_quotes_runtime(0);
  62. }
  63. // On supprime tout paramčtre POST et COOKIE non existant.
  64. $R = array('auteur', 'courriel', 'message', 'note', 'preview', 'siteweb', 'decode_courriel',
  65. 'molpac', 'password', 'contact_mail', 'contact_sujet', 'contact_message', 'contact_nom', 'upload_categorie',
  66. 'upload_images', 's_query', 's_mode', 's_nom', 's_path', 's_desc', 's_mc', 's_com', 's_make', 's_model',
  67. 's_alb', 's_casse', 's_accents', 's_date', 's_date_type', 's_date_start_jour', 's_date_start_mois',
  68. 's_date_start_an', 's_date_end_jour', 's_date_end_mois', 's_date_end_an', 's_taille', 's_width_start',
  69. 's_width_end', 's_height_start', 's_height_end', 's_poids', 's_poids_start', 's_poids_end', 'sid',
  70. 'new_login', 'new_pass', 'new_pass_confirm', 'new_mail', 'new_mail_public', 'new_web', 'new_lieu', 'new_newsletter',
  71. 'ident_login', 'ident_pass', 'ident_souvenir', 'modif_profil', 'supp_avatar', 'oubli_mail', 'oubli_user',
  72. 'obj_type', 'obj_name', 'obj_desc');
  73. foreach ($_POST as $name => $value) {
  74. if (!in_array($name, $R)) {
  75. unset($_POST[$name]);
  76. }
  77. }
  78. $R = array('galerie_perso', 'galerie_pass', 'galerie_vote', 'galerie_membre');
  79. foreach ($_COOKIE as $name => $value) {
  80. if (!in_array($name, $R)) {
  81. unset($_COOKIE[$name]);
  82. }
  83. }
  84. // Chargement de la config.
  85. if (file_exists(dirname(__FILE__) . '/config/conf.php')) {
  86. require_once(dirname(__FILE__) . '/config/conf.php');
  87. }
  88. // La galerie est-elle installée ?
  89. if (!defined('GALERIE_INSTALL') || !GALERIE_INSTALL) {
  90. header('Location: install/');
  91. exit;
  92. }
  93. // Fichier d'accčs ŕ la galerie.
  94. $gf = basename(GALERIE_URL);
  95. $gf = (GALERIE_URL_TYPE == 'normal' && $gf == 'index.php') ? '' : $gf;
  96. define('GALERIE_FILE', $gf);
  97. require_once(dirname(__FILE__) . '/includes/classes/class.mysql.php');
  98. require_once(dirname(__FILE__) . '/includes/classes/class.cookie.php');
  99. require_once(dirname(__FILE__) . '/includes/classes/class.outils.php');
  100. // ================================================== <TYPE URL> ==================================================
  101. // Type d'URL 'query_string' ou 'url_rewrite'.
  102. if (GALERIE_URL_TYPE == 'query_string' || GALERIE_URL_TYPE == 'url_rewrite') {
  103. if (empty($_GET['u']) && isset($_GET['search'])) {
  104. $sadv = '';
  105. if (isset($_GET['sadv'])) {
  106. $sadv = '/sadv/' . $_GET['sadv'];
  107. }
  108. if (isset($_GET['img'])) {
  109. $sadv .= '/image/' . $_GET['img'];
  110. }
  111. if (isset($_GET['addfav'])) {
  112. $sadv .= '/addfav/' . $_GET['addfav'];
  113. }
  114. $qs = (GALERIE_URL_TYPE == 'query_string') ? GALERIE_FILE . '?/' : '';
  115. $s = preg_replace('`[\x5c#]`', '', $_GET['search']);
  116. if (empty($s)) {
  117. header('Location: ' . outils::genLink('?cat=1', '', '', 0, '&'));
  118. } else {
  119. header('Location:' . GALERIE_PATH . '/' . $qs . 'search/' . urlencode($s) . $sadv);
  120. }
  121. exit;
  122. }
  123. if (!empty($_SERVER['QUERY_STRING'])) {
  124. $qs = preg_replace('`(?:^|[\&\?])(..|u|mod|deconnect)=`', '/$1/', $_SERVER['QUERY_STRING']);
  125. convert_string_to_gets($qs);
  126. }
  127. // Type d'URL 'path_info'.
  128. } elseif (GALERIE_URL_TYPE == 'path_info') {
  129. if (empty($_GET['u']) && isset($_GET['search'])) {
  130. $sadv = '';
  131. if (isset($_GET['sadv'])) {
  132. $sadv = '/sadv/' . $_GET['sadv'];
  133. }
  134. if (isset($_GET['img'])) {
  135. $sadv .= '/image/' . $_GET['img'];
  136. }
  137. if (isset($_GET['addfav'])) {
  138. $sadv .= '/addfav/' . $_GET['addfav'];
  139. }
  140. $s = preg_replace('`[\x5c#]`', '', $_GET['search']);
  141. if (empty($s)) {
  142. header('Location: ' . outils::genLink('?cat=1', '', '', 0, '&'));
  143. } else {
  144. header('Location:' . GALERIE_PATH . '/' . GALERIE_FILE . '/search/' . urlencode($s) . $sadv);
  145. }
  146. exit;
  147. }
  148. if (!empty($_SERVER['PATH_INFO'])) {
  149. $qs = preg_replace('`(?:^|[\&\?])(..|u|mod|deconnect)=`', '/$1/', $_SERVER['PATH_INFO']);
  150. convert_string_to_gets($qs);
  151. }
  152. unset($_SERVER['QUERY_STRING']);
  153. }
  154. // On supprime tout paramčtre GET non existant.
  155. $R = array('alb', 'cat', 'commentaires', 'hits', 'ih', 'il', 'img',
  156. 'io', 'is', 'it', 'ra', 'rj', 'recentes', 'search',
  157. 'section', 'sa', 'sc', 'sd', 'sh', 'si', 'sn', 'sp',
  158. 'st', 'sv', 'sy', 'startnum', 'vl', 'vn', 'votes', 'u',
  159. 'mod', 'images', 'deconnect', 'sadv', 'date_creation',
  160. 'date_ajout', 'tag', 'comments', 'membres', 'mcom',
  161. 'mfav', 'mimg', 'addfav', 'profil', 'key', 'diapo');
  162. foreach ($_GET as $name => $value) {
  163. if (!in_array($name, $R)) {
  164. unset($_GET[$name]);
  165. }
  166. }
  167. function convert_string_to_gets($p) {
  168. $params = array();
  169. $p = preg_split('`/`', $p, -1, PREG_SPLIT_NO_EMPTY);
  170. for ($i = 0; $i < count($p); $i += 2) {
  171. if (isset($p[$i+1])) {
  172. $params[$p[$i]] = preg_replace('`&(?=[^/]+=).*$`', '', $p[$i+1]);
  173. }
  174. }
  175. $ok = false;
  176. foreach ($params as $type => $value) {
  177. switch ($type) {
  178. case 'images' :
  179. case 'recentes' :
  180. case 'hits' :
  181. case 'commentaires' :
  182. case 'comments' :
  183. case 'votes' :
  184. if (preg_match('`^(\d+)-.+`', $value, $m)) { $_GET[$type] = $m[1]; }
  185. $ok = true;
  186. break;
  187. case 'categorie' :
  188. if (preg_match('`^(\d+)-.+`', $value, $m)) { $_GET['cat'] = $m[1]; }
  189. $ok = true;
  190. break;
  191. case 'album' :
  192. if (preg_match('`^(\d+)-.+`', $value, $m)) { $_GET['alb'] = $m[1]; }
  193. $ok = true;
  194. break;
  195. case 'image' :
  196. if (preg_match('`^(\d+)-.+`', $value, $m)) { $_GET['img'] = $m[1]; }
  197. $ok = true;
  198. break;
  199. case 'startnum' :
  200. if (preg_match('`^(\d+)$`', $value, $m)) { $_GET['startnum'] = $m[1]; }
  201. break;
  202. case 'date_creation' :
  203. if (preg_match('`^\d{2}-\d{2}-\d{4}$`', $value, $m)) { $_GET['date_creation'] = $m[0]; }
  204. $ok = true;
  205. break;
  206. case 'date_ajout' :
  207. if (preg_match('`^\d{2}-\d{2}-\d{4}$`', $value, $m)) { $_GET['date_ajout'] = $m[0]; }
  208. $ok = true;
  209. break;
  210. case 'tag' :
  211. case 'search' :
  212. case 'section' :
  213. case 'membres' :
  214. case 'profil' :
  215. case 'mcom' :
  216. case 'mimg' :
  217. case 'mfav' :
  218. case 'addfav' :
  219. case 'diapo' :
  220. $ok = true;
  221. case 'sadv' :
  222. case 'type' :
  223. case 'deconnect' :
  224. case 'mod' :
  225. $_GET[$type] = urldecode($value);
  226. if ($type == 'tag') {
  227. $_GET[$type] = str_replace('_', ' ', $_GET[$type]);
  228. }
  229. break;
  230. default :
  231. unset($params[$type]);
  232. }
  233. }
  234. }
  235. // ================================================== </TYPE URL> ==================================================
  236. // Filtrage des paramčtres GET.
  237. $gets = array('img', 'alb', 'cat', 'images', 'hits', 'comments',
  238. 'votes', 'commentaires', 'vn', 'vl', 'it', 'il',
  239. 'ih', 'rj', 'u', 'startnum', 'recentes', 'mod',
  240. 'deconnect', 'addfav');
  241. for ($i = 0; $i < count($gets); $i++) {
  242. verif_gets($gets[$i], '`^\d{1,12}$`');
  243. }
  244. $gets = array('section', 'is', 'io', 'sa', 'sc', 'sd',
  245. 'sh', 'si', 'sn', 'sp', 'sv', 'sy', 'ra');
  246. for ($i = 0; $i < count($gets); $i++) {
  247. verif_gets($gets[$i], '`^[a-z\d]{1,20}$`');
  248. }
  249. $gets = array('st', 'sadv', 'mimg', 'mcom', 'mfav', 'date_ajout',
  250. 'date_creation', 'membres', 'profil');
  251. for ($i = 0; $i < count($gets); $i++) {
  252. verif_gets($gets[$i], '`^[a-z\d_\.-]{1,120}$`i');
  253. }
  254. function verif_gets($p, $re) {
  255. if (isset($_GET[$p]) && !preg_match($re, $_GET[$p])) {
  256. unset($_GET[$p]);
  257. }
  258. }
  259. // Sections : plan, aide, contact, password, historique.
  260. if (isset($_GET['section'])) {
  261. if ($_GET['section'] == 'recherche') {
  262. require_once(dirname(__FILE__) . '/includes/classes/class.recherche.php');
  263. }
  264. $galerie = new galerie('section');
  265. $galerie->section();
  266. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  267. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/section.php');
  268. // Images.
  269. } elseif (isset($_GET['img'])) {
  270. if (isset($_GET['search'])) {
  271. require_once(dirname(__FILE__) . '/includes/classes/class.recherche.php');
  272. }
  273. $galerie = new galerie('img');
  274. $galerie->image();
  275. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  276. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/image.php');
  277. // Tags.
  278. } elseif (isset($_GET['tag'])) {
  279. $galerie = new galerie('tag');
  280. $galerie->page_tags();
  281. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  282. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  283. // Commentaires.
  284. } elseif (isset($_GET['comments'])) {
  285. $galerie = new galerie('comments');
  286. $galerie->page_commentaires();
  287. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  288. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/commentaires.php');
  289. // Membres.
  290. } elseif (isset($_GET['membres'])) {
  291. require_once(dirname(__FILE__) . '/includes/classes/class.files.php');
  292. $galerie = new galerie('membres');
  293. $galerie->membres();
  294. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  295. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/membres.php');
  296. // Images membres.
  297. } elseif (isset($_GET['mimg'])) {
  298. $galerie = new galerie('mimg');
  299. $galerie->membres_images();
  300. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  301. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  302. // Favoris membres.
  303. } elseif (isset($_GET['mfav'])) {
  304. $galerie = new galerie('mfav');
  305. $galerie->membres_favoris();
  306. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  307. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  308. // Commentaires membres.
  309. } elseif (isset($_GET['mcom'])) {
  310. $galerie = new galerie('mcom');
  311. $galerie->membres_commentaires();
  312. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  313. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/commentaires.php');
  314. // Profil membres.
  315. } elseif (isset($_GET['profil'])) {
  316. $galerie = new galerie('profil');
  317. $galerie->membres_profil();
  318. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  319. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/membres.php');
  320. // Pages spéciales.
  321. } elseif (isset($_GET['commentaires']) ||
  322. isset($_GET['votes']) ||
  323. isset($_GET['hits']) ||
  324. isset($_GET['recentes']) ||
  325. isset($_GET['images']) ||
  326. isset($_GET['date_creation']) ||
  327. isset($_GET['date_ajout'])) {
  328. if (isset($_GET['commentaires'])) {
  329. $type = 'commentaires';
  330. } elseif (isset($_GET['votes'])) {
  331. $type = 'votes';
  332. } elseif (isset($_GET['hits'])) {
  333. $type = 'hits';
  334. } elseif (isset($_GET['recentes'])) {
  335. $type = 'recentes';
  336. } elseif (isset($_GET['date_creation'])) {
  337. $type = 'date_creation';
  338. } elseif (isset($_GET['date_ajout'])) {
  339. $type = 'date_ajout';
  340. } else {
  341. $type = 'images';
  342. }
  343. $galerie = new galerie($type);
  344. $galerie->speciales();
  345. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  346. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  347. // Recherche.
  348. } elseif (isset($_GET['search'])) {
  349. require_once(dirname(__FILE__) . '/includes/classes/class.recherche.php');
  350. $galerie = new galerie('search');
  351. $galerie->search();
  352. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  353. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  354. // Albums.
  355. } elseif (isset($_GET['alb'])) {
  356. $galerie = new galerie('alb');
  357. $galerie->album();
  358. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  359. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/album.php');
  360. // Categories.
  361. } else {
  362. $galerie = new galerie('cat');
  363. $galerie->categorie();
  364. require_once(dirname(__FILE__) . '/includes/prefs_template.php');
  365. define('IGAL_TEMPLATE', 'template/' . $galerie->config['galerie_template'] . '/categorie.php');
  366. }
  367. if (GALERIE_INTEGRATED) {
  368. echo "<!-- GALERIE MODE INTEGRATED -->\n";
  369. } else {
  370. echo "<!-- GALERIE MODE NORMAL -->\n";
  371. require_once(dirname(__FILE__) . '/' . IGAL_TEMPLATE);
  372. }
  373. /*
  374. * ========== class.galerie
  375. */
  376. class galerie {
  377. var $config; // Configuration de la galerie.
  378. var $params; // Paramčtres internes.
  379. var $choix; // Détermination des préférences selon choix admin et choix utilisateur.
  380. // Objets.
  381. var $prefs; // Préférences utilisateur.
  382. var $passwords; // Mots de passe.
  383. var $mysql; // Base de données.
  384. var $membre; // Identification membres.
  385. // Informations brutes ŕ destination des fonctions de template.
  386. var $template;
  387. /*
  388. * Constructeur.
  389. */
  390. function galerie($type) {
  391. global $_MYSQL;
  392. $this->params['objet_type'] = $type;
  393. $this->template['infos']['type'] = $type;
  394. switch ($type) {
  395. case 'alb' :
  396. case 'cat' :
  397. case 'img' :
  398. case 'hits' :
  399. case 'votes' :
  400. case 'commentaires' :
  401. case 'recentes' :
  402. case 'images' :
  403. case 'comments' :
  404. // Identifiant de l'objet.
  405. if (!empty($_GET[$type]) && preg_match('`^[1-9]\d{0,9}$`', $_GET[$type])) {
  406. $this->params['objet_id'] = $_GET[$type];
  407. } else {
  408. $this->params['objet_id'] = 1;
  409. }
  410. case 'search' :
  411. case 'date_creation' :
  412. case 'date_ajout' :
  413. case 'tag' :
  414. case 'mcom' :
  415. case 'mimg' :
  416. case 'mfav' :
  417. // Page ŕ afficher.
  418. if (isset($_GET['startnum']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['startnum'])) {
  419. $this->params['startnum'] = $_GET['startnum'];
  420. } else {
  421. $this->params['startnum'] = 0;
  422. }
  423. $this->template['infos']['startnum'] = $this->params['startnum'];
  424. break;
  425. case 'section' :
  426. switch ($_GET['section']) {
  427. case 'plan' :
  428. case 'contact' :
  429. case 'tags' :
  430. case 'recherche' :
  431. case 'pass' :
  432. case 'historique' :
  433. $this->params['section'] = $_GET['section'];
  434. $this->template['infos']['objet'] = $_GET['section'];
  435. break;
  436. default :
  437. header('Location: ' . outils::genLink('?cat=1'));
  438. exit;
  439. }
  440. break;
  441. }
  442. // Préférences utilisateur.
  443. $this->prefs = new cookie(31536000, 'galerie_perso', GALERIE_PATH);
  444. // Mots de passe.
  445. $this->passwords = new cookie(31536000, 'galerie_pass', GALERIE_PATH);
  446. // Connexion ŕ la base de données.
  447. $this->mysql = new connexion(MYSQL_SERV, MYSQL_USER, MYSQL_PASS, MYSQL_BASE);
  448. // Récupération des paramčtres de configuration.
  449. $mysql_requete = 'SELECT parametre,valeur FROM ' . MYSQL_PREF . 'config';
  450. $this->config = $this->mysql->select($mysql_requete, 3);
  451. if (empty($this->config)) {
  452. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  453. }
  454. $this->template['debug']['mysql'] = $_MYSQL['mysql_requetes'];
  455. $this->template['infos']['add_votes'] = true;
  456. $this->template['infos']['add_comments'] = true;
  457. $this->template['infos']['h1'] = $this->config['galerie_titre'];
  458. $this->template['infos']['galerie_nom'] = $this->config['galerie_titre_court'];
  459. $this->template['infos']['footer'] = $this->config['galerie_footer'];
  460. $this->template['infos']['footer_message'] = $this->config['galerie_message_footer'];
  461. $this->template['infos']['tb_date_format'] = $this->config['galerie_tb_date_format'];
  462. $this->template['infos']['im_date_format'] = $this->config['galerie_im_date_format'];
  463. $this->template['infos']['images_window'] = $this->config['galerie_images_window'];
  464. $this->template['infos']['active_commentaires'] = $this->config['active_commentaires'];
  465. $this->template['infos']['active_votes'] = $this->config['active_votes'];
  466. $this->template['infos']['prefixe_vignettes'] = THUMB_PREF;
  467. $this->template['infos']['image_mode_resize'] = $this->config['galerie_images_resize'];
  468. $this->template['infos']['advsearch'] = $this->config['active_advsearch'];
  469. $this->template['infos']['historique'] = $this->config['active_historique'];
  470. $this->template['infos']['diaporama'] = $this->config['active_diaporama'];
  471. $this->template['infos']['rss'] = $this->config['active_rss'];
  472. $this->template['infos']['tags'] = $this->config['active_tags'];
  473. $this->template['infos']['liens'] = $this->config['active_liens'];
  474. $this->template['infos']['active_exif'] = $this->config['active_exif'];
  475. $this->template['infos']['active_iptc'] = $this->config['active_iptc'];
  476. $this->template['infos']['active_page_comments'] = $this->config['galerie_page_comments'];
  477. $this->template['infos']['users_upload_maxsize'] = $this->config['users_upload_maxsize'];
  478. $this->template['infos']['users_upload_maxwidth'] = $this->config['users_upload_maxwidth'];
  479. $this->template['infos']['users_upload_maxheight'] = $this->config['users_upload_maxheight'];
  480. $this->template['display']['s_hits'] = '';
  481. $this->template['display']['s_comments'] = '';
  482. $this->template['display']['s_votes'] = '';
  483. $this->template['display']['s_recentes'] = '';
  484. $this->template['contact']['text'] = $this->config['galerie_contact_text'];
  485. $this->template['contact']['active'] = $this->config['galerie_contact'];
  486. $this->template['contact']['admin_mail'] = $this->config['admin_mail'];
  487. $this->config['galerie_template'] = GALERIE_THEME;
  488. $this->config['galerie_style'] = GALERIE_STYLE;
  489. $this->template['galerie_liens'] = $this->config['galerie_liens'];
  490. $this->template['add_style'] = $this->config['galerie_add_style'];
  491. $this->template['infos']['parent_nom'] = '';
  492. // Paramčtres template.
  493. include_once(dirname(__FILE__) . '/template/' . $this->config['galerie_template'] . '/_params.php');
  494. $this->template['infos']['membres_active'] = $this->config['users_membres_active'];
  495. $this->template['infos']['membres_avatar'] = $this->config['users_membres_avatars'];
  496. // Si les images ne sont pas affichées dans une page dédiée,
  497. // on procčde ŕ quelques changements.
  498. if ($this->config['galerie_images_window']) {
  499. $this->config['active_commentaires'] = 0;
  500. $this->config['active_votes'] = 0;
  501. $this->config['display_hits'] = 0;
  502. $this->config['user_hits'] = 0;
  503. if ($type == 'img') {
  504. header('Location: ' . outils::genLink('?cat=1'));
  505. exit;
  506. }
  507. }
  508. // La galerie est-elle désactivée ?
  509. if (!$this->config['active_galerie']) {
  510. die(nl2br(htmlentities($this->config['galerie_message_fermeture'])));
  511. exit;
  512. }
  513. $this->membres_connexion();
  514. $this->image_hasard();
  515. // Choix utilisateurs : style.
  516. $this->choix['style'] = $this->config['galerie_style'];
  517. if ($this->config['user_perso'] && $this->config['user_style']) {
  518. $valeur_st = $this->prefs->lire('st');
  519. if ($valeur_st !== FALSE) {
  520. $this->choix['style'] = $valeur_st;
  521. }
  522. if (!empty($_GET['st']) && preg_match('`^[a-z\d_-]{1,40}$`', $_GET['st'])) {
  523. $this->prefs->ajouter('st', $_GET['st']);
  524. $this->choix['style'] = $_GET['st'];
  525. }
  526. // Récupération des styles du template.
  527. $i = 0;
  528. $style_rep = './template/' . $this->config['galerie_template'] . '/style/';
  529. if ($rep = opendir($style_rep)) {
  530. while ($ent = readdir($rep)) {
  531. if (is_dir($style_rep . $ent) && !preg_match('`^\.{1,2}$`', $ent)) {
  532. if (preg_match('`^[-a-z0-9_]+$`', $ent)) {
  533. $this->template['user']['styles'][$i] = $ent;
  534. $i++;
  535. }
  536. }
  537. }
  538. closedir($rep);
  539. }
  540. if ($i === 1) {
  541. $this->config['user_style'] = 0;
  542. }
  543. }
  544. $this->template['infos']['style_relative'] = 'template/' . $this->config['galerie_template'] . '/style/' . $this->choix['style'] . '/';
  545. $this->template['infos']['style'] = GALERIE_PATH . '/template/' . $this->config['galerie_template'] . '/style/' . $this->choix['style'] . '/' . $this->choix['style'] . '.css';
  546. $this->template['display']['style'] = $this->choix['style'];
  547. // Filtrage IP.
  548. if ((function_exists('filter_var') && !filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP))
  549. || !preg_match('`^' . outils::http_url('IP') . '$`', $_SERVER['REMOTE_ADDR'])) {
  550. $_SERVER['REMOTE_ADDR'] = 'inconnu';
  551. }
  552. }
  553. /*
  554. * Membres : connexion/deconnexion/identification.
  555. */
  556. function membres_connexion() {
  557. $this->template['infos']['membres_connexion'] = true;
  558. if (!$this->config['users_membres_active']) {
  559. if (isset($_GET['membres'])) {
  560. unset($_GET['membres']);
  561. }
  562. return;
  563. }
  564. // Droits au minium par défaut.
  565. $this->template['infos']['add_votes'] = false;
  566. $this->template['infos']['add_comments'] = false;
  567. $this->template['infos']['advsearch'] = false;
  568. $this->config['active_advsearch'] = false;
  569. $this->config['user_perso'] = false;
  570. $this->membre = new cookie(31536000, 'galerie_membre', GALERIE_PATH);
  571. $session_ok = false;
  572. // Déconnexion.
  573. if (isset($_GET['membres']) && $_GET['membres'] == 'deconnect') {
  574. $this->membre->expire = time();
  575. $this->membre->ajouter('sid', -1);
  576. $this->membre->ecrire();
  577. header('Location:' . outils::genLink('?cat=1'));
  578. exit;
  579. }
  580. // Connexion.
  581. $this->template['membre_user'] = array();
  582. if (!empty($_POST['ident_login']) && !empty($_POST['ident_pass'])) {
  583. sleep(1);
  584. $this->template['membres']['erreur_identification'] = 1;
  585. if (preg_match('`^[@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť<>!?-]{6,250}$`i', $_POST['ident_pass'])) {
  586. if (preg_match('`^[-_a-z\d]{3,30}$`i', $_POST['ident_login'])) {
  587. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'users.user_id,
  588. ' . MYSQL_PREF . 'users.user_login,
  589. ' . MYSQL_PREF . 'users.user_oubli,
  590. ' . MYSQL_PREF . 'users.user_lieu,
  591. ' . MYSQL_PREF . 'users.user_avatar,
  592. ' . MYSQL_PREF . 'users.user_date_derniere_visite,
  593. ' . MYSQL_PREF . 'users.user_date_dernier_upload,
  594. ' . MYSQL_PREF . 'groupes.*
  595. FROM ' . MYSQL_PREF . 'users JOIN ' . MYSQL_PREF . 'groupes USING (groupe_id)
  596. WHERE ' . MYSQL_PREF . 'users.user_pass = "' . outils::protege_mysql(md5($_POST['ident_pass']), $this->mysql->lien) . '"
  597. AND ' . MYSQL_PREF . 'users.user_login = "' . outils::protege_mysql($_POST['ident_login'], $this->mysql->lien) . '"
  598. LIMIT 1';
  599. $this->template['membre_user'] = $this->mysql->select($mysql_requete);
  600. if (is_array($this->template['membre_user'])) {
  601. $this->template['membres']['erreur_identification'] = 0;
  602. $session_id = outils::gen_key();
  603. $this->template['membre_user'][0]['user_session_id'] = $session_id;
  604. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  605. SET user_session_id = "' . $session_id . '"
  606. WHERE user_id = "' . $this->template['membre_user'][0]['user_id'] . '"';
  607. $this->mysql->requete($mysql_requete);
  608. $this->membre->expire = (isset($_POST['ident_souvenir'])) ? time() + (31536000*5) : 0;
  609. $this->membre->ajouter('sid', $session_id);
  610. $this->membre->ecrire();
  611. $session_ok = true;
  612. }
  613. }
  614. }
  615. }
  616. // Identification.
  617. if (!$session_ok && ($sid = $this->membre->lire('sid')) !== false) {
  618. if (preg_match('`^[a-z\d]{20}$`i', $sid)) {
  619. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'users.user_id,
  620. ' . MYSQL_PREF . 'users.user_login,
  621. ' . MYSQL_PREF . 'users.user_mail,
  622. ' . MYSQL_PREF . 'users.user_oubli,
  623. ' . MYSQL_PREF . 'users.user_web,
  624. ' . MYSQL_PREF . 'users.user_lieu,
  625. ' . MYSQL_PREF . 'users.user_avatar,
  626. ' . MYSQL_PREF . 'users.user_date_creation,
  627. ' . MYSQL_PREF . 'users.user_date_derniere_visite,
  628. ' . MYSQL_PREF . 'users.user_date_dernier_upload,
  629. ' . MYSQL_PREF . 'users.user_session_id,
  630. ' . MYSQL_PREF . 'groupes.*
  631. FROM ' . MYSQL_PREF . 'users JOIN ' . MYSQL_PREF . 'groupes USING (groupe_id)
  632. WHERE ' . MYSQL_PREF . 'users.user_session_id = "' . outils::protege_mysql($sid, $this->mysql->lien) . '"';
  633. $this->template['membre_user'] = $this->mysql->select($mysql_requete);
  634. if (is_array($this->template['membre_user'])) {
  635. $session_ok = true;
  636. }
  637. }
  638. }
  639. if ($session_ok) {
  640. $this->template['infos']['membres_connexion'] = false;
  641. $update = '';
  642. // Date de derničre visite.
  643. if (date('zy') != date('zy', $this->template['membre_user'][0]['user_date_derniere_visite'])) {
  644. $update = ', user_date_derniere_visite = "' . time() . '",
  645. user_ip_derniere_visite = "' . $_SERVER['REMOTE_ADDR'] . '"';
  646. }
  647. // Champ oubli de mot de passe.
  648. if (!empty($this->template['membre_user'][0]['user_oubli'])) {
  649. $update = ', user_oubli = NULL';
  650. }
  651. if ($update) {
  652. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  653. SET ' . substr($update, 1) . '
  654. WHERE user_id = "' . $this->template['membre_user'][0]['user_id'] . '"';
  655. $this->mysql->requete($mysql_requete);
  656. }
  657. } else {
  658. $this->template['infos']['membres_connexion'] = true;
  659. // Droits 'invité'.
  660. $mysql_requete = 'SELECT *
  661. FROM ' . MYSQL_PREF . 'groupes
  662. WHERE groupe_id = "2"';
  663. $this->template['membre_user'] = $this->mysql->select($mysql_requete);
  664. }
  665. if (isset($this->template['membre_user'][0]['user_login'])) {
  666. $this->template['membre_user'][0]['user_nom'] = str_replace('_', ' ', $this->template['membre_user'][0]['user_login']);
  667. }
  668. // Droits.
  669. if (!empty($this->template['membre_user'][0]['groupe_votes'])) {
  670. $this->template['infos']['add_votes'] = true;
  671. }
  672. if (!empty($this->template['membre_user'][0]['groupe_commentaires'])) {
  673. $this->template['infos']['add_comments'] = true;
  674. }
  675. if (!empty($this->template['membre_user'][0]['groupe_recherche_avance'])) {
  676. $this->template['infos']['advsearch'] = true;
  677. $this->config['active_advsearch'] = true;
  678. }
  679. if (!empty($this->template['membre_user'][0]['groupe_perso'])) {
  680. $this->config['user_perso'] = true;
  681. }
  682. if (!empty($this->template['membre_user'][0]['groupe_newsletter'])) {
  683. $this->template['infos']['user_newsletter'] = true;
  684. }
  685. // Admin.
  686. if (!empty($this->template['membre_user'][0]['user_id'])
  687. && $this->template['membre_user'][0]['user_id'] == 1) {
  688. $this->template['infos']['user_newsletter'] = false;
  689. $this->template['infos']['membres_noadmin'] = false;
  690. } else {
  691. $this->template['infos']['membres_noadmin'] = true;
  692. }
  693. }
  694. /*
  695. * Une image prise au hasard.
  696. */
  697. function image_hasard() {
  698. if ($this->config['galerie_image_hasard']) {
  699. // On récupčre les informations de l'image aléatoire ŕ afficher.
  700. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.image_id,
  701. ' . MYSQL_PREF . 'images.image_nom,
  702. ' . MYSQL_PREF . 'images.image_chemin,
  703. ' . MYSQL_PREF . 'images.image_largeur,
  704. ' . MYSQL_PREF . 'images.image_hauteur,
  705. ' . MYSQL_PREF . 'categories.categorie_id AS album_id,
  706. ' . MYSQL_PREF . 'categories.categorie_nom AS album_nom
  707. FROM ' . MYSQL_PREF . 'images,
  708. ' . MYSQL_PREF . 'categories
  709. WHERE ' . MYSQL_PREF . 'images.image_visible = "1"
  710. AND ' . MYSQL_PREF . 'images.categorie_parent_id = ' . MYSQL_PREF . 'categories.categorie_id'
  711. . $this->images_protect(MYSQL_PREF . 'images.image') . '
  712. ORDER BY RAND()
  713. LIMIT 1';
  714. $image_hasard = $this->mysql->select($mysql_requete);
  715. if (!is_array($image_hasard)) {
  716. return;
  717. }
  718. $file = $image_hasard[0]['image_chemin'];
  719. $thumb = GALERIE_PATH . '/getimg.php?img=' . $file;
  720. $this->template['image_hasard']['thumb'] = $thumb;
  721. $this->template['image_hasard']['nom'] = $image_hasard[0]['image_nom'];
  722. $this->template['image_hasard']['album_nom'] = $image_hasard[0]['album_nom'];
  723. $this->template['image_hasard']['album_id'] = $image_hasard[0]['album_id'];
  724. // Méthode d'affichage de l'image.
  725. $image_text = (IMG_TEXTE) ? 'getitext.php?i=' : GALERIE_ALBUMS . '/';
  726. switch ($this->config['galerie_images_window']) {
  727. case 0 :
  728. $this->template['image_hasard']['lien'] = outils::genLink('?img=' . $image_hasard[0]['image_id'], $image_hasard[0]['image_nom']);
  729. break;
  730. case 1 :
  731. $this->template['image_hasard']['lien'] = GALERIE_PATH . '/' . $image_text . $image_hasard[0]['image_chemin'];
  732. break;
  733. case 2 :
  734. $largeur = $image_hasard[0]['image_largeur'] + 40;
  735. $hauteur = $image_hasard[0]['image_hauteur'] + 30;
  736. $this->template['image_hasard']['lien'] = "javascript:window.open('"
  737. . GALERIE_PATH . '/' . $image_text . $image_hasard[0]['image_chemin']
  738. . "','','scrollbars=yes,status=no,resizable=yes,width="
  739. . $largeur
  740. . ",height="
  741. . $hauteur
  742. . ",top=0,left=0');void(0);";
  743. break;
  744. }
  745. }
  746. }
  747. /*
  748. * Categories.
  749. */
  750. function categorie() {
  751. // Nombre de vignettes par page.
  752. $this->choix['vn'] = $this->config['vignettes_cat_line'];
  753. $this->choix['vl'] = $this->config['vignettes_cat_col'];
  754. $this->params['limit_vignettes'] = $this->choix['vn'] * $this->choix['vl'];
  755. $this->template['infos']['nb_vignettes'] = $this->params['limit_vignettes'];
  756. $this->template['infos']['vignettes_col'] = $this->choix['vn'];
  757. $this->template['infos']['vignettes_line'] = $this->choix['vl'];
  758. $this->infos_categorie();
  759. $this->deconnect();
  760. // La catégorie est-elle protégée par un mot de passe ?
  761. if (!empty($this->params['objet_actuel']['categorie_pass'])) {
  762. $this->template['infos']['pass'] = 1;
  763. // Membres : droits d'accčs.
  764. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  765. $verif_pass = false;
  766. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] != 'aucun') {
  767. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'tous') {
  768. $verif_pass = true;
  769. } else {
  770. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  771. if (in_array($this->params['objet_actuel']['categorie_pass'], $passwords)) {
  772. $verif_pass = true;
  773. }
  774. }
  775. }
  776. if (!$verif_pass) {
  777. header('Location: ' . outils::genLink('?cat=1'));
  778. exit;
  779. }
  780. // L'utilisateur a-t-il entré le bon mot de passe ?
  781. } else {
  782. $pass = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['categorie_pass']);
  783. $categorie_pass = $this->passwords->lire($pass);
  784. if (!$categorie_pass || outils::decrypte($categorie_pass, $this->config['galerie_key']) !== $this->params['objet_actuel']['categorie_pass']) {
  785. $l = outils::genLink('?section=pass&cat=' . $this->params['objet_actuel']['categorie_id'], '', $this->params['objet_actuel']['categorie_nom'], 0, '&');
  786. header('Location: ' . $l);
  787. exit;
  788. }
  789. }
  790. }
  791. // Récupération des objets contenus dans la catégorie actuelle.
  792. $actuel = $this->params['objet_actuel']['categorie_chemin'];
  793. $actuel = ($actuel == '.') ? '' : $actuel;
  794. if (!empty($this->config['vignettes_cat_type'])) {
  795. $type = ',(' . MYSQL_PREF . 'categories.categorie_derniere_modif/' . MYSQL_PREF . 'categories.categorie_derniere_modif) AS type';
  796. } else {
  797. $type = '';
  798. }
  799. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'categories.*,
  800. ' . MYSQL_PREF . 'images.image_chemin AS representant
  801. ' . $type . '
  802. FROM ' . MYSQL_PREF . 'categories,' . MYSQL_PREF . 'images
  803. WHERE ' . MYSQL_PREF . 'categories.categorie_visible = "1"
  804. AND ' . MYSQL_PREF . 'categories.categorie_chemin REGEXP "^' . $actuel . '[^/]+/$"
  805. AND ' . MYSQL_PREF . 'categories.image_representant_id = ' . MYSQL_PREF . 'images.image_id'
  806. . $this->users_pass('categories.categorie_pass') . '
  807. ORDER BY ' . $this->config['vignettes_cat_type'] . str_replace('categorie', MYSQL_PREF . 'categories.categorie', $this->config['vignettes_cat_ordre']) . '
  808. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  809. $this->params['objets'] = $this->mysql->select($mysql_requete);
  810. if (empty($this->params['objets'])) {
  811. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  812. exit;
  813. }
  814. // On récupčre le nombre d'albums et de catégories totales
  815. // contenues dans la catégorie actuelle.
  816. $mysql_requete = 'SELECT categorie_derniere_modif FROM ' . MYSQL_PREF . 'categories
  817. WHERE categorie_visible = "1" AND
  818. categorie_chemin REGEXP "^' . $actuel . '[^/]+/$"'
  819. . $this->users_pass('categories.categorie_pass');
  820. $objets = $this->mysql->select($mysql_requete);
  821. $this->template['stats']['nb_albums'] = 0;
  822. $this->template['stats']['nb_categories'] = 0;
  823. $this->params['nb_objets'] = 0;
  824. if (is_array($objets)) {
  825. $this->params['nb_objets'] = count($objets);
  826. for ($i = 0; $i < count($objets); $i++) {
  827. if (empty($objets[$i][0])) {
  828. $this->template['stats']['nb_categories']++;
  829. } else {
  830. $this->template['stats']['nb_albums']++;
  831. }
  832. }
  833. }
  834. // La categorie est-elle un album ?
  835. if ($this->params['objet_actuel']['categorie_derniere_modif'] > 0) {
  836. header('Location: ' . outils::genLink('?cat=1'));
  837. exit;
  838. }
  839. $this->nouvelles_images();
  840. $this->stats_categorie();
  841. $this->hierarchie();
  842. $this->cat_voisines();
  843. $this->infos_vignettes();
  844. // On génčre le tableau contenant toutes les infos catégories,
  845. // albums, images et vignettes pour le template.
  846. if (is_array($this->params['objets'])) {
  847. // On ne garde que le nombre de catégories en fonction du nombre de vignettes ŕ afficher par page.
  848. for ($n = 0; $n < count($this->params['objets']); $n++) {
  849. // Catégorie ou album ?
  850. if (empty($this->params['objets'][$n]['categorie_derniere_modif'])) {
  851. $this->template['vignettes'][$n]['type'] = 'categorie';
  852. $this->template['vignettes'][$n]['page'] = outils::genLink('?cat=' . $this->params['objets'][$n]['categorie_id'], '', $this->params['objets'][$n]['categorie_nom']);
  853. } else {
  854. $this->template['vignettes'][$n]['type'] = 'album';
  855. $this->template['vignettes'][$n]['page'] = outils::genLink('?alb=' . $this->params['objets'][$n]['categorie_id'], '', $this->params['objets'][$n]['categorie_nom']);
  856. }
  857. // On détermine le nombre d'images récentes.
  858. if ($this->choix['recent']
  859. && $this->params['objets'][$n]['categorie_dernier_ajout'] > $this->params['time_limit']) {
  860. if ($this->config['galerie_recent_nb'] && $this->choix['sn']) {
  861. $mysql_requete = 'SELECT COUNT(*) FROM ' . MYSQL_PREF . 'images WHERE
  862. image_chemin LIKE "' . $this->params['objets'][$n]['categorie_chemin'] . '%" AND
  863. image_date > ' . $this->params['time_limit'] . ' AND
  864. image_visible = "1"' . $this->images_protect();
  865. $this->template['vignettes'][$n]['recent'] = $this->mysql->select($mysql_requete, 5);
  866. } else {
  867. $this->template['vignettes'][$n]['recent'] = -1;
  868. }
  869. }
  870. // Autres informations.
  871. $this->template['vignettes'][$n]['id'] = $this->params['objets'][$n]['categorie_id'];
  872. $this->template['vignettes'][$n]['chemin'] = $this->params['objets'][$n]['representant'];
  873. $this->template['vignettes'][$n]['nom'] = outils::html_specialchars(strip_tags($this->params['objets'][$n]['categorie_nom']));
  874. $this->template['vignettes'][$n]['description'] = str_replace('&', '&amp;', nl2br($this->params['objets'][$n]['categorie_description']));
  875. $this->template['vignettes'][$n]['poids'] = $this->params['objets'][$n]['categorie_poids'];
  876. $this->template['vignettes'][$n]['nb_images'] = $this->params['objets'][$n]['categorie_images'];
  877. $this->template['vignettes'][$n]['nb_hits'] = $this->params['objets'][$n]['categorie_hits'];
  878. $this->template['vignettes'][$n]['nb_commentaires'] = $this->params['objets'][$n]['categorie_commentaires'];
  879. $this->template['vignettes'][$n]['nb_votes'] = $this->params['objets'][$n]['categorie_votes'];
  880. $this->template['vignettes'][$n]['note'] = $this->params['objets'][$n]['categorie_note'];
  881. // Vérification mots de passe.
  882. $cat_pass = $this->params['objets'][$n]['categorie_pass'];
  883. $pass = preg_replace('`^(\d+):.+`', '$1', $cat_pass);
  884. $categorie_pass = $this->passwords->lire($pass);
  885. if (!$categorie_pass || outils::decrypte($categorie_pass, $this->config['galerie_key']) !== $cat_pass) {
  886. $this->template['vignettes'][$n]['pass'] = $cat_pass;
  887. // Droits.
  888. if ($cat_pass && isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  889. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] != 'aucun') {
  890. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'tous') {
  891. $this->template['vignettes'][$n]['pass'] = '';
  892. } else {
  893. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  894. if (in_array($cat_pass, $passwords)) {
  895. $this->template['vignettes'][$n]['pass'] = '';
  896. }
  897. }
  898. }
  899. }
  900. }
  901. // On réduit éventuellement les informations des objets.
  902. if (isset($this->params['categories_pass'][$this->params['objets'][$n]['categorie_chemin']])) {
  903. $pass_stats = $this->params['categories_pass'][$this->params['objets'][$n]['categorie_chemin']];
  904. $this->template['vignettes'][$n]['poids'] -= $pass_stats['poids'];
  905. $this->template['vignettes'][$n]['nb_images'] -= $pass_stats['images'];
  906. $this->template['vignettes'][$n]['nb_hits'] -= $pass_stats['hits'];
  907. $this->template['vignettes'][$n]['nb_commentaires'] -= $pass_stats['commentaires'];
  908. $this->template['vignettes'][$n]['nb_votes'] -= $pass_stats['votes'];
  909. if ($pass_stats['note'] > 0) {
  910. if ($this->template['vignettes'][$n]['nb_votes'] > 0) {
  911. $this->template['vignettes'][$n]['note'] = ($this->template['vignettes'][$n]['note']*2) - $pass_stats['note'];
  912. } else {
  913. $this->template['vignettes'][$n]['note'] = 0;
  914. }
  915. }
  916. }
  917. }
  918. }
  919. // Tags.
  920. $this->tags();
  921. // On n'a plus besoin de la bdd.
  922. $this->mysql->fermer();
  923. $this->liens_pages();
  924. $this->lien_retour();
  925. $this->description_categorie();
  926. $this->affichage_elements();
  927. $this->template['user']['vignettes'] = 0;
  928. $this->template['user']['ordre'] = 0;
  929. $this->user_autorisations();
  930. $this->template['infos']['nom'] = $this->params['objet_actuel']['categorie_nom'];
  931. // Message d'accueil.
  932. if ($this->params['objet_id'] == 1) {
  933. $this->template['infos']['accueil'] = $this->config['galerie_message_accueil'];
  934. }
  935. // Mode d'affichage des vignettes.
  936. if ($this->config['vignettes_cat_mode'] == 'etendue') {
  937. unset($this->template['infos']['description']);
  938. define('THUMB_CAT_COMPACT', FALSE);
  939. } else {
  940. define('THUMB_CAT_COMPACT', TRUE);
  941. }
  942. if (empty($this->template['infos']['pass'])) {
  943. $this->template['infos']['rss_objet'] = 1;
  944. }
  945. }
  946. /*
  947. * Albums.
  948. */
  949. function album() {
  950. $this->nb_vignettes();
  951. $this->ordre();
  952. $this->infos_categorie();
  953. $this->deconnect();
  954. // L'album est-il protégé par un mot de passe ?
  955. if (!empty($this->params['objet_actuel']['categorie_pass'])) {
  956. $this->template['infos']['pass'] = 1;
  957. // Membres : droits d'accčs.
  958. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  959. $verif_pass = false;
  960. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] != 'aucun') {
  961. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'tous') {
  962. $verif_pass = true;
  963. } else {
  964. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  965. if (in_array($this->params['objet_actuel']['categorie_pass'], $passwords)) {
  966. $verif_pass = true;
  967. }
  968. }
  969. }
  970. if (!$verif_pass) {
  971. header('Location: ' . outils::genLink('?cat=1'));
  972. exit;
  973. }
  974. // L'utilisateur a-t-il entré le bon mot de passe ?
  975. } else {
  976. $pass = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['categorie_pass']);
  977. $album_pass = $this->passwords->lire($pass);
  978. if (!$album_pass || outils::decrypte($album_pass, $this->config['galerie_key']) !== $this->params['objet_actuel']['categorie_pass']) {
  979. $l = outils::genLink('?section=pass&alb=' . $this->params['objet_actuel']['categorie_id'], '', $this->params['objet_actuel']['categorie_nom'], 0, '&');
  980. header('Location: ' . $l);
  981. exit;
  982. }
  983. }
  984. }
  985. // On récupčre toutes les informations des images correspondant aux vignettes ŕ afficher sur la page.
  986. $this->params['limit_vignettes'] = $this->choix['vn'] * $this->choix['vl'];
  987. $mysql_requete = 'SELECT * FROM ' . MYSQL_PREF . 'images
  988. WHERE image_chemin LIKE "' . $this->params['objet_actuel']['categorie_chemin'] . '%"
  989. AND image_visible="1" ORDER BY ' . $this->mysql_order() . '
  990. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  991. $this->params['objets'] = $this->mysql->select($mysql_requete);
  992. if (empty($this->params['objets'])) {
  993. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  994. }
  995. // L'objet actuel est-il une catégorie ?
  996. if ($this->params['objet_actuel']['categorie_derniere_modif'] == 0) {
  997. header('Location: ' . outils::genLink('?cat=1'));
  998. exit;
  999. }
  1000. $this->nouvelles_images();
  1001. $this->stats_categorie();
  1002. $this->hierarchie();
  1003. $this->cat_voisines();
  1004. // Tags.
  1005. $this->tags();
  1006. // On n'a plus besoin de la bdd.
  1007. $this->mysql->fermer();
  1008. $this->vignettes_album();
  1009. $this->liens_pages();
  1010. $this->lien_retour();
  1011. $this->description_categorie();
  1012. $this->infos_vignettes();
  1013. $this->affichage_elements();
  1014. $this->user_autorisations();
  1015. $this->template['infos']['nom'] = $this->params['objet_actuel']['categorie_nom'];
  1016. // La description doit-elle ętre affichée ?
  1017. if ($this->config['vignettes_cat_mode'] == 'etendue') {
  1018. unset($this->template['infos']['description']);
  1019. }
  1020. if (empty($this->template['infos']['pass'])) {
  1021. $this->template['infos']['rss_objet'] = 1;
  1022. }
  1023. }
  1024. /*
  1025. * Images.
  1026. */
  1027. function image() {
  1028. $this->nb_vignettes();
  1029. $this->ordre();
  1030. // Favori ?
  1031. if (isset($_GET['addfav']) &&
  1032. $this->template['infos']['membres_connexion'] === false) {
  1033. if ($_GET['addfav'] == 0) {
  1034. $mysql_requete = 'DELETE FROM ' . MYSQL_PREF . 'favoris
  1035. WHERE image_id = "' . $this->params['objet_id'] . '"
  1036. AND user_id = "' . $this->template['membre_user'][0]['user_id'] . '"';
  1037. $this->mysql->requete($mysql_requete);
  1038. }
  1039. if ($_GET['addfav'] == 1) {
  1040. $mysql_requete = 'SELECT fav_id
  1041. FROM ' . MYSQL_PREF . 'favoris
  1042. WHERE image_id = "' . $this->params['objet_id'] . '"
  1043. AND user_id = "' . $this->template['membre_user'][0]['user_id'] . '"';
  1044. $test = $this->mysql->select($mysql_requete);
  1045. if (!is_array($test)) {
  1046. $mysql_requete = 'INSERT INTO ' . MYSQL_PREF . 'favoris (image_id, user_id)
  1047. VALUES ("' . $this->params['objet_id'] . '",
  1048. "' . $this->template['membre_user'][0]['user_id'] . '")';
  1049. $this->mysql->requete($mysql_requete);
  1050. }
  1051. }
  1052. }
  1053. // On récupčre toutes les informations de l'image ŕ afficher.
  1054. $user_id = (isset($this->template['membre_user'][0]['user_id'])) ? $this->template['membre_user'][0]['user_id'] : 0;
  1055. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.*,
  1056. ' . MYSQL_PREF . 'favoris.user_id,
  1057. ' . MYSQL_PREF . 'users.user_login
  1058. FROM ' . MYSQL_PREF . 'images JOIN ' . MYSQL_PREF . 'users USING (user_id)
  1059. LEFT JOIN ' . MYSQL_PREF . 'favoris
  1060. ON ' . MYSQL_PREF . 'images.image_id = ' . MYSQL_PREF . 'favoris.image_id
  1061. AND ' . MYSQL_PREF . 'favoris.user_id = "' . $user_id . '"
  1062. WHERE ' . MYSQL_PREF . 'images.image_id = "' . $this->params['objet_id'] . '"
  1063. AND ' . MYSQL_PREF . 'images.image_visible = "1"';
  1064. $this->params['objet_actuel'] = $this->mysql->select($mysql_requete, 11);
  1065. $this->template['image'] = $this->params['objet_actuel'];
  1066. $this->template['image']['image_chemin'] = GALERIE_ALBUMS . '/' . $this->template['image']['image_chemin'];
  1067. $this->template['infos']['objet'] = $this->params['objet_id'];
  1068. if (!is_array($this->params['objet_actuel']) || !$this->params['objet_actuel']['image_visible']) {
  1069. header('Location: ' . outils::genLink('?cat=1'));
  1070. exit;
  1071. }
  1072. // Correction hauteur si l'option texte sur image est activée.
  1073. if (IMG_TEXTE) {
  1074. $this->template['image']['image_hauteur'] = $this->template['image']['image_hauteur'] + $this->config['galerie_images_text_correction'];
  1075. } else {
  1076. $this->config['galerie_images_text_correction'] = 0;
  1077. }
  1078. $this->deconnect();
  1079. // L'image est-elle protégée par un mot de passe ?
  1080. if (!empty($this->params['objet_actuel']['image_pass'])) {
  1081. $this->template['infos']['pass'] = 1;
  1082. // Membres : droits d'accčs.
  1083. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  1084. $verif_pass = false;
  1085. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] != 'aucun') {
  1086. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'tous') {
  1087. $verif_pass = true;
  1088. } else {
  1089. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  1090. if (in_array($this->params['objet_actuel']['image_pass'], $passwords)) {
  1091. $verif_pass = true;
  1092. }
  1093. }
  1094. }
  1095. if (!$verif_pass) {
  1096. header('Location: ' . outils::genLink('?cat=1'));
  1097. exit;
  1098. }
  1099. // L'utilisateur a-t-il entré le bon mot de passe ?
  1100. } else {
  1101. $pass = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['image_pass']);
  1102. $image_pass = $this->passwords->lire($pass);
  1103. if (!$image_pass || outils::decrypte($image_pass, $this->config['galerie_key']) !== $this->params['objet_actuel']['image_pass']) {
  1104. $l = outils::genLink('?section=pass&img=' . $this->params['objet_actuel']['image_id'], $this->params['objet_actuel']['image_nom'], '', 0, '&');
  1105. header('Location: ' . $l);
  1106. exit;
  1107. }
  1108. }
  1109. }
  1110. $this->hierarchie();
  1111. $this->note();
  1112. $this->new_comment();
  1113. $this->get_comments();
  1114. // Visites.
  1115. $this->hits();
  1116. // S'agit-il d'une recherche ?
  1117. if (isset($_GET['search'])) {
  1118. $this->recherche(1);
  1119. $this->template['nav']['voisines'] = $this->params['objets'];
  1120. $this->template['infos']['objet'] = $_GET['img'];
  1121. $this->template['infos']['special'] = 'search';
  1122. // S'agit-il d'un affichage "spécial" ?
  1123. } elseif (isset($_GET['images']) ||
  1124. isset($_GET['recentes']) ||
  1125. isset($_GET['hits']) ||
  1126. isset($_GET['commentaires']) ||
  1127. isset($_GET['votes']) ||
  1128. isset($_GET['tag']) ||
  1129. isset($_GET['mimg']) ||
  1130. isset($_GET['mfav']) ||
  1131. isset($_GET['date_creation']) ||
  1132. isset($_GET['date_ajout'])) {
  1133. $cat = 1;
  1134. if (isset($_GET['images'])) {
  1135. $this->params['objet_type'] = 'images';
  1136. $cat = $_GET['images'];
  1137. } elseif (isset($_GET['recentes'])) {
  1138. $this->nouvelles_images();
  1139. $this->params['objet_type'] = 'recentes';
  1140. $cat = $_GET['recentes'];
  1141. } elseif (isset($_GET['hits'])) {
  1142. $this->params['objet_type'] = 'hits';
  1143. $cat = $_GET['hits'];
  1144. } elseif (isset($_GET['commentaires'])) {
  1145. $this->params['objet_type'] = 'commentaires';
  1146. $cat = $_GET['commentaires'];
  1147. } elseif (isset($_GET['votes'])) {
  1148. $this->params['objet_type'] = 'votes';
  1149. $cat = $_GET['votes'];
  1150. } elseif (isset($_GET['date_creation'])) {
  1151. $this->params['objet_type'] = 'date_creation';
  1152. $cat = (isset($_GET['cat'])) ? $_GET['cat'] : $cat;
  1153. $cat = (isset($_GET['alb'])) ? $_GET['alb'] : $cat;
  1154. } elseif (isset($_GET['date_ajout'])) {
  1155. $this->params['objet_type'] = 'date_ajout';
  1156. $cat = (isset($_GET['cat'])) ? $_GET['cat'] : $cat;
  1157. $cat = (isset($_GET['alb'])) ? $_GET['alb'] : $cat;
  1158. } elseif (isset($_GET['tag'])) {
  1159. $this->params['objet_type'] = 'tag';
  1160. $cat = (isset($_GET['cat'])) ? $_GET['cat'] : $cat;
  1161. $cat = (isset($_GET['alb'])) ? $_GET['alb'] : $cat;
  1162. }
  1163. $this->template['infos']['special'] = $this->params['objet_type'];
  1164. // On récupčre les informations basiques de l'objet.
  1165. if (preg_match('`^\d{1,12}$`', $cat)) {
  1166. $mysql_requete = 'SELECT categorie_id,
  1167. categorie_nom,
  1168. categorie_chemin,
  1169. categorie_derniere_modif
  1170. FROM ' . MYSQL_PREF . 'categories
  1171. WHERE categorie_id = "' . $cat . '"';
  1172. $this->template['infos']['special_cat'] = $this->mysql->select($mysql_requete);
  1173. if ($this->template['infos']['special_cat'] == 'vide') {
  1174. header('Location: ' . outils::genLink('?cat=1'));

Large files files are truncated, but you can click here to view the full file