PageRenderTime 130ms CodeModel.GetById 20ms RepoModel.GetById 1ms 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
  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'));
  1175. exit;
  1176. }
  1177. $this->params['objet_actuel']['categorie_chemin'] = $this->template['infos']['special_cat'][0]['categorie_chemin'];
  1178. } else {
  1179. header('Location: ' . outils::genLink('?cat=1'));
  1180. exit;
  1181. }
  1182. // Lien historique.
  1183. $type = ($this->template['infos']['special_cat'][0]['categorie_derniere_modif']) ? 'alb' : 'cat';
  1184. $this->template['historique']['lien'] = $type . '=' . $cat;
  1185. // On récupčre les informations de toutes les images.
  1186. if (isset($_GET['mfav'])) {
  1187. $this->get_membres_favoris();
  1188. } elseif (isset($_GET['mimg'])) {
  1189. $this->get_membres_images();
  1190. } elseif (isset($_GET['tag'])) {
  1191. $this->get_images_tag();
  1192. } else {
  1193. $this->get_speciales(1);
  1194. }
  1195. $this->template['nav']['voisines'] = $this->params['objets'];
  1196. $this->template['infos']['nb_images'] = $this->params['nb_objets'];
  1197. } else {
  1198. // On récupčre les informations de base de toutes les images de l'album.
  1199. $mysql_requete = 'SELECT image_id,image_nom FROM ' . MYSQL_PREF . 'images
  1200. WHERE image_chemin LIKE "' . dirname($this->params['objet_actuel']['image_chemin']) . '/%"
  1201. AND image_visible="1"
  1202. ORDER BY ' . $this->mysql_order();
  1203. $this->template['nav']['voisines'] = $this->mysql->select($mysql_requete);
  1204. }
  1205. // On n'a plus besoin de la bdd.
  1206. $this->mysql->fermer();
  1207. // On génčre les liens pour la navigation entre les pages.
  1208. if (is_array($this->template['nav']['voisines'])) {
  1209. $this->template['nav']['premiere'][1] = $this->template['nav']['voisines'][0]['image_id'];
  1210. if (isset($this->template['nav']['voisines'][0]['image_nom'])) {
  1211. $this->template['nav']['premiere']['image_nom'] = $this->template['nav']['voisines'][0]['image_nom'];
  1212. }
  1213. for ($i = 0; $i < count($this->template['nav']['voisines']); $i++) {
  1214. if ($this->template['nav']['voisines'][$i]['image_id'] == $this->template['image']['image_id']) {
  1215. if (isset($this->template['nav']['voisines'][$i-1]['image_id'])) {
  1216. $this->template['nav']['precedente'][1] = $this->template['nav']['voisines'][$i-1]['image_id'];
  1217. if (isset($this->template['nav']['voisines'][$i-1]['image_nom'])) {
  1218. $this->template['nav']['precedente']['image_nom'] = $this->template['nav']['voisines'][$i-1]['image_nom'];
  1219. }
  1220. }
  1221. $this->template['infos']['objet_num'] = $i+1;
  1222. if (isset($this->template['nav']['voisines'][$i+1]['image_id'])) {
  1223. $this->template['nav']['suivante'][1] = $this->template['nav']['voisines'][$i+1]['image_id'];
  1224. if (isset($this->template['nav']['voisines'][$i+1]['image_nom'])) {
  1225. $this->template['nav']['suivante']['image_nom'] = $this->template['nav']['voisines'][$i+1]['image_nom'];
  1226. }
  1227. }
  1228. break;
  1229. }
  1230. }
  1231. $this->template['nav']['derniere'][1] = $this->template['nav']['voisines'][count($this->template['nav']['voisines'])-1]['image_id'];
  1232. if (isset($this->template['nav']['voisines'][count($this->template['nav']['voisines'])-1]['image_nom'])) {
  1233. $this->template['nav']['derniere']['image_nom'] = $this->template['nav']['voisines'][count($this->template['nav']['voisines'])-1]['image_nom'];
  1234. }
  1235. }
  1236. $this->lien_retour();
  1237. // Autorisation des choix utilisateurs.
  1238. $this->config['user_image_ajust'] = ($this->config['galerie_images_resize'] == 2) ? 0 : $this->config['user_image_ajust'];
  1239. $this->perso_image();
  1240. if ($this->config['user_perso']) {
  1241. $this->template['user']['style'] = $this->config['user_style'];
  1242. if ($this->template['user']['image_taille'] ||
  1243. $this->template['user']['style']) {
  1244. $this->template['user']['perso'] = 1;
  1245. } else {
  1246. $this->template['user']['perso'] = 0;
  1247. }
  1248. } else {
  1249. $this->template['user']['perso'] = 0;
  1250. }
  1251. // Informations EXIF.
  1252. $this->template['infos']['exif'] = 0;
  1253. $infos_exif = 0;
  1254. if ($this->config['active_exif'] && function_exists('read_exif_data')
  1255. && (strtolower(substr($this->template['image']['image_chemin'], -4)) == '.jpg' || strtolower(substr($this->template['image']['image_chemin'], -5)) == '.jpeg')) {
  1256. $exif = @read_exif_data($this->template['image']['image_chemin'], 'ANY_TAG', true, false);
  1257. if ($exif) {
  1258. $this->template['infos']['exif'] = 1;
  1259. $gep = unserialize($this->config['galerie_exif_params']);
  1260. foreach ($gep as $section => $tags) {
  1261. foreach ($tags as $tag => $params) {
  1262. if ($params['active']) {
  1263. if (isset($exif[$section][$tag])) {
  1264. switch ($params['method']) {
  1265. case 'simple' :
  1266. $temp = $this->exif_simple($params, $exif[$section][$tag]);
  1267. break;
  1268. case 'date' :
  1269. $temp = $this->exif_date($params, $exif[$section][$tag]);
  1270. break;
  1271. case 'nombre' :
  1272. $temp = $this->exif_nombre($params, $exif[$section][$tag]);
  1273. break;
  1274. case 'liste' :
  1275. $temp = $this->exif_liste($params, $exif[$section][$tag]);
  1276. break;
  1277. case 'version' :
  1278. $temp = $this->exif_version($params, $exif[$section][$tag]);
  1279. break;
  1280. }
  1281. if ($temp) {
  1282. $this->template['exif']['infos'][$params['desc']] = $temp;
  1283. $infos_exif = 1;
  1284. $temp = '';
  1285. }
  1286. }
  1287. }
  1288. }
  1289. }
  1290. if (!$infos_exif) {
  1291. $this->template['infos']['exif'] = 0;
  1292. }
  1293. }
  1294. }
  1295. // Informations IPTC
  1296. $this->template['infos']['iptc'] = 0;
  1297. if ($this->config['active_iptc']) {
  1298. $size = @getimagesize($this->template['image']['image_chemin'], $info);
  1299. if (is_array($info)) {
  1300. $data = @iptcparse($info['APP13']);
  1301. if (is_array($data)) {
  1302. $iptc_champs = unserialize($this->config['galerie_iptc_params']);
  1303. foreach ($data as $k => $v) {
  1304. if (isset($iptc_champs[$k]) && $iptc_champs[$k]['active']) {
  1305. $d = implode(', ', $v);
  1306. $d = trim($d);
  1307. if (!empty($d)) {
  1308. $this->template['iptc']['infos'][$iptc_champs[$k]['nom']] = $d;
  1309. }
  1310. }
  1311. }
  1312. }
  1313. }
  1314. }
  1315. $this->template['infos']['galerie_key'] = $this->config['galerie_key'];
  1316. if (empty($this->template['infos']['pass'])) {
  1317. $this->template['infos']['rss_objet'] = 1;
  1318. }
  1319. if (isset($_GET['img']) && isset($this->template['infos']['special_cat'])) {
  1320. $this->template['infos']['parent_nom'] = $this->template['infos']['special_cat'][0]['categorie_nom'];
  1321. }
  1322. }
  1323. /*
  1324. * Formatage des informations EXIF.
  1325. */
  1326. function exif_simple($params, $value) {
  1327. if (isset($params['format'])) {
  1328. $format = $params['format'];
  1329. } else {
  1330. $format = '%s';
  1331. }
  1332. return sprintf($format, $value);
  1333. }
  1334. function exif_date($params, $value) {
  1335. if (preg_match('`(\d{4}):(\d{2}):(\d{2}) (\d{2}):(\d{2}):(\d{2})`', $value, $matches)) {
  1336. $date = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]);
  1337. if (isset($params['format'])) {
  1338. $format = $params['format'];
  1339. } else {
  1340. $format = '%d/%m/%Y %H:%M:%S';
  1341. }
  1342. if (!$date || $date == -1 || $value == '0000:00:00 00:00:00'
  1343. || (!$txtdate = @strftime($format, $date))) {
  1344. return 'invalide';
  1345. }
  1346. return $txtdate;
  1347. }
  1348. }
  1349. function exif_nombre($params, $value) {
  1350. if (preg_match('`^[-0-9/+\*]{1,255}$`', $value)) {
  1351. @eval("\$newval=$value;");
  1352. } else {
  1353. $newval = 'invalide';
  1354. }
  1355. return $this->exif_simple($params, $newval);
  1356. }
  1357. function exif_liste($params, $value) {
  1358. $enums = $params['format'];
  1359. if (isset($enums[$value])) {
  1360. return $this->exif_simple('', $enums[$value]);
  1361. } else {
  1362. return 'inconnu';
  1363. }
  1364. }
  1365. function exif_version($params, $value) {
  1366. if (strlen($value) < 5 && is_numeric($value)) {
  1367. $version = sscanf($value, '%2d%2d');
  1368. return sprintf('%d.%d', $version[0], $version[1]);
  1369. }
  1370. }
  1371. function get_membres_favoris() {
  1372. if (!$this->config['users_membres_active']
  1373. || !isset($_GET['mfav'])
  1374. || !preg_match('`^[-_a-z\d]{1,50}$`i', $_GET['mfav'])) {
  1375. header('Location: ' . outils::genLink('?cat=1'));
  1376. exit;
  1377. }
  1378. $fromwhere = ' FROM ' . MYSQL_PREF . 'images,
  1379. ' . MYSQL_PREF . 'users,
  1380. ' . MYSQL_PREF . 'favoris
  1381. WHERE ' . MYSQL_PREF . 'users.user_login = "' . $_GET['mfav'] . '"
  1382. AND ' . MYSQL_PREF . 'favoris.user_id = ' . MYSQL_PREF . 'users.user_id
  1383. AND ' . MYSQL_PREF . 'favoris.image_id = ' . MYSQL_PREF . 'images.image_id
  1384. AND ' . MYSQL_PREF . 'images.image_visible = "1" '
  1385. . $this->images_protect(MYSQL_PREF . 'images.image');
  1386. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.image_id,
  1387. ' . MYSQL_PREF . 'images.image_nom '
  1388. . $fromwhere . '
  1389. ORDER BY ' . MYSQL_PREF . 'favoris.fav_id DESC';
  1390. $this->params['objets'] = $this->mysql->select($mysql_requete);
  1391. if (!is_array($this->params['objets'])) {
  1392. header('Location: ' . outils::genLink('?img=' . $this->params['objet_actuel']['image_id'], $this->params['objet_actuel']['image_nom']));
  1393. exit;
  1394. }
  1395. // On vérifie si l'image actuelle se trouve bien dans les favoris.
  1396. $ok = false;
  1397. for ($i = 0; $i < count($this->params['objets']); $i++) {
  1398. if ($this->params['objets'][$i]['image_id'] == $this->params['objet_actuel']['image_id']) {
  1399. $ok = true;
  1400. break;
  1401. }
  1402. }
  1403. if ($ok === false) {
  1404. header('Location: ' . outils::genLink('?img=' . $this->params['objet_actuel']['image_id'], $this->params['objet_actuel']['image_nom']));
  1405. exit;
  1406. }
  1407. // On récupčre le nombre d'images correspondant aux critčres du SELECT.
  1408. $mysql_requete = 'SELECT COUNT(*) ' . $fromwhere;
  1409. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1410. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  1411. }
  1412. function get_membres_images() {
  1413. if (!$this->config['users_membres_active']
  1414. || !isset($_GET['mimg'])
  1415. || !preg_match('`^[-_a-z\d]{1,50}$`i', $_GET['mimg'])) {
  1416. header('Location: ' . outils::genLink('?cat=1'));
  1417. exit;
  1418. }
  1419. // Date d'ajout ?
  1420. $mysql_date = '';
  1421. if (isset($_GET['date_ajout'])) {
  1422. $date = $_GET['date_ajout'];
  1423. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date, $m)) {
  1424. $date_debut = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  1425. $date_fin = mktime(23, 59, 59, $m[2], $m[1], $m[3]);
  1426. } else {
  1427. $date = getdate(time());
  1428. $date_debut = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  1429. $date_fin = mktime(23, 59, 59, $date['mon'], $date['mday'], $date['year']);
  1430. }
  1431. $mysql_date = ' AND ' . MYSQL_PREF . 'images.image_date >= ' . $date_debut . '
  1432. AND ' . MYSQL_PREF . 'images.image_date <= ' . $date_fin;
  1433. }
  1434. $fromwhere = ' FROM ' . MYSQL_PREF . 'images,
  1435. ' . MYSQL_PREF . 'users
  1436. WHERE ' . MYSQL_PREF . 'users.user_login = "' . $_GET['mimg'] . '"
  1437. AND ' . MYSQL_PREF . 'images.user_id = ' . MYSQL_PREF . 'users.user_id
  1438. AND ' . MYSQL_PREF . 'images.image_visible = "1" '
  1439. . $mysql_date
  1440. . $this->images_protect(MYSQL_PREF . 'images.image');
  1441. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.image_id,
  1442. ' . MYSQL_PREF . 'images.image_nom '
  1443. . $fromwhere . '
  1444. ORDER BY ' . $this->mysql_order();
  1445. $this->params['objets'] = $this->mysql->select($mysql_requete);
  1446. if (!is_array($this->params['objets'])) {
  1447. header('Location: ' . outils::genLink('?img=' . $this->params['objet_actuel']['image_id'], $this->params['objet_actuel']['image_nom']));
  1448. exit;
  1449. }
  1450. // On vérifie si l'image actuelle se trouve bien dans les images du membre.
  1451. $ok = false;
  1452. for ($i = 0; $i < count($this->params['objets']); $i++) {
  1453. if ($this->params['objets'][$i]['image_id'] == $this->params['objet_actuel']['image_id']) {
  1454. $ok = true;
  1455. break;
  1456. }
  1457. }
  1458. if ($ok === false) {
  1459. header('Location: ' . outils::genLink('?img=' . $this->params['objet_actuel']['image_id'], $this->params['objet_actuel']['image_nom']));
  1460. exit;
  1461. }
  1462. // On récupčre le nombre d'images correspondant aux critčres du SELECT.
  1463. $mysql_requete = 'SELECT COUNT(*) ' . $fromwhere;
  1464. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1465. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  1466. }
  1467. /*
  1468. * Récupération des tags pour catégories et albums.
  1469. */
  1470. function tags($nolimit = 0) {
  1471. if ($this->config['active_tags']) {
  1472. $path = ($this->params['objet_actuel']['categorie_chemin'] == '.')
  1473. ? '' : $this->params['objet_actuel']['categorie_chemin'];
  1474. // On récupčre les tags par leur ordre d'importance.
  1475. $this->template['tags'] = '';
  1476. $limit = ($nolimit) ? '' : ' LIMIT ' . $this->config['galerie_nb_tags'];
  1477. $mysql_requete = 'SELECT DISTINCT ' . MYSQL_PREF . 'tags.tag_id,
  1478. COUNT(tag_id) AS tag_nombre
  1479. FROM ' . MYSQL_PREF . 'tags INNER JOIN ' . MYSQL_PREF . 'images USING(image_id)
  1480. WHERE ' . MYSQL_PREF . 'images.image_chemin LIKE "' . $path . '%"
  1481. AND ' . MYSQL_PREF . 'images.image_visible = "1"
  1482. ' . $this->images_protect(MYSQL_PREF . 'images.image') . '
  1483. GROUP BY ' . MYSQL_PREF . 'tags.tag_id
  1484. ORDER BY tag_nombre DESC,tag_id ASC'
  1485. . $limit;
  1486. $tags = $this->mysql->select($mysql_requete, 4);
  1487. // On détermine le "poids" de chaque tag, compris entre 1 et 10.
  1488. if (is_array($tags)) {
  1489. $plus_grand = current($tags);
  1490. $plus_grand = $plus_grand['tag_nombre'];
  1491. $plus_petit = end($tags);
  1492. $plus_petit = $plus_petit['tag_nombre'];
  1493. reset($tags);
  1494. $difference = $plus_grand - $plus_petit;
  1495. $increment = ($difference === 0) ? 1 : $difference / 9;
  1496. foreach ($tags as $tag => $infos) {
  1497. $tags[$tag]['weight'] =
  1498. intval(($infos['tag_nombre'] - $plus_petit) / $increment)+1;
  1499. }
  1500. // On trie les tags.
  1501. $sort_tags = array();
  1502. foreach ($tags as $t => $i) {
  1503. $sort_tags[] = $t;
  1504. }
  1505. natcasesort($sort_tags);
  1506. foreach ($sort_tags as $t) {
  1507. $this->template['tags'][$t] = $tags[$t];
  1508. }
  1509. }
  1510. }
  1511. }
  1512. /*
  1513. * Deconnexion.
  1514. */
  1515. function deconnect() {
  1516. if (!empty($_GET['deconnect'])) {
  1517. // On supprime le code contenu dans le cookie.
  1518. if ($this->params['objet_type'] == 'img') {
  1519. $cat = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['image_pass']);
  1520. } else {
  1521. $cat = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['categorie_pass']);
  1522. }
  1523. $this->passwords->effacer($cat);
  1524. if (!$this->passwords->valeur) {
  1525. $this->passwords->valeur = 1;
  1526. $this->passwords->expire = time();
  1527. }
  1528. $this->passwords->ecrire();
  1529. // On renvoie vers la catégorie parente de la catégorie protégée premičre.
  1530. $mysql_requete = 'SELECT categorie_chemin FROM ' . MYSQL_PREF . 'categories
  1531. WHERE categorie_id = "' . $cat . '"';
  1532. $chemin = $this->mysql->select($mysql_requete, 5);
  1533. $path = dirname($chemin);
  1534. if ($path == '.') {
  1535. $l = outils::genLink('?cat=1');
  1536. header('Location: ' . $l);
  1537. exit;
  1538. } else {
  1539. $mysql_requete = 'SELECT categorie_id,
  1540. categorie_nom,
  1541. categorie_derniere_modif
  1542. FROM ' . MYSQL_PREF . 'categories
  1543. WHERE categorie_chemin = "' . $path . '/"';
  1544. $infos = $this->mysql->select($mysql_requete);
  1545. if (!is_array($infos)) {
  1546. $parent_id = 1;
  1547. $type = 'cat';
  1548. $nom = '';
  1549. } else {
  1550. $parent_id = $infos[0]['categorie_id'];
  1551. $type = ($infos[0]['categorie_derniere_modif']) ? 'alb' : 'cat';
  1552. $nom = $infos[0]['categorie_nom'];
  1553. }
  1554. $l = outils::genLink('?' . $type . '=' . $parent_id, '', $nom);
  1555. header('Location: ' . $l);
  1556. exit;
  1557. }
  1558. }
  1559. }
  1560. /*
  1561. * Pages spéciales : images, hits, votes, commentaires et images récentes.
  1562. */
  1563. function speciales() {
  1564. $this->nb_vignettes();
  1565. $this->ordre();
  1566. if (isset($_GET['date_creation']) || isset($_GET['date_ajout'])) {
  1567. $type = (isset($_GET['alb'])) ? 'alb' : 'cat';
  1568. // Identifiant de l'objet.
  1569. if (!empty($_GET[$type]) && preg_match('`^[1-9]\d{0,9}$`', $_GET[$type])) {
  1570. $this->params['objet_id'] = $_GET[$type];
  1571. } else {
  1572. $this->params['objet_id'] = 1;
  1573. }
  1574. }
  1575. $this->infos_categorie();
  1576. // L'objet est-il protégé par un mot de passe ?
  1577. if (!empty($this->params['objet_actuel']['categorie_pass'])) {
  1578. $this->template['infos']['pass'] = 1;
  1579. // Membres : droits d'accčs.
  1580. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  1581. $verif_pass = false;
  1582. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] != 'aucun') {
  1583. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'tous') {
  1584. $verif_pass = true;
  1585. } else {
  1586. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  1587. if (in_array($this->params['objet_actuel']['categorie_pass'], $passwords)) {
  1588. $verif_pass = true;
  1589. }
  1590. }
  1591. }
  1592. if (!$verif_pass) {
  1593. header('Location: ' . outils::genLink('?cat=1'));
  1594. exit;
  1595. }
  1596. // L'utilisateur a-t-il entré le bon mot de passe ?
  1597. } else {
  1598. $pass = preg_replace('`^(\d+):.+`', '$1', $this->params['objet_actuel']['categorie_pass']);
  1599. $categorie_pass = $this->passwords->lire($pass);
  1600. if (!$categorie_pass || outils::decrypte($categorie_pass, $this->config['galerie_key']) !== $this->params['objet_actuel']['categorie_pass']) {
  1601. $l = outils::genLink('?section=pass&' . $this->params['objet_type'] . '=' . $this->params['objet_actuel']['categorie_id'], '', $this->params['objet_actuel']['categorie_nom'], 0, '&');
  1602. header('Location: ' . $l);
  1603. exit;
  1604. }
  1605. }
  1606. }
  1607. $this->nouvelles_images();
  1608. $this->get_speciales();
  1609. $this->tags();
  1610. // On n'a plus besoin de la bdd.
  1611. $this->mysql->fermer();
  1612. $this->vignettes_album();
  1613. $this->liens_pages();
  1614. $this->infos_vignettes();
  1615. $this->affichage_elements();
  1616. if (!empty($this->template['display']['s_hits']) ||
  1617. !empty($this->template['display']['s_comments']) ||
  1618. !empty($this->template['display']['s_votes']) ||
  1619. !empty($this->template['display']['s_recentes'])) {
  1620. $this->template['display']['infos'] = 1;
  1621. }
  1622. $this->user_autorisations();
  1623. if (isset($this->template['infos']['hvc']['nom'])) {
  1624. $this->template['infos']['parent_nom'] = $this->template['infos']['hvc']['nom'];
  1625. } elseif (isset($this->template['historique']['objet_nom'])) {
  1626. $this->template['infos']['parent_nom'] = $this->template['historique']['objet_nom'];
  1627. }
  1628. }
  1629. /*
  1630. * Favoris des membres.
  1631. */
  1632. function membres_favoris() {
  1633. if (!$this->config['users_membres_active']
  1634. || !isset($_GET['mfav'])
  1635. || !preg_match('`^[-_a-z\d]{1,50}$`i', $_GET['mfav'])) {
  1636. header('Location: ' . outils::genLink('?cat=1'));
  1637. exit;
  1638. }
  1639. $this->nb_vignettes();
  1640. $this->ordre();
  1641. $this->nouvelles_images();
  1642. $fromwhere = ' FROM ' . MYSQL_PREF . 'images,
  1643. ' . MYSQL_PREF . 'users,
  1644. ' . MYSQL_PREF . 'favoris
  1645. WHERE ' . MYSQL_PREF . 'users.user_login = "' . $_GET['mfav'] . '"
  1646. AND ' . MYSQL_PREF . 'favoris.user_id = ' . MYSQL_PREF . 'users.user_id
  1647. AND ' . MYSQL_PREF . 'favoris.image_id = ' . MYSQL_PREF . 'images.image_id
  1648. AND ' . MYSQL_PREF . 'images.image_visible = "1" '
  1649. . $this->images_protect(MYSQL_PREF . 'images.image');
  1650. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.* '
  1651. . $fromwhere . '
  1652. ORDER BY ' . MYSQL_PREF . 'favoris.fav_id DESC
  1653. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  1654. $this->params['objets'] = $this->mysql->select($mysql_requete);
  1655. if (empty($this->params['objets'])) {
  1656. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  1657. }
  1658. // On compte le nombre de résultats.
  1659. $mysql_requete = 'SELECT COUNT(*) ' . $fromwhere;
  1660. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1661. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  1662. if ($this->template['infos']['nb_objets'] == 0) {
  1663. header('Location: ' . outils::genLink('?cat=1'));
  1664. exit;
  1665. }
  1666. // On n'a plus besoin de la bdd.
  1667. $this->mysql->fermer();
  1668. $this->vignettes_album();
  1669. $this->liens_pages();
  1670. $this->infos_vignettes();
  1671. $this->affichage_elements();
  1672. $this->user_autorisations();
  1673. $this->template['infos']['tags'] = 0;
  1674. $this->template['infos']['type'] = 'mfav';
  1675. $this->template['infos']['objet'] = $_GET['mfav'];
  1676. $this->template['infos']['nom'] = 'favoris de ' . str_replace('_', ' ', $_GET['mfav']);
  1677. }
  1678. /*
  1679. * Images des membres.
  1680. */
  1681. function membres_images() {
  1682. if (!$this->config['users_membres_active']
  1683. || !isset($_GET['mimg'])
  1684. || !preg_match('`^[-_a-z\d]{1,50}$`i', $_GET['mimg'])) {
  1685. header('Location: ' . outils::genLink('?cat=1'));
  1686. exit;
  1687. }
  1688. $this->nb_vignettes();
  1689. $this->ordre();
  1690. $this->nouvelles_images();
  1691. // Date d'ajout ?
  1692. $mysql_date = '';
  1693. if (isset($_GET['date_ajout'])) {
  1694. $date = $_GET['date_ajout'];
  1695. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date, $m)) {
  1696. $date_debut = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  1697. $date_fin = mktime(23, 59, 59, $m[2], $m[1], $m[3]);
  1698. } else {
  1699. $date = getdate(time());
  1700. $date_debut = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  1701. $date_fin = mktime(23, 59, 59, $date['mon'], $date['mday'], $date['year']);
  1702. }
  1703. $mysql_date = ' AND ' . MYSQL_PREF . 'images.image_date >= ' . $date_debut . '
  1704. AND ' . MYSQL_PREF . 'images.image_date <= ' . $date_fin;
  1705. }
  1706. $fromwhere = ' FROM ' . MYSQL_PREF . 'images,
  1707. ' . MYSQL_PREF . 'users
  1708. WHERE ' . MYSQL_PREF . 'users.user_login = "' . $_GET['mimg'] . '"
  1709. AND ' . MYSQL_PREF . 'images.user_id = ' . MYSQL_PREF . 'users.user_id
  1710. AND ' . MYSQL_PREF . 'images.image_visible = "1" '
  1711. . $mysql_date
  1712. . $this->images_protect(MYSQL_PREF . 'images.image');
  1713. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.* '
  1714. . $fromwhere . '
  1715. ORDER BY ' . $this->mysql_order() . '
  1716. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  1717. $this->params['objets'] = $this->mysql->select($mysql_requete);
  1718. if (empty($this->params['objets'])) {
  1719. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  1720. }
  1721. // On compte le nombre de résultats.
  1722. $mysql_requete = 'SELECT COUNT(*) ' . $fromwhere;
  1723. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1724. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  1725. if ($this->template['infos']['nb_objets'] == 0) {
  1726. header('Location: ' . outils::genLink('?cat=1'));
  1727. exit;
  1728. }
  1729. // On n'a plus besoin de la bdd.
  1730. $this->mysql->fermer();
  1731. $this->vignettes_album();
  1732. $this->liens_pages();
  1733. $this->infos_vignettes();
  1734. $this->affichage_elements();
  1735. $this->user_autorisations();
  1736. $this->template['infos']['tags'] = 0;
  1737. $this->template['infos']['type'] = 'mimg';
  1738. $this->template['infos']['objet'] = $_GET['mimg'];
  1739. $this->template['infos']['nom'] = 'images de ' . str_replace('_', ' ', $_GET['mimg']);;
  1740. }
  1741. function membres_profil() {
  1742. if (empty($_GET['profil']) ||
  1743. !preg_match('`^[-_a-z\d]{3,30}$`i', $_GET['profil'])) {
  1744. header('Location: ' . outils::genLink('?cat=1'));
  1745. exit;
  1746. }
  1747. // Personnalisation.
  1748. if ($this->config['user_perso']) {
  1749. $this->template['user']['style'] = $this->config['user_style'];
  1750. if ($this->template['user']['style']) {
  1751. $this->template['user']['perso'] = 1;
  1752. } else {
  1753. $this->template['user']['perso'] = 0;
  1754. }
  1755. } else {
  1756. $this->template['user']['perso'] = 0;
  1757. }
  1758. $this->template['infos']['section_membres'] = 'profil';
  1759. $this->template['infos']['title'] = $_GET['profil'];
  1760. $this->membre_infos();
  1761. // Nombre de commentaires.
  1762. if ($this->config['galerie_page_comments']
  1763. && $this->config['active_commentaires']) {
  1764. $mysql_requete = 'SELECT COUNT(' . MYSQL_PREF . 'commentaires.commentaire_id)
  1765. FROM ' . MYSQL_PREF . 'commentaires,
  1766. ' . MYSQL_PREF . 'images,
  1767. ' . MYSQL_PREF . 'users
  1768. WHERE ' . MYSQL_PREF . 'commentaires.commentaire_visible = "1"
  1769. AND ' . MYSQL_PREF . 'commentaires.user_id = ' . MYSQL_PREF . 'users.user_id
  1770. AND ' . MYSQL_PREF . 'commentaires.image_id = ' . MYSQL_PREF . 'images.image_id
  1771. AND ' . MYSQL_PREF . 'images.image_visible = "1" '
  1772. . $this->images_protect(MYSQL_PREF . 'images.image') . '
  1773. AND ' . MYSQL_PREF . 'commentaires.user_id = "' . $this->template['membre_profil'][0]['user_id'] . '"';
  1774. $this->template['membre_profil'][0]['nb_comments'] = $this->mysql->select($mysql_requete, 5);
  1775. }
  1776. // Nombre d'images envoyées
  1777. $mysql_requete = 'SELECT COUNT(' . MYSQL_PREF . 'images.image_id)
  1778. FROM ' . MYSQL_PREF . 'images JOIN ' . MYSQL_PREF . 'users USING (user_id)
  1779. WHERE ' . MYSQL_PREF . 'images.image_visible = "1"
  1780. AND ' . MYSQL_PREF . 'images.user_id = "' . $this->template['membre_profil'][0]['user_id'] . '" '
  1781. . $this->images_protect(MYSQL_PREF . 'images.image');
  1782. $this->template['membre_profil'][0]['nb_images'] = $this->mysql->select($mysql_requete, 5);
  1783. // Nombre de favoris.
  1784. $mysql_requete = 'SELECT COUNT(' . MYSQL_PREF . 'favoris.image_id)
  1785. FROM ' . MYSQL_PREF . 'favoris JOIN ' . MYSQL_PREF . 'images USING (image_id)
  1786. WHERE ' . MYSQL_PREF . 'images.image_visible = "1"
  1787. AND ' . MYSQL_PREF . 'favoris.user_id = "' . $this->template['membre_profil'][0]['user_id'] . '" '
  1788. . $this->images_protect(MYSQL_PREF . 'images.image');
  1789. $this->template['membre_profil'][0]['nb_favoris'] = $this->mysql->select($mysql_requete, 5);
  1790. $this->template['infos']['title'] = $this->template['membre_profil'][0]['user_nom'];
  1791. if ($this->template['membre_profil'][0]['groupe_commentaires']
  1792. || $this->template['membre_profil'][0]['groupe_upload']) {
  1793. $this->template['infos']['rss_objet'] = 1;
  1794. }
  1795. $this->template['infos']['objet'] = $_GET['profil'];
  1796. $this->template['infos']['type'] = 'profil';
  1797. }
  1798. /*
  1799. * Ordre de tri pour les requętes SQL.
  1800. */
  1801. function mysql_order() {
  1802. $date_creation_lenght = ($this->params['v_ordre'] == 'date_creation') ? 'LENGTH(' . MYSQL_PREF . 'images.image_date_creation) ' . $this->params['v_sens'] . ',' : '';
  1803. $ordre_criteres = MYSQL_PREF . 'images.image_' . $this->params['v_ordre'] . ' ' . $this->params['v_sens'];
  1804. if ($this->params['v_ordre'] == 'votes') {
  1805. $ordre_criteres .= ', ' . MYSQL_PREF . 'images.image_note ' . $this->params['v_sens'];
  1806. } elseif ($this->params['v_ordre'] == 'note') {
  1807. $ordre_criteres .= ', ' . MYSQL_PREF . 'images.image_votes ' . $this->params['v_sens'];
  1808. }
  1809. $order = $date_creation_lenght . $ordre_criteres;
  1810. return $order . ',' . MYSQL_PREF . 'images.image_id ' . $this->params['v_sens'];
  1811. }
  1812. /*
  1813. * Commentaires des membres.
  1814. */
  1815. function membres_commentaires() {
  1816. if (!$this->config['galerie_page_comments']
  1817. || !$this->config['active_commentaires']
  1818. || !$this->config['users_membres_active']
  1819. || !isset($_GET['mcom'])
  1820. || !preg_match('`^[-_a-z\d]{1,50}$`i', $_GET['mcom'])) {
  1821. header('Location: ' . outils::genLink('?cat=1'));
  1822. exit;
  1823. }
  1824. $this->template['infos']['objet'] = $_GET['mcom'];
  1825. $this->template['infos']['type'] = 'mcom';
  1826. $this->params['limit_vignettes'] = $this->config['galerie_page_comments_nb'];
  1827. $fromwhere = 'FROM ' . MYSQL_PREF . 'categories,
  1828. ' . MYSQL_PREF . 'images,
  1829. ' . MYSQL_PREF . 'commentaires
  1830. LEFT JOIN ' . MYSQL_PREF . 'users
  1831. ON ' . MYSQL_PREF . 'commentaires.user_id = ' . MYSQL_PREF . 'users.user_id
  1832. WHERE ' . MYSQL_PREF . 'users.user_login = "' . $_GET['mcom'] . '"
  1833. AND ' . MYSQL_PREF . 'images.image_commentaires > 0
  1834. AND ' . MYSQL_PREF . 'commentaires.commentaire_visible = "1"
  1835. AND ' . MYSQL_PREF . 'images.image_visible = "1"
  1836. AND ' . MYSQL_PREF . 'commentaires.image_id = ' . MYSQL_PREF . 'images.image_id
  1837. AND ' . MYSQL_PREF . 'categories.categorie_id = ' . MYSQL_PREF . 'images.categorie_parent_id '
  1838. . $this->images_protect(MYSQL_PREF . 'images.image');
  1839. // Récupération des commentaires.
  1840. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'commentaires.commentaire_id,
  1841. ' . MYSQL_PREF . 'commentaires.commentaire_date,
  1842. ' . MYSQL_PREF . 'commentaires.commentaire_auteur,
  1843. ' . MYSQL_PREF . 'commentaires.commentaire_web,
  1844. ' . MYSQL_PREF . 'commentaires.commentaire_message,
  1845. ' . MYSQL_PREF . 'categories.categorie_nom,
  1846. ' . MYSQL_PREF . 'categories.categorie_id,
  1847. ' . MYSQL_PREF . 'images.image_id,
  1848. ' . MYSQL_PREF . 'images.image_nom,
  1849. ' . MYSQL_PREF . 'images.image_chemin,
  1850. ' . MYSQL_PREF . 'images.image_largeur,
  1851. ' . MYSQL_PREF . 'images.image_hauteur,
  1852. ' . MYSQL_PREF . 'users.user_id,
  1853. ' . MYSQL_PREF . 'users.user_login
  1854. ' . $fromwhere . '
  1855. ORDER BY ' . MYSQL_PREF . 'commentaires.commentaire_date DESC
  1856. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  1857. $this->template['commentaires'] = $this->mysql->select($mysql_requete);
  1858. if (is_array($this->template['commentaires'])) {
  1859. $this->template['infos']['parent_nom'] = $this->template['commentaires'][0]['categorie_nom'];
  1860. // Récupération du nombre total de commentaires.
  1861. $mysql_requete = 'SELECT COUNT(' . MYSQL_PREF . 'commentaires.commentaire_id) ' . $fromwhere;
  1862. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1863. } else {
  1864. $this->params['nb_objets'] = 0;
  1865. }
  1866. $this->liens_pages();
  1867. // On n'a plus besoin de la bdd.
  1868. $this->mysql->fermer();
  1869. $this->config['user_vignettes'] = 0;
  1870. $this->user_autorisations();
  1871. $this->template['infos']['nom'] = 'commentaires de ' . str_replace('_', ' ', $_GET['mcom']);
  1872. }
  1873. /*
  1874. * Page des commentaires
  1875. */
  1876. function page_commentaires() {
  1877. if ($this->config['galerie_page_comments']) {
  1878. $this->infos_categorie();
  1879. $this->template['infos_objet'] = $this->params['objet_actuel'];
  1880. $this->params['limit_vignettes'] = $this->config['galerie_page_comments_nb'];
  1881. $path = ($this->params['objet_actuel']['categorie_id'] == 1) ? '' : $this->params['objet_actuel']['categorie_chemin'];
  1882. $where = MYSQL_PREF . 'categories.categorie_chemin LIKE "' . $path . '%"
  1883. AND ' . MYSQL_PREF . 'images.image_commentaires > 0
  1884. AND ' . MYSQL_PREF . 'commentaires.commentaire_visible = "1"
  1885. AND ' . MYSQL_PREF . 'images.image_visible = "1"
  1886. AND ' . MYSQL_PREF . 'commentaires.image_id = ' . MYSQL_PREF . 'images.image_id
  1887. AND ' . MYSQL_PREF . 'categories.categorie_id = ' . MYSQL_PREF . 'images.categorie_parent_id '
  1888. . $this->images_protect(MYSQL_PREF . 'images.image');
  1889. // Récupération des commentaires.
  1890. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'commentaires.commentaire_id,
  1891. ' . MYSQL_PREF . 'commentaires.commentaire_date,
  1892. ' . MYSQL_PREF . 'commentaires.commentaire_auteur,
  1893. ' . MYSQL_PREF . 'commentaires.commentaire_web,
  1894. ' . MYSQL_PREF . 'commentaires.commentaire_message,
  1895. ' . MYSQL_PREF . 'categories.categorie_nom,
  1896. ' . MYSQL_PREF . 'categories.categorie_id,
  1897. ' . MYSQL_PREF . 'images.image_id,
  1898. ' . MYSQL_PREF . 'images.image_nom,
  1899. ' . MYSQL_PREF . 'images.image_chemin,
  1900. ' . MYSQL_PREF . 'images.image_largeur,
  1901. ' . MYSQL_PREF . 'images.image_hauteur,
  1902. ' . MYSQL_PREF . 'users.user_id,
  1903. ' . MYSQL_PREF . 'users.user_login
  1904. FROM ' . MYSQL_PREF . 'categories,
  1905. ' . MYSQL_PREF . 'images,
  1906. ' . MYSQL_PREF . 'commentaires
  1907. LEFT JOIN ' . MYSQL_PREF . 'users
  1908. ON ' . MYSQL_PREF . 'commentaires.user_id = ' . MYSQL_PREF . 'users.user_id
  1909. WHERE ' . $where . '
  1910. ORDER BY ' . MYSQL_PREF . 'commentaires.commentaire_date DESC
  1911. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  1912. $this->template['commentaires'] = $this->mysql->select($mysql_requete);
  1913. if (is_array($this->template['commentaires'])) {
  1914. $this->template['infos']['parent_nom'] = $this->template['commentaires'][0]['categorie_nom'];
  1915. // Récupération du nombre total de commentaires.
  1916. $mysql_requete = 'SELECT COUNT(' . MYSQL_PREF . 'commentaires.commentaire_id)
  1917. FROM ' . MYSQL_PREF . 'commentaires,
  1918. ' . MYSQL_PREF . 'images,
  1919. ' . MYSQL_PREF . 'categories
  1920. WHERE ' . $where;
  1921. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1922. } else {
  1923. $this->params['nb_objets'] = 0;
  1924. }
  1925. $this->liens_pages();
  1926. // On n'a plus besoin de la bdd.
  1927. $this->mysql->fermer();
  1928. $this->config['user_vignettes'] = 0;
  1929. $this->user_autorisations();
  1930. } else {
  1931. header('Location: ' . outils::genLink('?cat=1'));
  1932. exit;
  1933. }
  1934. }
  1935. /*
  1936. * Images taggées.
  1937. */
  1938. function page_tags() {
  1939. if ($this->config['active_tags']) {
  1940. $this->nb_vignettes();
  1941. $this->ordre();
  1942. $this->nouvelles_images();
  1943. // Récupération des informations de la catégorie / album.
  1944. $type = (isset($_GET['alb'])) ? 'alb' : 'cat';
  1945. $this->template['infos']['objet_type'] = $type;
  1946. if (!empty($_GET[$type]) && preg_match('`^[1-9]\d{0,9}$`', $_GET[$type])) {
  1947. $this->params['objet_id'] = $_GET[$type];
  1948. } else {
  1949. $this->params['objet_id'] = 1;
  1950. }
  1951. $this->infos_categorie();
  1952. $this->template['infos_objet'] = $this->params['objet_actuel'];
  1953. $this->template['infos']['parent_nom'] = $this->params['objet_actuel']['categorie_nom'];
  1954. // Date d'ajout ?
  1955. $mysql_date = '';
  1956. if (isset($_GET['date_ajout'])) {
  1957. $date = $_GET['date_ajout'];
  1958. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date, $m)) {
  1959. $date_debut = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  1960. $date_fin = mktime(23, 59, 59, $m[2], $m[1], $m[3]);
  1961. } else {
  1962. $date = getdate(time());
  1963. $date_debut = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  1964. $date_fin = mktime(23, 59, 59, $date['mon'], $date['mday'], $date['year']);
  1965. }
  1966. $mysql_date = ' AND ' . MYSQL_PREF . 'images.image_date >= ' . $date_debut . '
  1967. AND ' . MYSQL_PREF . 'images.image_date <= ' . $date_fin;
  1968. }
  1969. // On récupčre les images correspondant au tag.
  1970. $tag = htmlentities($_GET['tag']);
  1971. $path = ($this->params['objet_actuel']['categorie_chemin'] == '.')
  1972. ? '' : $this->params['objet_actuel']['categorie_chemin'];
  1973. $this->params['limit_vignettes'] = $this->choix['vn'] * $this->choix['vl'];
  1974. $mysql_params = ' WHERE ' . MYSQL_PREF . 'tags.tag_id = "' . outils::protege_mysql($tag, $this->mysql->lien) . '"
  1975. AND ' . MYSQL_PREF . 'images.image_id = ' . MYSQL_PREF . 'tags.image_id
  1976. AND ' . MYSQL_PREF . 'images.image_visible = "1"
  1977. AND ' . MYSQL_PREF . 'images.image_chemin LIKE "' . $path . '%"
  1978. ' . $this->images_protect(MYSQL_PREF . 'images.image')
  1979. . $mysql_date . '
  1980. ORDER BY ' . $this->mysql_order();
  1981. $mysql_requete = 'SELECT DISTINCT ' . MYSQL_PREF . 'images.*
  1982. FROM ' . MYSQL_PREF . 'images,
  1983. ' . MYSQL_PREF . 'tags'
  1984. . $mysql_params . '
  1985. LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  1986. $this->params['objets'] = $this->mysql->select($mysql_requete);
  1987. if (!is_array($this->params['objets'])) {
  1988. header('Location: ' . outils::genLink('?cat=1'));
  1989. exit;
  1990. }
  1991. // Nombre d'images.
  1992. $mysql_requete = 'SELECT COUNT(*)
  1993. FROM ' . MYSQL_PREF . 'images,
  1994. ' . MYSQL_PREF . 'tags'
  1995. . $mysql_params;
  1996. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  1997. // Tags.
  1998. $this->tags();
  1999. // On n'a plus besoin de la bdd.
  2000. $this->mysql->fermer();
  2001. $this->vignettes_album();
  2002. $this->liens_pages();
  2003. $this->infos_vignettes();
  2004. $this->affichage_elements();
  2005. $this->user_autorisations();
  2006. if ($this->params['objet_actuel']['categorie_pass'] == '') {
  2007. $this->template['infos']['rss_objet'] = 1;
  2008. }
  2009. } else {
  2010. header('Location: ' . outils::genLink('?cat=1'));
  2011. exit;
  2012. }
  2013. }
  2014. /*
  2015. * Recherche.
  2016. */
  2017. function search() {
  2018. $this->nb_vignettes();
  2019. $this->ordre();
  2020. $this->recherche();
  2021. $this->nouvelles_images();
  2022. // On n'a plus besoin de la bdd.
  2023. $this->mysql->fermer();
  2024. $this->vignettes_album();
  2025. $this->liens_pages();
  2026. $this->infos_vignettes();
  2027. $this->affichage_elements();
  2028. $this->user_autorisations();
  2029. }
  2030. /*
  2031. * On génčre une liste déroulante de tous les albums disponibles.
  2032. */
  2033. function categories_list($categories, $path = '', $marge = 0, $only_cat = 0) {
  2034. if (!is_array($categories)) {
  2035. return;
  2036. }
  2037. foreach ($categories as $id => $infos) {
  2038. if (preg_match('`^' . $path . '[^/]+/$`', $infos['categorie_chemin'])) {
  2039. unset($categories[$id]);
  2040. // Album.
  2041. if ($infos['categorie_derniere_modif'] > 0 && !$only_cat) {
  2042. $nom = str_repeat('&nbsp;', $marge*5) . '|--&nbsp;' . htmlentities($infos['categorie_nom']);
  2043. $this->template['categories_list'] .= '<option class="alb" value="' . $infos['categorie_id'] . '">' . $nom . '</option>';
  2044. // Catégorie.
  2045. } else {
  2046. $disabled = ($only_cat) ? '' : ' disabled="disabled"';
  2047. $value = ($only_cat) ? $infos['categorie_id'] : '0';
  2048. $class = ($only_cat) ? '' : ' class="cat"';
  2049. $nom = str_repeat('&nbsp;', $marge*5) . htmlentities($infos['categorie_nom']);
  2050. $this->template['categories_list'] .= '<option' . $disabled . $class . ' value="' . $value . '">' . $nom . '</option>';
  2051. $this->categories_list($categories, $infos['categorie_chemin'], $marge+1, $only_cat);
  2052. }
  2053. }
  2054. }
  2055. }
  2056. /*
  2057. * Création d'un album ou d'une catégorie par les membres.
  2058. */
  2059. function membres_create() {
  2060. if (isset($_POST['upload_categorie'])
  2061. && isset($_POST['obj_type'])
  2062. && isset($_POST['obj_name'])) {
  2063. // Quelques vérifications.
  2064. if (!preg_match('`^\d{1,9}$`', $_POST['upload_categorie'])) {
  2065. return;
  2066. }
  2067. if (($_POST['obj_type'] == 'cat' || $_POST['obj_type'] == 'alb') === false) {
  2068. return;
  2069. }
  2070. $objet_type = ($_POST['obj_type'] == 'alb') ? 'l\'album' : 'la catégorie';
  2071. // On vérifie si on peut créer l'objet ŕ cet endroit.
  2072. $mysql_requete = 'SELECT categorie_derniere_modif,
  2073. categorie_chemin
  2074. FROM ' . MYSQL_PREF . 'categories
  2075. WHERE categorie_id = "' . $_POST['upload_categorie'] . '"
  2076. AND categorie_visible != "0"';
  2077. $infos_cat = $this->mysql->select($mysql_requete);
  2078. if (!is_array($infos_cat) || $infos_cat[0]['categorie_derniere_modif']) {
  2079. $this->template['erreur']['new_obj'] = 'Impossible de créer ' . $objet_type . ' ŕ cet endroit.';
  2080. return;
  2081. }
  2082. // Nom de l'objet.
  2083. $obj_nom = strip_tags($_POST['obj_name']);
  2084. $obj_nom = trim($obj_nom);
  2085. if ($obj_nom == '') {
  2086. $this->template['erreur']['new_obj'] = 'Le nom de ' . $objet_type . ' est vide.';
  2087. return;
  2088. }
  2089. if (strlen($obj_nom) > 100) {
  2090. $this->template['erreur']['new_obj'] = 'Le nom de ' . $objet_type . ' ne doit pas contenir plus de 100 caractčres.';
  2091. return;
  2092. }
  2093. if (!preg_match('`^[\'@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť!?$=-]{1,100}$`i', $obj_nom)) {
  2094. $this->template['erreur']['new_obj'] = 'Le nom de ' . $objet_type . ' ne doit pas contenir de caractčres spéciaux.';
  2095. return;
  2096. }
  2097. // Filtrage de la description.
  2098. $obj_desc = '';
  2099. if (!empty($_POST['obj_desc'])) {
  2100. $obj_desc = strip_tags($_POST['obj_desc']);
  2101. $obj_desc = trim($obj_desc);
  2102. if (strlen($obj_desc) > 1500) {
  2103. $this->template['erreur']['new_obj'] = 'La description de ' . $objet_type . ' ne doit pas contenir plus de 1500 caractčres.';
  2104. return;
  2105. }
  2106. if (!preg_match('`^[\'@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť!?$=-]{1,1500}$`i', $obj_desc)) {
  2107. $this->template['erreur']['new_obj'] = 'La description de ' . $objet_type . ' ne doit pas contenir de caractčres spéciaux.';
  2108. return;
  2109. }
  2110. }
  2111. // On vérifie s'il n'y a pas déjŕ un objet du męme nom.
  2112. $path = $infos_cat[0]['categorie_chemin'];
  2113. $path = ($path == '.') ? '': $path;
  2114. $test1 = 'SELECT categorie_nom
  2115. FROM ' . MYSQL_PREF . 'categories
  2116. WHERE categorie_id NOT IN ("' . $_POST['upload_categorie'] . '")
  2117. AND categorie_nom = "' . outils::protege_mysql($obj_nom, $this->mysql->lien) . '"
  2118. AND categorie_chemin REGEXP "^' . $path . '[^/]+/$"';
  2119. $test = $this->mysql->select($test1);
  2120. if (is_array($test)) {
  2121. $this->template['erreur']['new_obj'] = 'Cette catégorie contient déjŕ une catégorie ou un album de męme nom.';
  2122. return;
  2123. }
  2124. $galerie_dir = dirname(__FILE__) . '/' . GALERIE_ALBUMS . '/';
  2125. // On remplace les caractčres spéciaux pour le nom du répertoire.
  2126. $dir_cat = ($infos_cat[0]['categorie_chemin'] == '.') ? '' : $infos_cat[0]['categorie_chemin'];
  2127. $post_name = strtr($obj_nom, 'éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçń', 'eeeeaaaaaaiiiiooooouuuuyycn');
  2128. $post_name = preg_replace('`[^-a-z0-9]`i', '_', $post_name);
  2129. $dir = $galerie_dir . $dir_cat . $post_name;
  2130. // Si un répertoire au męme nom existe, on modifie le nom du répertoire.
  2131. $n = 1;
  2132. $testdir = $dir;
  2133. while (is_dir($testdir)) {
  2134. $testdir = $dir . $n;
  2135. $n++;
  2136. if ($n > 999) {
  2137. $this->template['erreur']['new_obj'] = 'Impossible de créer ' . $objet_type . '.';
  2138. return;
  2139. }
  2140. }
  2141. $dir = $testdir . '/';
  2142. // On crée le répertoire sur le disque.
  2143. if (!files::createDir($dir)) {
  2144. $this->template['erreur']['new_obj'] = 'Impossible de créer ' . $objet_type . '.';
  2145. return;
  2146. }
  2147. // Si c'est un album ŕ créer, on crée également le répertoire de vignettes.
  2148. if ($_POST['obj_type'] == 'alb') {
  2149. files::createDir($dir . THUMB_TDIR);
  2150. }
  2151. $dir = preg_replace('`^.+/' . GALERIE_ALBUMS . '/`', '', $dir);
  2152. // On récupčre le mot de passe de la catégorie parente.
  2153. $mysql_requete = 'SELECT categorie_pass
  2154. FROM ' . MYSQL_PREF . 'categories
  2155. WHERE categorie_chemin = "' . dirname($dir) . '/"';
  2156. $pass = $this->mysql->select($mysql_requete);
  2157. $pass_champ = (!is_array($pass) || empty($pass[0]['categorie_pass'])) ? '' : ', categorie_pass';
  2158. $pass_valeur = (!is_array($pass) || empty($pass[0]['categorie_pass'])) ? '' : ', "' . $pass[0]['categorie_pass'] . '"';
  2159. // On crée l'objet.
  2160. $derniere_modif = ($_POST['obj_type'] == 'cat') ? '0' : time();
  2161. $mysql_requete = 'INSERT INTO ' . MYSQL_PREF . 'categories (
  2162. user_id,
  2163. categorie_chemin,
  2164. categorie_nom,
  2165. categorie_description,
  2166. categorie_visible,
  2167. image_representant_id,
  2168. categorie_derniere_modif,
  2169. categorie_date'
  2170. . $pass_champ . ') VALUES ("'
  2171. . $this->template['membre_user'][0]['user_id'] . '","'
  2172. . $dir . '","'
  2173. . outils::protege_mysql($obj_nom, $this->mysql->lien) . '","'
  2174. . outils::protege_mysql($obj_desc, $this->mysql->lien) . '","'
  2175. . '2' . '","'
  2176. . '0' . '","'
  2177. . $derniere_modif . '","'
  2178. . time() . '"'
  2179. . $pass_valeur . ')';
  2180. if ($this->mysql->requete($mysql_requete)) {
  2181. $msg = ($_POST['obj_type'] == 'cat') ? 'La catégorie a été créée.' : 'L\'album a été créé.';
  2182. $this->template['succes']['new_obj'] = $msg;
  2183. } else {
  2184. $this->template['erreur']['new_obj'] = 'Impossible de créer ' . $objet_type . '.';
  2185. files::suppFile($galerie_dir . $dir);
  2186. if ($_POST['obj_type'] == 'alb') {
  2187. files::suppFile($galerie_dir . $dir . THUMB_TDIR);
  2188. }
  2189. }
  2190. }
  2191. }
  2192. /*
  2193. * Membres.
  2194. */
  2195. function membres() {
  2196. if (!$this->config['users_membres_active']) {
  2197. header('Location: ' . outils::genLink('?cat=1'));
  2198. exit;
  2199. }
  2200. // Personnalisation.
  2201. if ($this->config['user_perso']) {
  2202. $this->template['user']['style'] = $this->config['user_style'];
  2203. if ($this->template['user']['style']) {
  2204. $this->template['user']['perso'] = 1;
  2205. } else {
  2206. $this->template['user']['perso'] = 0;
  2207. }
  2208. } else {
  2209. $this->template['user']['perso'] = 0;
  2210. }
  2211. switch ($_GET['membres']) {
  2212. case 'login' :
  2213. $this->template['infos']['section_membres'] = $_GET['membres'];
  2214. $this->template['infos']['title'] = 'identification';
  2215. if (!$this->template['infos']['membres_connexion']) {
  2216. header('Location: ' . outils::genLink('?cat=1'));
  2217. exit;
  2218. }
  2219. $this->template['infos']['membres_login'] = true;
  2220. $this->headersNoCache();
  2221. break;
  2222. case 'liste' :
  2223. $this->template['infos']['section_membres'] = $_GET['membres'];
  2224. $this->template['infos']['title'] = 'liste des membres';
  2225. $this->template['infos']['objet'] = 'liste';
  2226. $this->template['infos']['type'] = 'membres';
  2227. // Startnum.
  2228. $startnum = 0;
  2229. if (isset($_GET['startnum']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['startnum'])) {
  2230. $startnum = $_GET['startnum'];
  2231. }
  2232. $this->params['startnum'] = $startnum;
  2233. $this->params['limit_vignettes'] = 20;
  2234. $this->template['vignettes'] = array();
  2235. // On récupčre la liste des membres ŕ afficher.
  2236. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'users.user_login,
  2237. ' . MYSQL_PREF . 'users.user_avatar,
  2238. ' . MYSQL_PREF . 'users.user_date_creation,
  2239. ' . MYSQL_PREF . 'groupes.groupe_titre
  2240. FROM ' . MYSQL_PREF . 'users JOIN ' . MYSQL_PREF . 'groupes USING (groupe_id)
  2241. WHERE ' . MYSQL_PREF . 'users.groupe_id != 0
  2242. ORDER BY ' . MYSQL_PREF . 'users.user_date_creation DESC
  2243. LIMIT ' . $startnum . ',' . $this->params['limit_vignettes'];
  2244. $users = $this->mysql->select($mysql_requete);
  2245. // On récupčre le nombre de membres.
  2246. $mysql_requete = 'SELECT COUNT(user_id)
  2247. FROM ' . MYSQL_PREF . 'users
  2248. WHERE groupe_id != 0';
  2249. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  2250. $this->template['nb_objets'] = $this->params['nb_objets'];
  2251. // On n'a plus besoin de la bdd.
  2252. $this->mysql->fermer();
  2253. $this->liens_pages();
  2254. // On crée le tableau des membres.
  2255. $avatar = '';
  2256. if ($this->config['users_membres_avatars']) {
  2257. $avatar = '<th class="ml_nom">Avatar</th>';
  2258. }
  2259. $users_table = '<table><tr>'
  2260. . $avatar . '
  2261. <th>Nom d\'utilisateur</th>
  2262. <th class="ml_titre">Titre</th>
  2263. <th class="ml_date">Date d\'inscription</th>
  2264. </tr>';
  2265. for ($i = 0; $i < count($users); $i++) {
  2266. $user_url = urlencode($users[$i]['user_login']);
  2267. $lien = outils::genLink('?profil=' . $user_url);
  2268. $nom = str_replace('_', ' ', $users[$i]['user_login']);
  2269. $avatar = '';
  2270. if ($this->config['users_membres_avatars']) {
  2271. $avatar = ($users[$i]['user_avatar'])
  2272. ? '<td class="ml_avatar"><a href="' . $lien . '"><img alt="Avatar de ' . $nom . '" src="' . GALERIE_PATH . '/membres/avatars/avatar_' . $users[$i]['user_login'] . '_thumb.jpg" /></a></td>'
  2273. : '<td class="ml_avatar"><a href="' . $lien . '"><img alt="pas d\'avatar" src="' . dirname($this->template['infos']['style']) . '/avatar_default.png" /></a></td>';
  2274. }
  2275. $pair = (is_integer($i / 2)) ? ' class="ml_pair"' : '';
  2276. $users_table .= '<tr' . $pair . '>'
  2277. . $avatar . '
  2278. <td class="ml_nom"><a href="' . $lien . '">' . $nom . '</a></td>
  2279. <td class="ml_titre">' . $users[$i]['groupe_titre'] . '</td>
  2280. <td class="ml_date">' . outils::ladate($users[$i]['user_date_creation'], '%d/%m/%Y') . '</td>
  2281. </tr>';
  2282. }
  2283. $users_table .= '</table>';
  2284. $this->template['users'] = $users_table;
  2285. break;
  2286. case 'create' :
  2287. if ($this->template['infos']['membres_connexion']
  2288. || !$this->template['membre_user'][0]['groupe_upload']
  2289. || !$this->template['membre_user'][0]['groupe_upload_create']) {
  2290. header('Location: ' . outils::genLink('?cat=1'));
  2291. exit;
  2292. }
  2293. $this->verifSID();
  2294. $this->template['infos']['section_membres'] = $_GET['membres'];
  2295. $this->template['infos']['title'] = 'création d\'un nouvel album';
  2296. $this->membres_create();
  2297. $mysql_requete = 'SELECT categorie_id,
  2298. categorie_nom,
  2299. categorie_chemin,
  2300. categorie_derniere_modif
  2301. FROM ' . MYSQL_PREF . 'categories
  2302. WHERE categorie_id != "1"
  2303. AND categorie_visible != "0"
  2304. AND categorie_derniere_modif = "0" '
  2305. . $this->images_protect('categorie') . '
  2306. ORDER BY categorie_nom ASC';
  2307. $categories = $this->mysql->select($mysql_requete);
  2308. $this->template['categories_list'] = '<select id="upload_categories" name="upload_categorie">';
  2309. $this->template['categories_list'] .= '<option value="1">galerie</option>';
  2310. $this->categories_list($categories, '', 1, 1);
  2311. $this->template['categories_list'] .= '</select>';
  2312. break;
  2313. case 'upload' :
  2314. if ($this->template['infos']['membres_connexion']
  2315. || !$this->template['membre_user'][0]['groupe_upload']) {
  2316. header('Location: ' . outils::genLink('?cat=1'));
  2317. exit;
  2318. }
  2319. $this->verifSID();
  2320. $this->template['infos']['section_membres'] = $_GET['membres'];
  2321. $this->template['infos']['title'] = 'envoi d\'images';
  2322. $mysql_requete = 'SELECT categorie_id,
  2323. categorie_nom,
  2324. categorie_chemin,
  2325. categorie_derniere_modif
  2326. FROM ' . MYSQL_PREF . 'categories
  2327. WHERE categorie_id != "1"
  2328. AND categorie_visible != "0" '
  2329. . $this->images_protect('categorie') . '
  2330. ORDER BY categorie_nom ASC';
  2331. $categories = $this->mysql->select($mysql_requete);
  2332. $this->template['categories_list'] = '<select id="upload_categories" name="upload_categorie">';
  2333. $this->categories_list($categories);
  2334. $this->template['categories_list'] .= '</select>';
  2335. if (isset($_FILES['upload_files']) && is_array($_FILES['upload_files'])
  2336. && isset($_POST['upload_categorie'])
  2337. && isset($_POST['upload_images']) && is_array($_POST['upload_images'])) {
  2338. $albums_dir = dirname(__FILE__) . '/' . GALERIE_ALBUMS . '/';
  2339. // Limite du nombre de fichiers.
  2340. $files_limit = 2;
  2341. // Quelques vérifications.
  2342. if (!preg_match('`^\d{1,9}$`', $_POST['upload_categorie'])) {
  2343. return;
  2344. }
  2345. if (!isset($_FILES['upload_files']['name'][1])) {
  2346. return;
  2347. }
  2348. // Récupération du chemin de l'album.
  2349. $mysql_requete = 'SELECT categorie_id,
  2350. categorie_nom,
  2351. categorie_chemin
  2352. FROM ' . MYSQL_PREF . 'categories
  2353. WHERE categorie_id = "' . $_POST['upload_categorie'] . '"
  2354. AND categorie_visible != "0"';
  2355. $album_infos = $this->mysql->select($mysql_requete);
  2356. if (!is_array($album_infos)) {
  2357. $this->template['erreur'][0] = 'Vous ne pouvez envoyer des images que dans les albums.';
  2358. return;
  2359. }
  2360. // Traitement de chaque fichier.
  2361. $this->template['erreur'] = array();
  2362. $images_direct = array();
  2363. $images_user = array();
  2364. for ($i = 1; $i <= count($_FILES['upload_files']['name']) && $i <= $files_limit; $i++) {
  2365. $name = $_FILES['upload_files']['name'][$i];
  2366. $error = $_FILES['upload_files']['error'][$i];
  2367. // Filtrage du nom.
  2368. $image_nom = '';
  2369. if (!empty($_POST['upload_images'][$i]['nom'])) {
  2370. $image_nom = strip_tags($_POST['upload_images'][$i]['nom']);
  2371. $image_nom = trim($image_nom);
  2372. if (strlen($image_nom) > 100) {
  2373. $this->template['erreur'][$i] = 'Le nom de l\'image ' . $i . ' ne doit pas contenir plus de 100 caractčres.';
  2374. continue;
  2375. }
  2376. if (!preg_match('`^[\'@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť!?$=-]{1,100}$`i', $image_nom)) {
  2377. $this->template['erreur'][$i] = 'Le nom de l\'image ' . $i . ' ne doit pas contenir de caractčres spéciaux.';
  2378. continue;
  2379. }
  2380. }
  2381. // Filtrage de la description.
  2382. $image_desc = '';
  2383. if (!empty($_POST['upload_images'][$i]['desc'])) {
  2384. $image_desc = strip_tags($_POST['upload_images'][$i]['desc']);
  2385. $image_desc = trim($image_desc);
  2386. if (strlen($image_desc) > 1500) {
  2387. $this->template['erreur'][$i] = 'La description de l\'image ' . $i . ' ne doit pas contenir plus de 1500 caractčres.';
  2388. continue;
  2389. }
  2390. if (!preg_match('`^[\'@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť!?$=-]{1,1500}$`i', $image_desc)) {
  2391. $this->template['erreur'][$i] = 'La description de l\'image ' . $i . ' ne doit pas contenir de caractčres spéciaux.';
  2392. continue;
  2393. }
  2394. }
  2395. // Y a-t-il une erreur ?
  2396. if ($error) {
  2397. switch ($error) {
  2398. case 4 :
  2399. break;
  2400. case 2 :
  2401. case 1 :
  2402. $this->template['erreur'][$i] = 'L\'image ' . $i . ' est trop lourde.';
  2403. break;
  2404. default :
  2405. $this->template['erreur'][$i] = '[' . $error . '] Impossible de récupérer l\'image ' . $i . '.';
  2406. }
  2407. continue;
  2408. }
  2409. // Le fichier est-il trop lourd ?
  2410. if (filesize($_FILES['upload_files']['tmp_name'][$i]) > ($this->config['users_upload_maxsize']*1024)) {
  2411. $this->template['erreur'][$i] = 'L\'image ' . $i . ' est trop lourde.';
  2412. continue;
  2413. }
  2414. // Le nom de fichier est-il trop long ?
  2415. if (strlen($name) > 250) {
  2416. $this->template['erreur'][$i] = 'Le nom de fichier de l\'image ' . $i . ' est trop long.';
  2417. continue;
  2418. }
  2419. // Le nom de fichier contient-il des caractčres spéciaux ?
  2420. if (!preg_match('`^[-_a-z0-9.]{1,250}$`i', $name)) {
  2421. $this->template['erreur'][$i] = 'Le nom de fichier de l\'image ' . $i . ' ne doit pas contenir d\'espaces, de caractčres spéciaux ou accentués.';
  2422. continue;
  2423. }
  2424. // Est-ce une image au format JPEG, GIF ou PNG ?
  2425. if (($file_infos = getimagesize($_FILES['upload_files']['tmp_name'][$i])) === false) {
  2426. $this->template['erreur'][$i] = 'Le fichier ' . $i . ' n\'est pas une image valide.';
  2427. continue;
  2428. }
  2429. if (!preg_match('`\.(jpe?g|gif|png)$`i', $name)
  2430. || !preg_match('`^image/(gif|p?jpeg|(x-)?png)$`i', trim($file_infos['mime']))) {
  2431. $this->template['erreur'][$i] = 'Le fichier ' . $i . ' n\'est pas au format JPEG, GIF ou PNG.';
  2432. continue;
  2433. }
  2434. // L'image est-elle trop grande ?
  2435. if ($file_infos[0] > $this->config['users_upload_maxwidth']
  2436. || $file_infos[1] > $this->config['users_upload_maxheight']) {
  2437. $this->template['erreur'][$i] = 'L\'image ' . $i . ' est trop grande (max = ' . $this->config['users_upload_maxwidth'] . ' x ' . $this->config['users_upload_maxheight'] . ' pixels).';
  2438. continue;
  2439. }
  2440. // On vérifie si un fichier du męme nom existe déjŕ.
  2441. if (file_exists($albums_dir . $album_infos[0]['categorie_chemin'] . $name)) {
  2442. $this->template['erreur'][$i] = 'L\'image ' . $i . ' ne peut ętre ajoutée ŕ l\'album car une image de męme nom de fichier existe déjŕ dans cet album.';
  2443. continue;
  2444. }
  2445. // On vérifie si une image de męme nom existe déjŕ.
  2446. if ($image_nom) {
  2447. $mysql_requete = 'SELECT image_id
  2448. FROM ' . MYSQL_PREF . 'images
  2449. WHERE image_nom = "' . $image_nom . '"
  2450. AND categorie_parent_id = "' . $album_infos[0]['categorie_id'] . '"';
  2451. if (is_array($this->mysql->select($mysql_requete))) {
  2452. $this->template['erreur'][$i] = 'L\'image ' . $i . ' ne peut ętre ajoutée ŕ l\'album car une image de męme nom existe déjŕ dans cet album.';
  2453. continue;
  2454. }
  2455. }
  2456. // Mode d'upload : direct.
  2457. if ($this->template['membre_user'][0]['groupe_upload_mode'] == 'direct') {
  2458. $dir = $albums_dir . $album_infos[0]['categorie_chemin'];
  2459. // On déplace le fichier envoyé vers le répertoire de l'album.
  2460. files::chmodDir($dir);
  2461. if (!move_uploaded_file($_FILES['upload_files']['tmp_name'][$i], $dir . $name)) {
  2462. $this->template['erreur'][$i] = 'Impossible de récupérer le fichier Ť <em>' . $name . ' </em> ť.';
  2463. continue;
  2464. }
  2465. files::chmodFile($dir . $name);
  2466. $images_direct[] = $name;
  2467. $images_user[$album_infos[0]['categorie_chemin'] . $name]['user_id'] = $this->template['membre_user'][0]['user_id'];
  2468. $images_user[$album_infos[0]['categorie_chemin'] . $name]['image_nom'] = $image_nom;
  2469. $images_user[$album_infos[0]['categorie_chemin'] . $name]['image_desc'] = $image_desc;
  2470. // Mode d'upload : attente.
  2471. } else {
  2472. $dir = dirname(__FILE__) . '/membres/images/';
  2473. $n = 0;
  2474. $new_name = $name;
  2475. while (file_exists($dir . $new_name)) {
  2476. $n++;
  2477. $new_name = preg_replace('`^(.+)(\..{3,4})$`', '$1_' . $n . '$2', $name);
  2478. }
  2479. // On déplace le fichier envoyé vers le répertoire d'attente.
  2480. files::chmodDir($dir);
  2481. if (!move_uploaded_file($_FILES['upload_files']['tmp_name'][$i], $dir . $new_name)) {
  2482. $this->template['erreur'][$i] = 'Impossible de récupérer l\'image ' . $i . '.';
  2483. continue;
  2484. }
  2485. files::chmodFile($dir . $new_name);
  2486. // On enregistre l'image dans la base de données.
  2487. $type = preg_replace('`^image/(gif|p?jpeg|(?:x-)?png)$`i', '$1', trim($file_infos['mime']));
  2488. switch ($type) {
  2489. case 'pjpeg' :
  2490. $type = 'jpeg';
  2491. break;
  2492. case 'x-png' :
  2493. $type = 'png';
  2494. }
  2495. list($img_width, $img_height, $img_type) = getimagesize($dir . $new_name);
  2496. $img_poids = 0;
  2497. if (preg_match('`^\d{1,9}$`', $img_poids)) {
  2498. $img_poids = $_FILES['upload_files']['size'][$i];
  2499. $img_poids = round($img_poids/1024, 1);
  2500. }
  2501. $mysql_requete = 'INSERT INTO ' . MYSQL_PREF . 'images_attente (
  2502. user_id,
  2503. categorie_id,
  2504. img_att_nom,
  2505. img_att_description,
  2506. img_att_fichier,
  2507. img_att_type,
  2508. img_att_poids,
  2509. img_att_hauteur,
  2510. img_att_largeur,
  2511. img_att_date,
  2512. img_att_ip
  2513. ) VALUES (
  2514. "' . $this->template['membre_user'][0]['user_id'] . '",
  2515. "' . $album_infos[0]['categorie_id'] . '",
  2516. "' . outils::protege_mysql($image_nom, $this->mysql->lien) . '",
  2517. "' . outils::protege_mysql($image_desc, $this->mysql->lien) . '",
  2518. "' . outils::protege_mysql($new_name, $this->mysql->lien) . '",
  2519. "' . $type . '",
  2520. "' . $img_poids . '",
  2521. "' . $img_height . '",
  2522. "' . $img_width . '",
  2523. "' . time() . '",
  2524. "' . $_SERVER['REMOTE_ADDR'] . '"
  2525. )';
  2526. if ($this->mysql->requete($mysql_requete)) {
  2527. $this->template['succes'][$i] = 'L\'image ' . $i . ' a été mise en attente de validation par l\'admin.';
  2528. } else {
  2529. $this->template['erreur'][$i] = 'Une erreur de base de données s\'est produite avec l\'image ' . $i . '.';
  2530. files::suppFile($dir . $new_name);
  2531. }
  2532. }
  2533. $upload_ok = 1;
  2534. }
  2535. if (empty($upload_ok)) {
  2536. return;
  2537. }
  2538. // Date de dernier ajout.
  2539. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  2540. SET user_date_dernier_upload = "' . time() . '"
  2541. WHERE user_id = "' . $this->template['membre_user'][0]['user_id'] . '"';
  2542. $this->mysql->requete($mysql_requete);
  2543. // On prévient l'admin ?
  2544. if ($this->config['users_upload_alert'] && !empty($this->config['admin_mail'])) {
  2545. // On prévient l'admin uniquement si le membre n'a pas déjŕ envoyé des images dans l'heure précédente.
  2546. if (!$this->template['membre_user'][0]['user_date_dernier_upload']
  2547. || (time()-$this->template['membre_user'][0]['user_date_dernier_upload']) > 3600) {
  2548. $from = 'iGalerie Alerte <igalerie@' . $_SERVER['SERVER_NAME'] . '>';
  2549. $login = $this->template['membre_user'][0]['user_login'];
  2550. $user_nom = str_replace('_', ' ', $login);
  2551. if ($this->template['membre_user'][0]['groupe_upload_mode'] != 'direct') {
  2552. $objet = 'Images en attente de validation';
  2553. $message = 'L\'utilisateur \'' . $user_nom . '\' a envoyé de nouvelles images qui ont été mises en attente de validation.' . "\n\n";
  2554. } else {
  2555. $objet = 'Nouvelles images dans la galerie';
  2556. $message = 'L\'utilisateur \'' . $user_nom . '\' a ajouté de nouvelles images ŕ la galerie.' . "\n\n";
  2557. }
  2558. // Message.
  2559. $message .= 'Vous pouvez consulter le profil de ce membre sur cette page : ' . "\n";
  2560. $message .= 'http://' . $_SERVER['HTTP_HOST'] . GALERIE_URL . '?profil=' . urlencode($login) . "\n\n";
  2561. $message .= '-- ' . "\n";
  2562. $message .= 'Ce courriel a été envoyé automatiquement par iGalerie.';
  2563. // Envoi du message.
  2564. outils::send_mail($this->config['admin_mail'], $objet, $message, $from);
  2565. }
  2566. }
  2567. // Mode direct : enregistrement des images dans la base de données.
  2568. if ($this->template['membre_user'][0]['groupe_upload_mode'] == 'direct') {
  2569. require_once(dirname(__FILE__) . '/includes/classes/class.upload.php');
  2570. $upload = new upload($this->mysql, $this->config);
  2571. $upload->http['album'] = $album_infos[0]['categorie_chemin'];
  2572. $upload->http['images'] = $images_direct;
  2573. $upload->galerie_dir = './' . GALERIE_ALBUMS . '/';
  2574. $upload->users = $images_user;
  2575. $upload->recup_albums();
  2576. // Rapport.
  2577. if ($upload->rapport['erreurs']) {
  2578. foreach ($upload->rapport['erreurs'] as $v) {
  2579. $this->template['erreur']['upload_' . $v[0]] = 'Une erreur s\'est produite avec l\'objet Ť <em>' . $v[0] . '</em> ť : ' . $v[1];
  2580. }
  2581. }
  2582. $dir = $albums_dir . $album_infos[0]['categorie_chemin'];
  2583. for ($i = 0; $i < count($images_direct); $i++) {
  2584. $ok = 1;
  2585. for ($n = 0; $n < count($upload->rapport['img_rejets']); $n++) {
  2586. if ($upload->rapport['img_rejets'][$n][0] == $images_direct[$i]) {
  2587. $this->template['erreur']['upload_' . $i] = 'L\'image Ť <em>' . $images_direct[$i] . '</em> ť a été rejetée pour la raison suivante : ' . $upload->rapport['img_rejets'][$n][2];
  2588. files::suppFile($dir . $images_direct[$i]);
  2589. files::suppFile($dir . '~#~');
  2590. $ok = 0;
  2591. break;
  2592. }
  2593. }
  2594. if ($ok && empty($this->template['erreur'])) {
  2595. $this->template['succes']['upload_' . $i] = 'L\'image Ť <em>' . $images_direct[$i] . ' </em> ť a été ajoutée ŕ la galerie.';
  2596. }
  2597. }
  2598. }
  2599. }
  2600. $this->headersNoCache();
  2601. break;
  2602. case 'inscription' :
  2603. if (!$this->template['infos']['membres_connexion']) {
  2604. header('Location: ' . outils::genLink('?cat=1'));
  2605. exit;
  2606. }
  2607. $this->template['infos']['galerie_key'] = $this->config['galerie_key'];
  2608. $this->template['infos']['title'] = 'inscription';
  2609. $this->template['infos']['section_membres'] = $_GET['membres'];
  2610. if (!empty($_POST)) {
  2611. if (!isset($_POST['molpac'])) {
  2612. break;
  2613. }
  2614. // Anti-spam ?
  2615. $ok = true;
  2616. if (empty($_POST['molpac']) || !preg_match('`^[a-z0-9]{32}$`', $_POST['molpac'])) {
  2617. $ok = false;
  2618. }
  2619. $time = time();
  2620. $time_md5_array = array();
  2621. for ($i = -5; $i < 1; $i++) {
  2622. $time_md5 = md5($time + $i);
  2623. $time_key_md5 = md5($time_md5 . $this->config['galerie_key']);
  2624. if ($_POST['molpac'] == $time_key_md5) {
  2625. $ok = false;
  2626. break;
  2627. }
  2628. }
  2629. if (!$ok) {
  2630. $this->template['erreur'] = 'Prenez votre temps pour créer votre profil !';
  2631. break;
  2632. }
  2633. // Tout d'abord, quelques vérifications basiques...
  2634. if (empty($_POST['new_login'])) {
  2635. $this->template['erreur'] = 'Nom d\'utilisateur vide.';
  2636. break;
  2637. }
  2638. $_POST['new_login'] = trim($_POST['new_login']);
  2639. if (empty($_POST['new_pass'])) {
  2640. $this->template['erreur'] = 'Mot de passe vide.';
  2641. break;
  2642. }
  2643. if (empty($_POST['new_pass_confirm'])) {
  2644. $this->template['erreur'] = 'Confirmation du mot de passe vide.';
  2645. break;
  2646. }
  2647. if (strlen($_POST['new_login']) < 3) {
  2648. $this->template['erreur'] = 'Le nom d\'utilisateur doit contenir au moins 3 caractčres.';
  2649. break;
  2650. }
  2651. if (strlen($_POST['new_pass']) < 6) {
  2652. $this->template['erreur'] = 'Le mot de passe doit contenir au moins 6 caractčres.';
  2653. break;
  2654. }
  2655. if (strlen($_POST['new_login']) > 30) {
  2656. $this->template['erreur'] = 'Le nom d\'utilisateur doit contenir moins de 30 caractčres.';
  2657. break;
  2658. }
  2659. if (strlen($_POST['new_pass']) > 250) {
  2660. $this->template['erreur'] = 'Le mot de passe doit contenir moins de 250 caractčres.';
  2661. break;
  2662. }
  2663. if (!preg_match('`^[-_a-z\d]{3,30}$`i', $_POST['new_login'])) {
  2664. $this->template['erreur'] = 'Le nom d\'utilisateur ne doit pas contenir de caractčres spéciaux ou accentués.<br />Pour les espaces, utilisez le caractčre souligné (_), celui-ci sera remplacé par un espace lors de l\'affichage de votre nom d\'utilisateur.';
  2665. break;
  2666. }
  2667. if (!preg_match('`^[@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť<>!?-]+$`i', $_POST['new_pass'])) {
  2668. $this->template['erreur'] = htmlentities('Le mot de passe ne peut ętre constitué que des caractčres suivants : abcdefghijklmnopqrstuvwxyz0123465789 éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçń @&,;/%.:_#()Ťť<>!?-');
  2669. break;
  2670. }
  2671. if ($_POST['new_pass'] != $_POST['new_pass_confirm']) {
  2672. $this->template['erreur'] = 'La confirmation du mot de passe ne correspond pas.';
  2673. break;
  2674. }
  2675. // On vérifie si le nom d'utilisateur n'est pas déjŕ pris.
  2676. if (preg_match('`^admin.*$`i', $_POST['new_login'])
  2677. || $_POST['new_login'] == ADMIN_USER) {
  2678. $this->template['erreur'] = 'Ce nom d\'utilisateur est déjŕ pris.';
  2679. break;
  2680. }
  2681. $mysql_requete = 'SELECT user_login
  2682. FROM ' . MYSQL_PREF . 'users
  2683. WHERE user_login LIKE "' . outils::protege_mysql($_POST['new_login'], $this->mysql->lien) . '"';
  2684. $test = $this->mysql->select($mysql_requete);
  2685. if ($test != 'vide') {
  2686. $this->template['erreur'] = 'Ce nom d\'utilisateur est déjŕ pris.';
  2687. break;
  2688. }
  2689. // On vérifie courriel et site Web.
  2690. $new_mail = '';
  2691. if (!empty($_POST['new_mail'])) {
  2692. if (!preg_match('`^' . outils::email_address() . '$`i', $_POST['new_mail'])) {
  2693. $this->template['erreur'] = 'Le format de l\'adresse de courriel entrée est incorrecte.';
  2694. break;
  2695. // On vérifie si le courriel n'est pas déjŕ pris.
  2696. } else {
  2697. $mysql_requete = 'SELECT user_mail
  2698. FROM ' . MYSQL_PREF . 'users
  2699. WHERE user_mail LIKE "' . outils::protege_mysql($_POST['new_mail'], $this->mysql->lien) . '"';
  2700. $test = $this->mysql->select($mysql_requete);
  2701. if ($test != 'vide') {
  2702. $this->template['erreur'] = 'Cette adresse courriel est déjŕ prise.';
  2703. break;
  2704. }
  2705. }
  2706. $new_mail = $_POST['new_mail'];
  2707. }
  2708. $new_web = '';
  2709. if (!empty($_POST['new_web'])) {
  2710. if (!preg_match('`^' . outils::http_url() . '$`', $_POST['new_web'])) {
  2711. $this->template['erreur'] = 'Le format de l\'adresse du site Web entrée est incorrecte.';
  2712. break;
  2713. }
  2714. $new_web = $_POST['new_web'];
  2715. }
  2716. // On enregistre l'utilisateur.
  2717. $mysql_requete = 'INSERT INTO ' . MYSQL_PREF . 'users (
  2718. user_login,
  2719. user_pass,
  2720. user_mail,
  2721. user_web,
  2722. user_date_creation,
  2723. user_date_derniere_visite,
  2724. user_ip_creation,
  2725. user_ip_derniere_visite) VALUES (
  2726. "' . $_POST['new_login'] . '",
  2727. "' . md5($_POST['new_pass']) . '",
  2728. "' . $new_mail . '",
  2729. "' . $new_web . '",
  2730. "' . time() . '",
  2731. "' . time() . '",
  2732. "' . $_SERVER['REMOTE_ADDR'] . '",
  2733. "' . $_SERVER['REMOTE_ADDR'] . '")';
  2734. if ($this->mysql->requete($mysql_requete)) {
  2735. $this->template['succes'] = 'Votre compte a bien été créé ! Vous pouvez maintenant vous identifier.';
  2736. $this->template['infos']['inscription_ok'] = true;
  2737. } else {
  2738. $this->template['erreur'] = 'Impossible de créer le compte.';
  2739. }
  2740. // On prévient l'admin par mail.
  2741. if ($this->config['users_membres_alert']
  2742. && !empty($this->template['infos']['inscription_ok'])
  2743. && !empty($this->config['admin_mail'])) {
  2744. $objet = 'Nouvelle inscription';
  2745. $from = 'iGalerie Alerte <igalerie@' . $_SERVER['SERVER_NAME'] . '>';
  2746. // Message.
  2747. $message = 'L\'utilisateur \'' . str_replace('_', ' ', $_POST['new_login']) . '\' s\'est inscrit ŕ la galerie.' . "\n\n";
  2748. $message .= 'Vous pouvez consulter son profil sur cette page : ' . "\n";
  2749. $message .= 'http://' . $_SERVER['HTTP_HOST'] . GALERIE_URL . '?profil=' . urlencode($_POST['new_login']) . "\n\n";
  2750. $message .= '-- ' . "\n";
  2751. $message .= 'Ce courriel a été envoyé automatiquement par iGalerie.';
  2752. // Envoi du message.
  2753. outils::send_mail($this->config['admin_mail'], $objet, $message, $from);
  2754. }
  2755. }
  2756. $this->headersNoCache();
  2757. break;
  2758. case 'new_pass' :
  2759. if (!$this->template['infos']['membres_connexion']
  2760. || empty($_GET['key'])
  2761. || !preg_match('`^[a-z\d]{12}$`i', trim($_GET['key']))) {
  2762. header('Location: ' . outils::genLink('?cat=1'));
  2763. exit;
  2764. }
  2765. $this->verifSID();
  2766. $this->template['infos']['title'] = 'mot de passe oublié';
  2767. $this->template['infos']['section_membres'] = 'oubli';
  2768. $this->template['infos']['oubli_form'] = false;
  2769. $mysql_requete = 'SELECT user_id,
  2770. user_oubli
  2771. FROM ' . MYSQL_PREF . 'users
  2772. WHERE user_oubli LIKE "' . trim($_GET['key']) . '.%"';
  2773. $oubli = $this->mysql->select($mysql_requete);
  2774. if (is_array($oubli)) {
  2775. $infos = explode('.', $oubli[0]['user_oubli']);
  2776. if ($infos[1] < time()) {
  2777. $this->template['erreur'] = 'Le délai de validité du nouveau de mot de passe a expiré.';
  2778. break;
  2779. } else {
  2780. $new_pass = outils::gen_key(16);
  2781. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  2782. SET user_pass = "' . md5($new_pass) . '"
  2783. WHERE user_id = "' . $oubli[0]['user_id'] . '"';
  2784. if ($this->mysql->requete($mysql_requete)) {
  2785. $this->template['succes'] = 'Le nouveau mot de passe que vous avez demandé a été créé :<br /><strong>' . $new_pass . '</strong>';
  2786. } else {
  2787. $this->template['erreur'] = 'Une erreur s\'est produite. Le nouveau mot de passe n\'a pas pu ętre créé.';
  2788. }
  2789. }
  2790. } else {
  2791. header('Location: ' . outils::genLink('?cat=1'));
  2792. exit;
  2793. }
  2794. $this->headersNoCache();
  2795. break;
  2796. case 'oubli' :
  2797. if (!$this->template['infos']['membres_connexion']) {
  2798. header('Location: ' . outils::genLink('?cat=1'));
  2799. exit;
  2800. }
  2801. $this->template['infos']['title'] = 'mot de passe oublié';
  2802. $this->template['infos']['section_membres'] = $_GET['membres'];
  2803. $this->template['infos']['oubli_form'] = true;
  2804. if (isset($_POST['oubli_user'])) {
  2805. if (!preg_match('`^[-_a-z\d]{3,30}$`i', $_POST['oubli_user'])) {
  2806. $this->template['erreur'] = 'Format du nom d\'utilisateur incorrect.';
  2807. break;
  2808. }
  2809. }
  2810. if (isset($_POST['oubli_mail'])) {
  2811. $_POST['oubli_mail'] = trim($_POST['oubli_mail']);
  2812. if (preg_match('`^' . outils::email_address() . '$`i', $_POST['oubli_mail'])) {
  2813. $mysql_requete = 'SELECT user_login
  2814. FROM ' . MYSQL_PREF . 'users
  2815. WHERE user_login LIKE "' . $_POST['oubli_user'] . '"
  2816. AND user_mail = "' . outils::protege_mysql($_POST['oubli_mail'], $this->mysql->lien) . '"
  2817. AND user_id != "1"';
  2818. if (is_array($this->mysql->select($mysql_requete))) {
  2819. $code = outils::gen_key(12);
  2820. $titre = trim(strip_tags($this->config['galerie_titre']));
  2821. $titre = (empty($titre)) ? 'iGalerie' : $titre;
  2822. $from = $titre . ' <igalerie@' . $_SERVER['SERVER_NAME'] . '>';
  2823. $galerie = 'http://' . $_SERVER['HTTP_HOST'] . GALERIE_URL;
  2824. $message = 'Bonjour ' . str_replace('_', ' ', $_POST['oubli_user']) . ',' . "\n\n";
  2825. $message .= 'Vous avez effectué la demande d\'un nouveau mot de passe pour la galerie ' . $galerie . '. ';
  2826. $message .= 'Si vous n\'avez pas fait cette demande ou que vous ne souhaitez pas changer votre mot de passe, veuillez ignorer ce message.' . "\n\n";
  2827. $message .= 'Pour activer votre nouveau mot de passe, vous devez visiter la page ' . $galerie . '?membres=new_pass&key=' . $code . '. ';
  2828. $message .= 'Notez que ce lien d\'activation n\'est valide que pendant 48 heures.' . "\n\n";
  2829. $message .= '-- ' . "\n";
  2830. $message .= 'Ce courriel a été envoyé automatiquement par iGalerie.';
  2831. // Envoi du message.
  2832. if (outils::send_mail($_POST['oubli_mail'], 'Demande de nouveau mot de passe', $message, $from)) {
  2833. $code = $code . '.' . (time()+(3600*48));
  2834. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  2835. SET user_oubli = "' . $code . '"
  2836. WHERE user_login LIKE "' . $_POST['oubli_user'] . '"';
  2837. if ($this->mysql->requete($mysql_requete)) {
  2838. $this->template['infos']['oubli_form'] = false;
  2839. $this->template['succes'] = 'Votre demande de nouveau mot de passe a été acceptée.<br />Un courriel vous a été envoyé avec les instructions ŕ suivre.';
  2840. } else {
  2841. $this->template['erreur'] = 'Une erreur s\'est produite.<br />La demande de nouveau de mot de passe ŕ échouée.';
  2842. }
  2843. } else {
  2844. $this->template['erreur'] = 'Impossible d\'envoyer le courriel.';
  2845. }
  2846. } else {
  2847. $this->template['erreur'] = 'Utilisateur ou adresse courriel inconnu(e).';
  2848. }
  2849. } else {
  2850. $this->template['erreur'] = 'Format de l\'adresse incorrect.';
  2851. }
  2852. }
  2853. $this->headersNoCache();
  2854. break;
  2855. case 'modif_profil' :
  2856. if ($this->template['infos']['membres_connexion']) {
  2857. header('Location: ' . outils::genLink('?cat=1'));
  2858. exit;
  2859. }
  2860. $this->verifSID();
  2861. $this->template['infos']['section_membres'] = $_GET['membres'];
  2862. $this->template['infos']['title'] = 'profil';
  2863. $_GET['profil'] = $this->template['membre_user'][0]['user_login'];
  2864. $this->membre_infos();
  2865. // Modification des données.
  2866. if (isset($_POST['modif_profil'])) {
  2867. $update = '';
  2868. if (isset($_POST['new_mail'])
  2869. && $_POST['new_mail'] != $this->template['membre_profil'][0]['user_mail']) {
  2870. $_POST['new_mail'] = trim($_POST['new_mail']);
  2871. if ($_POST['new_mail'] == '' || preg_match('`^' . outils::email_address() . '$`i', $_POST['new_mail'])) {
  2872. // On vérifie si le courriel n'est pas déjŕ pris.
  2873. $test = '';
  2874. if ($_POST['new_mail'] != '') {
  2875. $mysql_requete = 'SELECT user_mail
  2876. FROM ' . MYSQL_PREF . 'users
  2877. WHERE user_mail LIKE "' . outils::protege_mysql($_POST['new_mail'], $this->mysql->lien) . '"';
  2878. $test = $this->mysql->select($mysql_requete);
  2879. }
  2880. if (is_array($test)) {
  2881. $this->template['erreur'] = 'Cette adresse courriel existe déjŕ.';
  2882. } else {
  2883. $update .= ',user_mail = "' . $_POST['new_mail'] . '"';
  2884. $this->template['membre_profil'][0]['user_mail'] = $_POST['new_mail'];
  2885. }
  2886. } else {
  2887. $this->template['erreur'] = 'L\'adresse du courriel est incorrecte.';
  2888. }
  2889. }
  2890. if (isset($_POST['new_web'])
  2891. && $_POST['new_web'] != $this->template['membre_profil'][0]['user_web']) {
  2892. if ($_POST['new_web'] == '' || preg_match('`^' . outils::http_url() . '$`i', $_POST['new_web'])) {
  2893. $update .= ',user_web = "' . $_POST['new_web'] . '"';
  2894. $this->template['membre_profil'][0]['user_web'] = $_POST['new_web'];
  2895. } else {
  2896. $this->template['erreur'] = 'L\'adresse du site Web est incorrecte.';
  2897. }
  2898. }
  2899. if (isset($_POST['new_lieu'])
  2900. && $_POST['new_lieu'] != $this->template['membre_profil'][0]['user_lieu']) {
  2901. if (strlen($_POST['new_lieu']) < 61) {
  2902. if ($_POST['new_lieu'] == '' || preg_match('`^[@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť<>!?-]{1,60}$`i', $_POST['new_lieu'])) {
  2903. $update .= ',user_lieu = "' . $_POST['new_lieu'] . '"';
  2904. $this->template['membre_profil'][0]['user_lieu'] = $_POST['new_lieu'];
  2905. } else {
  2906. $this->template['erreur'] = 'Le texte de la localisation ne doit pas contenir de caractčres exotiques.';
  2907. }
  2908. } else {
  2909. $this->template['erreur'] = 'Le texte de la localisation ne doit pas contenir plus de 60 caractčres.';
  2910. }
  2911. }
  2912. if (!empty($_POST['new_mail_public']) && empty($this->template['membre_profil'][0]['user_mail_public'])) {
  2913. $update .= ',user_mail_public = "1"';
  2914. $this->template['membre_profil'][0]['user_mail_public'] = 1;
  2915. } elseif (empty($_POST['new_mail_public']) && !empty($this->template['membre_profil'][0]['user_mail_public'])) {
  2916. $update .= ',user_mail_public = "0"';
  2917. $this->template['membre_profil'][0]['user_mail_public'] = 0;
  2918. }
  2919. // Newsletter.
  2920. if ($this->template['membre_profil'][0]['groupe_newsletter']) {
  2921. if (!empty($_POST['new_newsletter']) && empty($this->template['membre_profil'][0]['user_newsletter'])) {
  2922. $update .= ',user_newsletter = "1"';
  2923. $this->template['membre_profil'][0]['user_newsletter'] = 1;
  2924. } elseif (empty($_POST['new_newsletter']) && !empty($this->template['membre_profil'][0]['user_newsletter'])) {
  2925. $update .= ',user_newsletter = "0"';
  2926. $this->template['membre_profil'][0]['user_newsletter'] = 0;
  2927. }
  2928. }
  2929. if ($update) {
  2930. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  2931. SET ' . substr($update, 1) . '
  2932. WHERE user_id = "' . $this->template['membre_profil'][0]['user_id'] . '"';
  2933. if ($this->mysql->requete($mysql_requete)) {
  2934. $this->template['succes'] = 'Les informations de votre profil ont été changées.';
  2935. }
  2936. }
  2937. }
  2938. $this->headersNoCache();
  2939. break;
  2940. case 'modif_pass' :
  2941. if (!$this->template['infos']['membres_noadmin']
  2942. || $this->template['infos']['membres_connexion']) {
  2943. header('Location: ' . outils::genLink('?cat=1'));
  2944. exit;
  2945. }
  2946. $this->verifSID();
  2947. $this->template['infos']['section_membres'] = $_GET['membres'];
  2948. $this->template['infos']['title'] = 'mot de passe';
  2949. $_GET['profil'] = $this->template['membre_user'][0]['user_login'];
  2950. $this->membre_infos();
  2951. if (isset($_POST['modif_profil'])) {
  2952. if (empty($_POST['new_pass'])) {
  2953. $this->template['erreur'] = 'Mot de passe vide.';
  2954. break;
  2955. }
  2956. if (empty($_POST['new_pass_confirm'])) {
  2957. $this->template['erreur'] = 'Confirmation du mot de passe vide.';
  2958. break;
  2959. }
  2960. if (strlen($_POST['new_pass']) < 6) {
  2961. $this->template['erreur'] = 'Le mot de passe doit contenir au moins 6 caractčres.';
  2962. break;
  2963. }
  2964. if (strlen($_POST['new_pass']) > 250) {
  2965. $this->template['erreur'] = 'Le mot de passe doit contenir moins de 250 caractčres.';
  2966. break;
  2967. }
  2968. if (!preg_match('`^[@éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçńa-z\s\d&,;/%.:_#\(\)Ťť<>!?-]+$`i', $_POST['new_pass'])) {
  2969. $this->template['erreur'] = htmlentities('Le mot de passe ne peut ętre constitué que des caractčres suivants : abcdefghijklmnopqrstuvwxyz0123465789 éčëęŕäâáĺăďîěíöôňóőůűüú˙ýçń @&,;/%.:_#()Ťť<>!?-');
  2970. break;
  2971. }
  2972. if ($_POST['new_pass'] != $_POST['new_pass_confirm']) {
  2973. $this->template['erreur'] = 'La confirmation du mot de passe ne correspond pas.';
  2974. break;
  2975. }
  2976. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  2977. SET user_pass = "' . md5($_POST['new_pass']) . '"
  2978. WHERE user_id = "' . $this->template['membre_profil'][0]['user_id'] . '"';
  2979. if ($this->mysql->requete($mysql_requete)) {
  2980. $this->template['succes'] = 'Le mot de passe a été changé.';
  2981. } else {
  2982. $this->template['erreur'] = 'Impossible de modifier le mot de passe.';
  2983. }
  2984. }
  2985. $this->headersNoCache();
  2986. break;
  2987. case 'modif_avatar' :
  2988. if ($this->template['infos']['membres_connexion']
  2989. || !$this->config['users_membres_avatars']) {
  2990. header('Location: ' . outils::genLink('?cat=1'));
  2991. exit;
  2992. }
  2993. $this->verifSID();
  2994. // Si GD n'est pas activé, on arręte tout.
  2995. if (!function_exists('imagetypes')) {
  2996. $this->template['erreur'] = 'GD n\'est pas présent.';
  2997. return;
  2998. }
  2999. $this->template['infos']['section_membres'] = $_GET['membres'];
  3000. $this->template['infos']['title'] = 'avatar';
  3001. $_GET['profil'] = $this->template['membre_user'][0]['user_login'];
  3002. $this->membre_infos();
  3003. $img_avatar = './membres/avatars/avatar_'
  3004. . $this->template['membre_user'][0]['user_login'] . '.jpg';
  3005. $img_avatar_thumb = './membres/avatars/avatar_'
  3006. . $this->template['membre_user'][0]['user_login'] . '_thumb.jpg';
  3007. // Suppression avatar.
  3008. if (!empty($_POST['supp_avatar'])) {
  3009. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  3010. SET user_avatar = "0"
  3011. WHERE user_id = "' . $this->template['membre_profil'][0]['user_id'] . '"';
  3012. if ($this->mysql->requete($mysql_requete)) {
  3013. if (file_exists($img_avatar)) {
  3014. files::suppFile($img_avatar);
  3015. }
  3016. if (file_exists($img_avatar_thumb)) {
  3017. files::suppFile($img_avatar_thumb);
  3018. }
  3019. $this->template['succes'] = 'Votre avatar a été supprimé.';
  3020. $this->template['membre_profil'][0]['user_avatar'] = 0;
  3021. $this->template['membre_user'][0]['user_avatar'] = 0;
  3022. } else {
  3023. $this->template['erreur'] = 'Impossible de supprimer votre avatar.';
  3024. }
  3025. return;
  3026. }
  3027. if (!empty($_FILES['new_avatar'])) {
  3028. $infos = $_FILES['new_avatar'];
  3029. // Y a-t-il une erreur ?
  3030. if ($infos['error']) {
  3031. switch ($infos['error']) {
  3032. case 4 :
  3033. break;
  3034. case 2 :
  3035. case 1 :
  3036. $this->template['erreur'] = 'Le fichier est trop lourd.';
  3037. return;
  3038. default :
  3039. $this->template['erreur'] = 'Impossible de récupérer le fichier.<br />Code erreur : ' . __LINE__;
  3040. return;
  3041. }
  3042. }
  3043. // Le fichier est-il trop lourd ?
  3044. if (filesize($infos['tmp_name']) > 81920) {
  3045. $this->template['erreur'] = 'Le fichier est trop lourd.';
  3046. return;
  3047. }
  3048. // Est-ce une image au format JPEG ?
  3049. if (($file_infos = @getimagesize($infos['tmp_name'])) === false) {
  3050. $this->template['erreur'] = 'Le fichier envoyé n\'est pas au format JPEG.';
  3051. return;
  3052. }
  3053. if (!preg_match('`\.jpg$`i', $infos['name'])
  3054. || !preg_match('`^image/(p?jpeg)$`i', trim($file_infos['mime']))) {
  3055. $this->template['erreur'] = 'Le fichier envoyé n\'est pas au format JPEG.';
  3056. return;
  3057. }
  3058. // Dimensions minimales.
  3059. if ($file_infos[0] < 50 || $file_infos[1] < 50) {
  3060. $this->template['erreur'] = 'L\'image doit faire au moins 50 pixels de coté.';
  3061. return;
  3062. }
  3063. // Dimensions maximales.
  3064. if ($file_infos[0] > 1000 || $file_infos[1] > 1000) {
  3065. $this->template['erreur'] = 'L\'image est trop grande.';
  3066. return;
  3067. }
  3068. // On redimensionne l'image avec GD si nécessaire.
  3069. $file_temp = $infos['tmp_name'];
  3070. $width = 200;
  3071. $height = 200;
  3072. if ($file_infos[0] > $width || $file_infos[1] > $height) {
  3073. $image = FALSE;
  3074. if (imagetypes() & IMG_JPG) {
  3075. if (($image = imagecreatefromjpeg($file_temp)) === false) {
  3076. $this->template['erreur'] = 'Impossible de créer l\'avatar<br />Code erreur : ' . __LINE__;
  3077. return;
  3078. }
  3079. } else {
  3080. $this->template['erreur'] = 'Type de fichier non pris en charge (JPEG).';
  3081. return;
  3082. }
  3083. if ($file_infos[0] < $file_infos[1]) {
  3084. $width = ($height / $file_infos[1]) * $file_infos[0];
  3085. } else {
  3086. $height = ($width / $file_infos[0]) * $file_infos[1];
  3087. }
  3088. $image_p = imagecreatetruecolor($width, $height);
  3089. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $file_infos[0], $file_infos[1]);
  3090. if (file_exists($img_avatar)) {
  3091. files::suppFile($img_avatar);
  3092. }
  3093. if (!imagejpeg($image_p, $img_avatar, 90)) {
  3094. if (file_exists($img_avatar)) { files::suppFile($img_avatar); }
  3095. $this->template['erreur'] = 'Impossible de redimensionner l\'image.<br />Code erreur : ' . __LINE__;
  3096. return;
  3097. }
  3098. imagedestroy($image_p);
  3099. files::chmodFile($img_avatar);
  3100. if (!file_exists($img_avatar)) {
  3101. if (file_exists($img_avatar)) { files::suppFile($img_avatar); }
  3102. $this->template['erreur'] = 'Impossible de redimensionner l\'image.<br />Code erreur : ' . __LINE__;
  3103. return;
  3104. }
  3105. // Sinon on déplace directement l'image dans le répertoire des avatars.
  3106. } else {
  3107. if (file_exists($img_avatar)) {
  3108. files::suppFile($img_avatar);
  3109. }
  3110. if (!files::copie($file_temp, $img_avatar)) {
  3111. if (file_exists($img_avatar)) { files::suppFile($img_avatar); }
  3112. $this->template['erreur'] = 'Impossible de récupérér l\'image.<br />Code erreur : ' . __LINE__;
  3113. return;
  3114. }
  3115. }
  3116. // On crée la vignette de l'avatar.
  3117. $width = 50;
  3118. $height = 50;
  3119. $width_i = 50;
  3120. $height_i = 50;
  3121. $image = FALSE;
  3122. $image = imagecreatefromjpeg($file_temp);
  3123. $dst_x = 0;
  3124. $dst_y = 0;
  3125. if ($file_infos[0] < $file_infos[1]) {
  3126. $width_i = ($height / $file_infos[1]) * $file_infos[0];
  3127. $dst_x = ($width - $width_i) / 2;
  3128. } else {
  3129. $height_i = ($width / $file_infos[0]) * $file_infos[1];
  3130. $dst_y = ($height - $height_i) / 2;
  3131. }
  3132. $image_p = imagecreatetruecolor($width, $height);
  3133. $bg = imagecolorallocate($image_p, 255, 255, 255);
  3134. imagefill($image_p, 0, 0, $bg);
  3135. imagecopyresampled($image_p, $image, $dst_x, $dst_y, 0, 0, $width_i, $height_i, $file_infos[0], $file_infos[1]);
  3136. if (file_exists($img_avatar_thumb)) {
  3137. files::suppFile($img_avatar_thumb);
  3138. }
  3139. if (!imagejpeg($image_p, $img_avatar_thumb, 90)) {
  3140. if (file_exists($img_avatar)) { files::suppFile($img_avatar); }
  3141. $this->template['erreur'] = 'Impossible de créer la vignette de l\'avatar.';
  3142. return;
  3143. }
  3144. imagedestroy($image_p);
  3145. files::chmodFile($img_avatar_thumb);
  3146. if (!file_exists($img_avatar_thumb)) {
  3147. if (file_exists($img_avatar)) { files::suppFile($img_avatar); }
  3148. $this->template['erreur'] = 'Impossible de créer la vignette de l\'avatar.';
  3149. return;
  3150. }
  3151. // On indique dans la base de données que l'on doit utiliser l'avatar.
  3152. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'users
  3153. SET user_avatar = "1"
  3154. WHERE user_id = "' . $this->template['membre_profil'][0]['user_id'] . '"';
  3155. if ($this->mysql->requete($mysql_requete)) {
  3156. $this->template['succes'] = 'Votre avatar a été changé.';
  3157. $this->template['membre_profil'][0]['user_avatar'] = 1;
  3158. $this->template['membre_user'][0]['user_avatar'] = 1;
  3159. } else {
  3160. $this->template['erreur'] = 'Impossible de créer l\'avatar.';
  3161. return;
  3162. }
  3163. }
  3164. $this->headersNoCache();
  3165. break;
  3166. default :
  3167. header('Location: ' . outils::genLink('?cat=1'));
  3168. exit;
  3169. }
  3170. }
  3171. function membre_infos() {
  3172. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'users.user_id,
  3173. ' . MYSQL_PREF . 'users.user_login,
  3174. ' . MYSQL_PREF . 'users.user_mail,
  3175. ' . MYSQL_PREF . 'users.user_mail_public,
  3176. ' . MYSQL_PREF . 'users.user_web,
  3177. ' . MYSQL_PREF . 'users.user_lieu,
  3178. ' . MYSQL_PREF . 'users.user_avatar,
  3179. ' . MYSQL_PREF . 'users.user_newsletter,
  3180. ' . MYSQL_PREF . 'users.user_date_creation,
  3181. ' . MYSQL_PREF . 'users.user_date_derniere_visite,
  3182. ' . MYSQL_PREF . 'groupes.groupe_titre,
  3183. ' . MYSQL_PREF . 'groupes.groupe_commentaires,
  3184. ' . MYSQL_PREF . 'groupes.groupe_upload,
  3185. ' . MYSQL_PREF . 'groupes.groupe_newsletter
  3186. FROM ' . MYSQL_PREF . 'users JOIN ' . MYSQL_PREF . 'groupes USING(groupe_id)
  3187. WHERE ' . MYSQL_PREF . 'users.user_login = "' . outils::protege_mysql($_GET['profil'], $this->mysql->lien) . '"';
  3188. $this->template['membre_profil'] = $this->mysql->select($mysql_requete);
  3189. if (!is_array($this->template['membre_profil'])) {
  3190. header('Location: ' . outils::genLink('?cat=1'));
  3191. exit;
  3192. }
  3193. $this->template['membre_profil'][0]['user_nom'] = str_replace('_', ' ', $this->template['membre_profil'][0]['user_login']);
  3194. }
  3195. function verifSID() {
  3196. if (empty($_POST)) {
  3197. return;
  3198. }
  3199. if (empty($_POST['sid'])
  3200. || $_POST['sid'] != md5($this->template['membre_user'][0]['user_session_id'])) {
  3201. header('Location: ' . outils::genLink('?cat=1'));
  3202. exit;
  3203. }
  3204. }
  3205. function headersNoCache() {
  3206. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  3207. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  3208. header('Cache-Control: no-store, no-cache, must-revalidate');
  3209. header('Cache-Control: post-check=0, pre-check=0', false);
  3210. header('Pragma: no-cache');
  3211. }
  3212. /*
  3213. * Sections.
  3214. */
  3215. function section() {
  3216. switch ($_GET['section']) {
  3217. case 'tags' :
  3218. $id = '';
  3219. if (isset($_GET['alb']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['alb'])) {
  3220. $id = $_GET['alb'];
  3221. } elseif (isset($_GET['cat']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['cat'])) {
  3222. $id = $_GET['cat'];
  3223. } else {
  3224. $id = 1;
  3225. }
  3226. if (!$this->config['active_tags']) {
  3227. header('Location: ' . outils::genLink('?cat=1'));
  3228. exit;
  3229. }
  3230. $this->template['infos']['objet'] = 'tags';
  3231. $this->params['objet_id'] = $id;
  3232. $this->infos_categorie();
  3233. $this->template['infos']['parent_nom'] = $this->params['objet_actuel']['categorie_nom'];
  3234. $this->tags(1);
  3235. $this->template['categorie'] = $this->params['objet_actuel'];
  3236. break;
  3237. case 'historique' :
  3238. // La fonctionnalité est-elle activée ?
  3239. if (!$this->config['active_historique']) {
  3240. header('Location: ' . outils::genLink('?cat=1'));
  3241. exit;
  3242. }
  3243. $this->template['infos']['objet'] = 'historique';
  3244. // Images récentes.
  3245. $this->nouvelles_images();
  3246. $this->template['display']['recentes'] = $this->choix['recent'];
  3247. $time_limit = time() - ($this->choix['recent'] * 24 * 3600);
  3248. $cat = 1;
  3249. $type = 'cat';
  3250. if (isset($_GET['cat']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['cat'])) {
  3251. $cat = $_GET['cat'];
  3252. $type = 'cat';
  3253. }
  3254. if (isset($_GET['alb']) && preg_match('`^[1-9]\d{0,9}$`', $_GET['alb'])) {
  3255. $cat = $_GET['alb'];
  3256. $type = 'alb';
  3257. }
  3258. $objet = $cat;
  3259. if ($cat) {
  3260. $mysql_requete = 'SELECT categorie_nom,
  3261. categorie_chemin
  3262. FROM ' . MYSQL_PREF . 'categories
  3263. WHERE categorie_id = "' . $cat . '"';
  3264. $cat_infos = $this->mysql->select($mysql_requete);
  3265. if ($cat_infos && $cat_infos != 'vide') {
  3266. $this->template['historique']['objet_nom'] = $cat_infos[0][0];
  3267. $cat_infos[0][1] = ($cat_infos[0][1] == '.') ? '' : $cat_infos[0][1];
  3268. $cat = 'AND image_chemin LIKE "' . $cat_infos[0][1] . '%" ';
  3269. }
  3270. $this->template['infos']['parent_nom'] = $cat_infos[0]['categorie_nom'];
  3271. } else {
  3272. header('Location: ' . outils::genLink('?cat=1'));
  3273. exit;
  3274. }
  3275. // Lien historique.
  3276. $this->template['historique']['lien'] = $type . '=' . $objet;
  3277. // On récupčre toutes les dates d'ajout différentes, et le nombre d'images correspondantes ŕ chaque date.
  3278. $mysql_requete = 'SELECT DISTINCT image_date,
  3279. COUNT(image_date)
  3280. FROM ' . MYSQL_PREF . 'images
  3281. WHERE image_visible = "1" '
  3282. . $cat
  3283. . $this->images_protect() . '
  3284. GROUP BY image_date DESC';
  3285. $dates_ajout = $this->mysql->select($mysql_requete);
  3286. // On récupčre toutes les dates de création différentes, et le nombre d'images correspondantes ŕ chaque date.
  3287. $mysql_requete = 'SELECT DISTINCT image_date_creation,
  3288. COUNT(image_date_creation)
  3289. FROM ' . MYSQL_PREF . 'images
  3290. WHERE image_visible = "1" '
  3291. . $cat . '
  3292. AND image_date_creation != "0" '
  3293. . $this->images_protect() . '
  3294. GROUP BY LENGTH(image_date_creation) DESC,
  3295. image_date_creation DESC';
  3296. $dates_creation = $this->mysql->select($mysql_requete);
  3297. // On génčre le tableau des dates d'ajout.
  3298. $annees_ajout = array();
  3299. if ($dates_ajout && is_array($dates_ajout)) {
  3300. for ($i = 0; $i < count($dates_ajout); $i++) {
  3301. if (preg_match('`^\d{1,10}$`', $dates_ajout[$i][0])) {
  3302. $annees_ajout[date('Y', $dates_ajout[$i][0])][date('d-m', $dates_ajout[$i][0])]['date'] = $dates_ajout[$i][0];
  3303. @$annees_ajout[date('Y', $dates_ajout[$i][0])][date('d-m', $dates_ajout[$i][0])]['num'] += $dates_ajout[$i][1];
  3304. }
  3305. }
  3306. $tableaux_ajout = '';
  3307. foreach ($annees_ajout as $y => $days) {
  3308. $tableaux_ajout .= '<div id="h_adate_' . $y . '"><p class="h_caption">' . $y . '</p>';
  3309. $tableaux_ajout .= '<table summary="Images ajoutées en ' . $y . '" class="date_ajout">';
  3310. $tableaux_ajout .= '<tr><th class="h_date">date</th><th>nb. d\'images</th></tr>';
  3311. foreach ($days as $d => $v) {
  3312. $date = explode('-', $d);
  3313. $lien = $date[0] . '-' . $date[1] . '-' . $y . '&amp;' . $type . '=' . $objet;
  3314. $date = mktime(0, 0, 0, $date[1], $date[0], $y);
  3315. $recentes = ($this->choix['recent'] && ($date > $time_limit)) ? ' class="h_recentes"' : '';
  3316. $date = strftime('%d %B', $date);
  3317. $s = ($v['num'] > 1) ? 's' : '';
  3318. $lien = outils::genLink('?date_ajout=' . $lien, '', $this->template['historique']['objet_nom']);
  3319. $tableaux_ajout .= '<tr' . $recentes . '><td class="h_date">' . $date . '</td><td><a href="' . $lien . '">' . $v['num'] . ' image' . $s . '</a></td></tr>';
  3320. }
  3321. $tableaux_ajout .= '</table></div>';
  3322. }
  3323. if ($tableaux_ajout) {
  3324. $this->template['historique']['dates_ajout'] = $tableaux_ajout;
  3325. }
  3326. }
  3327. // On génčre le tableau des dates de création.
  3328. $annees_creation = array();
  3329. if ($dates_creation && is_array($dates_creation)) {
  3330. for ($i = 0; $i < count($dates_creation); $i++) {
  3331. if (preg_match('`^\d{1,10}$`', $dates_creation[$i][0])) {
  3332. $annees_creation[date('Y', $dates_creation[$i][0])][date('d-m', $dates_creation[$i][0])]['date'] = $dates_creation[$i][0];
  3333. @$annees_creation[date('Y', $dates_creation[$i][0])][date('d-m', $dates_creation[$i][0])]['num'] += $dates_creation[$i][1];
  3334. }
  3335. }
  3336. $tableaux_creation = '';
  3337. foreach ($annees_creation as $y => $days) {
  3338. $tableaux_creation .= '<div id="h_cdate_' . $y . '"><p class="h_caption">' . $y . '</p>';
  3339. $tableaux_creation .= '<table summary="Images créées en ' . $y . '" class="date_creation">';
  3340. $tableaux_creation .= '<tr><th class="h_date">date</th><th>nb. d\'images</th></tr>';
  3341. foreach ($days as $d => $v) {
  3342. $date = explode('-', $d);
  3343. $lien = $date[0] . '-' . $date[1] . '-' . $y . '&amp;' . $type . '=' . $objet;
  3344. $date = mktime(0, 0, 0, $date[1], $date[0], $y);
  3345. $date = strftime('%d %B', $date);
  3346. $s = ($v['num'] > 1) ? 's' : '';
  3347. $lien = outils::genLink('?date_creation=' . $lien, '', $this->template['historique']['objet_nom']);
  3348. $tableaux_creation .= '<tr><td class="h_date">' . $date . '</td><td><a href="' . $lien . '">' . $v['num'] . ' image' . $s . '</a></td></tr>';
  3349. }
  3350. $tableaux_creation .= '</table></div>';
  3351. }
  3352. if ($tableaux_creation) {
  3353. $this->template['historique']['dates_creation'] = $tableaux_creation;
  3354. }
  3355. }
  3356. break;
  3357. case 'contact' :
  3358. if ((empty($this->config['galerie_contact_text']) &&
  3359. empty($this->config['galerie_contact']))
  3360. || empty($this->config['admin_mail'])) {
  3361. header('Location: ' . outils::genLink('?cat=1'));
  3362. exit;
  3363. }
  3364. $this->template['infos']['galerie_key'] = $this->config['galerie_key'];
  3365. $this->template['contact']['contact_form'] = 1;
  3366. if (isset($_POST['contact_message']) &&
  3367. isset($_POST['contact_sujet']) &&
  3368. isset($_POST['contact_mail']) &&
  3369. isset($_POST['contact_nom'])) {
  3370. $ok = 1;
  3371. // Anti-spam ?
  3372. if (empty($_POST['molpac']) || !preg_match('`^[a-z0-9]{32}$`', $_POST['molpac'])) {
  3373. $ok = 0;
  3374. }
  3375. if (empty($_POST['preview'])) {
  3376. $time = time();
  3377. $time_md5_array = array();
  3378. for ($i = -5; $i < 1; $i++) {
  3379. $time_md5 = md5($time+$i);
  3380. $time_key_md5 = md5($time_md5 . $this->config['galerie_key']);
  3381. array_push($time_md5_array, $time_key_md5);
  3382. }
  3383. if (in_array($_POST['molpac'], $time_md5_array)) {
  3384. $this->template['contact']['erreur'] = 'Prenez votre temps pour écrire votre message !';
  3385. $ok = 0;
  3386. }
  3387. }
  3388. if ($ok) {
  3389. $message = trim($_POST['contact_message']);
  3390. $expediteur = trim($_POST['contact_mail']);
  3391. $sujet = trim($_POST['contact_sujet']);
  3392. $nom = trim($_POST['contact_nom']);
  3393. // Un peu de nettoyage...
  3394. $expediteur = preg_replace('`[\s\t\r\n\x5c]+`', '', $expediteur);
  3395. $nom = preg_replace('`[\s\t\r\n\x5c]+`', '', $nom);
  3396. $sujet = preg_replace('`[\t\r\n\x5c]+`', '', $sujet);
  3397. $expediteur = preg_replace('`(?:to:|b?cc:|from:|content-type:)`i', '', $expediteur);
  3398. $nom = preg_replace('`(?:to:|b?cc:|from:|content-type:)`i', '', $nom);
  3399. $sujet = preg_replace('`(?:to:|b?cc:|from:|content-type:)`i', '', $sujet);
  3400. // On vérifie s'il y a de la matičre !
  3401. if (!preg_match('`\w`', $message)) {
  3402. $this->template['contact']['erreur'] = 'Votre message est vide !';
  3403. $ok = 0;
  3404. }
  3405. if (!preg_match('`\w`', $sujet)) {
  3406. $this->template['contact']['erreur'] = 'Le sujet de votre message est vide !';
  3407. $ok = 0;
  3408. }
  3409. if (!preg_match('`\w`', $expediteur)) {
  3410. $this->template['contact']['erreur'] = 'Votre adresse courriel est vide !';
  3411. $ok = 0;
  3412. }
  3413. if (!preg_match('`\w`', $nom)) {
  3414. $this->template['contact']['erreur'] = 'Votre nom est vide !';
  3415. $ok = 0;
  3416. }
  3417. // On limite la longueur de chaque élément.
  3418. if (strlen($message) > 50000) {
  3419. $this->template['contact']['erreur'] = 'Votre message est trop long.';
  3420. $ok = 0;
  3421. }
  3422. if (strlen($sujet) > 200) {
  3423. $this->template['contact']['erreur'] = 'Le sujet de votre message est trop long.';
  3424. $ok = 0;
  3425. }
  3426. if (strlen($expediteur) > 300) {
  3427. $this->template['contact']['erreur'] = 'Votre adresse courriel est trop longue.';
  3428. $ok = 0;
  3429. }
  3430. if (strlen($expediteur) > 80) {
  3431. $this->template['contact']['erreur'] = 'Votre nom est trop long.';
  3432. $ok = 0;
  3433. }
  3434. if ($ok) {
  3435. if (!preg_match('`^' . outils::email_address() . '$`i', $expediteur)) {
  3436. $this->template['contact']['erreur'] = 'Votre adresse courriel n\'est pas valide.';
  3437. $ok = 0;
  3438. }
  3439. // Si tout est ok, on envoi le message.
  3440. if ($ok) {
  3441. $from = $nom . ' <' . $expediteur . '>';
  3442. // Message.
  3443. $message = str_replace("\x5cn", "\n", $message);
  3444. $message = str_replace("\x5cr", "\r", $message);
  3445. $message = str_replace("\x5ct", "\t", $message);
  3446. $message = stripslashes($message);
  3447. $message .= "\n\n" . '-- ' . "\n";
  3448. $message .= 'Ce message vous a été envoyé par le formulaire de contact d\'iGalerie.' . "\n";
  3449. $message .= 'IP expéditeur : ' . $_SERVER['REMOTE_ADDR'] . "\n";
  3450. // Envoi du mail.
  3451. unset($this->template['contact']['contact_form']);
  3452. if (outils::send_mail($this->config['admin_mail'], $sujet, $message, $from)) {
  3453. $this->template['contact']['succes'] = 'Votre message a été envoyé.';
  3454. } else {
  3455. $this->template['contact']['erreur'] = 'Une erreur serveur s\'est produite : votre message n\'a pas pu ętre envoyé.';
  3456. }
  3457. }
  3458. }
  3459. }
  3460. }
  3461. break;
  3462. case 'plan' :
  3463. $mysql_requete = 'SELECT * FROM ' . MYSQL_PREF . 'categories WHERE categorie_id = "1"';
  3464. $galerie = $this->mysql->select($mysql_requete);
  3465. settype($this->template['plan'], 'string');
  3466. $this->params['nb_cat'] = 0;
  3467. $this->params['nb_alb'] = 0;
  3468. $this->nouvelles_images();
  3469. $this->template['display']['recentes'] = $this->choix['recent'];
  3470. $this->plan();
  3471. $images = $galerie[0]['categorie_images'];
  3472. $categories = $this->params['nb_cat'];
  3473. $albums = $this->params['nb_alb'];
  3474. $poids = $galerie[0]['categorie_poids'];
  3475. if (isset($this->template['membre_user'])) {
  3476. $mysql_requete = 'SELECT COUNT(image_id)
  3477. FROM ' . MYSQL_PREF . 'images
  3478. WHERE image_visible = "1" '
  3479. . $this->users_pass();
  3480. $images = $this->mysql->select($mysql_requete, 5);
  3481. $mysql_requete = 'SELECT COUNT(categorie_id)
  3482. FROM ' . MYSQL_PREF . 'categories
  3483. WHERE categorie_visible = "1"
  3484. AND categorie_derniere_modif != "0"
  3485. AND categorie_id != "1" '
  3486. . $this->users_pass('categories.categorie_pass');
  3487. $albums = $this->mysql->select($mysql_requete, 5);
  3488. $mysql_requete = 'SELECT COUNT(categorie_id)
  3489. FROM ' . MYSQL_PREF . 'categories
  3490. WHERE categorie_visible = "1"
  3491. AND categorie_derniere_modif = "0"
  3492. AND categorie_id != "1" '
  3493. . $this->users_pass('categories.categorie_pass');
  3494. $categories = $this->mysql->select($mysql_requete, 5);
  3495. $mysql_requete = 'SELECT SUM(categorie_poids)
  3496. FROM ' . MYSQL_PREF . 'categories
  3497. WHERE categorie_visible = "1"
  3498. AND categorie_derniere_modif != "0"
  3499. AND categorie_id != "1" '
  3500. . $this->users_pass('categories.categorie_pass');
  3501. $poids = $this->mysql->select($mysql_requete, 5);
  3502. $poids = ($poids) ? $poids : 0;
  3503. }
  3504. $is = ($images > 1) ? 's' : '';
  3505. $cs = ($categories > 1) ? 's' : '';
  3506. $as = ($albums > 1) ? 's' : '';
  3507. $g = 'La galerie contient ' . $images . ' image' . $is;
  3508. $g .= ' dans ' . $albums . ' album' . $as;
  3509. $g .= ' et ' . $categories . ' catégorie' . $cs . ',';
  3510. $g .= ' pour un total de ' . outils::poids($poids) . '.<br /><br />';
  3511. $this->template['infos']['galerie'] = $g;
  3512. break;
  3513. case 'pass' :
  3514. $ibdd = 'categorie';
  3515. if (isset($_GET['img'])) {
  3516. $type = 'img';
  3517. $ibdd = 'image';
  3518. } elseif (isset($_GET['alb'])) {
  3519. $type = 'alb';
  3520. } elseif (isset($_GET['commentaires'])) {
  3521. $type = 'commentaires';
  3522. } elseif (isset($_GET['votes'])) {
  3523. $type = 'votes';
  3524. } elseif (isset($_GET['hits'])) {
  3525. $type = 'hits';
  3526. } elseif (isset($_GET['images'])) {
  3527. $type = 'images';
  3528. } elseif (isset($_GET['recentes'])) {
  3529. $type = 'recentes';
  3530. } else {
  3531. $type = 'cat';
  3532. }
  3533. if (empty($_GET[$type])
  3534. || !preg_match('`^[1-9]\d{0,9}$`', $_GET[$type])
  3535. || isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  3536. header('Location: ' . outils::genLink('?cat=1'));
  3537. exit;
  3538. }
  3539. $mysql_requete = 'SELECT ' . $ibdd . '_nom,
  3540. ' . $ibdd . '_pass
  3541. FROM ' . MYSQL_PREF . $ibdd . 's
  3542. WHERE ' . $ibdd . '_id = "' . $_GET[$type] . '"';
  3543. $infos = $this->mysql->select($mysql_requete);
  3544. if (empty($infos[0][$ibdd . '_nom'])) {
  3545. header('Location: ' . outils::genLink('?cat=1'));
  3546. exit;
  3547. }
  3548. $img_name = '';
  3549. $cat_name = '';
  3550. if ($ibdd == 'categorie') {
  3551. $cat_name = $infos[0][$ibdd . '_nom'];
  3552. }
  3553. if ($ibdd == 'image') {
  3554. $img_name = $infos[0][$ibdd . '_nom'];
  3555. }
  3556. $l = outils::genLink('?' . $type . '=' . $_GET[$type], $img_name, $cat_name);
  3557. if (empty($infos[0][$ibdd . '_pass'])) {
  3558. header('Location: ' . $l);
  3559. exit;
  3560. }
  3561. // On vérifie le mot de passe.
  3562. if (isset($_POST['password'])) {
  3563. $pass_id = preg_replace('`^(\d+):.+`', '$1', $infos[0][$ibdd . '_pass']);
  3564. $user_pass = $pass_id . ':' . $_POST['password'];
  3565. if ($user_pass == $infos[0][$ibdd . '_pass']) {
  3566. $this->passwords->ajouter($pass_id, outils::crypte($user_pass, $this->config['galerie_key']));
  3567. $this->passwords->ecrire();
  3568. header('Location: ' . $l);
  3569. exit;
  3570. }
  3571. }
  3572. $this->template['infos']['obj_nom'] = 'cet objet';
  3573. break;
  3574. case 'recherche':
  3575. if (!$this->config['active_advsearch']) {
  3576. header('Location: ' . outils::genLink('?cat=1'));
  3577. exit;
  3578. }
  3579. // On convertit les variables POST en paramčtres URL réduit.
  3580. if (!empty($_POST) && isset($_POST['s_query'])) {
  3581. $recherche = 'search=' . urlencode($_POST['s_query']) . '&sadv=';
  3582. // Cases ŕ cocher.
  3583. $params = '';
  3584. $params .= (isset($_POST['s_mode']) && $_POST['s_mode'] == 'et') ? '1' : '0';
  3585. $params .= (isset($_POST['s_nom'])) ? '1' : '0';
  3586. $params .= (isset($_POST['s_path'])) ? '1' : '0';
  3587. $params .= (isset($_POST['s_desc'])) ? '1' : '0';
  3588. $params .= (isset($_POST['s_mc'])) ? '1' : '0';
  3589. $params .= (isset($_POST['s_com'])) ? '1' : '0';
  3590. $params .= (isset($_POST['s_casse'])) ? '1' : '0';
  3591. $params .= (isset($_POST['s_accents'])) ? '1' : '0';
  3592. $params .= (isset($_POST['s_date'])) ? '1' : '0';
  3593. $params .= (isset($_POST['s_date_type']) && $_POST['s_date_type'] == 'date_creation') ? '1' : '0';
  3594. $params .= (isset($_POST['s_taille'])) ? '1' : '0';
  3595. $params .= (isset($_POST['s_poids'])) ? '1' : '0';
  3596. $params .= (isset($_POST['s_make'])) ? '1' : '0';
  3597. $params .= (isset($_POST['s_model'])) ? '1' : '0';
  3598. // Albums.
  3599. $albums = '';
  3600. if (isset($_POST['s_alb']) && is_array($_POST['s_alb'])) {
  3601. for ($i = 0; $i < count($_POST['s_alb']); $i++) {
  3602. $albums .= '-' . $_POST['s_alb'][$i];
  3603. }
  3604. $albums = substr($albums, 1);
  3605. if ($albums == '1') {
  3606. $albums = '';
  3607. }
  3608. }
  3609. // Date.
  3610. $date = '';
  3611. if (isset($_POST['s_date'])
  3612. && isset($_POST['s_date_start_jour'])
  3613. && isset($_POST['s_date_start_mois'])
  3614. && isset($_POST['s_date_start_an'])
  3615. && isset($_POST['s_date_end_jour'])
  3616. && isset($_POST['s_date_end_mois'])
  3617. && isset($_POST['s_date_end_an'])) {
  3618. $date .= $_POST['s_date_start_jour'] . '-';
  3619. $date .= $_POST['s_date_start_mois'] . '-';
  3620. $date .= $_POST['s_date_start_an'] . '-';
  3621. $date .= $_POST['s_date_end_jour'] . '-';
  3622. $date .= $_POST['s_date_end_mois'] . '-';
  3623. $date .= $_POST['s_date_end_an'];
  3624. }
  3625. // Dimensions.
  3626. $taille = '';
  3627. if (isset($_POST['s_taille'])
  3628. && isset($_POST['s_width_start'])
  3629. && isset($_POST['s_width_end'])
  3630. && isset($_POST['s_height_start'])
  3631. && isset($_POST['s_height_end'])) {
  3632. $taille .= $_POST['s_width_start'] . '-';
  3633. $taille .= $_POST['s_width_end'] . '-';
  3634. $taille .= $_POST['s_height_start'] . '-';
  3635. $taille .= $_POST['s_height_end'];
  3636. }
  3637. // Poids.
  3638. $poids = '';
  3639. if (isset($_POST['s_poids'])
  3640. && isset($_POST['s_poids_start'])
  3641. && isset($_POST['s_poids_end'])) {
  3642. $poids .= $_POST['s_poids_start'] . '-';
  3643. $poids .= $_POST['s_poids_end'];
  3644. }
  3645. // On 'enchaîne' le tout.
  3646. if ($params) { $recherche .= 'o' . $params; }
  3647. if ($albums) { $recherche .= '.a' . $albums; }
  3648. if ($date) { $recherche .= '.d' . $date; }
  3649. if ($taille) { $recherche .= '.t' . $taille; }
  3650. if ($poids) { $recherche .= '.p' . $poids; }
  3651. // On redirige vers la recherche...
  3652. header('Location: ' . outils::genLink('?' . $recherche, '', '', 0, '&'));
  3653. exit;
  3654. }
  3655. // Récupération des albums de la galerie.
  3656. $this->template['search_params'] = recherche::adv_search();
  3657. $this->template['list_albums'] = $this->list_albums();
  3658. break;
  3659. }
  3660. // On n'a plus besoin de la bdd.
  3661. $this->mysql->fermer();
  3662. // Personnalisation utilisateurs.
  3663. $this->template['user']['perso'] = 0;
  3664. if ($this->config['user_perso']) {
  3665. $this->template['user']['style'] = $this->config['user_style'];
  3666. $this->template['user']['recentes'] = $this->config['user_recentes'];
  3667. if ($this->template['user']['recentes'] && ($_GET['section'] == 'plan' || $_GET['section'] == 'historique')) {
  3668. $this->template['user']['montrer'] = 1;
  3669. } else {
  3670. $this->template['user']['montrer'] = 0;
  3671. }
  3672. if ($this->template['user']['montrer'] ||
  3673. $this->template['user']['style']) {
  3674. $this->template['user']['perso'] = 1;
  3675. }
  3676. }
  3677. }
  3678. /*
  3679. * On établie une liste de tous les albums pour
  3680. * une liste ŕ sélection multiple.
  3681. */
  3682. function list_albums($parent = '', $niveau = 0) {
  3683. static $list;
  3684. $mysql_requete = 'SELECT categorie_id,
  3685. categorie_nom,
  3686. categorie_chemin,
  3687. categorie_derniere_modif,
  3688. categorie_pass
  3689. FROM ' . MYSQL_PREF . 'categories
  3690. WHERE categorie_visible = "1"
  3691. AND categorie_chemin REGEXP "^' . $parent . '[^/]+/$" '
  3692. . $this->images_protect('categorie') .
  3693. ' ORDER BY categorie_nom ASC';
  3694. $cats = $this->mysql->select($mysql_requete);
  3695. if (is_array($cats)) {
  3696. $pos = '';
  3697. if ($niveau) {
  3698. $pos .= str_repeat('&nbsp;', $niveau*4) . '|--';
  3699. } else {
  3700. $selected = (in_array(1, $this->template['search_params']['albums'])) ? ' selected="selected"' : '';
  3701. $list .= '<option' . $selected . ' value="1">Tous</option>';
  3702. }
  3703. for ($i = 0; $i < count($cats); $i++) {
  3704. $selected = (in_array($cats[$i]['categorie_id'], $this->template['search_params']['albums'])) ? ' selected="selected"' : '';
  3705. $list .= "\r\t\t\t\t\t\t\t\t\t\t\t" . '<option' . $selected . ' value="' . $cats[$i]['categorie_id'] . '">' . $pos . strip_tags($cats[$i]['categorie_nom']) . '</option>';
  3706. if (!$cats[$i]['categorie_derniere_modif']) {
  3707. $this->list_albums($cats[$i]['categorie_chemin'], $niveau+1);
  3708. }
  3709. }
  3710. }
  3711. return $list;
  3712. }
  3713. /*
  3714. * On détermine le nombre de vignettes ŕ afficher,
  3715. * selon les choix admin et utilisateur.
  3716. */
  3717. function nb_vignettes() {
  3718. $redirect = 0;
  3719. $this->choix['vn'] = $this->config['vignettes_col'];
  3720. $this->choix['vl'] = $this->config['vignettes_line'];
  3721. if ($this->config['user_perso'] && $this->config['user_vignettes']) {
  3722. $choice[0]['nom'] = 'vn'; $choice[0]['defaut'] = $this->config['vignettes_col'];
  3723. $choice[1]['nom'] = 'vl'; $choice[1]['defaut'] = $this->config['vignettes_line'];
  3724. for ($i = 0; $i < count($choice); $i++) {
  3725. if ($valeur = $this->prefs->lire($choice[$i]['nom'])) {
  3726. if (!preg_match('`^([1-9]|[12][0-9])$`', $valeur)) {
  3727. break;
  3728. }
  3729. $this->choix[$choice[$i]['nom']] = $valeur;
  3730. } else {
  3731. $this->choix[$choice[$i]['nom']] = $choice[$i]['defaut'];
  3732. }
  3733. if (isset($_GET[$choice[$i]['nom']]) && preg_match('`^([1-9]|[12][0-9])$`', $_GET[$choice[$i]['nom']])) {
  3734. // On fait rediriger vers la premičre page s'il y a eu changement du nombre de vignettes.
  3735. $valeur = $this->prefs->lire($choice[$i]['nom']);
  3736. if ($valeur !== $_GET[$choice[$i]['nom']] ||
  3737. $this->choix[$choice[$i]['nom']] !== $_GET[$choice[$i]['nom']]) {
  3738. $redirect = 1;
  3739. }
  3740. $this->prefs->ajouter($choice[$i]['nom'], $_GET[$choice[$i]['nom']]);
  3741. $this->choix[$choice[$i]['nom']] = $_GET[$choice[$i]['nom']];
  3742. }
  3743. }
  3744. }
  3745. if ($redirect) {
  3746. // On récupčre les éventuels autres changements de préférences.
  3747. $this->infos_vignettes();
  3748. if ($this->params['objet_type'] == 'alb' || $this->params['objet_type'] == 'search') {
  3749. $this->ordre();
  3750. }
  3751. $this->nouvelles_images();
  3752. // On enregistre tout dans le cookie.
  3753. $this->prefs->ecrire();
  3754. // On redirige vers la premičre page.
  3755. $img_name = '';
  3756. $cat_name = '';
  3757. if (isset($_GET['cat'])
  3758. || isset($_GET['alb'])
  3759. || isset($_GET['images'])
  3760. || isset($_GET['commentaires'])
  3761. || isset($_GET['hits'])
  3762. || isset($_GET['votes'])
  3763. || isset($_GET['recentes'])) {
  3764. if (isset($_GET['alb'])) {
  3765. $obj_id = $_GET['alb'];
  3766. } elseif (isset($_GET['cat'])) {
  3767. $obj_id = $_GET['cat'];
  3768. } elseif (isset($_GET['images'])) {
  3769. $obj_id = $_GET['images'];
  3770. } elseif (isset($_GET['commentaires'])) {
  3771. $obj_id = $_GET['commentaires'];
  3772. } elseif (isset($_GET['hits'])) {
  3773. $obj_id = $_GET['hits'];
  3774. } elseif (isset($_GET['votes'])) {
  3775. $obj_id = $_GET['votes'];
  3776. } elseif (isset($_GET['recentes'])) {
  3777. $obj_id = $_GET['recentes'];
  3778. }
  3779. $obj_id = (preg_match('`\d{1,12}`', $obj_id)) ? $obj_id : 0;
  3780. $mysql_requete = 'SELECT categorie_nom FROM ' . MYSQL_PREF . 'categories
  3781. WHERE categorie_id = "' . $obj_id . '"
  3782. AND categorie_visible = "1"';
  3783. if ($i = $this->mysql->select($mysql_requete, 5)) {
  3784. $cat_name = $i;
  3785. }
  3786. }
  3787. if (isset($_GET['img']) && preg_match('`\d{1,12}`', $_GET['img'])) {
  3788. $mysql_requete = 'SELECT image_nom FROM ' . MYSQL_PREF . 'images
  3789. WHERE image_id = "' . $_GET['img'] . '"
  3790. AND image_visible = "1"';
  3791. if ($i = $this->mysql->select($mysql_requete, 5)) {
  3792. $img_name = $i;
  3793. }
  3794. }
  3795. $params = '';
  3796. $params .= (isset($_GET['alb'])) ? '&alb=' . htmlentities($_GET['alb']) : '';
  3797. $params .= (isset($_GET['cat'])) ? '&cat=' . htmlentities($_GET['cat']) : '';
  3798. $params .= (isset($_GET['search'])) ? '&search=' . urlencode($_GET['search']) : '';
  3799. $params .= (isset($_GET['sadv'])) ? '&sadv=' . htmlentities($_GET['sadv']) : '';
  3800. $params .= (isset($_GET['date_ajout'])) ? '&date_ajout=' . htmlentities($_GET['date_ajout']) : '';
  3801. $params .= (isset($_GET['date_creation'])) ? '&date_creation=' . htmlentities($_GET['date_creation']) : '';
  3802. $params .= (isset($_GET['tag'])) ? '&tag=' . urlencode($_GET['tag']) : '';
  3803. $params .= (isset($_GET['images'])) ? '&images=' . htmlentities($_GET['images']) : '';
  3804. $params .= (isset($_GET['recentes'])) ? '&recentes=' . htmlentities($_GET['recentes']) : '';
  3805. $params .= (isset($_GET['hits'])) ? '&hits=' . htmlentities($_GET['hits']) : '';
  3806. $params .= (isset($_GET['votes'])) ? '&votes=' . htmlentities($_GET['votes']) : '';
  3807. $params .= (isset($_GET['commentaires'])) ? '&commentaires=' . htmlentities($_GET['commentaires']) : '';
  3808. $params .= (isset($_GET['mimg'])) ? '&mimg=' . htmlentities($_GET['mimg']) : '';
  3809. $params .= (isset($_GET['mfav'])) ? '&mfav=' . htmlentities($_GET['mfav']) : '';
  3810. $l = outils::genLink('?' . substr($params,1), $img_name, $cat_name, 0, '&');
  3811. header('Location: ' . $l);
  3812. exit;
  3813. }
  3814. $this->params['limit_vignettes'] = $this->choix['vn'] * $this->choix['vl'];
  3815. $this->template['infos']['nb_vignettes'] = $this->params['limit_vignettes'];
  3816. $this->template['infos']['vignettes_col'] = $this->choix['vn'];
  3817. $this->template['infos']['vignettes_line'] = $this->choix['vl'];
  3818. }
  3819. /*
  3820. * On récupčre les informations de la catégorie actuelle.
  3821. */
  3822. function infos_categorie() {
  3823. $this->template['stats']['nb_images'] = 0;
  3824. $mysql_requete = 'SELECT * FROM ' . MYSQL_PREF . 'categories
  3825. WHERE categorie_id = "' . $this->params['objet_id'] . '"';
  3826. $this->params['objet_actuel'] = $this->mysql->select($mysql_requete, 11);
  3827. if (!is_array($this->params['objet_actuel'])) {
  3828. header('Location: ' . outils::genLink('?cat=1'));
  3829. exit;
  3830. }
  3831. // La catégorie est-elle activée ?
  3832. if ($this->params['objet_actuel']['categorie_visible'] != 1) {
  3833. header('Location: ' . outils::genLink('?cat=1'));
  3834. exit;
  3835. }
  3836. // Droits : on récupčre et réduit les stats des albums protégés non autorisés.
  3837. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode']) &&
  3838. $this->template['membre_user'][0]['groupe_album_pass_mode'] != 'tous') {
  3839. $mysql_pass = 'categorie_pass != ""';
  3840. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'select') {
  3841. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  3842. for ($i = 0; $i < count($passwords); $i++) {
  3843. $mysql_pass .= ' AND categorie_pass != "' . $passwords[$i] . '" ';
  3844. }
  3845. }
  3846. $path = $this->params['objet_actuel']['categorie_chemin'];
  3847. $path = ($path == '.') ? '' : $path;
  3848. $mysql_requete = 'SELECT categorie_chemin,
  3849. categorie_poids,
  3850. categorie_images,
  3851. categorie_hits,
  3852. categorie_commentaires,
  3853. categorie_note,
  3854. categorie_votes
  3855. FROM ' . MYSQL_PREF . 'categories
  3856. WHERE categorie_derniere_modif > 0
  3857. AND categorie_visible = "1"
  3858. AND categorie_chemin LIKE "' . $path . '%"
  3859. AND ' . $mysql_pass;
  3860. $stats = $this->mysql->select($mysql_requete, 1);
  3861. if (is_array($stats)) {
  3862. // Stats de la catégorie actuelle.
  3863. $this->params['objet_actuel']['categorie_poids'] -= array_sum($stats['categorie_poids']);
  3864. $this->params['objet_actuel']['categorie_images'] -= array_sum($stats['categorie_images']);
  3865. $this->params['objet_actuel']['categorie_hits'] -= array_sum($stats['categorie_hits']);
  3866. $this->params['objet_actuel']['categorie_commentaires'] -= array_sum($stats['categorie_commentaires']);
  3867. $this->params['objet_actuel']['categorie_votes'] -= array_sum($stats['categorie_votes']);
  3868. // Stats des objets de la catégorie.
  3869. for ($i = 0; $i < count($stats['categorie_chemin']); $i++) {
  3870. $cat = preg_replace('`^(' . $path . '[^/]+/).*`', '$1', $stats['categorie_chemin'][$i]);
  3871. if (!isset($this->params['categories_pass'][$cat])) {
  3872. $this->params['categories_pass'][$cat]['poids'] = 0;
  3873. $this->params['categories_pass'][$cat]['images'] = 0;
  3874. $this->params['categories_pass'][$cat]['hits'] = 0;
  3875. $this->params['categories_pass'][$cat]['commentaires'] = 0;
  3876. $this->params['categories_pass'][$cat]['votes'] = 0;
  3877. $this->params['categories_pass'][$cat]['note'] = 0;
  3878. }
  3879. $this->params['categories_pass'][$cat]['poids'] += $stats['categorie_poids'][$i];
  3880. $this->params['categories_pass'][$cat]['images'] += $stats['categorie_images'][$i];
  3881. $this->params['categories_pass'][$cat]['hits'] += $stats['categorie_hits'][$i];
  3882. $this->params['categories_pass'][$cat]['commentaires'] += $stats['categorie_commentaires'][$i];
  3883. $this->params['categories_pass'][$cat]['votes'] += $stats['categorie_votes'][$i];
  3884. if ($stats['categorie_note'][$i] > 0) {
  3885. if ($this->params['categories_pass'][$cat]['note'] > 0) {
  3886. $this->params['categories_pass'][$cat]['note'] = ($this->params['categories_pass'][$cat]['note'] + $stats['categorie_note'][$i]) / 2;
  3887. } else {
  3888. $this->params['categories_pass'][$cat]['note'] = $stats['categorie_note'][$i];
  3889. }
  3890. }
  3891. }
  3892. }
  3893. }
  3894. // Lien historique.
  3895. $type = ($this->params['objet_actuel']['categorie_derniere_modif']) ? 'alb' : 'cat';
  3896. $this->template['historique']['lien'] = $type . '=' . $this->params['objet_actuel']['categorie_id'];
  3897. }
  3898. /*
  3899. * Choix utilisateurs : nouvelles images.
  3900. * On détermine si on doit mettre en évidence les nouvelles images,
  3901. * et si oui quelle est la durée de nouveauté de ces nouvelles images.
  3902. */
  3903. function nouvelles_images() {
  3904. $this->template['infos']['recent_jours'] = $this->config['galerie_recent'];
  3905. if ($this->config['display_recentes']) {
  3906. $this->choix['recent'] = $this->config['galerie_recent'];
  3907. } else {
  3908. $this->choix['recent'] = 0;
  3909. }
  3910. if ($this->config['user_perso'] && $this->config['user_recentes']) {
  3911. $valeur_ra = $this->prefs->lire('ra');
  3912. $valeur_rj = $this->prefs->lire('rj');
  3913. // On prend les informations envoyées par le formulaire (si envoyées)...
  3914. if (!empty($_GET['u'])) {
  3915. if (isset($_GET['ra']) && isset($_GET['rj']) && preg_match('`^[1-9][0-9]{0,3}$`', $_GET['rj'])) {
  3916. $this->prefs->ajouter('ra', 1);
  3917. $this->prefs->ajouter('rj', $_GET['rj']);
  3918. $this->choix['recent'] = $_GET['rj'];
  3919. $this->template['infos']['recent_jours'] = $_GET['rj'];
  3920. } elseif (empty($_GET['ra'])) {
  3921. $this->prefs->ajouter('ra', 0);
  3922. $this->choix['recent'] = 0;
  3923. $this->template['infos']['recent_jours'] = ($valeur_rj === FALSE) ? $this->config['galerie_recent'] : $valeur_rj;
  3924. }
  3925. // ...sinon on prend celles du cookie (si présent).
  3926. } elseif ($valeur_ra !== FALSE) {
  3927. $this->choix['recent'] = ($valeur_ra == 1) ? $valeur_rj : 0;
  3928. $this->template['infos']['recent_jours'] = $valeur_rj;
  3929. }
  3930. }
  3931. $this->template['infos']['recent'] = $this->choix['recent'];
  3932. }
  3933. /*
  3934. * On récupčre les informations de stats.
  3935. */
  3936. function stats_categorie() {
  3937. $this->template['stats']['poids'] = $this->params['objet_actuel']['categorie_poids'];
  3938. $this->template['stats']['nb_images'] = $this->params['objet_actuel']['categorie_images'];
  3939. $this->template['stats']['nb_hits'] = $this->params['objet_actuel']['categorie_hits'];
  3940. if (empty($this->config['active_commentaires'])) {
  3941. $this->template['stats']['nb_commentaires'] = -1;
  3942. } else {
  3943. $this->template['stats']['nb_commentaires'] = $this->params['objet_actuel']['categorie_commentaires'];
  3944. }
  3945. if (empty($this->config['active_votes'])) {
  3946. $this->template['stats']['nb_votes'] = -1;
  3947. } else {
  3948. $this->template['stats']['nb_votes'] = $this->params['objet_actuel']['categorie_votes'];
  3949. }
  3950. // On détermine le nombre d'images nouvelles contenues dans la catégorie actuelle.
  3951. if (!is_array($this->params['objet_actuel'])) {
  3952. $this->template['stats']['nb_recentes'] = 0;
  3953. } elseif ($this->choix['recent']) {
  3954. $this->params['time_limit'] = time() - ($this->choix['recent'] * 24 * 3600);
  3955. $chemin = $this->params['objet_actuel']['categorie_chemin'];
  3956. if ($chemin == '.') {
  3957. $chemin = '';
  3958. }
  3959. $mysql_requete = 'SELECT COUNT(*) FROM ' . MYSQL_PREF . 'images
  3960. WHERE image_chemin LIKE "' . $chemin . '%"
  3961. AND image_date > ' . $this->params['time_limit'] . '
  3962. AND image_visible = "1"' . $this->users_pass();
  3963. $this->template['stats']['nb_recentes'] = $this->mysql->select($mysql_requete, 5);
  3964. }
  3965. }
  3966. /*
  3967. * Utilisateurs : droits d'accčs pour les albums protégés.
  3968. */
  3969. function users_pass($type = 'images.image_pass') {
  3970. $mysql_pass = '';
  3971. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])
  3972. && $this->template['membre_user'][0]['groupe_album_pass_mode'] != 'tous') {
  3973. $mysql_pass = ' AND (' . MYSQL_PREF . $type . ' IS NULL';
  3974. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'select') {
  3975. if ($this->template['membre_user'][0]['groupe_album_pass_mode'] == 'select') {
  3976. $passwords = unserialize($this->template['membre_user'][0]['groupe_album_pass']);
  3977. for ($i = 0; $i < count($passwords); $i++) {
  3978. $mysql_pass .= ' OR ' . MYSQL_PREF . $type . ' = "' . $passwords[$i] . '"';
  3979. }
  3980. }
  3981. }
  3982. $mysql_pass .= ')';
  3983. }
  3984. return $mysql_pass;
  3985. }
  3986. /*
  3987. * On récupčre les informations de toute la hiérarchie parente.
  3988. */
  3989. function hierarchie() {
  3990. if ($this->params['objet_actuel'] !== 'vide') {
  3991. if (!isset($_GET['img'])) {
  3992. $this->template['infos']['parent_nom'] = $this->params['objet_actuel']['categorie_nom'];
  3993. }
  3994. $objet = ($this->template['infos']['type'] == 'img') ? 'image' : 'categorie';
  3995. $parent = dirname($this->params['objet_actuel'][$objet . '_chemin']);
  3996. $cat_where = '';
  3997. while ($parent != '.') {
  3998. $cat_where .= 'categorie_chemin = "' . $parent . '/" OR ';
  3999. $parent = dirname($parent);
  4000. }
  4001. if ($cat_where) {
  4002. $cat_where = substr($cat_where, 0, strlen($cat_where)-4);
  4003. $mysql_requete = 'SELECT categorie_id,
  4004. categorie_chemin,
  4005. categorie_nom,
  4006. categorie_visible
  4007. FROM ' . MYSQL_PREF . 'categories
  4008. WHERE ' . $cat_where . '
  4009. ORDER BY LENGTH(categorie_chemin) ASC';
  4010. $this->params['parents'] = $this->mysql->select($mysql_requete);
  4011. $this->template['infos']['hierarchie'] = '';
  4012. $type = 'cat';
  4013. $mrq = ($this->params['objet_type'] == 'img') ? 1 : 0;
  4014. if (is_array($this->params['parents'])) {
  4015. for ($i = 0; $i < count($this->params['parents']); $i++) {
  4016. if ($mrq && $i == count($this->params['parents'])-1) {
  4017. $type = 'alb';
  4018. $this->template['image']['album'] = $this->params['parents'][$i]['categorie_nom'];
  4019. }
  4020. if ($i == count($this->params['parents'])-1) {
  4021. $lien = '?' . $type . '=' . $this->params['parents'][$i]['categorie_id'] . '&amp;startnum=0';
  4022. if (isset($_GET['img'])) {
  4023. $this->template['infos']['parent_nom'] = $this->params['parents'][$i]['categorie_nom'];
  4024. }
  4025. } else {
  4026. $lien = outils::genLink('?' . $type . '=' . $this->params['parents'][$i]['categorie_id'], '', $this->params['parents'][$i]['categorie_nom']);
  4027. }
  4028. $this->template['infos']['hierarchie'] .= '<a href="' . $lien . '">' .
  4029. strip_tags($this->params['parents'][$i]['categorie_nom']) . '</a>%sep';
  4030. }
  4031. }
  4032. }
  4033. } else {
  4034. header('Location: ' . outils::genLink('?cat=1'));
  4035. exit;
  4036. }
  4037. }
  4038. /*
  4039. * On récupčre les informations de base des catégories voisines.
  4040. */
  4041. function cat_voisines() {
  4042. $dirname = dirname($this->params['objet_actuel']['categorie_chemin']);
  4043. $dirname = ($dirname == '.') ? '' : $dirname . '/';
  4044. if ($this->params['objet_id'] > 1) {
  4045. $mysql_requete = 'SELECT categorie_nom,
  4046. categorie_id,
  4047. categorie_derniere_modif
  4048. FROM ' . MYSQL_PREF . 'categories
  4049. WHERE categorie_chemin REGEXP "^' . $dirname . '[^/]+/$"
  4050. AND categorie_visible = "1" '
  4051. . $this->users_pass('categories.categorie_pass') . '
  4052. ORDER BY ' . $this->config['vignettes_cat_ordre'];
  4053. $this->template['nav']['voisines'] = $this->mysql->select($mysql_requete);
  4054. }
  4055. }
  4056. /*
  4057. * On génčre les liens pour la navigation entre les pages.
  4058. */
  4059. function liens_pages() {
  4060. $this->template['infos']['page_actuelle'] = 1;
  4061. if ($this->params['objet_type'] == 'alb') {
  4062. $this->params['nb_objets'] = $this->params['objet_actuel']['categorie_images'];
  4063. }
  4064. // On détermine le nombre de pages et la page actuelle.
  4065. $this->template['infos']['nb_pages'] = ceil(($this->params['nb_objets']) / $this->params['limit_vignettes']);
  4066. for ($n = 0; $n < $this->template['infos']['nb_pages']; $n++) {
  4067. $num = $n * $this->params['limit_vignettes'];
  4068. $this->template['nav']['pages'][$n + 1]['page'] = $num;
  4069. if ($num == $this->params['startnum']) {
  4070. $this->template['infos']['page_actuelle'] = $n + 1;
  4071. }
  4072. }
  4073. // On détermine les pages suivantes, précédentes, de début et de fin.
  4074. $this->template['nav']['suivante'][1] = $this->params['startnum'] + $this->params['limit_vignettes'];
  4075. $this->template['nav']['precedente'][1] = $this->params['startnum'] - $this->params['limit_vignettes'];
  4076. $this->template['nav']['premiere'][1] = 0;
  4077. $this->template['nav']['derniere'][1] = ($this->template['infos']['nb_pages'] * $this->params['limit_vignettes']) - $this->params['limit_vignettes'];
  4078. // On détermine la position de la catégorie actuelle.
  4079. if (isset($this->template['nav']['voisines']) && $this->params['objet_type'] !== 'search') {
  4080. for ($i = 0; $i < count($this->template['nav']['voisines']); $i++) {
  4081. if ($this->template['nav']['voisines'][$i]['categorie_id'] == $this->params['objet_actuel']['categorie_id']) {
  4082. $this->template['infos']['objet_num'] = $i+1;
  4083. break;
  4084. }
  4085. }
  4086. }
  4087. if (isset($this->params['objet_id'])) {
  4088. $this->template['infos']['objet'] = $this->params['objet_id'];
  4089. }
  4090. if ($this->params['startnum'] == 0) {
  4091. $this->template['nav']['premiere'][0] = 1;
  4092. }
  4093. if ($this->template['nav']['precedente'][1] < 0) {
  4094. $this->template['nav']['precedente'][0] = 1;
  4095. }
  4096. if ($this->template['nav']['suivante'][1] >= ($this->template['infos']['nb_pages'] * $this->params['limit_vignettes']) ||
  4097. $this->template['nav']['suivante'][1] >= $this->params['nb_objets']) {
  4098. $this->template['nav']['suivante'][0] = 1;
  4099. }
  4100. if ($this->params['startnum'] >= $this->template['nav']['derniere'][1]) {
  4101. $this->template['nav']['derniere'][0] = 1;
  4102. }
  4103. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  4104. }
  4105. /*
  4106. * Lien retour.
  4107. */
  4108. function lien_retour() {
  4109. if (($this->template['infos']['type'] != 'img'
  4110. && $this->params['objet_id'] < 2) === FALSE
  4111. && isset($this->template['infos']['objet_num'])
  4112. && !empty($this->template['infos']['hierarchie'])) {
  4113. $parent_id = (isset($this->params['parents'])) ? $this->params['parents'][count($this->params['parents'])-1]['categorie_id'] : 1;
  4114. if ($this->template['infos']['type'] != 'img') {
  4115. $nb_vignettes = $this->config['vignettes_cat_line'] * $this->config['vignettes_cat_col'];
  4116. } else {
  4117. $nb_vignettes = $this->params['limit_vignettes'];
  4118. }
  4119. $objet_num = $this->template['infos']['objet_num'];
  4120. $prvs = '';
  4121. $parent_page = (ceil($objet_num / $nb_vignettes) * $nb_vignettes) - $nb_vignettes;
  4122. $this->template['infos']['parent_startnum'] = $parent_page;
  4123. if (empty($_GET['votes'])
  4124. && empty($_GET['commentaires'])
  4125. && empty($_GET['hits'])
  4126. && empty($_GET['recentes'])
  4127. && empty($_GET['images'])
  4128. && empty($_GET['date_ajout'])
  4129. && empty($_GET['date_creation'])
  4130. && empty($_GET['tag'])
  4131. && empty($_GET['mfav'])
  4132. && empty($_GET['search'])
  4133. ) {
  4134. $this->template['infos']['hierarchie'] = str_replace('&amp;startnum=0', '&amp;startnum=' . $parent_page, $this->template['infos']['hierarchie']);
  4135. }
  4136. if (preg_match('`href="(\?.+startnum.+)"`', $this->template['infos']['hierarchie'], $m)) {
  4137. $dernier_lien = $m[1];
  4138. $dernier_nom = $this->params['parents'][count($this->params['parents'])-1]['categorie_nom'];
  4139. $nouveau_dernier_lien = outils::genLink($dernier_lien, '', $dernier_nom);
  4140. $this->template['infos']['hierarchie'] = str_replace($dernier_lien, $nouveau_dernier_lien, $this->template['infos']['hierarchie']);
  4141. }
  4142. $this->template['infos']['hierarchie'] = str_replace('&amp;startnum=0', '', $this->template['infos']['hierarchie']);
  4143. $this->template['nav']['retour_id'] = $parent_id;
  4144. }
  4145. }
  4146. /*
  4147. * Description de la catégorie.
  4148. * Que l'on affiche uniquement pour la premičre page.
  4149. */
  4150. function description_categorie() {
  4151. if (isset($this->template['infos']['page_actuelle']) &&
  4152. $this->template['infos']['page_actuelle'] == 1 &&
  4153. !empty($this->params['objet_actuel']['categorie_description'])) {
  4154. $this->template['infos']['description'] = str_replace('&', '&amp;', nl2br($this->params['objet_actuel']['categorie_description']));
  4155. }
  4156. }
  4157. /*
  4158. * Choix utilisateurs : informations sous vignettes.
  4159. */
  4160. function infos_vignettes() {
  4161. // Valeurs par défaut.
  4162. $this->choix['sa'] = $this->config['display_cat_nom'];
  4163. $this->choix['sn'] = $this->config['display_cat_nb_images'];
  4164. $this->choix['si'] = $this->config['display_img_nom'];
  4165. $this->choix['sy'] = $this->config['display_img_date'];
  4166. $this->choix['sd'] = $this->config['display_img_taille'];
  4167. $this->choix['sp'] = $this->config['display_img_poids'];
  4168. $this->choix['sc'] = $this->config['display_img_comments'];
  4169. $this->choix['sv'] = $this->config['display_img_votes'];
  4170. $this->choix['sh'] = $this->config['display_img_hits'];
  4171. if ($this->config['user_perso']) {
  4172. $i = -1;
  4173. $choice = array();
  4174. if ($this->params['objet_type'] == 'cat') {
  4175. if ($this->config['user_nom_categories']) { $i++; $choice[$i]['nom'] = 'sa'; $choice[$i]['defaut'] = $this->config['display_cat_nom']; }
  4176. if ($this->config['user_nb_images']) { $i++; $choice[$i]['nom'] = 'sn'; $choice[$i]['defaut'] = $this->config['display_cat_nb_images']; }
  4177. } else {
  4178. if ($this->config['user_nom_images']) { $i++; $choice[$i]['nom'] = 'si'; $choice[$i]['defaut'] = $this->config['display_img_nom']; }
  4179. if ($this->config['user_date']) { $i++; $choice[$i]['nom'] = 'sy'; $choice[$i]['defaut'] = $this->config['display_img_date']; }
  4180. if ($this->config['user_taille']) { $i++; $choice[$i]['nom'] = 'sd'; $choice[$i]['defaut'] = $this->config['display_img_taille']; }
  4181. }
  4182. if ($this->config['user_poids']) { $i++; $choice[$i]['nom'] = 'sp'; $choice[$i]['defaut'] = $this->config['display_img_poids']; }
  4183. if ($this->config['user_comments']) { $i++; $choice[$i]['nom'] = 'sc'; $choice[$i]['defaut'] = $this->config['display_img_comments']; }
  4184. if ($this->config['user_votes']) { $i++; $choice[$i]['nom'] = 'sv'; $choice[$i]['defaut'] = $this->config['display_img_votes']; }
  4185. if ($this->config['user_hits']) { $i++; $choice[$i]['nom'] = 'sh'; $choice[$i]['defaut'] = $this->config['display_img_hits']; }
  4186. for ($i = 0; $i < count($choice); $i++) {
  4187. $valeur_c = $this->prefs->lire($choice[$i]['nom']);
  4188. if ($valeur_c !== FALSE) {
  4189. $this->choix[$choice[$i]['nom']] = $valeur_c;
  4190. } else {
  4191. $this->choix[$choice[$i]['nom']] = $choice[$i]['defaut'];
  4192. }
  4193. if (!empty($_GET['u'])) {
  4194. $v = (isset($_GET[$choice[$i]['nom']])) ? 1 : 0;
  4195. $this->prefs->ajouter($choice[$i]['nom'], $v);
  4196. $this->choix[$choice[$i]['nom']] = $v;
  4197. }
  4198. }
  4199. }
  4200. }
  4201. /*
  4202. * Paramčtres d'affichage de divers éléments.
  4203. */
  4204. function affichage_elements() {
  4205. // Commentaires.
  4206. if (empty($this->config['active_commentaires'])) {
  4207. $this->template['user']['commentaires'] = 0;
  4208. $this->template['display']['commentaires'] = 0;
  4209. } else {
  4210. $this->template['user']['commentaires'] = $this->config['user_comments'];
  4211. $this->template['display']['commentaires'] = ($this->params['objet_type'] == 'cat') ? $this->config['display_cat_comments'] : $this->choix['sc'];
  4212. }
  4213. // Votes.
  4214. if (empty($this->config['active_votes'])) {
  4215. $this->template['user']['votes'] = 0;
  4216. $this->template['display']['votes'] = 0;
  4217. } else {
  4218. $this->template['user']['votes'] = $this->config['user_votes'];
  4219. $this->template['display']['votes'] = ($this->params['objet_type'] == 'cat') ? $this->config['display_cat_votes'] : $this->choix['sv'];
  4220. }
  4221. $this->template['display']['recentes'] = $this->choix['recent'];
  4222. // Paramčtres d'affichage.
  4223. if ($this->params['objet_type'] == 'cat') {
  4224. $this->template['display']['nom'] = $this->choix['sa'];
  4225. $this->template['display']['nb_images'] = $this->choix['sn'];
  4226. $this->template['display']['poids'] = ($this->params['objet_type'] == 'cat') ? $this->config['display_cat_poids'] : $this->choix['sp'];
  4227. $this->template['display']['hits'] = ($this->params['objet_type'] == 'cat') ? $this->config['display_cat_hits'] : $this->choix['sh'];
  4228. if ($this->template['display']['nb_images'] ||
  4229. $this->template['display']['poids'] ||
  4230. $this->template['display']['nom'] ||
  4231. $this->template['display']['hits'] ||
  4232. $this->template['display']['commentaires'] ||
  4233. $this->template['display']['votes'] ||
  4234. $this->template['display']['nom']) {
  4235. $this->template['display']['infos'] = 1;
  4236. } else {
  4237. $this->template['display']['infos'] = 0;
  4238. }
  4239. } else {
  4240. $this->template['display']['nom'] = $this->choix['si'];
  4241. $this->template['display']['date'] = $this->choix['sy'];
  4242. $this->template['display']['taille'] = $this->choix['sd'];
  4243. $this->template['display']['poids'] = $this->choix['sp'];
  4244. $this->template['display']['hits'] = $this->choix['sh'];
  4245. if ($this->template['display']['nom'] ||
  4246. $this->template['display']['date'] ||
  4247. $this->template['display']['taille'] ||
  4248. $this->template['display']['poids'] ||
  4249. $this->template['display']['hits'] ||
  4250. $this->template['display']['commentaires'] ||
  4251. $this->template['display']['votes']) {
  4252. $this->template['display']['infos'] = 1;
  4253. } else {
  4254. $this->template['display']['infos'] = 0;
  4255. }
  4256. }
  4257. }
  4258. /*
  4259. * Autorisation des choix utilisateurs.
  4260. */
  4261. function user_autorisations() {
  4262. if ($this->config['user_perso']) {
  4263. $this->template['user']['style'] = $this->config['user_style'];
  4264. $this->template['user']['recentes'] = $this->config['user_recentes'];
  4265. $this->template['user']['commentaires'] = $this->config['user_comments'];
  4266. $this->template['user']['votes'] = $this->config['user_votes'];
  4267. if ($this->params['objet_type'] == 'cat') {
  4268. $this->template['user']['nb_images'] = $this->config['user_nb_images'];
  4269. $this->template['user']['poids'] = $this->config['user_poids'];
  4270. $this->template['user']['hits'] = $this->config['user_hits'];
  4271. $this->template['user']['nom'] = $this->config['user_nom_categories'];
  4272. if ($this->template['user']['nb_images'] ||
  4273. $this->template['user']['nom'] ||
  4274. $this->template['user']['recentes']) {
  4275. $this->template['user']['montrer'] = 1;
  4276. } else {
  4277. $this->template['user']['montrer'] = 0;
  4278. }
  4279. } else {
  4280. $this->template['user']['vignettes'] = $this->config['user_vignettes'];
  4281. $this->template['user']['ordre'] = $this->config['user_ordre'];
  4282. $this->template['user']['nom'] = $this->config['user_nom_images'];
  4283. $this->template['user']['date'] = $this->config['user_date'];
  4284. $this->template['user']['taille'] = $this->config['user_taille'];
  4285. $this->template['user']['poids'] = $this->config['user_poids'];
  4286. $this->template['user']['hits'] = $this->config['user_hits'];
  4287. if ($this->template['user']['nom'] ||
  4288. $this->template['user']['taille'] ||
  4289. $this->template['user']['poids'] ||
  4290. $this->template['user']['hits'] ||
  4291. $this->template['user']['commentaires'] ||
  4292. $this->template['user']['votes'] ||
  4293. $this->template['user']['recentes']) {
  4294. $this->template['user']['montrer'] = 1;
  4295. } else {
  4296. $this->template['user']['montrer'] = 0;
  4297. }
  4298. }
  4299. if ($this->template['user']['montrer'] ||
  4300. $this->template['user']['vignettes'] ||
  4301. $this->template['user']['ordre'] ||
  4302. $this->template['user']['style']) {
  4303. $this->template['user']['perso'] = 1;
  4304. } else {
  4305. $this->template['user']['perso'] = 0;
  4306. }
  4307. } else {
  4308. $this->template['user']['perso'] = 0;
  4309. }
  4310. }
  4311. function user_autorisations_image() {
  4312. if ($this->config['user_perso']) {
  4313. $this->template['user']['style'] = $this->config['user_style'];
  4314. if ($this->template['user']['image_taille'] ||
  4315. $this->template['user']['style']) {
  4316. $this->template['user']['perso'] = 1;
  4317. } else {
  4318. $this->template['user']['perso'] = 0;
  4319. }
  4320. } else {
  4321. $this->template['user']['perso'] = 0;
  4322. }
  4323. }
  4324. /*
  4325. * On détermine l'ordre et le sens dans lequel
  4326. * vont ętre afficher les images.
  4327. */
  4328. function ordre() {
  4329. $this->template['user']['ordre'] = $this->config['user_ordre'];
  4330. if ($this->config['user_perso'] && $this->config['user_ordre']) {
  4331. $ck = ($this->params['objet_type'] == 'cat') ? 'c' : 'i';
  4332. $choice[0]['nom'] = $ck . 'o'; $choice[0]['defaut'] = $this->config['vignettes_ordre'];
  4333. $choice[1]['nom'] = $ck . 's'; $choice[1]['defaut'] = $this->config['vignettes_sens'];
  4334. for ($i = 0; $i < count($choice); $i++) {
  4335. if ($valeur = $this->prefs->lire($choice[$i]['nom'])) {
  4336. if (!preg_match('`^[a-z0-9_]+$`', $valeur)) {
  4337. break;
  4338. }
  4339. $this->choix[$choice[$i]['nom']] = $valeur;
  4340. } else {
  4341. $this->choix[$choice[$i]['nom']] = $choice[$i]['defaut'];
  4342. }
  4343. if (isset($_GET[$choice[$i]['nom']]) && preg_match('`^[a-z0-9_]{1,40}$`', $_GET[$choice[$i]['nom']])) {
  4344. $this->prefs->ajouter($choice[$i]['nom'], $_GET[$choice[$i]['nom']]);
  4345. $this->choix[$choice[$i]['nom']] = $_GET[$choice[$i]['nom']];
  4346. }
  4347. }
  4348. switch ($this->choix[$ck . 'o']) {
  4349. case 'n' : $this->params['v_ordre'] = 'nom'; break;
  4350. case 'p' : $this->params['v_ordre'] = 'poids'; break;
  4351. case 'h' : $this->params['v_ordre'] = 'hits'; break;
  4352. case 'd' : $this->params['v_ordre'] = 'date'; break;
  4353. case 'm' : $this->params['v_ordre'] = 'date_creation'; break;
  4354. case 'c' : $this->params['v_ordre'] = 'commentaires'; break;
  4355. case 'v' : $this->params['v_ordre'] = 'votes'; break;
  4356. case 'e' : $this->params['v_ordre'] = 'note'; break;
  4357. case 't' : $this->params['v_ordre'] = 'largeur*image_hauteur'; break;
  4358. default : $this->params['v_ordre'] = $this->config['vignettes_ordre'];
  4359. }
  4360. switch ($this->choix[$ck . 's']) {
  4361. case 'a' : $this->params['v_sens'] = 'ASC'; break;
  4362. case 'd' : $this->params['v_sens'] = 'DESC'; break;
  4363. default : $this->params['v_sens'] = $this->config['vignettes_sens'];
  4364. }
  4365. $this->template['infos']['vignettes_ordre'] = (strstr($this->params['v_ordre'], '*')) ? 'taille' : $this->params['v_ordre'];
  4366. $this->template['infos']['vignettes_sens'] = $this->params['v_sens'];
  4367. } else {
  4368. $this->params['v_ordre'] = $this->config['vignettes_ordre'];
  4369. $this->params['v_sens'] = $this->config['vignettes_sens'];
  4370. }
  4371. }
  4372. /*
  4373. * On génčre le tableau contenant toutes les infos de chaque image.
  4374. */
  4375. function vignettes_album() {
  4376. if ($this->params['objets'] !== 'vide') {
  4377. if ($this->config['galerie_images_window'] == 0) {
  4378. $params = '';
  4379. if (isset($_GET['search'])) {
  4380. $params = '&amp;search=' . urlencode($_GET['search']);
  4381. $params .= (isset($_GET['sadv'])) ? '&amp;sadv=' . urlencode($_GET['sadv']) : '';
  4382. } elseif (isset($_GET['images'])) {
  4383. $params = '&amp;images=' . htmlentities($_GET['images']);
  4384. } elseif (isset($_GET['recentes'])) {
  4385. $params = '&amp;recentes=' . htmlentities($_GET['recentes']);
  4386. } elseif (isset($_GET['hits'])) {
  4387. $params = '&amp;hits=' . htmlentities($_GET['hits']);
  4388. } elseif (isset($_GET['commentaires'])) {
  4389. $params = '&amp;commentaires=' . htmlentities($_GET['commentaires']);
  4390. } elseif (isset($_GET['votes'])) {
  4391. $params = '&amp;votes=' . htmlentities($_GET['votes']);
  4392. } elseif (isset($_GET['date_creation'])) {
  4393. $params = '&amp;date_creation=' . htmlentities($_GET['date_creation']);
  4394. $params .= (isset($_GET['cat'])) ? '&amp;cat=' . htmlentities($_GET['cat']) : '';
  4395. $params .= (isset($_GET['alb'])) ? '&amp;alb=' . htmlentities($_GET['alb']) : '';
  4396. } elseif (isset($_GET['date_ajout'])) {
  4397. $params = '&amp;date_ajout=' . htmlentities($_GET['date_ajout']);
  4398. $params .= (isset($_GET['cat'])) ? '&amp;cat=' . htmlentities($_GET['cat']) : '';
  4399. $params .= (isset($_GET['alb'])) ? '&amp;alb=' . htmlentities($_GET['alb']) : '';
  4400. $params .= (isset($_GET['mimg'])) ? '&amp;mimg=' . htmlentities($_GET['mimg']) : '';
  4401. } elseif (isset($_GET['tag'])) {
  4402. $params = '&amp;tag=' . urlencode($_GET['tag']);
  4403. $params .= (isset($_GET['cat'])) ? '&amp;cat=' . htmlentities($_GET['cat']) : '';
  4404. $params .= (isset($_GET['alb'])) ? '&amp;alb=' . htmlentities($_GET['alb']) : '';
  4405. } elseif (isset($_GET['mimg'])) {
  4406. $params = '&amp;mimg=' . urlencode($_GET['mimg']);
  4407. } elseif (isset($_GET['mfav'])) {
  4408. $params = '&amp;mfav=' . urlencode($_GET['mfav']);
  4409. }
  4410. }
  4411. $cat_name = '';
  4412. if (isset($this->params['objet_actuel']['categorie_nom'])) {
  4413. $cat_name = $this->params['objet_actuel']['categorie_nom'];
  4414. }
  4415. for ($n = 0; $n < count($this->params['objets']); $n++) {
  4416. $img_name = $this->params['objets'][$n]['image_nom'];
  4417. // Type d'affichage de l'image.
  4418. $image_text = (IMG_TEXTE) ? 'getitext.php?i=' : GALERIE_ALBUMS . '/';
  4419. switch ($this->config['galerie_images_window']) {
  4420. case 0 :
  4421. $this->template['vignettes'][$n]['page'] = outils::genLink('?img=' . $this->params['objets'][$n]['image_id'] . $params, $img_name, $cat_name);
  4422. break;
  4423. case 1 :
  4424. $this->template['vignettes'][$n]['page'] = GALERIE_PATH . '/' . $image_text . $this->params['objets'][$n]['image_chemin'];
  4425. break;
  4426. case 2 :
  4427. $largeur = $this->params['objets'][$n]['image_largeur'] + 40;
  4428. $hauteur = $this->params['objets'][$n]['image_hauteur'] + 30;
  4429. $this->template['vignettes'][$n]['page'] = "javascript:window.open('"
  4430. . GALERIE_PATH . '/' . $image_text
  4431. . $this->params['objets'][$n]['image_chemin']
  4432. . "','','scrollbars=yes,status=no,resizable=yes,width="
  4433. . $largeur
  4434. . ",height="
  4435. . $hauteur
  4436. . ",top=0,left=0');void(0);";
  4437. break;
  4438. }
  4439. // On détermine si l'image est a considérer comme récente.
  4440. $this->params['time_limit'] = time() - ($this->choix['recent'] * 24 * 3600);
  4441. if ($this->choix['recent'] && $this->params['objets'][$n]['image_date'] > $this->params['time_limit']) {
  4442. $this->template['vignettes'][$n]['recent'] = 1;
  4443. }
  4444. // Autres informations.
  4445. $this->template['vignettes'][$n]['id'] = $this->params['objets'][$n]['image_id'];
  4446. $this->template['vignettes'][$n]['chemin'] = $this->params['objets'][$n]['image_chemin'];
  4447. $this->template['vignettes'][$n]['nom'] = outils::html_specialchars(strip_tags($this->params['objets'][$n]['image_nom']));
  4448. $this->template['vignettes'][$n]['date'] = $this->params['objets'][$n]['image_date'];
  4449. $this->template['vignettes'][$n]['poids'] = $this->params['objets'][$n]['image_poids'];
  4450. $this->template['vignettes'][$n]['hauteur'] = $this->params['objets'][$n]['image_hauteur']+$this->config['galerie_images_text_correction'];
  4451. $this->template['vignettes'][$n]['largeur'] = $this->params['objets'][$n]['image_largeur'];
  4452. $this->template['vignettes'][$n]['nb_hits'] = $this->params['objets'][$n]['image_hits'];
  4453. $this->template['vignettes'][$n]['nb_commentaires'] = $this->params['objets'][$n]['image_commentaires'];
  4454. $this->template['vignettes'][$n]['nb_votes'] = $this->params['objets'][$n]['image_votes'];
  4455. $this->template['vignettes'][$n]['note'] = $this->params['objets'][$n]['image_note'];
  4456. }
  4457. }
  4458. }
  4459. /*
  4460. * Vote utilisateur.
  4461. */
  4462. function note() {
  4463. if ($this->config['active_votes']) {
  4464. // On vérifie par cookie si le visiteur n'a pas déjŕ voté l'image, ainsi que
  4465. // par IP si le visiteur n'a pas déjŕ voté l'image dans les derničres 48 heures.
  4466. $cookie_vote = $this->prefs->lire('userid');
  4467. if (preg_match('`^[a-z0-9]{12}$`i', $cookie_vote)) {
  4468. $cookie_requete = 'vote_cookie = "' . $cookie_vote . '" OR ';
  4469. } else {
  4470. $cookie_requete = '';
  4471. }
  4472. $time_limit = time() - (24 * 3600 * 2);
  4473. $mysql_requete = 'SELECT vote_note,vote_cookie FROM ' . MYSQL_PREF . 'votes
  4474. WHERE image_id = "' . $this->params['objet_actuel']['image_id'] . '"
  4475. AND (' . $cookie_requete . '(vote_date > ' . $time_limit . ' AND vote_ip = "' . $_SERVER['REMOTE_ADDR'] . '"))';
  4476. $note = $this->mysql->select($mysql_requete);
  4477. // Si cookie inexistant et identifiant de vote présent dans la bdd, on rajoute l'identifiant de vote au cookie.
  4478. if ($note != 'vide' &&
  4479. !preg_match('`^[a-z0-9]{12}$`i', $cookie_vote) &&
  4480. preg_match('`^[a-z0-9]{12}$`i', $note[0]['vote_cookie'])) {
  4481. $this->prefs->ajouter('userid', $note[0]['vote_cookie']);
  4482. }
  4483. if ($note != 'vide') {
  4484. $this->params['deja_note'] = 1;
  4485. $this->template['infos']['deja_note'] = $note[0]['vote_note'];
  4486. }
  4487. } else {
  4488. $this->template['infos']['no_votes'] = 1;
  4489. }
  4490. }
  4491. /*
  4492. * On rejete le commentaire si l'auteur, l'IP ou un mot-clé présent dans le message est banni.
  4493. */
  4494. function comment_aut() {
  4495. $bans = unserialize($this->config['admin_comment_ban']);
  4496. if (isset($_POST['auteur'])) {
  4497. if (count($bans['auteurs']) > 0) {
  4498. $p = '';
  4499. foreach ($bans['auteurs'] as $k => $v) {
  4500. $k = preg_quote($k);
  4501. $k = str_replace('\*', '.*', $k);
  4502. $p .= '|' . outils::regexp_accents($k);
  4503. }
  4504. $p = '`(^)(' . substr($p,1) . ')($)`i';
  4505. $p = preg_replace('`\s+`', '\s+', $p);
  4506. if (preg_match($p, $_POST['auteur'])) {
  4507. $this->template['comment']['rejet'] = 'Vous n\'ętes pas autorisé ŕ poster un commentaire.';
  4508. return FALSE;
  4509. }
  4510. }
  4511. }
  4512. if (count($bans['IP']) > 0) {
  4513. $p = '';
  4514. foreach ($bans['IP'] as $k => $v) {
  4515. $k = preg_quote($k);
  4516. $k = str_replace('\*', '.*', $k);
  4517. $p .= '|' . outils::regexp_accents($k);
  4518. }
  4519. $p = '`(\W|^)(' . substr($p,1) . ')(\W|$)`i';
  4520. $p = preg_replace('`\s+`', '\s+', $p);
  4521. if (preg_match($p, $_SERVER['REMOTE_ADDR'])) {
  4522. $this->template['comment']['rejet'] = 'Vous n\'ętes pas autorisé ŕ poster un commentaire.';
  4523. return FALSE;
  4524. }
  4525. }
  4526. if (count($bans['mots-cles']) > 0) {
  4527. $p = '';
  4528. foreach ($bans['mots-cles'] as $k => $v) {
  4529. $k = preg_quote($k);
  4530. $k = str_replace('\*', '[^^]*', $k);
  4531. $p .= '|' . outils::regexp_accents($k);
  4532. }
  4533. $p = '`(\W|^)(' . substr($p,1) . ')(\W|$)`i';
  4534. $p = preg_replace('`[^\S]+`', '[^\S]+', $p);
  4535. if (preg_match($p, $_POST['message'])) {
  4536. $this->template['comment']['rejet'] = 'Vous n\'ętes pas autorisé ŕ poster ce message.';
  4537. return FALSE;
  4538. }
  4539. }
  4540. return TRUE;
  4541. }
  4542. /*
  4543. * On prévient l'admin par courriel qu'un nouveau message a été posté.
  4544. */
  4545. function commentMailAlert($auteur, $courriel, $siteweb, $msg, $IP, $img) {
  4546. $msg = str_replace("\x5cn", "\n", $msg);
  4547. $msg = str_replace("\x5cr", "\r", $msg);
  4548. $msg = str_replace("\x5ct", "\t", $msg);
  4549. $msg = stripslashes($msg);
  4550. $from = 'iGalerie Alerte <igalerie@' . $_SERVER['SERVER_NAME'] . '>';
  4551. // Message.
  4552. $auteur = ($this->template['infos']['membres_connexion'] == false)
  4553. ? 'Le membre \'' . str_replace('_', ' ', $this->template['membre_user'][0]['user_login']) . '\''
  4554. : '\'' . $auteur . '\'';
  4555. $message = $auteur . ' a écrit ŕ propos de l\'image \'' . $img['image_nom'] . '\'' . "\n";
  4556. $message .= 'http://' . $_SERVER['HTTP_HOST'] . GALERIE_URL . '?img=' . $_GET['img'] . "\n\n";
  4557. $message .= $msg . "\n\n";
  4558. $message .= '-- ' . "\n";
  4559. $message .= 'Ce courriel a été envoyé automatiquement par iGalerie.';
  4560. // Envoi du message.
  4561. outils::send_mail($this->config['admin_mail'], $this->config['admin_comment_objet'], $message, $from);
  4562. }
  4563. /*
  4564. * On vérifie les entrées de commentaires.
  4565. */
  4566. function verif_comment($text, $long, $type = 0, $o = 1) {
  4567. $text = trim($text);
  4568. if ($o && empty($text)) {
  4569. $result['rejet'] = 'vide';
  4570. } elseif (!empty($text) && strlen($text) > $long) {
  4571. $result['rejet'] = 'trop long';
  4572. } elseif (!empty($text) && !empty($type)) {
  4573. // L'adresse e-mail est-elle valide ?
  4574. if ($type == 'mail' && !preg_match('`^' . outils::email_address() . '$`i', $text)) {
  4575. $result['rejet'] = 'incorrecte';
  4576. }
  4577. // L'adresse du site Web est-elle valide ?
  4578. if ($type == 'site' && !preg_match('`^' . outils::http_url() . '$`i', $text)) {
  4579. $result['rejet'] = 'incorrecte';
  4580. }
  4581. }
  4582. if (empty($result['rejet'])) {
  4583. $result['text'] = outils::protege_mysql($text, $this->mysql->lien);
  4584. }
  4585. return $result;
  4586. }
  4587. /*
  4588. * On ajoute les nouveaux commentaires.
  4589. */
  4590. function new_comment() {
  4591. if ((isset($_POST['auteur']) || isset($_POST['message']) || isset($_POST['courriel']) || isset($_POST['siteweb']))
  4592. && $this->config['active_commentaires'] && $this->template['infos']['add_comments']) {
  4593. if (isset($_POST['auteur'])) $this->template['comment']['auteur'] = outils::html_specialchars($_POST['auteur']);
  4594. if (isset($_POST['message'])) $this->template['comment']['message'] = outils::html_specialchars($_POST['message']);
  4595. if (isset($_POST['courriel'])) $this->template['comment']['courriel'] = htmlspecialchars($_POST['courriel']);
  4596. if (isset($_POST['siteweb'])) {
  4597. $_POST['siteweb'] = (trim($_POST['siteweb']) == 'http://') ? '' : $_POST['siteweb'];
  4598. $this->template['comment']['siteweb'] = htmlspecialchars($_POST['siteweb']);
  4599. }
  4600. $IP = $_SERVER['REMOTE_ADDR'];
  4601. // Anti-flood.
  4602. $antifloodtime = time() - $this->config['comment_antiflood'];
  4603. $mysql_requete = 'SELECT commentaire_date FROM ' . MYSQL_PREF . 'commentaires
  4604. WHERE commentaire_ip = "' . $IP . '" AND
  4605. commentaire_date > ' . $antifloodtime . '
  4606. ORDER BY commentaire_date DESC LIMIT 1';
  4607. $ipdate = $this->mysql->select($mysql_requete, 5);
  4608. if ($ipdate != 'vide') {
  4609. $temps = (time() - $antifloodtime) - (time() - $ipdate);
  4610. $this->template['comment']['rejet'] = 'Vous devez patienter encore ' . $temps . ' secondes avant de pouvoir poster un nouveau commentaire.';
  4611. return;
  4612. }
  4613. // Anti-spam ?
  4614. if (empty($_POST['molpac']) || !preg_match('`^[a-z0-9]{32}$`', $_POST['molpac'])) {
  4615. return;
  4616. }
  4617. if (empty($_POST['preview'])) {
  4618. $time = time();
  4619. $time_md5_array = array();
  4620. for ($i = -5; $i < 1; $i++) {
  4621. $time_md5 = md5($time+$i);
  4622. $time_key_md5 = md5($time_md5 . $this->config['galerie_key']);
  4623. array_push($time_md5_array, $time_key_md5);
  4624. }
  4625. if (in_array($_POST['molpac'], $time_md5_array)) {
  4626. $this->template['comment']['rejet'] = 'Prenez au moins le temps d\'admirer cette image avant de poster un commentaire !';
  4627. return;
  4628. }
  4629. }
  4630. // Si le commentaire est autorisé...
  4631. if ($this->comment_aut()) {
  4632. // ...on vérifie le commentaire.
  4633. $message = $this->verif_comment($_POST['message'], 2000);
  4634. if ($this->template['infos']['membres_connexion']) {
  4635. $auteur = $this->verif_comment($_POST['auteur'], 50);
  4636. $courriel = $this->verif_comment($_POST['courriel'], 320, 'mail', $this->config['comment_courriel']);
  4637. $siteweb = $this->verif_comment($_POST['siteweb'], 350, 'site', $this->config['comment_siteweb']);
  4638. } else {
  4639. $auteur = array();
  4640. $auteur['text'] = $this->template['membre_user'][0]['user_nom'];
  4641. $courriel = array();
  4642. $courriel['text'] = $this->template['membre_user'][0]['user_mail'];
  4643. $siteweb = array();
  4644. $siteweb['text'] = $this->template['membre_user'][0]['user_web'];
  4645. }
  4646. // Interdire les messages contenant des adresses Internet ?
  4647. if (!isset($message['rejet']) && $this->config['comment_nourl']) {
  4648. $regexp = '(?:' . outils::http_url('IP') . '|(?:(ht|f)tp://'
  4649. . outils::http_url('domaine') . outils::http_url('TLD') . '))';
  4650. $o = $this->config['comment_maxurl'];
  4651. if (preg_match('`(?:[^$]*?' . $regexp . '[^$]*?){' . $o . '}`i', $message['text'])) {
  4652. $this->template['comment']['rejet'] = 'Les adresses Internet ne sont pas autorisées.';
  4653. return;
  4654. }
  4655. }
  4656. if (isset($auteur['rejet']) || isset($message['rejet']) || isset($courriel['rejet']) || isset($siteweb['rejet'])) {
  4657. if (isset($auteur['rejet'])) {
  4658. $rejet = 'Le nom de l\'auteur du commentaire est ' . $auteur['rejet'] . '.';
  4659. } elseif (isset($message['rejet'])) {
  4660. $rejet = 'Le message que vous avez envoyé est ' . $message['rejet'] . '.';
  4661. } elseif (isset($courriel['rejet'])) {
  4662. $rejet = 'L\'adresse du courriel que vous avez envoyé est ' . $courriel['rejet'] . '.';
  4663. } elseif (isset($siteweb['rejet'])) {
  4664. $rejet = 'L\'adresse du site Web que vous avez envoyé est ' . $siteweb['rejet'] . '.';
  4665. }
  4666. $this->template['comment']['rejet'] = $rejet;
  4667. // Prévisualisation.
  4668. } elseif (!empty($_POST['preview'])) {
  4669. $this->template['comment']['preview'] = 1;
  4670. } else {
  4671. // Interdire ŕ une męme IP de poster plusieurs fois un męme message pour une męme image ?
  4672. if ($this->config['comment_samemsg']) {
  4673. $mysql_requete = 'SELECT commentaire_id FROM ' . MYSQL_PREF . 'commentaires
  4674. WHERE commentaire_ip = "' . $IP . '"
  4675. AND image_id = "' . $this->params['objet_actuel']['image_id'] . '"
  4676. AND commentaire_message = "' . $message['text'] . '"';
  4677. if (is_array($this->mysql->select($mysql_requete))) {
  4678. $this->template['comment']['rejet'] = 'Vous ne pouvez reposter le męme message.';
  4679. return;
  4680. }
  4681. }
  4682. // Interdire ŕ une męme IP de poster plus de X messages pour une męme image ?
  4683. if ($this->config['comment_maxmsg']) {
  4684. $mysql_requete = 'SELECT COUNT(image_id) FROM ' . MYSQL_PREF . 'commentaires
  4685. WHERE commentaire_ip = "' . $IP . '"
  4686. AND image_id = "' . $this->params['objet_actuel']['image_id'] . '"';
  4687. $count = $this->mysql->select($mysql_requete, 5);
  4688. if (!is_array($count) && preg_match('`^\d+$`', $count) && $count >= $this->config['comment_maxmsg_nb']) {
  4689. $this->template['comment']['rejet'] = 'Vous avez posté trop de messages pour cette image.';
  4690. return;
  4691. }
  4692. }
  4693. // On enregistre les informations du posteur dans le cookie.
  4694. $this->prefs->ajouter('co_nom', $auteur['text']);
  4695. $this->prefs->ajouter('co_mail', $courriel['text']);
  4696. $this->prefs->ajouter('co_site', $siteweb['text']);
  4697. // Le commentaire doit-il ętre modéré ?
  4698. $visible = ($this->config['admin_comment_moderer']) ? 0 : 1;
  4699. // Doit-on alerter l'admin par courriel ?
  4700. if ($this->config['admin_comment_alert']) {
  4701. $this->commentMailAlert($auteur['text'], $courriel['text'], $siteweb['text'], $message['text'], $IP, $this->params['objet_actuel']);
  4702. }
  4703. // Utilisateur.
  4704. if ($this->template['infos']['membres_connexion']) {
  4705. $user_id = 0;
  4706. } else {
  4707. $user_id = $this->template['membre_user'][0]['user_id'];
  4708. $auteur = array();
  4709. $auteur['text'] = str_replace('_', ' ', $this->template['membre_user'][0]['user_login']);
  4710. }
  4711. // On ajoute le commentaire ŕ la base de données.
  4712. $mysql_requete = 'INSERT INTO ' . MYSQL_PREF . 'commentaires (
  4713. image_id,
  4714. user_id,
  4715. commentaire_date,
  4716. commentaire_auteur,
  4717. commentaire_mail,
  4718. commentaire_web,
  4719. commentaire_message,
  4720. commentaire_ip,
  4721. commentaire_visible) VALUES (
  4722. "' . $this->params['objet_actuel']['image_id'] . '",
  4723. "' . $user_id . '",
  4724. "' . time(). '",
  4725. "' . $auteur['text'] . '",
  4726. "' . $courriel['text'] . '",
  4727. "' . $siteweb['text'] . '",
  4728. "' . $message['text'] . '",
  4729. "' . $IP . '",
  4730. "' . $visible . '")';
  4731. $this->mysql->requete($mysql_requete);
  4732. // On update le nombre de commentaires de l'image et des catégories parentes.
  4733. if ($visible) {
  4734. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'images SET
  4735. image_commentaires = image_commentaires + 1
  4736. WHERE image_id = "' . $this->params['objet_id'] . '"';
  4737. $this->mysql->requete($mysql_requete);
  4738. $this->template['image']['image_commentaires']++;
  4739. for ($i = 0; $i < count($this->params['parents']); $i++) {
  4740. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'categories SET
  4741. categorie_commentaires = categorie_commentaires + 1
  4742. WHERE categorie_id = "' . $this->params['parents'][$i]['categorie_id'] . '"';
  4743. $this->mysql->requete($mysql_requete);
  4744. }
  4745. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'categories SET
  4746. categorie_commentaires = categorie_commentaires + 1
  4747. WHERE categorie_id = "1"';
  4748. $this->mysql->requete($mysql_requete);
  4749. }
  4750. // On redirige vers la męme page pour éviter les double-posts par refresh de la page.
  4751. $this->prefs->ecrire();
  4752. header('Location: ' . $_SERVER['REQUEST_URI'] . '&mod=' . $this->config['admin_comment_moderer']);
  4753. exit;
  4754. }
  4755. }
  4756. }
  4757. }
  4758. /*
  4759. * On récupčre les commentaires.
  4760. */
  4761. function get_comments() {
  4762. $this->template['infos']['comment_mod_a'] = $this->config['admin_comment_moderer'];
  4763. if ($this->config['active_commentaires']) {
  4764. $this->template['comment']['o_courriel'] = $this->config['comment_courriel'];
  4765. $this->template['comment']['o_siteweb'] = $this->config['comment_siteweb'];
  4766. // On récupčre, s'il y a, les informations du posteur.
  4767. // Sauf en mode "prévisuaiser".
  4768. if (empty($_POST['preview'])) {
  4769. $valeur_nom = $this->prefs->lire('co_nom');
  4770. $valeur_mail = $this->prefs->lire('co_mail');
  4771. $valeur_site = $this->prefs->lire('co_site');
  4772. if ($valeur_nom !== FALSE) {
  4773. $this->template['comment']['auteur'] = outils::html_specialchars(stripslashes($valeur_nom));
  4774. }
  4775. if ($valeur_mail !== FALSE) {
  4776. $this->template['comment']['courriel'] = htmlspecialchars($valeur_mail);
  4777. }
  4778. if ($valeur_site !== FALSE) {
  4779. $this->template['comment']['siteweb'] = htmlspecialchars($valeur_site);
  4780. $this->template['comment']['siteweb'] = ($this->template['comment']['siteweb']) ? $this->template['comment']['siteweb'] : 'http://';
  4781. }
  4782. }
  4783. // Récupération des commentaires dans la base de données.
  4784. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'commentaires.*,
  4785. ' . MYSQL_PREF . 'users.user_id,
  4786. ' . MYSQL_PREF . 'users.user_login,
  4787. ' . MYSQL_PREF . 'users.user_avatar
  4788. FROM ' . MYSQL_PREF . 'commentaires LEFT JOIN ' . MYSQL_PREF . 'users USING (user_id)
  4789. WHERE ' . MYSQL_PREF . 'commentaires.image_id = "' . $this->params['objet_actuel']['image_id'] . '"
  4790. AND ' . MYSQL_PREF . 'commentaires.commentaire_visible = "1"
  4791. ORDER BY ' . MYSQL_PREF . 'commentaires.commentaire_date';
  4792. $comments = $this->mysql->select($mysql_requete);
  4793. // Création du tableau des commentaires ŕ afficher.
  4794. $i = 0;
  4795. if (is_array($comments)) {
  4796. while ($i < count($comments)) {
  4797. $this->template['commentaires'][$i]['id'] = outils::html_specialchars($comments[$i]['commentaire_id']);
  4798. if ($comments[$i]['user_id'] == 0) {
  4799. $this->template['commentaires'][$i]['auteur'] = outils::html_specialchars($comments[$i]['commentaire_auteur']);
  4800. $this->template['commentaires'][$i]['courriel'] = htmlspecialchars($comments[$i]['commentaire_mail']);
  4801. $this->template['commentaires'][$i]['siteweb'] = htmlspecialchars($comments[$i]['commentaire_web']);
  4802. } else {
  4803. if ($this->config['users_membres_active']) {
  4804. $login = $comments[$i]['user_login'];
  4805. $this->template['commentaires'][$i]['auteur'] = '<a href="' . outils::genLink('?profil=' . urlencode($login)) . '">' . str_replace('_', ' ', $login) . '</a>';
  4806. } else {
  4807. $this->template['commentaires'][$i]['auteur'] = str_replace('_', ' ', $comments[$i]['user_login']);
  4808. }
  4809. $this->template['commentaires'][$i]['courriel'] = '';
  4810. $this->template['commentaires'][$i]['siteweb'] = '';
  4811. }
  4812. $this->template['commentaires'][$i]['date'] = $comments[$i]['commentaire_date'];
  4813. $this->template['commentaires'][$i]['ip'] = $comments[$i]['commentaire_ip'];
  4814. $this->template['commentaires'][$i]['avatar'] = $comments[$i]['user_avatar'];
  4815. $this->template['commentaires'][$i]['login'] = $comments[$i]['user_login'];
  4816. $this->template['commentaires'][$i]['user_id'] = $comments[$i]['user_id'];
  4817. $this->template['commentaires'][$i]['message'] = outils::comment_format($comments[$i]['commentaire_message']);
  4818. $i++;
  4819. }
  4820. }
  4821. if (isset($this->template['comment']['preview'])) {
  4822. $this->template['commentaires'][$i]['preview'] = 1;
  4823. $this->template['commentaires'][$i]['id'] = 0;
  4824. if ($this->template['infos']['membres_connexion']) {
  4825. $this->template['commentaires'][$i]['auteur'] = $this->template['comment']['auteur'];
  4826. $this->template['commentaires'][$i]['courriel'] = $this->template['comment']['courriel'];
  4827. $this->template['commentaires'][$i]['siteweb'] = $this->template['comment']['siteweb'];
  4828. } else {
  4829. $login = $this->template['membre_user'][0]['user_login'];
  4830. $this->template['commentaires'][$i]['auteur'] = '<a href="' . outils::genLink('?profil=' . urlencode($login)) . '">' . str_replace('_', ' ', $login) . '</a>';
  4831. $this->template['commentaires'][$i]['courriel'] = '';
  4832. $this->template['commentaires'][$i]['siteweb'] = '';
  4833. $this->template['commentaires'][$i]['avatar'] = $this->template['membre_user'][0]['user_avatar'];
  4834. $this->template['commentaires'][$i]['user_id'] = $this->template['membre_user'][0]['user_id'];
  4835. $this->template['commentaires'][$i]['login'] = $login;
  4836. }
  4837. $this->template['commentaires'][$i]['date'] = time();
  4838. $this->template['commentaires'][$i]['ip'] = $_SERVER['REMOTE_ADDR'];
  4839. $this->template['commentaires'][$i]['message'] = outils::comment_format($_POST['message']);
  4840. }
  4841. // Commentaires désactivés.
  4842. } else {
  4843. $this->template['comment']['no_comment'] = 1;
  4844. }
  4845. }
  4846. /*
  4847. * On additionne 1 au nombre de visites de l'image et des catégories parentes.
  4848. */
  4849. function hits() {
  4850. // L'admin veut-il que l'on ne compte pas ses visites ?
  4851. if ($this->config['admin_no_hits']) {
  4852. if ($this->config['admin_no_hits_mode'] == 'cookie') {
  4853. $valeur = $this->prefs->lire('anh');
  4854. if ($valeur == md5($this->config['galerie_key'])) {
  4855. return;
  4856. }
  4857. }
  4858. if ($this->config['admin_no_hits_mode'] == 'ip') {
  4859. if (preg_match('`(^|,)' . $_SERVER['REMOTE_ADDR'] . '($|,)`', $this->config['admin_no_hits_ip'])) {
  4860. return;
  4861. }
  4862. }
  4863. }
  4864. $deja = 0;
  4865. // On vérifie par POST, par referer et par cookie si l'image n'a pas déjŕ été visionnée précédemment.
  4866. if (!empty($_POST)) {
  4867. $deja = 1;
  4868. }
  4869. if ((isset($_SERVER['HTTP_REFERER'])
  4870. && strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'])
  4871. && strstr($_SERVER['HTTP_REFERER'], 'img=' . $this->params['objet_id']))) {
  4872. $deja = 1;
  4873. }
  4874. $valeur = $this->prefs->lire('last_img');
  4875. if ($valeur == $this->params['objet_id']) {
  4876. $deja = 1;
  4877. }
  4878. if ($this->params['objet_actuel'] !== 'vide' && empty($deja)) {
  4879. $this->prefs->ajouter('last_img', $this->params['objet_id']);
  4880. $this->template['image']['image_hits']++;
  4881. // On fait tourner le compteur pour l'image actuelle...
  4882. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'images SET
  4883. image_hits = image_hits + 1
  4884. WHERE image_id = "' . $this->params['objet_id'] . '"';
  4885. $this->mysql->requete($mysql_requete);
  4886. // ...et pour toutes les catégories parentes.
  4887. $cat_where = 'categorie_id = "1"';
  4888. for ($i = 0; $i < count($this->params['parents']); $i++) {
  4889. $cat_where .= ' OR categorie_id = "' . $this->params['parents'][$i]['categorie_id'] . '"';
  4890. }
  4891. $mysql_requete = 'UPDATE ' . MYSQL_PREF . 'categories SET
  4892. categorie_hits = categorie_hits + 1
  4893. WHERE ' . $cat_where;
  4894. $this->mysql->requete($mysql_requete);
  4895. }
  4896. }
  4897. /*
  4898. * Choix utilisateurs : taille de l'image.
  4899. */
  4900. function perso_image() {
  4901. $this->template['user']['image_taille'] = $this->config['user_image_ajust'];
  4902. $this->template['display']['image_taille'] = ($this->config['galerie_images_resize'] == 1) ? 2 : 1;
  4903. // Redimensionnement GD.
  4904. if ($this->config['galerie_images_resize'] == 2) {
  4905. $this->template['display']['image_taille'] = 2;
  4906. // L'image sera-t-elle redimensionnée ?
  4907. $this->template['infos']['img_resize'] = '';
  4908. $img_max_size = preg_split('`x`i', IMG_RESIZE_GD, -1, PREG_SPLIT_NO_EMPTY);
  4909. $img_l = $this->params['objet_actuel']['image_largeur'];
  4910. $img_h = $this->params['objet_actuel']['image_hauteur'];
  4911. $ratio_l = $img_l / $img_max_size[0];
  4912. $ratio_h = $img_h / $img_max_size[1];
  4913. if (!empty($img_max_size[0]) &&
  4914. ($img_l > $img_max_size[0]) &&
  4915. ($ratio_l >= $ratio_h)) {
  4916. $this->template['infos']['img_resize'] = 'width="' . $img_max_size[0] . '" height="' . (round($img_h / $ratio_l)+$this->config['galerie_images_text_correction']) . '"';
  4917. }
  4918. if (!empty($img_max_size[1]) &&
  4919. ($img_h > $img_max_size[1]) &&
  4920. ($ratio_h >= $ratio_l)) {
  4921. $this->template['infos']['img_resize'] = 'width="' . round($img_l / $ratio_h) . '" height="' . ($img_max_size[1]+$this->config['galerie_images_text_correction']) . '"';
  4922. }
  4923. } else {
  4924. $img_max_size = preg_split('`x`i', $this->config['galerie_images_resize_max_html'], -1, PREG_SPLIT_NO_EMPTY);
  4925. // Si l'utilisateur est autorisé ŕ choisir le mode de redimensionnement de l'image...
  4926. if ($this->config['user_perso'] && $this->config['user_image_ajust']) {
  4927. // Type de dimensionnement de l'image (valeur 'it').
  4928. // 1 : taille originale.
  4929. // 2 : taille maximale.
  4930. // 3 : ajustement automatique de la largeur.
  4931. $valeur = $this->prefs->lire('it');
  4932. if ($valeur !== FALSE) {
  4933. $this->template['display']['image_taille'] = $valeur;
  4934. }
  4935. if (!empty($_GET['u']) && isset($_GET['it']) && preg_match('`^[123]$`', $_GET['it'])) {
  4936. $this->prefs->ajouter('it', $_GET['it']);
  4937. $this->template['display']['image_taille'] = $_GET['it'];
  4938. }
  4939. // Largeur maximale des images.
  4940. $choice[0]['nom'] = 'il'; $choice[0]['defaut'] = $img_max_size[0];
  4941. $choice[1]['nom'] = 'ih'; $choice[1]['defaut'] = $img_max_size[1];
  4942. for ($i = 0; $i < count($choice); $i++) {
  4943. if ($valeur = $this->prefs->lire($choice[$i]['nom'])) {
  4944. $this->choix[$choice[$i]['nom']] = $valeur;
  4945. } else {
  4946. $this->choix[$choice[$i]['nom']] = $choice[$i]['defaut'];
  4947. }
  4948. if (isset($_GET[$choice[$i]['nom']])) {
  4949. if (preg_match('`^[1-9][0-9]{1,4}$`', $_GET[$choice[$i]['nom']])) {
  4950. $this->prefs->ajouter($choice[$i]['nom'], $_GET[$choice[$i]['nom']]);
  4951. $this->choix[$choice[$i]['nom']] = $_GET[$choice[$i]['nom']];
  4952. } elseif ($this->template['display']['image_taille'] == 2) {
  4953. $this->template['display']['image_taille'] = 1;
  4954. }
  4955. }
  4956. }
  4957. // ...sinon on prend les valeurs de redimmensionnent max. par défaut.
  4958. } else {
  4959. $this->choix['il'] = $img_max_size[0];
  4960. $this->choix['ih'] = $img_max_size[1];
  4961. }
  4962. $this->template['user']['img_largeur_max'] = $this->choix['il'];
  4963. $this->template['user']['img_hauteur_max'] = $this->choix['ih'];
  4964. // Si redimensionnement par taille maximale,
  4965. // on calcule le redimensionnement.
  4966. if ($this->template['display']['image_taille'] == 2) {
  4967. settype($this->template['infos']['img_resize'], 'string');
  4968. $img_l = $this->params['objet_actuel']['image_largeur'];
  4969. $img_h = $this->params['objet_actuel']['image_hauteur'] + $this->config['galerie_images_text_correction'];
  4970. if (empty($this->choix['il'])) { $this->choix['il'] = $img_l; }
  4971. if (empty($this->choix['ih'])) { $this->choix['ih'] = $img_h; }
  4972. $ratio_h = $img_h / $this->choix['ih'];
  4973. $ratio_l = $img_l / $this->choix['il'];
  4974. if (!empty($this->choix['il']) &&
  4975. ($img_l > $this->choix['il']) &&
  4976. ($ratio_l >= $ratio_h)) {
  4977. $this->template['infos']['img_resize'] = 'width="' . $this->choix['il'] . '" height="' . round($img_h / $ratio_l) . '"';
  4978. }
  4979. if (!empty($this->choix['ih']) &&
  4980. ($img_h > $this->choix['ih']) &&
  4981. ($ratio_h >= $ratio_l)) {
  4982. $this->template['infos']['img_resize'] = 'width="' . round($img_l / $ratio_h) . '" height="' . $this->choix['ih'] . '"';
  4983. }
  4984. }
  4985. }
  4986. }
  4987. /*
  4988. * On récupčre toutes les images pour les pages spéciales :
  4989. * images, hits, votes, recentes et commentaires.
  4990. */
  4991. function get_speciales($img = 0) {
  4992. if (isset($this->params['objet_actuel']['categorie_nom'])) {
  4993. $this->template['infos']['hvc']['nb_images'] = $this->params['objet_actuel']['categorie_images'];
  4994. $this->template['infos']['hvc']['nom'] = $this->params['objet_actuel']['categorie_nom'];
  4995. $this->template['infos']['hvc']['type'] = ($this->params['objet_actuel']['categorie_derniere_modif'] > 0) ? 'alb' : 'cat';
  4996. $this->template['infos']['hvc']['objet'] = ($this->params['objet_actuel']['categorie_derniere_modif'] > 0) ? 'l\'album' : 'la catégorie';
  4997. }
  4998. $chemin = '';
  4999. if (isset($this->params['objet_actuel']['categorie_chemin'])) {
  5000. $chemin = $this->params['objet_actuel']['categorie_chemin'];
  5001. $chemin = ($chemin == '.') ? '' : $chemin;
  5002. }
  5003. if (isset($this->params['objet_actuel']['image_chemin'])
  5004. && substr($this->params['objet_actuel']['image_chemin'], 0, strlen($chemin)) != $chemin) {
  5005. header('Location: ' . outils::genLink('?cat=1'));
  5006. exit;
  5007. }
  5008. $date_creation_lenght = ($this->params['v_ordre'] == 'date_creation') ? 'LENGTH(image_date_creation) ' . $this->params['v_sens'] . ',' : '';
  5009. $order = 'image_';
  5010. $ordre_criteres = 'image_' . $this->params['v_ordre'] . ' ' . $this->params['v_sens'];
  5011. if ($this->params['v_ordre'] == 'votes') {
  5012. $ordre_criteres .= ', image_note ' . $this->params['v_sens'];
  5013. } elseif ($this->params['v_ordre'] == 'note') {
  5014. $ordre_criteres .= ', image_votes ' . $this->params['v_sens'];
  5015. }
  5016. if (substr($this->params['objet_type'], 0, 4) == 'date') {
  5017. unset($this->template['infos']['hvc']);
  5018. if (isset($this->params['objet_actuel']['categorie_nom'])) {
  5019. $this->template['historique']['objet_id'] = $this->params['objet_actuel']['categorie_id'];
  5020. $this->template['historique']['objet_nom'] = $this->params['objet_actuel']['categorie_nom'];
  5021. }
  5022. if (isset($_GET[$this->params['objet_type']])) {
  5023. $date = $_GET[$this->params['objet_type']];
  5024. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date, $m)) {
  5025. $date_debut = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  5026. $date_fin = mktime(23, 59, 59, $m[2], $m[1], $m[3]);
  5027. } else {
  5028. $date = getdate(time());
  5029. $date_debut = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  5030. $date_fin = mktime(23, 59, 59, $date['mon'], $date['mday'], $date['year']);
  5031. }
  5032. }
  5033. $type = ($this->params['objet_type'] == 'date_creation') ? 'date_creation' : 'date';
  5034. $mysql_params = 'WHERE image_chemin LIKE "' . $chemin . '%"
  5035. AND image_' . $type . ' >= ' . $date_debut . '
  5036. AND image_' . $type . ' <= ' . $date_fin . '
  5037. AND image_visible = "1"';
  5038. $order .= $type . ' DESC, ' . $date_creation_lenght . $ordre_criteres;
  5039. } elseif ($this->params['objet_type'] == 'recentes') {
  5040. $time_limit = time() - ($this->choix['recent'] * 24 * 3600);
  5041. $order .= 'date DESC';
  5042. $mysql_params = 'WHERE image_chemin LIKE "' . $chemin . '%"
  5043. AND image_date >= ' . $time_limit . ' AND image_visible = "1"';
  5044. $this->template['display']['s_recentes'] = ' is_hvcr';
  5045. $order .= ',' . $date_creation_lenght . $ordre_criteres;
  5046. } else {
  5047. $type = ($this->params['objet_type'] == 'images') ? 'date' : $this->params['objet_type'];
  5048. switch ($type) {
  5049. case 'hits' : $this->template['display']['s_hits'] = ' is_hvcr'; break;
  5050. case 'commentaires' : $this->template['display']['s_comments'] = ' is_hvcr'; break;
  5051. case 'votes' : $this->template['display']['s_votes'] = ' is_hvcr'; break;
  5052. }
  5053. $mysql_params = 'WHERE image_chemin LIKE "' . $chemin . '%"
  5054. AND image_' . $type . ' > 0 AND image_visible = "1"';
  5055. $order .= ($type == 'votes') ? 'note DESC,image_votes' : $type;
  5056. $order .= ' DESC,' . $date_creation_lenght . $ordre_criteres;
  5057. if ($this->params['objet_type'] == 'images') {
  5058. $order = $date_creation_lenght . $ordre_criteres;
  5059. }
  5060. }
  5061. $mysql_params .= $this->images_protect();
  5062. // On récupčre toutes les images dans la base de données
  5063. // correspondant aux critčres de recherche.
  5064. $select = ($img) ? 'image_id,image_nom' : '*';
  5065. $limit = ($img) ? '' : ' LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  5066. $mysql_requete = 'SELECT ' . $select . ' FROM ' . MYSQL_PREF . 'images '
  5067. . $mysql_params
  5068. . ' ORDER BY ' . $order . ', image_id ' . $this->params['v_sens']
  5069. . $limit;
  5070. $this->params['objets'] = $this->mysql->select($mysql_requete);
  5071. if (empty($this->params['objets'])) {
  5072. die ('[' . __LINE__ . '] La base de données est vide.<br />' . mysql_error());
  5073. }
  5074. // On compte le nombre de résultats.
  5075. $mysql_requete = 'SELECT COUNT(*) FROM ' . MYSQL_PREF . 'images ' . $mysql_params;
  5076. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  5077. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  5078. }
  5079. /*
  5080. * Récupération des images correspondant ŕ un tag.
  5081. */
  5082. function get_images_tag() {
  5083. if (!$this->config['active_tags']) {
  5084. header('Location: ' . outils::genLink('?cat=1'));
  5085. exit;
  5086. }
  5087. // Chemin.
  5088. $chemin = '';
  5089. if (isset($this->params['objet_actuel']['categorie_chemin'])) {
  5090. $chemin = $this->params['objet_actuel']['categorie_chemin'];
  5091. $chemin = ($chemin == '.') ? '' : $chemin;
  5092. }
  5093. // WHERE...
  5094. $tag = htmlentities($_GET['tag']);
  5095. $mysql_params = 'WHERE ' . MYSQL_PREF . 'tags.tag_id = "' . outils::protege_mysql($tag, $this->mysql->lien) . '"
  5096. AND ' . MYSQL_PREF . 'images.image_id = ' . MYSQL_PREF . 'tags.image_id
  5097. AND ' . MYSQL_PREF . 'images.image_chemin LIKE "' . $chemin . '%"
  5098. AND ' . MYSQL_PREF . 'images.image_visible = "1"';
  5099. $mysql_params .= $this->images_protect();
  5100. // ORDER BY...
  5101. $date_creation_lenght = ($this->params['v_ordre'] == 'date_creation') ? 'LENGTH(' . MYSQL_PREF . 'images.image_date_creation) ' . $this->params['v_sens'] . ', ' : '';
  5102. $ordre_criteres = MYSQL_PREF . 'images.image_' . $this->params['v_ordre'] . ' ' . $this->params['v_sens'];
  5103. if ($this->params['v_ordre'] == 'votes') {
  5104. $ordre_criteres .= ', ' . MYSQL_PREF . 'images.image_note ' . $this->params['v_sens'];
  5105. } elseif ($this->params['v_ordre'] == 'note') {
  5106. $ordre_criteres .= ', ' . MYSQL_PREF . 'images.image_votes ' . $this->params['v_sens'];
  5107. }
  5108. $order = $date_creation_lenght . $ordre_criteres;
  5109. // Récupération des images.
  5110. $mysql_requete = 'SELECT DISTINCT ' . MYSQL_PREF . 'images.image_id,
  5111. ' . MYSQL_PREF . 'images.image_nom
  5112. FROM ' . MYSQL_PREF . 'images,
  5113. ' . MYSQL_PREF . 'tags '
  5114. . $mysql_params .
  5115. ' ORDER BY ' . $order . ',
  5116. ' . MYSQL_PREF . 'images.image_id ' . $this->params['v_sens'];
  5117. $this->params['objets'] = $this->mysql->select($mysql_requete);
  5118. if (!is_array($this->params['objets'])) {
  5119. header('Location: ' . outils::genLink('?cat=1'));
  5120. exit;
  5121. }
  5122. // On récupčre le nombre d'images correspondant aux critčres du SELECT.
  5123. $mysql_requete = 'SELECT COUNT(*)
  5124. FROM ' . MYSQL_PREF . 'images,
  5125. ' . MYSQL_PREF . 'tags '
  5126. . $mysql_params;
  5127. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  5128. $this->template['infos']['nb_objets'] = $this->params['nb_objets'];
  5129. }
  5130. /*
  5131. * Tient compte de la protection des objets par mot de passe
  5132. * lors d'une requęte de base de données.
  5133. */
  5134. function images_protect($type = 'image') {
  5135. if (isset($this->template['membre_user'][0]['groupe_album_pass_mode'])) {
  5136. $type = (strstr($type, 'image')) ? 'images.image_pass' : 'categories.categorie_pass';
  5137. return $this->users_pass($type);
  5138. }
  5139. $passwords = $this->passwords->valeur;
  5140. $regexp = '';
  5141. if (is_array($passwords)) {
  5142. foreach ($passwords as $p) {
  5143. $pass = outils::decrypte($p, $this->config['galerie_key']);
  5144. if (preg_match('`^\d+:\w+$`', $pass)) {
  5145. $regexp .= $pass . '|';
  5146. }
  5147. }
  5148. if ($regexp) {
  5149. $regexp = ' OR ' . $type . '_pass REGEXP "^' . preg_replace('`\|$`', '', $regexp) . '$"';
  5150. }
  5151. }
  5152. return ' AND (' . $type . '_pass IS NULL' . $regexp . ') ';
  5153. }
  5154. /*
  5155. * Moteur de recherche.
  5156. */
  5157. function recherche($img = 0) {
  5158. if (!$img) {
  5159. $this->params['objet_actuel'] = 'search';
  5160. $this->template['infos']['tags'] = 0;
  5161. }
  5162. $this->template['infos']['objet'] = outils::html_specialchars($_GET['search']);
  5163. $this->params['nb_objets'] = 0;
  5164. // On effectue la recherche.
  5165. $text_correction = $this->config['galerie_images_text_correction'];
  5166. $images_order = $this->mysql_order();
  5167. $protect_categories = $this->images_protect('categorie');
  5168. $protect_images = $this->images_protect();
  5169. $search_cat = ($img) ? 'img' : 'cat';
  5170. if (!$recherche = recherche::search($this->mysql, $this->config['active_tags'], $this->config['active_exif'], $text_correction, $images_order, $protect_images, $search_cat, $protect_categories)) {
  5171. header('Location: ' . outils::genLink('?cat=1', '', '', 0, '&'));
  5172. exit;
  5173. }
  5174. // Recherche dans les catégories.
  5175. if (isset($recherche['categories'])) {
  5176. $categories = $recherche['categories'];
  5177. if ($categories !== 'vide') {
  5178. for ($i = 0; $i < count($categories); $i++) {
  5179. // Tableau des catégories trouvées.
  5180. $type = ($categories[$i]['categorie_derniere_modif'] > 0) ? 'alb' : 'cat';
  5181. $this->template['cat_result'][$type][$categories[$i]['categorie_id']] = $categories[$i]['categorie_nom'];
  5182. }
  5183. }
  5184. }
  5185. // On recherche dans la table des images.
  5186. $this->params['limit_vignettes'] = $this->choix['vn'] * $this->choix['vl'];
  5187. $limit = ($img) ? '' : ' LIMIT ' . $this->params['startnum'] . ',' . $this->params['limit_vignettes'];
  5188. $mysql_requete = 'SELECT ' . MYSQL_PREF . 'images.image_id,
  5189. ' . MYSQL_PREF . 'images.image_chemin,
  5190. ' . MYSQL_PREF . 'images.image_nom,
  5191. ' . MYSQL_PREF . 'images.image_date,
  5192. ' . MYSQL_PREF . 'images.image_poids,
  5193. ' . MYSQL_PREF . 'images.image_hauteur,
  5194. ' . MYSQL_PREF . 'images.image_largeur,
  5195. ' . MYSQL_PREF . 'images.image_hits,
  5196. ' . MYSQL_PREF . 'images.image_commentaires,
  5197. ' . MYSQL_PREF . 'images.image_votes,
  5198. ' . MYSQL_PREF . 'images.image_note
  5199. FROM ' . MYSQL_PREF . 'images '
  5200. . $recherche['images']
  5201. . $limit;
  5202. $image_result = $this->mysql->select($mysql_requete);
  5203. // Y a-t-il des résultats dans la table des images ?
  5204. if (!$image_result || $image_result == 'vide') {
  5205. $this->params['objets'] = 'vide';
  5206. } else {
  5207. $this->params['objets'] = $image_result;
  5208. // Si oui, on compte le nombre de résultats trouvés.
  5209. $mysql_requete = 'SELECT COUNT(*) FROM ' . MYSQL_PREF . 'images' . $recherche['images'];
  5210. $this->params['nb_objets'] = $this->mysql->select($mysql_requete, 5);
  5211. }
  5212. $this->template['search'] = 1;
  5213. }
  5214. /*
  5215. * On récupčre toute la hiérarchie de la galerie
  5216. * et on en fait une liste HTML directement affichable.
  5217. */
  5218. function plan($parent = '') {
  5219. $mysql_requete = 'SELECT categorie_id,
  5220. categorie_nom,
  5221. categorie_chemin,
  5222. categorie_images,
  5223. categorie_dernier_ajout,
  5224. categorie_derniere_modif,
  5225. categorie_pass
  5226. FROM ' . MYSQL_PREF . 'categories
  5227. WHERE categorie_visible = "1"
  5228. AND categorie_chemin REGEXP "^' . $parent . '[^/]+/$" '
  5229. . $this->users_pass('categories.categorie_pass') . '
  5230. ORDER BY categorie_nom ASC';
  5231. $cats = $this->mysql->select($mysql_requete);
  5232. $id_premier = ($parent == '') ? ' id="plan_liste"' : '';
  5233. $time_limit = time() - ($this->choix['recent'] * 24 * 3600);
  5234. if ($cats && $cats !== 'vide') {
  5235. $this->template['plan'] .= '<ul' . $id_premier . '>';
  5236. $passwords = $this->passwords->valeur;
  5237. $regexp = '';
  5238. if (is_array($passwords)) {
  5239. foreach ($passwords as $v) {
  5240. $regexp .= '|' . preg_quote(outils::decrypte($v, $this->config['galerie_key']));
  5241. }
  5242. }
  5243. $regexp = str_replace('`', '\`', $regexp);
  5244. for ($i = 0; $i < count($cats); $i++) {
  5245. $s = ($cats[$i]['categorie_images'] > 1) ? 's' : '';
  5246. if ($this->config['users_membres_active']) {
  5247. $pass = 1;
  5248. } else {
  5249. $pass = (preg_match('`^(?:' . $regexp . ')$`', $cats[$i]['categorie_pass'])) ? 1 : 0;
  5250. }
  5251. $password = '';
  5252. if (empty($cats[$i]['categorie_derniere_modif'])) {
  5253. if (!$this->config['users_membres_active']) {
  5254. $password = ($pass) ? '' : ' plan_cat_pass';
  5255. }
  5256. $recentes = ($this->choix['recent'] && ($cats[$i]['categorie_dernier_ajout'] > $time_limit)) ? ' cat_recentes' : '';
  5257. $this->params['nb_cat']++;
  5258. $this->template['plan'] .= '<li class="plan_cat' . $recentes . $password . '">';
  5259. $l = outils::genLink('?cat=' . $cats[$i]['categorie_id'], '', $cats[$i]['categorie_nom']);
  5260. $this->template['plan'] .= '<a href="' . $l . '">' . strip_tags($cats[$i]['categorie_nom']) . '</a> <span class="plan_nb_images">[' . $cats[$i]['categorie_images'] . ' image' . $s . ']</span>';
  5261. } else {
  5262. if (!$this->config['users_membres_active']) {
  5263. $password = ($pass) ? '' : ' plan_alb_pass';
  5264. }
  5265. $recentes = ($this->choix['recent'] && ($cats[$i]['categorie_dernier_ajout'] > $time_limit)) ? ' alb_recentes' : '';
  5266. $this->params['nb_alb']++;
  5267. $this->template['plan'] .= '<li class="plan_alb' . $recentes . $password . '">';
  5268. $l = outils::genLink('?alb=' . $cats[$i]['categorie_id'], '', $cats[$i]['categorie_nom']);
  5269. $this->template['plan'] .= '<a href="' . $l . '">' . strip_tags($cats[$i]['categorie_nom']) . '</a> <span class="plan_nb_images">[' . $cats[$i]['categorie_images'] . ' image' . $s . ']</span>';
  5270. }
  5271. if (empty($cats[$i]['categorie_derniere_modif']) && $pass) {
  5272. $this->plan($cats[$i]['categorie_chemin']);
  5273. }
  5274. $this->template['plan'] .= '</li>';
  5275. }
  5276. $this->template['plan'] .= '</ul>';
  5277. }
  5278. }
  5279. }
  5280. /*
  5281. * ========== class.template
  5282. */
  5283. class template {
  5284. /* Données brutes issues du "moteur" */
  5285. var $data;
  5286. /* Préférences d'affichage utilisateur */
  5287. var $display;
  5288. /* Variable interne temporaire utilisée par certaines boucles */
  5289. var $interne;
  5290. /*
  5291. * Constructeur.
  5292. */
  5293. function template($data) {
  5294. $this->data = $data;
  5295. }
  5296. function getGaleriePath() {
  5297. echo GALERIE_PATH;
  5298. }
  5299. function getGalerieFile() {
  5300. echo GALERIE_FILE;
  5301. }
  5302. function getCSS() {
  5303. if (isset($this->data['user']['styles'])) {
  5304. for ($i = 0; $i < count($this->data['user']['styles']); $i++) {
  5305. $alternate = (basename($this->data['infos']['style']) == $this->data['user']['styles'][$i] . '.css') ? '' : 'alternate ';
  5306. $st = dirname(dirname($this->data['infos']['style'])) . '/' . $this->data['user']['styles'][$i] . '/' . $this->data['user']['styles'][$i] . '.css';
  5307. echo '<link rel="' . $alternate . 'stylesheet" type="text/css" media="screen" title="' . str_replace('_', ' ', htmlentities($this->data['user']['styles'][$i])) . '" href="' . $st . '" />' . "\n";
  5308. }
  5309. } else {
  5310. $nom = basename($this->data['infos']['style']);
  5311. $nom = substr($nom, 0, -4);
  5312. $nom = str_replace('_', ' ', htmlentities($nom));
  5313. echo '<link rel="stylesheet" type="text/css" media="screen" title="' . $nom . '" href="' . $this->data['infos']['style'] . '" />' . "\n";
  5314. }
  5315. if (!empty($this->data['add_style'])) {
  5316. echo "\n";
  5317. echo '<style type="text/css">' . "\n";
  5318. echo $this->data['add_style'] . "\n";
  5319. echo '</style>' . "\n";
  5320. }
  5321. }
  5322. function getFormAction($o = 0) {
  5323. if (GALERIE_URL_TYPE == 'url_rewrite' && !$o &&
  5324. !strstr($_SERVER['REQUEST_URI'], '.php?')) {
  5325. $qs = preg_replace('`(?:^|[\&\?])(..|u|mod|deconnect|addfav)=`', '/!!//', $_SERVER['QUERY_STRING']);
  5326. $qs = preg_replace('`/!!//.*$`', '', $qs);
  5327. echo GALERIE_PATH . htmlspecialchars($qs);
  5328. } else {
  5329. echo htmlspecialchars($_SERVER['REQUEST_URI']);
  5330. }
  5331. }
  5332. function getSearchAction() {
  5333. if (basename(GALERIE_URL) == 'index.php') {
  5334. echo GALERIE_PATH . '/';
  5335. } else {
  5336. echo GALERIE_URL;
  5337. }
  5338. }
  5339. function getGalerieAccueil() {
  5340. echo outils::genLink('?cat=1');
  5341. }
  5342. /*
  5343. * Informations générales.
  5344. */
  5345. function getInfo($i, $s = '%s', $o = ' - ') {
  5346. // Balise <title>.
  5347. if ($i == 'title') {
  5348. $title = '';
  5349. if (!empty($this->data['infos']['nom'])) {
  5350. $title .= $this->data['infos']['nom'];
  5351. }
  5352. switch ($this->data['infos']['type']) {
  5353. case 'membres' :
  5354. case 'profil' :
  5355. $title = $this->data['infos']['title'];
  5356. break;
  5357. case 'date_ajout' :
  5358. case 'date_creation' :
  5359. $mode = ($this->data['infos']['type'] == 'date_creation') ? 'créée' : 'ajoutée';
  5360. $date_get = $_GET[$this->data['infos']['type']];
  5361. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date_get, $m)) {
  5362. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  5363. } else {
  5364. $date = getdate(time());
  5365. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  5366. }
  5367. $date = strftime($this->data['infos']['im_date_format'], $date);
  5368. $pl = ($this->data['infos']['nb_objets'] > 1) ? 's' : '';
  5369. $title .= 'image' . $pl . ' ' . $mode . $pl . ' le ' . $date;
  5370. break;
  5371. case 'tag' :
  5372. $title .= $_GET['tag'];
  5373. break;
  5374. case 'comments' :
  5375. $objet = ($this->data['infos']['objet'] == 1) ? 'la galerie' : ' ' . $this->data['infos_objet']['categorie_nom'];
  5376. $title .= 'commentaires de ' . $objet;
  5377. break;
  5378. case 'img' :
  5379. $title .= $this->data['image']['image_nom'];
  5380. break;
  5381. case 'search' :
  5382. $title .= 'recherche \'' . html_entity_decode($this->data['infos']['objet']) . '\'';
  5383. break;
  5384. case 'section' :
  5385. switch ($this->data['infos']['objet']) {
  5386. case 'pass' :
  5387. $title .= 'mot de passe requis';
  5388. break;
  5389. case 'tags':
  5390. $title .= 'nuage de tags';
  5391. break;
  5392. case 'recherche':
  5393. $title .= 'recherche avancée';
  5394. break;
  5395. default :
  5396. $title .= $this->data['infos']['objet'];
  5397. }
  5398. break;
  5399. case 'images' : $hvcr = 'images';
  5400. case 'commentaires' : $hvcr = (isset($hvcr)) ? $hvcr : 'images les plus commentées';
  5401. case 'votes' : $hvcr = (isset($hvcr)) ? $hvcr : 'images les mieux notées';
  5402. case 'hits' : $hvcr = (isset($hvcr)) ? $hvcr : 'images les plus visitées';
  5403. case 'recentes' : $hvcr = (isset($hvcr)) ? $hvcr : 'images les plus récentes';
  5404. $objet = ($this->data['infos']['objet'] == 1) ? ' de la galerie' : ' de ' . ' ' . $this->data['infos']['hvc']['nom'];
  5405. $title .= $hvcr . $objet;
  5406. }
  5407. if ($this->data['infos']['h1']) {
  5408. $t = $this->data['infos']['h1'];
  5409. if (preg_match('`^<img[^>]+alt="([^">]+)"[^>]+>$`', $t, $m)) {
  5410. $t = $m[1];
  5411. }
  5412. $o = ($title !== '') ? $o : '';
  5413. $title .= $o . $t;
  5414. }
  5415. $title = str_replace('%sep', $o, strip_tags($title));
  5416. $title = htmlentities($title);
  5417. printf($s, $title);
  5418. } elseif ($i == 'style_dir') {
  5419. echo dirname($this->data['infos']['style']);
  5420. } elseif ($i == 'h1') {
  5421. $lien = '<a accesskey="1" href="' . outils::genLink('?cat=1') . '">' . str_replace('&', '&amp;', $this->data['infos'][$i]) . '</a>';
  5422. printf($s, $lien);
  5423. } elseif ($i == 'startnum') {
  5424. if (GALERIE_URL_TYPE == 'normal' || GALERIE_URL_TYPE == 'query_string') {
  5425. printf($s, $this->data['infos'][$i]);
  5426. }
  5427. } elseif ($this->data['infos'][$i]) {
  5428. printf($s, $this->data['infos'][$i]);
  5429. }
  5430. }
  5431. function getLink($l = '', $s = '%s') {
  5432. switch ($l) {
  5433. case 'contact' :
  5434. if ((!empty($this->data['contact']['text'])
  5435. || !empty($this->data['contact']['active']))
  5436. && !empty($this->data['contact']['admin_mail'])) {
  5437. $lien = outils::genLink('?section=contact');
  5438. printf($s, $lien);
  5439. }
  5440. break;
  5441. case 'plan' :
  5442. printf($s, outils::genLink('?section=plan')); break;
  5443. case 'login' :
  5444. case 'inscription' :
  5445. case 'modif_profil' :
  5446. case 'oubli' :
  5447. case 'upload' :
  5448. printf($s, outils::genLink('?membres=' . $l)); break;
  5449. default : printf($s, outils::genLink('?cat=1'));
  5450. }
  5451. }
  5452. /*
  5453. * Partie des liens.
  5454. */
  5455. function getLiens() {
  5456. if (!empty($this->data['galerie_liens'])) {
  5457. $liens = @unserialize($this->data['galerie_liens']);
  5458. if (is_array($liens)) {
  5459. $liste = '<ul>';
  5460. for ($i = 0; $i < count($liens); $i++) {
  5461. if (preg_match('`^([^:]+):(.+)$`', $liens[$i], $m)) {
  5462. $liste .= '<li><a href="' . strip_tags($m[2]) . '">' . htmlspecialchars($m[1]) . '</a></li>';
  5463. }
  5464. }
  5465. $liste .= '</ul>';
  5466. if (strlen($liste) > 10) {
  5467. echo $liste;
  5468. }
  5469. }
  5470. }
  5471. }
  5472. /*
  5473. * Paramčtres d'URL pour les formulaires de navigation et de personnalisation,
  5474. * et pour les listes de pages des barres de navigation.
  5475. */
  5476. function getUrlParameters($type) {
  5477. if (GALERIE_URL_TYPE != 'normal' && $type == 'page') {
  5478. $bn = $this->getBarreNav('', 0);
  5479. $bn = preg_replace('`/$`', '', $bn);
  5480. if (GALERIE_URL_TYPE == 'query_string') {
  5481. echo preg_replace('`index\.php$`', 'index.php?', $bn);
  5482. } else {
  5483. echo $bn;
  5484. }
  5485. return;
  5486. }
  5487. if (GALERIE_URL_TYPE != 'normal' && GALERIE_URL_TYPE != 'query_string') {
  5488. return;
  5489. }
  5490. if ($this->data['infos']['type'] == 'cat' &&
  5491. $this->data['infos']['objet'] == 1) {
  5492. $_GET['cat'] = 1;
  5493. }
  5494. if ($type == 'ipost') {
  5495. $url = outils::genLink('?img=' . $this->data['infos']['objet'], $this->data['image']['image_nom']);
  5496. echo str_replace('/?', '/index.php?', $url);
  5497. } else {
  5498. $params[] = 'img';
  5499. }
  5500. if (isset($_GET['section'])) {
  5501. $params[] = 'section';
  5502. $params[] = 'type';
  5503. }
  5504. $params[] = 'sadv';
  5505. $params[] = 'search';
  5506. $params[] = 'images';
  5507. $params[] = 'recentes';
  5508. $params[] = 'hits';
  5509. $params[] = 'commentaires';
  5510. $params[] = 'comments';
  5511. $params[] = 'votes';
  5512. $params[] = 'cat';
  5513. $params[] = 'alb';
  5514. $params[] = 'date_creation';
  5515. $params[] = 'date_ajout';
  5516. $params[] = 'tag';
  5517. $params[] = 'membres';
  5518. $params[] = 'profil';
  5519. $params[] = 'mcom';
  5520. $params[] = 'mimg';
  5521. $params[] = 'mfav';
  5522. for ($i = 0, $n = 0; $i < count($params); $i++) {
  5523. if (isset($_GET[$params[$i]]) && $_GET[$params[$i]] != '') {
  5524. if ($type == 'nav' || $type == 'page' || $type == 'ipost') {
  5525. $amp = ($type == 'page' && $n == 0) ? '?' : '&amp;';
  5526. echo $amp . $params[$i] . '=' . urlencode($_GET[$params[$i]]);
  5527. $n++;
  5528. } else {
  5529. echo '<input type="hidden" name="' . $params[$i] . '" value="' . htmlspecialchars($_GET[$params[$i]]) . '" />';
  5530. }
  5531. }
  5532. }
  5533. }
  5534. function getObjetType() {
  5535. $objet = 'la galerie';
  5536. if (isset($_GET['cat']) && $_GET['cat'] > 1) {
  5537. $objet = 'cette catégorie';
  5538. } elseif (isset($_GET['alb'])) {
  5539. $objet = 'cet album';
  5540. } elseif (isset($_GET['img'])) {
  5541. if (isset($this->data['infos']['special_cat'])) {
  5542. if ($this->data['infos']['special_cat'][0]['categorie_derniere_modif']) {
  5543. $objet = 'cet album';
  5544. } elseif (!$this->data['infos']['special_cat'][0]['categorie_derniere_modif'] &&
  5545. $this->data['infos']['special_cat'][0]['categorie_id'] > 1) {
  5546. $objet = 'cette catégorie';
  5547. }
  5548. } else {
  5549. $objet = 'cet album';
  5550. }
  5551. } elseif (isset($this->data['infos']['hvc'])) {
  5552. if ($this->data['infos']['hvc']['type'] == 'alb') {
  5553. $objet = 'cet album';
  5554. } elseif ($this->data['infos']['hvc']['type'] == 'cat' && $this->data['infos']['objet'] > 1) {
  5555. $objet = 'cette catégorie';
  5556. }
  5557. } elseif (isset($this->data['infos_objet']['categorie_derniere_modif'])) {
  5558. if ($this->data['infos_objet']['categorie_derniere_modif']) {
  5559. $objet = 'cet album';
  5560. } elseif (!$this->data['infos_objet']['categorie_derniere_modif'] && $this->data['infos_objet']['categorie_id'] > 1) {
  5561. $objet = 'cette catégorie';
  5562. }
  5563. }
  5564. return $objet;
  5565. }
  5566. /*
  5567. *
  5568. * ======================================== AFFICHAGE D'ELEMENTS ;
  5569. *
  5570. */
  5571. function display($type) {
  5572. switch ($type) {
  5573. case 'add_votes' :
  5574. case 'add_comments' :
  5575. if ($this->data['infos'][$type]) { return TRUE; } break;
  5576. case 'inscription_form' : if (empty($this->data['infos']['inscription_ok'])) { return TRUE; } break;
  5577. case 'membres' : if ($this->data['infos']['membres_active']) { return TRUE; } break;
  5578. case 'membres_connexion' : if ($this->data['infos']['membres_connexion']) { return TRUE; } break;
  5579. case 'modif_profil_newsletter' : if (!empty($this->data['infos']['user_newsletter'])) { return TRUE; } break;
  5580. case 'membres_avatar' : if ($this->data['infos']['membres_avatar']) { return TRUE; } break;
  5581. case 'membres_noadmin' : if ($this->data['infos']['membres_noadmin']) { return TRUE; } break;
  5582. case 'membres_login' : if (!empty($this->data['infos']['membres_login'])) { return TRUE; } break;
  5583. case 'oubli_form' : if ($this->data['infos']['oubli_form']) { return TRUE; } break;
  5584. case 'tags_section' : if ($this->data['infos']['tags']) { return TRUE; } break;
  5585. case 'liens_section' : if ($this->data['infos']['liens']) { return TRUE; } break;
  5586. case 'hasard_section' : if (isset($this->data['image_hasard'])) { return TRUE; } break;
  5587. case 'perso_section' : if ($this->data['user']['perso']) { return TRUE; } break;
  5588. case 'perso_thumbs' : if ($this->data['user']['vignettes']) { return TRUE; } break;
  5589. case 'perso_infos' : if ($this->data['user']['montrer']) { return TRUE; } break;
  5590. case 'perso_sort' : if (!empty($this->data['user']['ordre'])) { return TRUE; } break;
  5591. case 'perso_style' :
  5592. if (!empty($this->data['user']['style'])
  5593. && isset($this->data['user']['styles'])
  5594. && count($this->data['user']['styles']) > 1) { return TRUE; } break;
  5595. case 'image_taille' : if ($this->data['user']['image_taille']) { return TRUE; }; break;
  5596. case 'stats_section' : switch ($this->data['infos']['type']) { case 'alb' : case 'cat' : case 'img' : return TRUE; } break;
  5597. case 'categories_voisines' : if (isset($this->data['nav']['voisines']) && count($this->data['nav']['voisines']) > 1) { return TRUE; } break;
  5598. case 'search_result' : if ($this->data['infos']['type'] == 'search' && empty($_GET['startnum'])) { return TRUE; } break;
  5599. // Partie centrale.
  5600. case 'barre_nav_com' : if (isset($this->data['nav']['pages'][2])) { return TRUE; } break;
  5601. case 'barre_nav_img' : if (count($this->data['nav']['voisines']) > 1) { return TRUE; } break;
  5602. case 'barre_nav' : if (isset($this->data['vignettes']) && isset($this->data['nav']['pages'][2])) { return TRUE; } break;
  5603. case 'votes' : if (empty($this->data['infos']['no_votes'])) { return TRUE; } break;
  5604. case 'note' : if (empty($this->data['infos']['deja_note'])) { return TRUE; } break;
  5605. case 'comments' : if (empty($this->data['comment']['no_comment'])) { return TRUE; } break;
  5606. case 'exif' : if ($this->data['infos']['active_exif']) { return TRUE; } break;
  5607. case 'iptc' : if ($this->data['infos']['active_iptc']) { return TRUE; } break;
  5608. case 'rss' : if ($this->data['infos']['rss']) { return TRUE; } break;
  5609. case 'rss_objet' : if ($this->data['infos']['rss'] && isset($this->data['infos']['rss_objet'])) { return TRUE; } break;
  5610. case 'commentaires' : if ($this->data['infos']['active_commentaires']) { return TRUE; } break;
  5611. // Barre de navigation pour diaporama.
  5612. case 'barre_nav_diapo' :
  5613. if ($this->data['infos']['diaporama'] && $this->data['infos']['type'] != 'cat') {
  5614. if (isset($this->data['vignettes'])) {
  5615. return TRUE;
  5616. }
  5617. } else {
  5618. return $this->display('barre_nav');
  5619. }
  5620. break;
  5621. // Pages membres.
  5622. case 'inscription' :
  5623. case 'oubli' :
  5624. case 'profil' :
  5625. case 'modif_profil' :
  5626. case 'modif_pass' :
  5627. case 'modif_avatar' :
  5628. case 'upload' :
  5629. case 'create' :
  5630. case 'liste' :
  5631. if ($this->data['infos']['section_membres'] == $type) { return TRUE; }
  5632. break;
  5633. // Page section.
  5634. case 'recherche' :
  5635. case 'plan' :
  5636. case 'contact' :
  5637. case 'pass' :
  5638. case 'historique' :
  5639. case 'tags' :
  5640. if ($this->data['infos']['objet'] == $type) { return TRUE; }
  5641. break;
  5642. case 'contact_antispam' :
  5643. case 'contact_form' :
  5644. if (isset($this->data['contact'][$type])) { return TRUE; }
  5645. break;
  5646. // Vignettes.
  5647. case 'thumbs_infos' : if ($this->data['display']['infos']) { return TRUE; } break;
  5648. case 'thumbs' :
  5649. if (isset($this->data['vignettes'])) {
  5650. $thumbs = $this->data['infos']['vignettes_col'];
  5651. $lignes = $this->data['infos']['vignettes_line'];
  5652. $nb_vignettes = count($this->data['vignettes']);
  5653. while ($nb_vignettes < ($thumbs * $lignes) && ($thumbs * ($lignes - 1)) >= $nb_vignettes) {
  5654. $lignes--;
  5655. }
  5656. $this->interne['thumbs_nb_vignettes'] = $nb_vignettes;
  5657. $this->interne['thumbs_lignes'] = $lignes;
  5658. $this->interne['thumbs_thumbs'] = $thumbs;
  5659. $this->interne['thumbs_limit'] = 1;
  5660. $this->interne['thumbs_num'] = -1;
  5661. $this->interne['thumbs_tr'] = 0;
  5662. $this->interne['thumbs_td'] = 0;
  5663. return TRUE;
  5664. }
  5665. }
  5666. }
  5667. /*
  5668. *
  5669. * ======================================== SECTIONS ;
  5670. *
  5671. */
  5672. /* Titre des sections. */
  5673. function getSectionTitre($s, $section, $o = '') {
  5674. switch ($section[0]) {
  5675. case 'n' : $t = 'l\'aide ŕ la navigation'; break;
  5676. case 's' : $t = 'les statistiques'; break;
  5677. case 'h' : $t = 'une image choisie au hasard'; break;
  5678. case 'p' : $t = 'les options de personnalisation'; break;
  5679. case 'e' : $t = 'les informations Exif'; break;
  5680. case 't' : $t = 'les tags'; break;
  5681. case 'l' : $t = 'les liens'; break;
  5682. case 'c' : $t = 'les commentaires'; break;
  5683. default : $t = 'cette partie';
  5684. }
  5685. $valeur = 0;
  5686. $class = 'cacher';
  5687. $title = 'Cacher ' . $t;
  5688. printf($s, $class, $title);
  5689. }
  5690. /*
  5691. *
  5692. * ======================================== SECTION : NAVIGATION ;
  5693. *
  5694. */
  5695. /* Indicateur de la position actuelle */
  5696. function getPosActuel($type, $s = ' class="%s"', $o = 'pos_actuel') {
  5697. switch ($type) {
  5698. case 'accueil' :
  5699. if (isset($this->data['infos']['objet']) && $this->data['infos']['objet'] < 2) {
  5700. printf($s, $o);
  5701. }
  5702. break;
  5703. case 'plan' :
  5704. case 'aide' :
  5705. case 'contact' :
  5706. case 'historique' :
  5707. if ($this->data['infos']['objet'] == $type) {
  5708. printf($s, $o);
  5709. }
  5710. }
  5711. }
  5712. /* Objets voisins */
  5713. function getObjetsVoisins($s) {
  5714. $voisines = $this->data['nav']['voisines'];
  5715. for ($i = 0; $i < count($voisines); $i++) {
  5716. if (($this->data['infos']['type'] == 'cat' && $voisines[$i]['categorie_derniere_modif'] == 0)
  5717. || ($this->data['infos']['type'] == 'alb' && $voisines[$i]['categorie_derniere_modif'] != 0) ) {
  5718. $l = outils::genLink('?' . $this->data['infos']['type'] . '=' . $voisines[$i]['categorie_id'], '', $voisines[$i]['categorie_nom']);
  5719. $selected = ($this->data['infos']['objet'] == $voisines[$i]['categorie_id']) ? ' selected="selected"' : '';
  5720. printf($s, $l, $selected, strip_tags($voisines[$i]['categorie_nom']));
  5721. }
  5722. }
  5723. }
  5724. /* Recherche avancée */
  5725. function getAdvSearch($avance, $simple) {
  5726. if ($this->data['infos']['advsearch']) {
  5727. $search = (isset($_GET['search'])) ? '&amp;search=' . urlencode($_GET['search']) : '';
  5728. $adv_search = (isset($_GET['sadv'])) ? '&amp;sadv=' . urlencode($_GET['sadv']) : '';
  5729. $l = outils::genLink('?section=recherche' . $search . $adv_search);
  5730. printf($avance, $l);
  5731. } else {
  5732. echo $simple;
  5733. }
  5734. }
  5735. function isEXIF() {
  5736. if (function_exists('read_exif_data')) {
  5737. return TRUE;
  5738. }
  5739. }
  5740. function getAdvSearchAlbums() {
  5741. echo $this->data['list_albums'];
  5742. }
  5743. function getAdvSearchDate($type, $s = '%s') {
  5744. $time = ($type == 'start') ? $this->data['search_params']['date_start'] : $this->data['search_params']['date_end'];
  5745. // Jour.
  5746. $print_date = '<select name="s_date_' . $type . '_jour">';
  5747. for ($i = 1; $i <= 31; $i++) {
  5748. $selected = ($i == date('j', $time)) ? ' selected="selected"' : '';
  5749. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t\t" . '<option' . $selected . ' value="' . $i . '">' . str_pad($i, 2, 0, STR_PAD_LEFT) . '</option>';
  5750. }
  5751. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t" . '</select>';
  5752. // Mois.
  5753. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t" . '<select name="s_date_' . $type . '_mois">';
  5754. for ($i = 1; $i <= 12; $i++) {
  5755. $selected = ($i == date('n', $time)) ? ' selected="selected"' : '';
  5756. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t\t" . '<option' . $selected . ' value="' . $i . '">' . strftime('%B', mktime(0, 0, 0, $i, date('j', $time), date('Y', $time))) . '</option>';
  5757. }
  5758. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t" . "</select>\n";
  5759. // Année.
  5760. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t" . '<select name="s_date_' . $type . '_an">';
  5761. for ($i = 1970; $i <= date('Y', $time); $i++) {
  5762. $selected = ($i == date('Y', $time)) ? ' selected="selected"' : '';
  5763. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t\t" . '<option' . $selected . ' value="' . $i . '">' . $i . '</option>';
  5764. }
  5765. $print_date .= "\r\t\t\t\t\t\t\t\t\t\t\t\t" . '</select>';
  5766. printf($s, $print_date);
  5767. }
  5768. function getAdvSearchParams($p) {
  5769. $checked = ' checked="checked"';
  5770. switch ($p) {
  5771. // Requęte.
  5772. case 'text' :
  5773. if (isset($_GET['search'])) {
  5774. echo ' value="' . htmlspecialchars($_GET['search']) . '"';
  5775. }
  5776. break;
  5777. // Dimensions et poids.
  5778. case 'taille_width_start':
  5779. case 'taille_width_end':
  5780. case 'taille_height_start':
  5781. case 'taille_height_end':
  5782. case 'poids_start':
  5783. case 'poids_end':
  5784. if ($this->data['search_params'][$p]) {
  5785. echo ' value="' . $this->data['search_params'][$p] . '"';
  5786. }
  5787. break;
  5788. // Radio.
  5789. case 'et' : if ($this->data['search_params']['AND']) { echo $checked; } break;
  5790. case 'ou' : if (!$this->data['search_params']['AND']) { echo $checked; } break;
  5791. case 'date_ajout' : if (!$this->data['search_params']['date_type']) { echo $checked; } break;
  5792. case 'date_creation' : if ($this->data['search_params']['date_type']) { echo $checked; } break;
  5793. // Checkbox.
  5794. case 'nom' :
  5795. case 'chemin' :
  5796. case 'description' :
  5797. case 'motscles' :
  5798. case 'commentaires' :
  5799. case 'exif_make' :
  5800. case 'exif_model' :
  5801. case 'respect_casse' :
  5802. case 'respect_accents' :
  5803. case 'date' :
  5804. case 'taille' :
  5805. case 'poids' :
  5806. if ($this->data['search_params'][$p]) echo $checked;
  5807. }
  5808. }
  5809. /*
  5810. *
  5811. * ======================================== SECTION : HASARD ;
  5812. *
  5813. */
  5814. function getHasardImg($s) {
  5815. $size = 'width="' . $this->getThumbSize('w',1)
  5816. . '" height="' . $this->getThumbSize('h',1) . '"';
  5817. $lien = $this->data['image_hasard']['lien'];
  5818. $nom = htmlentities($this->data['image_hasard']['nom']);
  5819. $thumb = $this->data['image_hasard']['thumb'];
  5820. $dir = dirname($this->data['infos']['style']);
  5821. printf($s, $lien, $size, $nom, $thumb, $dir);
  5822. }
  5823. function getHasardAlb($s, $limit = 1000) {
  5824. $id = $this->data['image_hasard']['album_id'];
  5825. $nom = wordwrap(strip_tags($this->data['image_hasard']['album_nom']), $limit, '<br />', 0);
  5826. if ($id > 0) {
  5827. $lien = outils::genLink('?alb=' . $id, '', $this->data['image_hasard']['album_nom']);
  5828. printf($s, $lien, $nom);
  5829. }
  5830. }
  5831. /*
  5832. *
  5833. * ======================================== SECTION : TAGS ;
  5834. *
  5835. */
  5836. function getTags($s = '%s') {
  5837. if (is_array($this->data['tags'])) {
  5838. $tags = '';
  5839. $objet = 'cat=1';
  5840. if (isset($_GET['alb'])) {
  5841. $objet = 'alb=' . htmlentities($_GET['alb']);
  5842. } elseif (isset($_GET['cat'])) {
  5843. $objet = 'cat=' . htmlentities($_GET['cat']);
  5844. } elseif (isset($this->data['infos']['hvc'])) {
  5845. $objet = $this->data['infos']['hvc']['type'] . '=' . $this->data['infos']['objet'];
  5846. }
  5847. $cat_nom = '';
  5848. if (isset($this->data['infos']['nom'])) {
  5849. $cat_nom = $this->data['infos']['nom'];
  5850. } elseif (isset($this->data['infos_objet']['categorie_nom'])) {
  5851. $cat_nom = $this->data['infos_objet']['categorie_nom'];
  5852. } elseif (isset($this->data['infos']['hvc'])) {
  5853. $cat_nom = $this->data['infos']['hvc']['nom'];
  5854. } elseif (isset($this->data['categorie']['categorie_nom'])) {
  5855. $cat_nom = $this->data['categorie']['categorie_nom'];
  5856. }
  5857. foreach ($this->data['tags'] as $tag => $infos) {
  5858. $pl = ($infos['tag_nombre'] > 1) ? 's' : '';
  5859. $title = ' title="' . $infos['tag_nombre'] . ' image' . $pl . '"';
  5860. $tags .= "\n\t\t\t\t\t\t\t" . '<li class="tag_weight_' . $infos['weight'] . '">';
  5861. $tags .= '<a' . $title . ' href="' . outils::genLink('?' . $objet . '&amp;tag=' . urlencode(html_entity_decode($infos['tag_id'])), '', $cat_nom) . '">';
  5862. $tags .= $infos['tag_id'];
  5863. $tags .= '</a>';
  5864. $tags .= '</li>';
  5865. }
  5866. printf($s, $tags);
  5867. }
  5868. }
  5869. function getNullTags($s = '') {
  5870. if (!is_array($this->data['tags'])) {
  5871. echo $s;
  5872. }
  5873. }
  5874. function getAllTags($s = '%s') {
  5875. if (is_array($this->data['tags'])) {
  5876. $objet = $this->getObjetType();
  5877. $lien = '?section=tags&amp;';
  5878. $cat = 'cat=1';
  5879. if (isset($this->data['historique']['lien'])) {
  5880. $cat = $this->data['historique']['lien'];
  5881. } elseif (isset($this->data['infos']['hvc']['type']) && isset($this->data['infos']['objet'])) {
  5882. $cat = $this->data['infos']['hvc']['type'] . '=' . $this->data['infos']['objet'];
  5883. } elseif (isset($this->data['nav']['retour_id'])) {
  5884. $cat = 'alb=' . $this->data['nav']['retour_id'];
  5885. }
  5886. $lien .= $cat;
  5887. $lien = outils::genLink($lien, '', $this->data['infos']['parent_nom']);
  5888. $title = 'Montrer tous les tags de ' . $objet;
  5889. printf($s, $lien, $title);
  5890. }
  5891. }
  5892. function getTagsCloudTitle($s = '%s') {
  5893. $objet = '<a href="' . outils::genLink('?cat=1') . '">la galerie</a>';
  5894. if ($this->data['categorie']['categorie_id'] > 1) {
  5895. $objet = ($this->data['categorie']['categorie_derniere_modif']) ? 'l\'album' : 'la catégorie';
  5896. $type = ($this->data['categorie']['categorie_derniere_modif']) ? 'alb' : 'cat';
  5897. $l = outils::genLink('?' . $type . '=' . $this->data['categorie']['categorie_id'], '', $this->data['categorie']['categorie_nom']);
  5898. $objet .= ' <a href="' . $l . '">' . $this->data['categorie']['categorie_nom'] . '</a>';
  5899. }
  5900. $titre = 'Nuage de tags de ' . $objet;
  5901. printf($s, $titre);
  5902. }
  5903. /*
  5904. *
  5905. * ======================================== SECTION : PERSONNALISATION ;
  5906. *
  5907. */
  5908. /* Nombre de vignettes */
  5909. function getPersoThumbs($type, $s = '%s %s %s', $n = 10) {
  5910. for ($i = 1; $i <= $n; $i++) {
  5911. $selected = ($this->data['infos']['vignettes_' . $type] == $i) ? ' selected="selected"' : '';
  5912. printf($s, $i, $selected, $i);
  5913. }
  5914. }
  5915. /* Ordre des vignettes */
  5916. function getPersoSortOrdre($type, $s = '%s', $o = ' selected="selected"') {
  5917. switch ($type) {
  5918. case 'commentaires' :
  5919. if (empty($this->data['infos']['active_commentaires'])) {
  5920. break;
  5921. }
  5922. case 'votes' :
  5923. case 'note' :
  5924. if (empty($this->data['infos']['active_votes']) && $type != 'commentaires') {
  5925. break;
  5926. }
  5927. default :
  5928. if ($this->data['infos']['vignettes_ordre'] != $type) {
  5929. $o = '';
  5930. }
  5931. printf($s, $o);
  5932. }
  5933. }
  5934. function getPersoSortSens($type, $s = '%s', $o = ' selected="selected"') {
  5935. if ($this->data['infos']['vignettes_sens'] == $type) {
  5936. printf($s, $o);
  5937. }
  5938. }
  5939. /* Informations sous vignettes */
  5940. function getPersoDisplay($type, $s, $o = ' checked="checked"') {
  5941. if ($type == 'jours' && $this->data['user']['recentes']) {
  5942. printf($s, $this->data['infos']['recent_jours']);
  5943. } elseif (!empty($this->data['user'][$type])) {
  5944. if (($type == 'commentaires' || $type == 'votes') &&
  5945. (empty($this->data['infos']['active_' . $type]) || !empty($this->data['infos']['images_window']))) {
  5946. return;
  5947. }
  5948. $o = ($this->data['display'][$type]) ? $o : '' ;
  5949. printf($s, $o);
  5950. }
  5951. }
  5952. /* Styles */
  5953. function getStyles($s) {
  5954. for ($i = 0; $i < count($this->data['user']['styles']); $i++) {
  5955. $selected = ($this->data['display']['style'] == $this->data['user']['styles'][$i]) ? ' selected="selected"' : '';
  5956. printf($s, $this->data['user']['styles'][$i], $selected, str_replace('_', ' ', $this->data['user']['styles'][$i]));
  5957. }
  5958. }
  5959. /* Ajustement de la taille de l'image */
  5960. function getImageTaille($type, $s = '%s') {
  5961. switch ($type) {
  5962. case 'original' :
  5963. if ($this->data['display']['image_taille'] == 1) {
  5964. printf($s, '');
  5965. }
  5966. break;
  5967. case 'fixed' :
  5968. if ($this->data['display']['image_taille'] == 2) {
  5969. printf($s, '');
  5970. }
  5971. break;
  5972. case 'auto' :
  5973. if ($this->data['display']['image_taille'] == 3) {
  5974. printf($s, '');
  5975. }
  5976. break;
  5977. case 'width' :
  5978. if (!empty($this->data['user']['img_largeur_max'])) {
  5979. printf($s, $this->data['user']['img_largeur_max']);
  5980. }
  5981. break;
  5982. case 'height' :
  5983. if (!empty($this->data['user']['img_hauteur_max'])) {
  5984. printf($s, $this->data['user']['img_hauteur_max']);
  5985. }
  5986. }
  5987. }
  5988. /*
  5989. *
  5990. * ======================================== SECTION : STATISTIQUES ;
  5991. *
  5992. */
  5993. function verif_stats($n, $type = 'int') {
  5994. switch ($type) {
  5995. case 'int' :
  5996. $n = (int) $n;
  5997. break;
  5998. case 'float' :
  5999. $n = (float) $n;
  6000. break;
  6001. }
  6002. return ($n < 0) ? 0 : $n;
  6003. }
  6004. /* Statistiques. */
  6005. function getStat($type, $s = '%s', $o = '', $nodis = 0) {
  6006. switch ($type) {
  6007. case 'poids' :
  6008. $o = ($o) ? $o : ',';
  6009. $poids = $this->verif_stats($this->data['stats']['poids'], 'float');
  6010. printf($s, outils::poids($poids, $o));
  6011. break;
  6012. case 'categories' :
  6013. case 'albums' :
  6014. $o = ($o) ? $o : 's';
  6015. $nb = $this->verif_stats($this->data['stats']['nb_' . $type]);
  6016. if (empty($nb)) {
  6017. $o = '';
  6018. } else {
  6019. $o = ($nb > 1) ? $o : '';
  6020. }
  6021. printf($s, $nb, $o);
  6022. break;
  6023. case 'votes' :
  6024. if (empty($this->data['infos']['active_votes'])) {
  6025. break;
  6026. }
  6027. case 'comments' :
  6028. if (empty($this->data['infos']['active_commentaires']) && $type == 'comments') {
  6029. break;
  6030. }
  6031. case 'hits' :
  6032. if ($this->data['infos']['images_window']) {
  6033. break;
  6034. }
  6035. case 'recentes' :
  6036. if (empty($this->data['infos']['recent']) && $type == 'recentes') {
  6037. break;
  6038. }
  6039. case 'images' :
  6040. $type = ($type == 'comments') ? 'commentaires' : $type;
  6041. $o = ($o) ? $o : 's';
  6042. if (!isset($this->data['stats']['nb_' . $type])) {
  6043. break;
  6044. }
  6045. $info = $this->verif_stats($this->data['stats']['nb_' . $type]);
  6046. if (empty($info)) {
  6047. if ($nodis) { return; }
  6048. $o = '';
  6049. $lien_a = '';
  6050. $lien_b = '';
  6051. } else {
  6052. $o = ($info > 1) ? $o : '';
  6053. $lien_a = '<a href="' .
  6054. outils::genLink('?' . $type . '=' . $this->data['infos']['objet'],
  6055. '', $this->data['infos']['nom']) . '">';
  6056. $lien_b = '</a>';
  6057. }
  6058. printf($s, $lien_a, $info, $o, $lien_b);
  6059. }
  6060. }
  6061. function getCommentsLink($s = '%s', $o = '') {
  6062. if ($this->data['infos']['images_window'] || empty($this->data['infos']['active_commentaires'])) {
  6063. return;
  6064. }
  6065. if (empty($this->data['stats']['nb_commentaires']) || empty($this->data['infos']['active_page_comments'])) {
  6066. echo $o;
  6067. } else {
  6068. $lien = outils::genLink('?comments=' . $this->data['infos']['objet'], '', $this->data['infos']['nom']);
  6069. $title = ' la galerie';
  6070. if ($this->data['infos']['type'] == 'cat' && $this->data['infos']['objet'] > 1) {
  6071. $title = 'cette catégorie';
  6072. } elseif ($this->data['infos']['type'] == 'alb') {
  6073. $title = 'cet album';
  6074. }
  6075. $title = 'Voir les commentaires de ' . $title;
  6076. $s .= $o;
  6077. printf($s, $title, $lien, dirname($this->data['infos']['style']));
  6078. }
  6079. }
  6080. function getImageTags($s = '%s') {
  6081. if ($this->data['infos']['tags'] && $this->data['image']['image_tags']) {
  6082. $tags = '';
  6083. $tags = explode(',', $this->data['image']['image_tags']);
  6084. for ($i = 0; $i < count($tags); $i++) {
  6085. if ($tags[$i] != '') {
  6086. $l = outils::genLink('?tag=' . urlencode(html_entity_decode($tags[$i])));
  6087. $tags[$i] = '<a href="' . $l . '">' . str_replace(' ', '&nbsp;', $tags[$i]) . '</a>';
  6088. }
  6089. }
  6090. $tags = implode(' ', $tags);
  6091. printf($s, $tags);
  6092. }
  6093. }
  6094. /* Statistiques de l'image */
  6095. function getImageStat($type, $s = '%s', $o = '', $lien = 1) {
  6096. switch ($type) {
  6097. case 'auteur' :
  6098. if ($this->data['infos']['membres_active']) {
  6099. $lien = '<a href="' . outils::genLink('?profil=' . urlencode($this->data['image']['user_login'])) . '">' . str_replace('_', ' ', $this->data['image']['user_login']) . '</a>';
  6100. printf($s, $lien);
  6101. }
  6102. break;
  6103. case 'poids' :
  6104. $o = ($o) ? $o : ',';
  6105. printf($s, outils::poids($this->data['image']['image_poids'], $o));
  6106. break;
  6107. case 'taille' :
  6108. $o = ($o) ? $o : ' x ';
  6109. printf($s, $this->data['image']['image_largeur'] . $o . $this->data['image']['image_hauteur']);
  6110. break;
  6111. case 'hits' :
  6112. printf($s, $this->data['image']['image_hits']);
  6113. break;
  6114. case 'date_creation' :
  6115. $o = ($o) ? $o : '/';
  6116. $date_creation = $this->data['image']['image_date_creation'];
  6117. if ($date_creation && preg_match('`^\d{1,10}$`', $date_creation)) {
  6118. $date_creation = strftime($this->data['infos']['im_date_format'], $date_creation);
  6119. if ($lien) {
  6120. $l = outils::genLink('?date_creation=' . date('d-m-Y', $this->data['image']['image_date_creation']), '', '');
  6121. $date_creation = '<a href="' . $l . '">' . $date_creation . '</a>';
  6122. }
  6123. } else {
  6124. $date_creation = $o;
  6125. }
  6126. printf($s, $date_creation);
  6127. break;
  6128. case 'date' :
  6129. $date = strftime($this->data['infos']['im_date_format'], $this->data['image']['image_date']);
  6130. if ($lien) {
  6131. $l = outils::genLink('?date_ajout=' . date('d-m-Y', $this->data['image']['image_date']), '', '');
  6132. $date = '<a href="' . $l . '">' . $date . '</a>';
  6133. }
  6134. printf($s, $date);
  6135. break;
  6136. case 'comments' :
  6137. if (empty($this->data['comment']['no_comment'])) {
  6138. printf($s, $this->data['image']['image_commentaires']);
  6139. }
  6140. break;
  6141. case 'note' :
  6142. if (empty($this->data['infos']['no_votes'])) {
  6143. $o = ($o) ? $o : '0.0';
  6144. if ($this->data['image']['image_votes'] == 0) {
  6145. printf($s, $o);
  6146. } else {
  6147. $note = sprintf('%1.1f', $this->data['image']['image_note']);
  6148. printf($s, $note);
  6149. }
  6150. }
  6151. break;
  6152. case 'note_star' :
  6153. if (empty($this->data['infos']['no_votes'])) {
  6154. printf($s, $this->note_star($this->data['image']['image_note']));
  6155. }
  6156. break;
  6157. case 'votes';
  6158. if (empty($this->data['infos']['no_votes'])) {
  6159. $pl = ($this->data['image']['image_votes'] > 1) ? 's' : '';
  6160. printf($s, $this->data['image']['image_votes'] . ' vote' . $pl);
  6161. }
  6162. }
  6163. }
  6164. /* On génčre les images en étoiles représentant la note. */
  6165. function note_star($note, $lien = 0, $mini = '') {
  6166. $path = dirname($this->data['infos']['style']) . '/';
  6167. $star_full = '<img alt="étoile pleine" src="' . $path . 'star_full' . $mini . '.png" />';
  6168. $star_demi = '<img alt="étoile demi pleine" src="' . $path . 'star_demi' . $mini . '.png" />';
  6169. $star_empty = '<img alt="étoile vide" src="' . $path . 'star_empty' . $mini . '.png" />';
  6170. if ($lien) {
  6171. $star_full = '<a href="javascript:void(0);">' . $star_full . '</a>';
  6172. $star_demi = '<a href="javascript:void(0);">' . $star_demi . '</a>';
  6173. $star_empty = '<a href="javascript:void(0);">' . $star_empty . '</a>';
  6174. }
  6175. if ($note > 4.75) return str_repeat($star_full, 5);
  6176. if ($note > 4.25) return str_repeat($star_full, 4) . $star_demi;
  6177. if ($note > 3.75) return str_repeat($star_full, 4) . $star_empty;
  6178. if ($note > 3.25) return str_repeat($star_full, 3) . $star_demi . $star_empty;
  6179. if ($note > 2.75) return str_repeat($star_full, 3) . str_repeat($star_empty, 2);
  6180. if ($note > 2.25) return str_repeat($star_full, 2) . $star_demi . str_repeat($star_empty, 2);
  6181. if ($note > 1.75) return str_repeat($star_full, 2) . str_repeat($star_empty, 3);
  6182. if ($note > 1.25) return $star_full . $star_demi . str_repeat($star_empty, 3);
  6183. if ($note > 0.75) return $star_full . str_repeat($star_empty, 4);
  6184. if ($note > 0.25) return $star_demi . str_repeat($star_empty, 4);
  6185. return str_repeat($star_empty, 5);
  6186. }
  6187. /*
  6188. *
  6189. * ======================================== CADRE PRINCIPAL ;
  6190. *
  6191. */
  6192. /* Bouton d'élargissement du cadre */
  6193. function getEnlarge($s) {
  6194. $valeur = 'on';
  6195. $title = 'Cacher la sidebar';
  6196. $image = 'enlarge_on.png';
  6197. $alt = 'Cacher la sidebar';
  6198. $img = $this->data['infos']['style_relative'] . '/' . $image;
  6199. $img_html = dirname($this->data['infos']['style']) . '/' . $image;
  6200. if (file_exists($img)) {
  6201. $image_size = @getimagesize($img);
  6202. $size = $image_size[3];
  6203. } else {
  6204. $size = '';
  6205. }
  6206. printf($s, $title, $img_html, $alt, $size);
  6207. }
  6208. /* Bouton retour */
  6209. function getRetour($s) {
  6210. if (!empty($this->data['nav']['retour'])) {
  6211. $img = $this->data['infos']['style_relative'] . '/retour.png';
  6212. $img_html = dirname($this->data['infos']['style']) . '/retour.png';
  6213. if (file_exists($img)) {
  6214. $image_size = @getimagesize($img);
  6215. $size = $image_size[3];
  6216. } else {
  6217. $size = '';
  6218. }
  6219. printf($s, $this->data['nav']['retour'], $img_html, $size);
  6220. }
  6221. }
  6222. /* Description Galerie */
  6223. function getGalerieDescription($s) {
  6224. if (!empty($this->data['infos']['accueil']) && empty($this->data['infos']['desactive']) && $this->data['infos']['page_actuelle'] == 1) {
  6225. $accueil = str_replace('&', '&amp;', nl2br($this->data['infos']['accueil']));
  6226. printf($s, $accueil);
  6227. }
  6228. }
  6229. /* Liens de la position actuelle de l'objet */
  6230. function getPosition($r = 1, $s = '<div id="position">%s%s %s</div>', $o1 = ' / ', $o3 = ' - ') {
  6231. if (isset($this->data['infos']['hvc'])) {
  6232. $this->getHVC($s);
  6233. }
  6234. // Favoris des membres.
  6235. if ($this->data['infos']['type'] == 'mfav') {
  6236. $m = 'Les %s favoris de %s';
  6237. $u = 'Le seul favori de %2$s';
  6238. $nb_objets = $this->data['infos']['nb_objets'];
  6239. $msg = ($nb_objets > 1) ? $m : $u;
  6240. $lien = outils::genLink('?profil=' . urlencode($_GET['mfav']));
  6241. $user = '<a href="' . $lien . '">' . str_replace('_', ' ', $_GET['mfav']) . '</a>';
  6242. $t = sprintf('<span id="hvc_result">' . $msg . '</span>', $nb_objets, $user);
  6243. printf($s, $t, '', '', '');
  6244. return;
  6245. }
  6246. // Images des membres.
  6247. if ($this->data['infos']['type'] == 'mimg') {
  6248. $m = 'Les %s images envoyées par %s';
  6249. $u = 'La seule image envoyée par %2$s';
  6250. $nb_objets = $this->data['infos']['nb_objets'];
  6251. $msg = ($nb_objets > 1) ? $m : $u;
  6252. // Date d'ajout ?
  6253. if (!empty($_GET['date_ajout'])) {
  6254. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $_GET['date_ajout'], $m)) {
  6255. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  6256. } else {
  6257. $date = getdate(time());
  6258. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  6259. }
  6260. $date = strftime($this->data['infos']['im_date_format'], $date);
  6261. $l_date = outils::genLink('?cat=1&amp;date_ajout=' . $_GET['date_ajout']);
  6262. $msg .= ' le <a class="pos_actuel" href="' . $l_date . '"> ' . $date . '</a>';
  6263. }
  6264. $lien = outils::genLink('?profil=' . urlencode($_GET['mimg']));
  6265. $user = '<a href="' . $lien . '">' . str_replace('_', ' ', $_GET['mimg']) . '</a>';
  6266. $t = sprintf('<span id="hvc_result">' . $msg . '</span>', $nb_objets, $user);
  6267. printf($s, $t, '', '', '');
  6268. return;
  6269. }
  6270. // Commentaires des membres.
  6271. if ($this->data['infos']['type'] == 'mcom') {
  6272. $m = 'Les %s commentaires postés par %s';
  6273. $u = 'Le seul commentaire posté par %2$s';
  6274. $nb_objets = $this->data['infos']['nb_objets'];
  6275. $msg = ($nb_objets > 1) ? $m : $u;
  6276. $lien = outils::genLink('?profil=' . urlencode($_GET['mcom']));
  6277. $user = '<a href="' . $lien . '">' . str_replace('_', ' ', $_GET['mcom']) . '</a>';
  6278. $t = sprintf('<p id="comments_result">' . $msg . '</p>', $nb_objets, $user);
  6279. printf($s, $t, '', '', '');
  6280. return;
  6281. }
  6282. // Page des commentaires.
  6283. if ($this->data['infos']['type'] == 'comments') {
  6284. $pl = ($this->data['infos']['nb_objets'] > 1) ? 's' : '';
  6285. if ($this->data['infos']['nb_objets'] == 0) {
  6286. $nb_comments = 'Aucun ';
  6287. $dispo = ' disponible';
  6288. } else {
  6289. $nb_comments = ($this->data['infos']['nb_objets'] > 1)
  6290. ? 'Les ' . $this->data['infos']['nb_objets'] : 'Le seul' ;
  6291. $dispo = '';
  6292. }
  6293. $objet = '<a id="retour" href="' . outils::genLink('?cat=1') . '">la galerie</a>';
  6294. if ($this->data['infos_objet']['categorie_id'] > 1) {
  6295. $type = ($this->data['infos_objet']['categorie_derniere_modif']) ? 'l\'album' : 'la catégorie';
  6296. $type_lien = ($this->data['infos_objet']['categorie_derniere_modif']) ? 'alb' : 'cat';
  6297. $objet = $type . ' <a id="retour" href="' . outils::genLink('?' . $type_lien . '=' . $this->data['infos_objet']['categorie_id'], '', $this->data['infos_objet']['categorie_nom']) . '">' . $this->data['infos_objet']['categorie_nom'] . '</a>';
  6298. }
  6299. $t = '<p id="comments_result">' . $nb_comments . ' commentaire' . $pl . ' de ' . $objet . $dispo . '</p>';
  6300. printf($s, $t, '', '', '');
  6301. return;
  6302. }
  6303. // Recherche.
  6304. if (!empty($_GET['search']) && isset($this->data['infos']['nb_pages'])) {
  6305. $oui = 'Résultats de votre recherche';
  6306. $non = 'Aucun élément n\'a été trouvé pour :';
  6307. if (empty($this->data['infos']['startnum'])) {
  6308. if (empty($this->data['cat_result']) && empty($this->data['vignettes'])) {
  6309. printf($s, '<p id="search_result_msg">' . $non . ' <span id="s_requete">' . $this->data['infos']['objet'] . '</span></p>', '', '', '');
  6310. } else {
  6311. printf($s, '<p id="search_result_msg">' . $oui . ' : <span id="s_requete">' . $this->data['infos']['objet'] . '</span></p>', '', '', '');
  6312. }
  6313. } else {
  6314. printf($s, '<p id="search_result_msg">' . $oui . ' : <span id="s_requete">' . $this->data['infos']['objet'] . '</span></p>', '', '', '');
  6315. }
  6316. return;
  6317. }
  6318. // Tags.
  6319. if ($this->data['infos']['type'] == 'tag') {
  6320. $pl = ($this->data['infos']['nb_objets'] > 1) ? 's' : '';
  6321. $nb_tags = ($this->data['infos']['nb_objets'] > 1)
  6322. ? 'Les ' . $this->data['infos']['nb_objets'] : 'La seule' ;
  6323. $l = outils::genLink('?tag=' . urlencode($_GET['tag']));
  6324. $tags = '<a href="' . $l . '">' . htmlentities($_GET['tag']) . '</a>';
  6325. $objet = '<a id="retour" href="' . outils::genLink('?cat=1') . '">la galerie</a>';
  6326. if ($this->data['infos_objet']['categorie_id'] > 1) {
  6327. $type = ($this->data['infos_objet']['categorie_derniere_modif']) ? 'l\'album' : 'la catégorie';
  6328. $type_lien = ($this->data['infos_objet']['categorie_derniere_modif']) ? 'alb' : 'cat';
  6329. $objet = $type . ' <a id="retour" href="' . outils::genLink('?' . $type_lien . '=' . $this->data['infos_objet']['categorie_id'], '', $this->data['infos_objet']['categorie_nom']) . '">' . $this->data['infos_objet']['categorie_nom'] . '</a>';
  6330. }
  6331. // Date d'ajout ?
  6332. if (!empty($_GET['date_ajout'])) {
  6333. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $_GET['date_ajout'], $m)) {
  6334. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  6335. } else {
  6336. $date = getdate(time());
  6337. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  6338. }
  6339. $date = strftime($this->data['infos']['im_date_format'], $date);
  6340. $l_date = outils::genLink('?cat=1&amp;date_ajout=' . $_GET['date_ajout']);
  6341. $objet .= ' ajoutée' . $pl . ' le <a class="pos_actuel" href="' . $l_date . '"> ' . $date . '</a> et ';
  6342. }
  6343. $t = '<p id="tag_result">' . $nb_tags . ' image' . $pl . ' de ' . $objet . ' associée' . $pl . ' au tag ' . $tags . '.</p>';
  6344. printf($s, $t, '', '', '');
  6345. return;
  6346. }
  6347. // Galerie.
  6348. $lid = ($this->data['infos']['type'] == 'img') ? 0 : 1;
  6349. if (substr($this->data['infos']['type'], 0, 4) == 'date') {
  6350. if (!$this->data['infos']['nb_objets']) {
  6351. header('Location: ' . outils::genLink('?cat=1'));
  6352. exit;
  6353. }
  6354. $mode = ($this->data['infos']['type'] == 'date_creation') ? 'créée' : 'ajoutée';
  6355. $date_get = $_GET[$this->data['infos']['type']];
  6356. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date_get, $m)) {
  6357. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  6358. } else {
  6359. $date = getdate(time());
  6360. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  6361. }
  6362. $date = strftime($this->data['infos']['im_date_format'], $date);
  6363. $pl = ($this->data['infos']['nb_objets'] > 1) ? 's' : '';
  6364. $nombre = ($this->data['infos']['nb_objets'] > 1) ? 'Les ' . $this->data['infos']['nb_objets'] . ' ' : 'La seule ';
  6365. if (isset($_GET['alb'])) {
  6366. $type = 'l\'album';
  6367. $catalb = 'alb';
  6368. } else {
  6369. $type = 'la catégorie';
  6370. $catalb = 'cat';
  6371. }
  6372. $p_cat = $catalb . '=' . $this->data['historique']['objet_id'];
  6373. $objet = '<a id="retour" class="pos_actuel" href="' . outils::genLink('?' . $p_cat, '', $this->data['historique']['objet_nom']) . '">' . $this->data['historique']['objet_nom'] . '</a>';
  6374. if ($this->data['historique']['objet_id'] == 1) {
  6375. $type = 'la <a id="retour" class="pos_actuel" href="' . outils::genLink('?cat=1') . '">galerie</a>';
  6376. $objet = '';
  6377. }
  6378. $l = outils::genLink('?' . $this->data['infos']['type'] . '=' . $date_get . '&amp;cat=1', '', $this->data['historique']['objet_nom']);
  6379. $text = $nombre . 'image' . $pl . ' de ' . $type . ' ' . $objet . ' ' . $mode . $pl . ' le <a class="pos_actuel" href="' . $l . '"> ' . $date . '</a>.';
  6380. printf($s, $text, '', '');
  6381. } elseif (
  6382. ((isset($this->data['vignettes']) || $this->data['infos']['type'] == 'img') && $this->data['infos']['type'] !== 'search' && empty($this->data['infos']['hvc'])) &&
  6383. ($this->data['infos']['objet'] > $lid || (isset($this->data['infos']['nb_pages']) && $this->data['infos']['nb_pages'] > 1))
  6384. ) {
  6385. if ($this->data['infos']['type'] == 'cat' && $this->data['infos']['objet'] == 1) {
  6386. $text = '<a class="pos_actuel" href="' . outils::genLink('?cat=1') . '">Accueil</a> ';
  6387. } else {
  6388. $cat_one = (isset($this->data['nav']['retour_id']) && $this->data['nav']['retour_id'] == 1) ? substr($this->data['nav']['retour'], 2) : '?cat=1';
  6389. $text = '<a href="' . outils::genLink($cat_one) . '">Accueil</a>' . $o1;
  6390. }
  6391. $pos = '';
  6392. if (!empty($this->data['infos']['hierarchie'])) {
  6393. $pos .= $this->data['infos']['hierarchie'];
  6394. }
  6395. $img_name = '';
  6396. if (isset($this->data['image'])) {
  6397. $img_name = $this->data['image']['image_nom'];
  6398. }
  6399. $cat_name = '';
  6400. if (isset($this->data['infos']['nom'])) {
  6401. $cat_name = $this->data['infos']['nom'];
  6402. } elseif (isset($this->data['infos_objet']['categorie_nom'])) {
  6403. $cat_name = $this->data['infos_objet']['categorie_nom'];
  6404. }
  6405. $nom = ($this->data['infos']['type'] == 'img') ? $this->data['image']['image_nom'] : $this->data['infos']['nom'];
  6406. $pos .= '<a href="' . outils::genLink('?' . $this->data['infos']['type'] . '=' . $this->data['infos']['objet'], $img_name, $cat_name) . '" class="pos_actuel">' . htmlspecialchars(strip_tags($nom)) . '</a>';
  6407. $pos = str_replace('%sep', $o1, $pos);
  6408. $pass = '';
  6409. if (!$this->data['infos']['membres_active'] && !empty($this->data['infos']['pass'])) {
  6410. $pass = $o3 . '<span id="deconnect"><a href="' . outils::genLink('?' . $this->data['infos']['type'] . '=' . $this->data['infos']['objet'], $img_name, $cat_name) . '&amp;deconnect=1">déconnecter</a></span>';
  6411. }
  6412. // Si l'option est activée, on va mettre le lien retour dans le lien de l'objet parent.
  6413. if (isset($_GET['img']) && (
  6414. isset($_GET['images'])
  6415. || isset($_GET['recentes'])
  6416. || isset($_GET['search'])
  6417. || isset($_GET['hits'])
  6418. || isset($_GET['commentaires'])
  6419. || isset($_GET['votes'])
  6420. || isset($_GET['tag'])
  6421. || isset($_GET['date_creation'])
  6422. || isset($_GET['date_ajout']))) {
  6423. $r = 0;
  6424. }
  6425. $pos .= (empty($this->data['image']['user_id'])) ? '' : '<span title="Image dans vos favoris" id="favimg">*</span>';
  6426. printf($s, $text, $pos, $pass);
  6427. } elseif (
  6428. (isset($_GET['cat']) && $_GET['cat'] == 1) ||
  6429. (empty($_GET['cat']) && empty($_GET['alb']) && empty($_GET['img']) && empty($_GET['section']) &&
  6430. empty($_GET['recentes']) && empty($_GET['hits']) && empty($_GET['commentaires']) && empty($_GET['votes']) && !isset($_GET['search']) && empty($_GET['images']))
  6431. ) {
  6432. $text = '<a class="pos_actuel" href="' . outils::genLink('?cat=1') . '">Accueil</a>';
  6433. printf($s, $text, '', '');
  6434. }
  6435. }
  6436. /* Indication de position des pages spéciales */
  6437. function getPositionSpecial($s = '<div id="pos_special">%s</div>') {
  6438. if (empty($this->data['infos']['special'])) {
  6439. return;
  6440. }
  6441. $text = '';
  6442. $startnum = (empty($this->data['infos']['parent_startnum'])) ? '' : '&amp;startnum=' . $this->data['infos']['parent_startnum'];
  6443. if (isset($_GET['mfav'])) {
  6444. $m = 'Favoris de %s';
  6445. $u = 'Favori de %s';
  6446. $nb_objets = $this->data['infos']['nb_objets'];
  6447. $msg = ($nb_objets > 1) ? $m : $u;
  6448. $lien = outils::genLink('?profil=' . urlencode($_GET['mfav']));
  6449. $user = '<a href="' . $lien . '">' . str_replace('_', ' ', $_GET['mfav']) . '</a>';
  6450. $text = sprintf($msg, $user);
  6451. } elseif (isset($_GET['mimg'])) {
  6452. $m = 'Images envoyées par %s';
  6453. $u = 'Image envoyée par %s';
  6454. $nb_objets = $this->data['infos']['nb_objets'];
  6455. $msg = ($nb_objets > 1) ? $m : $u;
  6456. // Date d'ajout ?
  6457. if (!empty($_GET['date_ajout'])) {
  6458. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $_GET['date_ajout'], $m)) {
  6459. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  6460. } else {
  6461. $date = getdate(time());
  6462. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  6463. }
  6464. $date = strftime($this->data['infos']['im_date_format'], $date);
  6465. $l_date = outils::genLink('?cat=1&amp;date_ajout=' . $_GET['date_ajout']);
  6466. $msg .= ' le <a class="pos_actuel" href="' . $l_date . '"> ' . $date . '</a>';
  6467. }
  6468. $lien = outils::genLink('?profil=' . urlencode($_GET['mimg']));
  6469. $user = '<a href="' . $lien . '">' . str_replace('_', ' ', $_GET['mimg']) . '</a>';
  6470. $text = sprintf($msg, $user);
  6471. } elseif (substr($this->data['infos']['special'], 0, 4) == 'date') {
  6472. if (!$this->data['infos']['nb_objets']) {
  6473. header('Location: ' . outils::genLink('?cat=1'));
  6474. exit;
  6475. }
  6476. $mode = ($this->data['infos']['special'] == 'date_creation') ? 'créées' : 'ajoutées';
  6477. $date_get = $_GET[$this->data['infos']['special']];
  6478. if (preg_match('`^(\d{2})-(\d{2})-(\d{4})$`', $date_get, $m)) {
  6479. $date = mktime(0, 0, 0, $m[2], $m[1], $m[3]);
  6480. } else {
  6481. $date = getdate(time());
  6482. $date = mktime(0, 0, 0, $date['mon'], $date['mday'], $date['year']);
  6483. }
  6484. $date = strftime($this->data['infos']['im_date_format'], $date);
  6485. if ($this->data['infos']['special_cat'][0]['categorie_derniere_modif']) {
  6486. $type = 'l\'album ';
  6487. $catalb = 'alb';
  6488. } else {
  6489. $type = 'la catégorie ';
  6490. $catalb = 'cat';
  6491. }
  6492. $p_cat = $catalb . '=' . $this->data['infos']['special_cat'][0]['categorie_id'];
  6493. $l = outils::genLink('?' . $p_cat . $startnum, '', $this->data['infos']['special_cat'][0]['categorie_nom']);
  6494. $objet = '<a class="pos_actuel" href="' . $l . '">' . $this->data['infos']['special_cat'][0]['categorie_nom'] . '</a> ';
  6495. if ($this->data['infos']['special_cat'][0]['categorie_id'] == 1) {
  6496. $type = 'la <a class="pos_actuel" href="' . outils::genLink('?cat=1') . '">galerie</a> ';
  6497. $objet = '';
  6498. }
  6499. $l = outils::genLink('?' . $this->data['infos']['special'] . '=' . $date_get . '&amp;' . $p_cat . $startnum, '', $this->data['infos']['special_cat'][0]['categorie_nom']);
  6500. $text = 'Images de ' . $type . $objet . $mode . ' <a id="retour" class="pos_actuel" href="' . $l . '">le ' . $date . '</a>.';
  6501. } elseif ($this->data['infos']['special'] == 'search') {
  6502. $lien = 'search=' . urlencode($_GET['search']);
  6503. $lien .= (isset($_GET['sadv'])) ? '&amp;sadv=' . urlencode($_GET['sadv']) : '';
  6504. $l = outils::genLink('?' . $lien . $startnum);
  6505. $text = '<p id="search_result_msg"><a id="retour" title="Retour aux résultats de la recherche" href="' . $l . '">Résultats de votre recherche</a> : <span id="s_requete">' . htmlspecialchars($_GET['search']) . '</span></p>';
  6506. } else {
  6507. $l = outils::genLink('?' . $this->data['infos']['special'] . '=' . $this->data['infos']['special_cat'][0]['categorie_id'] . $startnum, '', $this->data['infos']['special_cat'][0]['categorie_nom']);
  6508. $lien = '<a id="retour" href="' . $l . '">';
  6509. $text = 'Images ' . $lien;
  6510. $cat = ' la galerie';
  6511. if ($this->data['infos']['special_cat'][0]['categorie_id'] != 1) {
  6512. if ($this->data['infos']['special_cat'][0]['categorie_derniere_modif']) {
  6513. $cat = ' l\'album ';
  6514. $type = 'alb';
  6515. } else {
  6516. $cat = ' la catégorie ';
  6517. $type = 'cat';
  6518. }
  6519. $l = outils::genLink('?' . $type . '=' . $this->data['infos']['special_cat'][0]['categorie_id'], '', $this->data['infos']['special_cat'][0]['categorie_nom']);
  6520. $cat .= '<a href="' . $l . '">' . $this->data['infos']['special_cat'][0]['categorie_nom'] . '</a>';
  6521. }
  6522. switch ($this->data['infos']['special']) {
  6523. case 'images' : $text = $lien . 'Images</a> de' . $cat; break;
  6524. case 'recentes' : $text .= 'les plus récentes</a> de' . $cat; break;
  6525. case 'hits' : $text .= 'les plus visitées</a> de' . $cat; break;
  6526. case 'commentaires' : $text .= 'les plus commentées</a> de' . $cat; break;
  6527. case 'votes' : $text .= 'les mieux notées</a> de' . $cat; break;
  6528. case 'tag' :
  6529. $tags = $_GET['tag'];
  6530. $type = (isset($type)) ? $type : 'cat';
  6531. $cat_retour = $type . '=' . $this->data['infos']['special_cat'][0]['categorie_id'] . $startnum;
  6532. $l = outils::genLink('?' . $cat_retour . '&amp;tag=' . urlencode($tags), '', $this->data['infos']['special_cat'][0]['categorie_nom']);
  6533. $text = 'Images de' . $cat . ' associées au tag <a id="retour" href="' . $l . '">' . htmlentities($tags) . '</a>';
  6534. }
  6535. }
  6536. printf($s, $text);
  6537. }
  6538. /* Indication de position de la page ou de l'image actuelle */
  6539. function getPageActuelle($s = '%s %s|%s') {
  6540. $type = 'page';
  6541. if ($this->data['infos']['type'] == 'img') {
  6542. $type = 'image';
  6543. $total = count($this->data['nav']['voisines']);
  6544. $actuelle = $this->data['infos']['objet_num'];
  6545. } else {
  6546. $total = $this->data['infos']['nb_pages'];
  6547. $actuelle = $this->data['infos']['page_actuelle'];
  6548. }
  6549. printf($s, $type, $actuelle, $total);
  6550. }
  6551. /* Lien du diaporama */
  6552. function getDiaporamaLien($s = '<a class="lien_js" href="javascript:diapoStart(%s,%s,%s,%s,%s,%s);">diaporama</a>') {
  6553. if (!$this->data['infos']['diaporama']
  6554. || $this->data['infos']['type'] == 'cat'
  6555. || $this->data['infos']['type'] == 'comments') {
  6556. return;
  6557. }
  6558. $objet1 = '';
  6559. if (isset($_GET['alb'])) {
  6560. $objet1 = 'alb=' . htmlentities($_GET['alb']);
  6561. } elseif (isset($_GET['cat'])) {
  6562. $objet1 = 'cat=' . htmlentities($_GET['cat']);
  6563. } elseif (isset($_GET['images'])) {
  6564. $objet1 = 'images=' . htmlentities($_GET['images']);
  6565. } elseif (isset($_GET['hits'])) {
  6566. $objet1 = 'hits=' . htmlentities($_GET['hits']);
  6567. } elseif (isset($_GET['recentes'])) {
  6568. $objet1 = 'recentes=' . htmlentities($_GET['recentes']);
  6569. } elseif (isset($_GET['votes'])) {
  6570. $objet1 = 'votes=' . htmlentities($_GET['votes']);
  6571. } elseif (isset($_GET['commentaires'])) {
  6572. $objet1 = 'commentaires=' . htmlentities($_GET['commentaires']);
  6573. } elseif (isset($_GET['search'])) {
  6574. $objet1 = 'search=' . urlencode($_GET['search']);
  6575. } elseif (isset($_GET['mimg'])) {
  6576. $objet1 = 'mimg=' . urlencode($_GET['mimg']);
  6577. } elseif (isset($_GET['mfav'])) {
  6578. $objet1 = 'mfav=' . urlencode($_GET['mfav']);
  6579. }
  6580. if (!$objet1 && isset($_GET['img'])
  6581. && empty($_GET['tag'])
  6582. && empty($_GET['date_ajout'])
  6583. && empty($_GET['date_creation'])) {
  6584. $objet1 = 'alb=' . $this->data['nav']['retour_id'];
  6585. }
  6586. $objet2 = '';
  6587. if (isset($_GET['date_ajout'])) {
  6588. $objet2 = 'date_ajout=' . htmlentities($_GET['date_ajout']);
  6589. } elseif (isset($_GET['date_creation'])) {
  6590. $objet2 = 'date_creation=' . htmlentities($_GET['date_creation']);
  6591. } elseif (isset($_GET['sadv'])) {
  6592. $objet2 = 'sadv=' . urlencode($_GET['sadv']);
  6593. } elseif (isset($_GET['tag'])) {
  6594. $objet2 = 'tag=' . urlencode($_GET['tag']);
  6595. }
  6596. $objet3 = '';
  6597. if (isset($_GET['tag'])) {
  6598. $objet3 = 'tag=' . urlencode($_GET['tag']);
  6599. if ($objet2 == $objet3) {
  6600. $objet3 = '';
  6601. }
  6602. }
  6603. $startnum = 0;
  6604. if (isset($_GET['img']) && isset($this->data['infos']['objet_num'])) {
  6605. $startnum = $this->data['infos']['objet_num']-1;
  6606. }
  6607. if (isset($_GET['startnum'])) {
  6608. $startnum = htmlentities($_GET['startnum']);
  6609. }
  6610. $img = 1;
  6611. if (isset($this->data['vignettes'][0]['id'])) {
  6612. $img = $this->data['vignettes'][0]['id'];
  6613. }
  6614. if (isset($this->data['image']['image_id'])) {
  6615. $img = $this->data['image']['image_id'];
  6616. }
  6617. $num = 0;
  6618. if (isset($this->data['nav']['voisines'])) {
  6619. $num = count($this->data['nav']['voisines']);
  6620. }
  6621. if (isset($this->data['stats']['nb_images'])) {
  6622. $num = $this->data['stats']['nb_images'];
  6623. }
  6624. if (isset($this->data['infos']['nb_objets'])) {
  6625. $num = $this->data['infos']['nb_objets'];
  6626. }
  6627. printf($s, $num, $img, "'" . $objet1 . "'", "'" . $objet2 . "'", "'" . $objet3 . "'", $startnum);
  6628. }
  6629. /* Script JS du diaporama */
  6630. function getDiaporamaJS($chemin) {
  6631. if ($this->data['infos']['diaporama']) {
  6632. if (!$chemin) {
  6633. $chemin = dirname(dirname(dirname($this->data['infos']['style']))) . '/diaporama.js';
  6634. }
  6635. $script = '<script type="text/javascript" src="' . GALERIE_PATH . '/' . $chemin . '"></script>';
  6636. echo $script;
  6637. }
  6638. }
  6639. /* Barres de navigation */
  6640. function getBarreNavPageNext($s = '%s %s %s') {
  6641. $p = (GALERIE_URL_TYPE == 'normal') ? '&amp;' : '?';
  6642. for ($i = 1; $i <= count($this->data['nav']['pages']); $i++) {
  6643. if (isset($this->data['infos']['page_actuelle']) && $this->data['infos']['page_actuelle'] == $i) {
  6644. $selected = ' selected="selected"';
  6645. } else {
  6646. $selected = '';
  6647. }
  6648. $l = outils::genLink($p . 'startnum=' . $this->data['nav']['pages'][$i]['page'], '', '', 1);
  6649. $l = ($l == '/' || $l == '&amp;startnum=0') ? '' : $l;
  6650. printf($s, $l, $selected, $i);
  6651. }
  6652. }
  6653. /* Description de la catégorie */
  6654. function getCatDescription($s = '%s') {
  6655. if (isset($this->data['vignettes']) && isset($this->data['infos']['description'])) {
  6656. printf($s, $this->data['infos']['description']);
  6657. }
  6658. }
  6659. /* Barre de navigation (images et vignettes) */
  6660. function getBarreNav($s, $type, $p1 = '&lt;&lt;', $p2 = '&lt;', $p3 = '&gt;', $p4 = '&gt;&gt;') {
  6661. static $clavier;
  6662. $ot = $this->data['infos']['type'];
  6663. $pi = ($ot == 'img') ? 'image' : 'page';
  6664. switch ($type) {
  6665. case 'first' :
  6666. $e = 'premiere'; $k = ' id="_nav_first"'; $l = $p1; $t = 'Premičre ' . $pi; break;
  6667. case 'prev' :
  6668. $e = 'precedente'; $k = ' id="_nav_prev"'; $l = $p2; $t = ucfirst($pi) . ' précédente'; break;
  6669. case 'next' :
  6670. $e = 'suivante'; $k = ' id="_nav_next"'; $l = $p3; $t = ucfirst($pi) . ' suivante'; break;
  6671. default :
  6672. $e = 'derniere'; $k = ' id="_nav_last"'; $l = $p4; $t = 'Derničre ' . $pi;
  6673. }
  6674. if (empty($clavier) && $type) {
  6675. $keys = $k;
  6676. if ($type == 'last') {
  6677. $clavier = 1;
  6678. }
  6679. } else {
  6680. $keys = '';
  6681. }
  6682. $params = '';
  6683. if ($ot == 'search' && isset($_GET['sadv'])) {
  6684. $params = '&amp;sadv=' . urlencode($_GET['sadv']);
  6685. }
  6686. if ($ot == 'img') {
  6687. if (isset($_GET['search'])) {
  6688. $params = '&amp;search=' . urlencode($_GET['search']);
  6689. $params .= (isset($_GET['sadv'])) ? '&amp;sadv=' . urlencode($_GET['sadv']) : '';
  6690. } elseif (isset($_GET['images'])) {
  6691. $params = '&amp;images=' . htmlentities($_GET['images']);
  6692. } elseif (isset($_GET['recentes'])) {
  6693. $params = '&amp;recentes=' . htmlentities($_GET['recentes']);
  6694. } elseif (isset($_GET['hits'])) {
  6695. $params = '&amp;hits=' . htmlentities($_GET['hits']);
  6696. } elseif (isset($_GET['commentaires'])) {
  6697. $params = '&amp;commentaires=' . htmlentities($_GET['commentaires']);
  6698. } elseif (isset($_GET['votes'])) {
  6699. $params = '&amp;votes=' . htmlentities($_GET['votes']);
  6700. } elseif (isset($_GET['date_creation'])) {
  6701. $params = '&amp;date_creation=' . htmlentities($_GET['date_creation']);
  6702. } elseif (isset($_GET['date_ajout'])) {
  6703. $params = '&amp;date_ajout=' . htmlentities($_GET['date_ajout']);
  6704. } elseif (isset($_GET['tag'])) {
  6705. $params = '&amp;tag=' . urlencode($_GET['tag']);
  6706. } elseif (isset($_GET['mimg'])) {
  6707. $params = '&amp;mimg=' . urlencode($_GET['mimg']);
  6708. } elseif (isset($_GET['mfav'])) {
  6709. $params = '&amp;mfav=' . urlencode($_GET['mfav']);
  6710. }
  6711. }
  6712. if (isset($_GET['date_creation']) || isset($_GET['date_ajout']) || isset($_GET['tag'])) {
  6713. $params .= (isset($_GET['cat'])) ? '&amp;cat=' . htmlentities($_GET['cat']) : '';
  6714. $params .= (isset($_GET['alb'])) ? '&amp;alb=' . htmlentities($_GET['alb']) : '';
  6715. $params .= (isset($_GET['mimg'])) ? '&amp;mimg=' . urlencode($_GET['mimg']) : '';
  6716. }
  6717. $img_name = '';
  6718. if (isset($this->data['nav'][$e]['image_nom'])) {
  6719. $img_name = $this->data['nav'][$e]['image_nom'];
  6720. }
  6721. $cat_name = '';
  6722. if (isset($this->data['infos']['nom'])) {
  6723. $cat_name = $this->data['infos']['nom'];
  6724. } elseif (isset($this->data['infos']['hvc']['nom'])) {
  6725. $cat_name = $this->data['infos']['hvc']['nom'];
  6726. } elseif (isset($this->data['infos_objet']['categorie_nom'])) {
  6727. $cat_name = $this->data['infos_objet']['categorie_nom'];
  6728. } elseif (isset($this->data['infos']['special_cat'][0]['categorie_nom'])) {
  6729. $cat_name = $this->data['infos']['special_cat'][0]['categorie_nom'];
  6730. } elseif (isset($this->data['historique']['objet_nom'])) {
  6731. $cat_name = $this->data['historique']['objet_nom'];
  6732. }
  6733. // Code retour pour fonction getUrlParameters
  6734. if ($type === 0) {
  6735. if (substr($ot, 0, 4) == 'date' || $ot == 'tag') {
  6736. $a = urlencode($_GET[$ot]);
  6737. } else {
  6738. $a = ($ot == 'img') ? '' : urlencode(html_entity_decode($this->data['infos']['objet']));
  6739. }
  6740. return outils::genLink('?' . $ot . '=' . $a . $params, $img_name, $cat_name);
  6741. }
  6742. if (($ot == 'img' && empty($this->data['nav'][$e][1]))
  6743. || ($ot == 'img' && $this->data['nav'][$e][1] == $this->data['infos']['objet'])
  6744. || ($ot != 'img' && isset($this->data['nav'][$e][0]))) {
  6745. $lien = $l;
  6746. $class = ' inactive';
  6747. } elseif (substr($ot, 0, 4) == 'date' || $ot == 'tag') {
  6748. $a = urlencode($_GET[$ot]) . '&amp;startnum=';
  6749. $lien = '<a' . $keys . ' href="' . outils::genLink('?' . $ot . '=' . $a . $this->data['nav'][$e][1] . $params, $img_name, $cat_name) . '" title="' . $t . '">' . $l . '</a>';
  6750. $class = '';
  6751. } else {
  6752. $a = ($ot == 'img') ? '' : urlencode(html_entity_decode($this->data['infos']['objet'])) . '&amp;startnum=';
  6753. $lien = '<a' . $keys . ' href="' . outils::genLink('?' . $ot . '=' . $a . $this->data['nav'][$e][1] . $params, $img_name, $cat_name) . '" title="' . $t . '">' . $l . '</a>';
  6754. $class = '';
  6755. }
  6756. printf($s, $class, $lien);
  6757. }
  6758. /* Pied de page */
  6759. function getFooter($s = '$s') {
  6760. $tiret = (strstr($this->data['infos']['footer'], '2')) ? ' - ' : '';
  6761. $pied = 'propulsé par <a href="http://www.igalerie.org/">iGalerie</a>' . $tiret;
  6762. $debug = '';
  6763. if (strstr($this->data['infos']['footer'], '2')) {
  6764. global $_TIMESTART;
  6765. global $_MYSQL;
  6766. list ($m2, $t2) = explode(' ', microtime());
  6767. $time_total = ($m2 + $t2) - ($_TIMESTART[0] + $_TIMESTART[1]);
  6768. $queries = ($_MYSQL['debug']) ? ' avec %d requętes SQL' : '';
  6769. $pied .= sprintf('page générée en %.3f seconde%s' . $queries, $time_total, ($time_total >= 2) ? 's' : '', $_MYSQL['nb_requetes']);
  6770. }
  6771. if (strstr($this->data['infos']['footer'], '1')) {
  6772. $pied .= '<br />' . nl2br($this->data['infos']['footer_message']);
  6773. }
  6774. if ($this->data['debug']['mysql']) {
  6775. $debug = '<hr /><div style="font-size:12px;text-align:left;">';
  6776. for ($i = 0; $i < count($this->data['debug']['mysql_requetes']); $i++) {
  6777. $q = (strpos($this->data['debug']['mysql_requetes'][$i], '[ERREUR]'))
  6778. ? $this->data['debug']['mysql_requetes'][$i]
  6779. : htmlentities($this->data['debug']['mysql_requetes'][$i]);
  6780. $debug .= '[' . $i . '] ' . $q . '<br /><br />';
  6781. }
  6782. $debug .= '</div>';
  6783. }
  6784. printf($s, $pied, $debug);
  6785. }
  6786. /*
  6787. *
  6788. * ======================================== CADRE PRINCIPAL:VIGNETTES ;
  6789. *
  6790. */
  6791. function getThumbSize($type, $forced = 0) {
  6792. if ($this->data['infos']['type'] == 'cat' && !$forced) {
  6793. if (THUMB_ALB_MODE == 'crop') {
  6794. $w = THUMB_ALB_CROP_WIDTH;
  6795. $h = THUMB_ALB_CROP_HEIGHT;
  6796. } else {
  6797. $w = THUMB_ALB_SIZE;
  6798. $h = THUMB_ALB_SIZE;
  6799. }
  6800. } else {
  6801. if (THUMB_IMG_MODE == 'crop') {
  6802. $w = THUMB_IMG_CROP_WIDTH;
  6803. $h = THUMB_IMG_CROP_HEIGHT;
  6804. } else {
  6805. $w = THUMB_IMG_SIZE;
  6806. $h = THUMB_IMG_SIZE;
  6807. }
  6808. }
  6809. return ${$type};
  6810. }
  6811. function getThumbsNextLine() {
  6812. if ($this->interne['thumbs_tr'] < $this->interne['thumbs_lignes']) {
  6813. $this->interne['thumbs_tr']++;
  6814. return TRUE;
  6815. }
  6816. }
  6817. function getThumbsNextThumb() {
  6818. if ($this->interne['thumbs_td'] < $this->interne['thumbs_thumbs'] && $this->interne['thumbs_limit'] <= $this->interne['thumbs_nb_vignettes']) {
  6819. $this->interne['thumbs_limit']++;
  6820. $this->interne['thumbs_num']++;
  6821. $this->interne['thumbs_td']++;
  6822. return TRUE;
  6823. } else {
  6824. $this->interne['thumbs_td'] = 0;
  6825. }
  6826. }
  6827. function getThumb($type, $s = '%s', $o = '', $s2 = '') {
  6828. switch ($type) {
  6829. case 'recent' :
  6830. if ($this->data['display']['recentes'] &&
  6831. !empty($this->data['vignettes'][$this->interne['thumbs_num']]['recent'])) {
  6832. echo $s;
  6833. }
  6834. break;
  6835. case 'pass' :
  6836. if (!empty($this->data['vignettes'][$this->interne['thumbs_num']]['pass'])) {
  6837. echo $s;
  6838. }
  6839. break;
  6840. case 'lien' :
  6841. printf($s, $this->data['vignettes'][$this->interne['thumbs_num']]['page']);
  6842. break;
  6843. case 'image' :
  6844. if (empty($this->data['vignettes'][$this->interne['thumbs_num']]['pass'])) {
  6845. $type = ($this->data['infos']['type'] == 'cat') ? 'cat' : 'img';
  6846. $file = $this->data['vignettes'][$this->interne['thumbs_num']]['chemin'];
  6847. $tb = GALERIE_PATH . '/getimg.php?' . $type . '=' . $file;
  6848. } else {
  6849. $tb = dirname($this->data['infos']['style']) . '/cadenas_vignettes.png';
  6850. }
  6851. $image_size = 'width="' . $this->getThumbSize('w') .'" height="' . $this->getThumbSize('h') . '"';
  6852. printf($s, $image_size, $tb, $this->data['vignettes'][$this->interne['thumbs_num']]['nom'], dirname($this->data['infos']['style']));
  6853. break;
  6854. case 'nom' :
  6855. if ($this->data['display']['nom']) {
  6856. $nom = $this->data['vignettes'][$this->interne['thumbs_num']]['nom'];
  6857. if ($o !== 0) {
  6858. $limit = $this->getThumbSize('w') / 8;
  6859. $nom = wordwrap($nom, $limit, '<br />', 0);
  6860. }
  6861. if ($this->data['infos']['type'] == 'cat') {
  6862. if ($this->data['vignettes'][$this->interne['thumbs_num']]['type'] != 'album') {
  6863. $nom = '[' . $nom . ']';
  6864. }
  6865. }
  6866. printf($s, $this->data['vignettes'][$this->interne['thumbs_num']]['page'], $nom);
  6867. }
  6868. break;
  6869. case 'date' :
  6870. if ($this->data['display']['date'] || !empty($this->data['display']['s_recentes'])) {
  6871. $format = ($o) ? $o : $this->data['infos']['tb_date_format'];
  6872. printf($s, $this->data['display']['s_recentes'], strftime($format, $this->data['vignettes'][$this->interne['thumbs_num']]['date']));
  6873. }
  6874. break;
  6875. case 'taille' :
  6876. if ($this->data['display']['taille']) {
  6877. $sep = ($o) ? $o : ' x ';
  6878. $taille = $this->data['vignettes'][$this->interne['thumbs_num']]['largeur'] . $sep . $this->data['vignettes'][$this->interne['thumbs_num']]['hauteur'];
  6879. printf($s, $taille);
  6880. }
  6881. break;
  6882. case 'poids' :
  6883. if ($this->data['display']['poids']) {
  6884. $c = ($o) ? $o : ',';
  6885. printf($s, outils::poids($this->data['vignettes'][$this->interne['thumbs_num']]['poids'], $c));
  6886. }
  6887. break;
  6888. case 'hits' :
  6889. if ($this->data['display']['hits'] || !empty($this->data['display']['s_hits'])) {
  6890. $nb_hits = $this->data['vignettes'][$this->interne['thumbs_num']]['nb_hits'];
  6891. $hits = $nb_hits . ' visite';
  6892. $hits = ($nb_hits > 1) ? $hits . 's' : $hits;
  6893. if ($o === 1 && $nb_hits) {
  6894. $lien = outils::genLink('?hits=' . $this->data['vignettes'][$this->interne['thumbs_num']]['id'], '', $this->data['vignettes'][$this->interne['thumbs_num']]['nom']);
  6895. $hits = '<a href="' . $lien . '">' . $hits . '</a>';
  6896. }
  6897. printf($s, $this->data['display']['s_hits'], $hits);
  6898. }
  6899. break;
  6900. case 'comments' :
  6901. if ($this->data['display']['commentaires'] || !empty($this->data['display']['s_comments'])) {
  6902. $nb_comments = $this->data['vignettes'][$this->interne['thumbs_num']]['nb_commentaires'];
  6903. $comments = $nb_comments . ' commentaire';
  6904. $comments = ($nb_comments > 1) ? $comments . 's' : $comments;
  6905. if ($o === 1 && $nb_comments) {
  6906. $page = ($this->data['infos']['active_page_comments']) ? 'comments' : 'commentaires';
  6907. $lien = outils::genLink('?' . $page . '=' . $this->data['vignettes'][$this->interne['thumbs_num']]['id'], '', $this->data['vignettes'][$this->interne['thumbs_num']]['nom']);
  6908. $comments = '<a href="' . $lien . '">' . $comments . '</a>';
  6909. }
  6910. printf($s, $this->data['display']['s_comments'], $comments);
  6911. }
  6912. break;
  6913. case 'votes' :
  6914. if ($this->data['display']['votes'] || !empty($this->data['display']['s_votes'])) {
  6915. $nb_votes = $this->data['vignettes'][$this->interne['thumbs_num']]['nb_votes'];
  6916. $votes = $nb_votes . ' vote';
  6917. $votes = ($nb_votes > 1) ? $votes . 's' : $votes;
  6918. if ($o === 1 && $nb_votes) {
  6919. $lien = outils::genLink('?votes=' . $this->data['vignettes'][$this->interne['thumbs_num']]['id'], '', $this->data['vignettes'][$this->interne['thumbs_num']]['nom']);
  6920. $votes = '<a href="' . $lien . '">' . $votes . '</a>';
  6921. }
  6922. $note_star = $this->note_star($this->data['vignettes'][$this->interne['thumbs_num']]['note'], 0, '_mini');
  6923. $note = sprintf('%1.1f', $this->data['vignettes'][$this->interne['thumbs_num']]['note']);
  6924. printf($s, $this->data['display']['s_votes'], $note, $note_star, $votes);
  6925. }
  6926. break;
  6927. case 'nb_images' :
  6928. if ($this->data['display']['nb_images']) {
  6929. $nb_images = $this->data['vignettes'][$this->interne['thumbs_num']]['nb_images'] . ' image';
  6930. $nb_images = ($nb_images > 1) ? $nb_images . 's' : $nb_images;
  6931. if ($o === 1) {
  6932. $lien = outils::genLink('?images=' . $this->data['vignettes'][$this->interne['thumbs_num']]['id'], '', $this->data['vignettes'][$this->interne['thumbs_num']]['nom']);
  6933. $nb_images = '<a href="' . $lien . '">' . $nb_images . '</a>';
  6934. }
  6935. if (empty($this->data['vignettes'][$this->interne['thumbs_num']]['recent'])) {
  6936. $rcts = '';
  6937. } elseif ($this->data['vignettes'][$this->interne['thumbs_num']]['recent'] !== -1) {
  6938. $lien = outils::genLink('?recentes=' . $this->data['vignettes'][$this->interne['thumbs_num']]['id'], '', $this->data['vignettes'][$this->interne['thumbs_num']]['nom']);
  6939. $rcts = $this->data['vignettes'][$this->interne['thumbs_num']]['recent'];
  6940. $rcts = str_replace('%s', '<a title="Afficher les images récentes de \''
  6941. . $this->data['vignettes'][$this->interne['thumbs_num']]['nom']
  6942. . '\'" href="' . $lien . '">[' . $rcts . ']</a>', $s2);
  6943. } else {
  6944. $rcts = '';
  6945. }
  6946. printf($s, $nb_images, $rcts);
  6947. }
  6948. break;
  6949. case 'description' :
  6950. $description = $this->data['vignettes'][$this->interne['thumbs_num']]['description'];
  6951. if ($description) {
  6952. printf($s, $description);
  6953. }
  6954. }
  6955. }
  6956. /*
  6957. *
  6958. * ======================================== CADRE PRINCIPAL:IMAGE ;
  6959. *
  6960. */
  6961. /* Image */
  6962. function getImage($s) {
  6963. // Redimensionnement par GD.
  6964. if ($this->data['infos']['image_mode_resize'] == 2) {
  6965. $taille = $this->data['infos']['img_resize'];
  6966. $img_file = preg_replace('`^' . GALERIE_ALBUMS . '/`', '', $this->data['image']['image_chemin']);
  6967. $image_path = 'getinter.php?img=' . $img_file;
  6968. $img_file = (IMG_TEXTE) ? 'getitext.php?i=' . $img_file : $this->data['image']['image_chemin'];
  6969. if (preg_match('`<a[^>]+href`', $s)) {
  6970. $s = preg_replace('`</?a[^>]*>`', '', $s);
  6971. }
  6972. $s = preg_replace('`(<img[^>]+>)`', '<a href="' . GALERIE_PATH . '/' . $img_file . '">$1</a>', $s);
  6973. $s .= '<script type="text/javascript">var img_gd_resize = 1</script>';
  6974. $s = str_replace('%20', ' ', $s);
  6975. // Redimensionnement par HTML.
  6976. } else {
  6977. $img_file = preg_replace('`^' . GALERIE_ALBUMS . '/`', '', $this->data['image']['image_chemin']);
  6978. $image_path = (IMG_TEXTE) ? 'getitext.php?i=' . $img_file : $this->data['image']['image_chemin'];
  6979. $image_size = 'width="' . $this->data['image']['image_largeur'] . '" height="' . $this->data['image']['image_hauteur'] . '"';
  6980. switch ($this->data['display']['image_taille']) {
  6981. // Taille originale.
  6982. case '1' :
  6983. $taille = $image_size;
  6984. $auto = '';
  6985. $num = 2;
  6986. break;
  6987. // Taille fixée.
  6988. case '2' :
  6989. $taille = $this->data['infos']['img_resize'];
  6990. $auto = '';
  6991. $num = 0;
  6992. break;
  6993. // Taille auto.
  6994. case '3' :
  6995. $taille = 'style="max-width:100%;"';
  6996. $auto = (defined('AUTO_RESIZE_NO_CORRECTION')) ? '' : 'document.getElementById("igalerie").style.height = window.innerHeight+2 + "px"; ';
  6997. $num = 1;
  6998. }
  6999. $s .= '<script type="text/javascript">' . "\n";
  7000. $s .= '//<![CDATA[' . "\n";
  7001. $s .= 'var img_gd_resize = 0;' . "\n";
  7002. $s .= $auto . "\n";
  7003. $s .= 'var img_auto_resize = ' . $num . ';' . "\n";
  7004. $s .= 'var img_width = ' . $this->data['image']['image_largeur'] . ';' . "\n";
  7005. $s .= 'var img_height = ' . $this->data['image']['image_hauteur'] . ';' . "\n";
  7006. $s .= 'document.getElementById("image_r_msg").innerHTML = "L\'image&nbsp;a&nbsp;été&nbsp;redimensionnée";' . "\n";
  7007. $s .= '//]]>' . "\n";
  7008. $s .= '</script>';
  7009. }
  7010. $nom = htmlspecialchars(strip_tags($this->data['image']['image_nom']));
  7011. printf($s, $taille, GALERIE_PATH . '/' . $image_path, $nom);
  7012. }
  7013. /* Message indiquant qu'une image a été redimensionnée */
  7014. function getImageResizeMsg($s) {
  7015. if ($this->data['display']['image_taille'] == 2 &&
  7016. !empty($this->data['infos']['img_resize'])) {
  7017. $display = ' style="' . preg_replace('`.*width="(\d+)".*`', 'width:$1px', $this->data['infos']['img_resize']) . '"';
  7018. $msg = 'L\'image&nbsp;a&nbsp;été&nbsp;redimensionnée';
  7019. } else {
  7020. $display = ' style="display:none"';
  7021. $msg = '';
  7022. }
  7023. printf($s, $display, $msg);
  7024. }
  7025. /* Nom du fichier */
  7026. function getImgFile($s = '%s', $o = 1) {
  7027. if ($o) {
  7028. $img_file = preg_replace('`^' . GALERIE_ALBUMS . '/`', '', $this->data['image']['image_chemin']);
  7029. $img_file = (IMG_TEXTE) ? 'getitext.php?i=' . $img_file : $this->data['image']['image_chemin'];
  7030. $img_path = GALERIE_PATH . '/' . $img_file;
  7031. $lien = '<a href="' . $img_path . '">' . basename($this->data['image']['image_chemin']) . '</a>';
  7032. if ($o == 2) {
  7033. $lien = 'http://' . $_SERVER['HTTP_HOST'] . $img_path;
  7034. }
  7035. } else {
  7036. $lien = basename($this->data['image']['image_chemin']);
  7037. }
  7038. printf($s, $lien);
  7039. }
  7040. /* Description de l'image */
  7041. function getImageDescription($s) {
  7042. if ($this->data['image']['image_description']) {
  7043. printf($s, nl2br($this->data['image']['image_description']));
  7044. }
  7045. }
  7046. /* Vote */
  7047. function getImgDejaNote($s = '') {
  7048. if (!empty($this->data['infos']['deja_note'])) {
  7049. echo $s;
  7050. }
  7051. }
  7052. function getUserNote($s = '%s') {
  7053. if (empty($this->data['infos']['no_votes'])) {
  7054. if (isset($this->data['infos']['deja_note'])) {
  7055. $note = $this->data['infos']['deja_note'];
  7056. } else {
  7057. $note = 0;
  7058. }
  7059. $script = '<script type="text/javascript">' . "\n";
  7060. $script .= '//<![CDATA[' . "\n";
  7061. $script .= 'var image_id = ' . $this->data['infos']['objet'] . ";\n";
  7062. $script .= '//]]>' . "\n";
  7063. $script .= '</script>' . "\n";
  7064. printf($s, $script, $this->note_star($note, 0));
  7065. }
  7066. }
  7067. /* Commentaires */
  7068. function getNextComment() {
  7069. if (!empty($this->data['commentaires'])) {
  7070. if (!isset($this->interne['comment_num'])) {
  7071. $this->interne['comment_num'] = 0;
  7072. } else {
  7073. $this->interne['comment_num']++;
  7074. }
  7075. if (isset($this->data['commentaires'][$this->interne['comment_num']])) {
  7076. return TRUE;
  7077. }
  7078. }
  7079. }
  7080. function getCommentsNull($s = '') {
  7081. if (empty($this->data['commentaires'])) {
  7082. echo $s;
  7083. }
  7084. }
  7085. function getCommentRejet($s) {
  7086. if (isset($this->data['comment']['rejet'])) {
  7087. printf($s, $this->data['comment']['rejet']);
  7088. }
  7089. }
  7090. function getCommentPreview($s = '') {
  7091. if (isset($this->data['comment']['preview'])) {
  7092. echo $s;
  7093. }
  7094. }
  7095. function getCommentMod($n, $s) {
  7096. if ($n == 'a' && !empty($this->data['infos']['comment_mod_a'])) {
  7097. echo $s;
  7098. }
  7099. if (empty($_POST) && $n == 'b' && !empty($_GET['mod'])) {
  7100. echo $s;
  7101. }
  7102. }
  7103. function getMolpac() {
  7104. if (isset($this->data['infos']['galerie_key'])) {
  7105. $tadd = (empty($_POST['preview'])) ? 0 : 3;
  7106. $time_md5 = md5(time()-$tadd);
  7107. echo md5($time_md5 . $this->data['infos']['galerie_key']);
  7108. }
  7109. }
  7110. /* Elements constituants chaque commentaire */
  7111. function getComment($type, $o = '') {
  7112. switch ($type) {
  7113. case 'co_avatar' :
  7114. if ($this->data['infos']['membres_active'] && $this->data['infos']['membres_avatar']) {
  7115. echo $o;
  7116. }
  7117. break;
  7118. case 'avatar' :
  7119. if ($this->data['infos']['membres_active'] && $this->data['infos']['membres_avatar']) {
  7120. if (!empty($this->data['commentaires'][$this->interne['comment_num']]['user_id'])) {
  7121. $login = $this->data['commentaires'][$this->interne['comment_num']]['login'];
  7122. $nom = str_replace('_', ' ', $login);
  7123. if (empty($this->data['commentaires'][$this->interne['comment_num']]['avatar'])) {
  7124. $src = dirname($this->data['infos']['style']) . '/avatar_default.png';
  7125. } else {
  7126. $src = GALERIE_PATH . '/membres/avatars/avatar_' . $login . '_thumb.jpg';
  7127. }
  7128. $alt = 'avatar de ' . $nom;
  7129. $lien = outils::genLink('?profil=' . urlencode($login));
  7130. $o = '<a title="Profil de ' . $nom . '" href="' . $lien . '">' . $o . '</a>';
  7131. } else {
  7132. $src = dirname($this->data['infos']['style']) . '/avatar_default.png';
  7133. $alt = 'pas d\'avatar';
  7134. }
  7135. printf($o, $alt, $src);
  7136. }
  7137. break;
  7138. case 'id' :
  7139. printf($o, $this->data['commentaires'][$this->interne['comment_num']]['id']);
  7140. break;
  7141. case 'pair' :
  7142. if (!is_integer($this->interne['comment_num'] / 2)) {
  7143. echo $o;
  7144. }
  7145. break;
  7146. case 'preview' :
  7147. if (!empty($this->data['commentaires'][$this->interne['comment_num']]['preview'])) {
  7148. echo $o;
  7149. }
  7150. break;
  7151. case 'num' :
  7152. echo $this->interne['comment_num'] + 1;
  7153. break;
  7154. case 'date' :
  7155. $format = ($o) ? $o : $this->data['infos']['im_date_format'] . ' ŕ %H:%M';
  7156. echo strftime($format, $this->data['commentaires'][$this->interne['comment_num']]['date']);
  7157. break;
  7158. case 'auteur' :
  7159. echo $this->data['commentaires'][$this->interne['comment_num']]['auteur'];
  7160. break;
  7161. case 'ip' :
  7162. echo $this->data['commentaires'][$this->interne['comment_num']]['ip'];
  7163. break;
  7164. case 'site' :
  7165. $s = ($o) ? $o : '%s %s';
  7166. $site = $this->data['commentaires'][$this->interne['comment_num']]['siteweb'];
  7167. if (!empty($site)) {
  7168. printf($s, $this->data['commentaires'][$this->interne['comment_num']]['auteur'], $site);
  7169. }
  7170. break;
  7171. case 'msg' :
  7172. $message = $this->data['commentaires'][$this->interne['comment_num']]['message'];
  7173. echo $message;
  7174. }
  7175. }
  7176. /* Nouveaux commentaires */
  7177. function getNewComment($type, $s = '%s', $o = '') {
  7178. switch ($type) {
  7179. case 'auteur' :
  7180. if (isset($this->data['comment']['auteur'])) {
  7181. printf($s, $this->data['comment']['auteur']);
  7182. }
  7183. break;
  7184. case 'mail' :
  7185. if (isset($this->data['comment']['courriel'])) {
  7186. printf($s, $this->data['comment']['courriel']);
  7187. }
  7188. break;
  7189. case 'site' :
  7190. if (!empty($this->data['comment']['siteweb'])) {
  7191. printf($s, $this->data['comment']['siteweb']);
  7192. } else {
  7193. printf($s, 'http://');
  7194. }
  7195. break;
  7196. case 'msg' :
  7197. if (isset($this->data['comment']['preview']) || isset($this->data['comment']['rejet'])) {
  7198. $message = str_replace('&amp;#8217', "&#039", trim($this->data['comment']['message']));
  7199. printf($s, $message);
  7200. }
  7201. break;
  7202. case 'fac_mail' :
  7203. if (empty($this->data['comment']['o_courriel'])) {
  7204. echo $s;
  7205. } else {
  7206. echo $o;
  7207. }
  7208. break;
  7209. case 'fac_site' :
  7210. if (empty($this->data['comment']['o_siteweb'])) {
  7211. echo $s;
  7212. } else {
  7213. echo $o;
  7214. }
  7215. }
  7216. }
  7217. /* EXIF et IPTC */
  7218. function getMetadata($type, $s, $o = '') {
  7219. if (empty($this->data[$type]['infos'])) {
  7220. echo $o;
  7221. } else {
  7222. foreach ($this->data[$type]['infos'] as $desc => $value) {
  7223. printf($s, $desc, htmlentities($value));
  7224. }
  7225. }
  7226. }
  7227. /*
  7228. *
  7229. * ======================================== CADRE PRINCIPAL:SECTIONS ;
  7230. *
  7231. */
  7232. /* Plan */
  7233. function getPlan($s = '%s') {
  7234. printf($s, $this->data['plan']);
  7235. }
  7236. function getPlanStats($s = '%s') {
  7237. printf($s, $this->data['infos']['galerie']);
  7238. }
  7239. /* Contact */
  7240. function getContact($type, $s = '<p>%s</p>') {
  7241. if ($type == 'text' && !empty($this->data['contact']['text'])) {
  7242. printf($s, nl2br($this->data['contact']['text']));
  7243. } elseif ($type == 'courriel' && !empty($this->data['contact']['courriel'])) {
  7244. printf($s, $this->data['contact']['courriel']);
  7245. }
  7246. }
  7247. function getContactRapport($s = '%s') {
  7248. if (isset($this->data['contact']['erreur'])) {
  7249. printf('<p id="msg_erreur"><span>%s</span></p>', $this->data['contact']['erreur']);
  7250. } elseif (isset($this->data['contact']['succes'])) {
  7251. printf('<p id="msg_succes"><span>%s</span></p>', $this->data['contact']['succes']);
  7252. }
  7253. }
  7254. /* Historique */
  7255. function getHistorique($type, $s = '%s') {
  7256. if (isset($this->data['historique'][$type])) {
  7257. printf($s, $this->data['historique'][$type]);
  7258. }
  7259. }
  7260. function getHistoriqueObjet($s = '%s') {
  7261. $nom = ($this->data['historique']['objet_nom']) ? $this->data['historique']['objet_nom'] : 'galerie';
  7262. $obj = 'la ';
  7263. $type = 'cat';
  7264. $objet = 1;
  7265. if (isset($_GET['cat'])) {
  7266. $obj = ($nom == 'galerie') ? 'la ' : 'la catégorie ';
  7267. $type = 'cat';
  7268. $objet = $_GET['cat'];
  7269. }
  7270. if (isset($_GET['alb'])) {
  7271. $obj = 'l\'album ';
  7272. $type = 'alb';
  7273. $objet = $_GET['alb'];
  7274. }
  7275. $l = outils::genLink('?' . $type . '=' . $objet, '', $nom);
  7276. $lien = '<a class="pos_actuel" href="' . $l . '">' . $nom . '</a>';
  7277. $obj = 'Historique des images de ' . $obj . $lien . '.';
  7278. printf($s, $obj);
  7279. }
  7280. function getHistoriqueLien($s = '<p id="historique_lien"><a%s title="%s" href="%s">Historique</a></p>') {
  7281. if (!$this->data['infos']['historique']) {
  7282. return;
  7283. }
  7284. $pos_actuelle = (isset($_GET['section']) && $_GET['section'] == 'historique') ? ' class="pos_actuel"' : '';
  7285. $cat = '&amp;cat=1';
  7286. if (isset($this->data['historique']['lien'])) {
  7287. $cat = '&amp;' . $this->data['historique']['lien'];
  7288. } elseif (isset($this->data['infos']['hvc']['type']) && isset($this->data['infos']['objet'])) {
  7289. $cat = '&amp;' . $this->data['infos']['hvc']['type'] . '=' . $this->data['infos']['objet'];
  7290. } elseif (isset($this->data['nav']['retour_id'])) {
  7291. $cat = '&amp;alb=' . $this->data['nav']['retour_id'];
  7292. }
  7293. $lien = outils::genLink('?section=historique' . $cat, '', $this->data['infos']['parent_nom']);
  7294. $objet = $this->getObjetType();
  7295. $title = 'Historique des images de ' . $objet;
  7296. printf($s, $pos_actuelle, $title, $lien);
  7297. }
  7298. /*
  7299. *
  7300. * ======================================== CADRE PRINCIPAL:RECHERCHE ;
  7301. *
  7302. */
  7303. function getSearchResult() {
  7304. if (empty($this->data['infos']['startnum'])) {
  7305. if (!empty($this->data['cat_result']) || !empty($this->data['vignettes'])) {
  7306. // Catégores et/ou albums trouvés.
  7307. if (isset($this->data['cat_result'])) {
  7308. if (isset($this->data['cat_result']['cat'])) {
  7309. $s = (count($this->data['cat_result']['cat']) > 1) ? 's' : '';
  7310. echo '<p id="search_result_cat">' . count($this->data['cat_result']['cat']) . ' catégorie' . $s . ' trouvée' . $s . ' :</p>';
  7311. echo '<ul>';
  7312. foreach ($this->data['cat_result']['cat'] as $k => $v) {
  7313. $l = outils::genLink('?cat=' . $k, '', $v);
  7314. echo '<li><a href="' . $l . '">' . strip_tags($v) . '</a></li>';
  7315. }
  7316. echo '</ul>';
  7317. }
  7318. if (isset($this->data['cat_result']['alb'])) {
  7319. $s = (count($this->data['cat_result']['alb']) > 1) ? 's' : '';
  7320. echo '<p id="search_result_alb">' . count($this->data['cat_result']['alb']) . ' album' . $s . ' trouvé' . $s . ' :</p>';
  7321. echo '<ul>';
  7322. foreach ($this->data['cat_result']['alb'] as $k => $v) {
  7323. $l = outils::genLink('?alb=' . $k, '', $v);
  7324. echo '<li><a href="' . $l . '">' . strip_tags($v) . '</a></li>';
  7325. }
  7326. echo '</ul>';
  7327. }
  7328. }
  7329. // Images trouvées.
  7330. if (isset($this->data['vignettes'])) {
  7331. $s = ($this->data['infos']['nb_objets'] > 1) ? 's' : '';
  7332. echo '<p id="search_result_img">' . $this->data['infos']['nb_objets'] . ' image' . $s . ' trouvée' . $s . ' :</p>';
  7333. }
  7334. }
  7335. echo "\n";
  7336. }
  7337. }
  7338. function getSearchText($s = ' value="%s"') {
  7339. if ($this->data['infos']['type'] == 'search') {
  7340. printf($s, $this->data['infos']['objet']);
  7341. }
  7342. }
  7343. /*
  7344. *
  7345. * ======================================== CADRE PRINCIPAL:SPECIALES ;
  7346. *
  7347. */
  7348. function getHVC($s = '%s') {
  7349. $g = ($this->data['infos']['hvc']['nb_images'] > 1) ? $g = 's': $g = '';
  7350. $total = ' (' . $this->data['infos']['hvc']['nb_images'] . ' image' . $g . ')';
  7351. $cat_name = '';
  7352. if (!empty($this->data['infos']['hvc']['nom'])) {
  7353. $cat_name = $this->data['infos']['hvc']['nom'];
  7354. }
  7355. $nom = '<a id="retour" href="' . outils::genLink('?' . $this->data['infos']['hvc']['type'] . '=' . $this->data['infos']['objet'], '', $cat_name) . '">' . strip_tags($this->data['infos']['hvc']['nom']) . '</a>';
  7356. $type = (empty($this->data['infos']['hvc']['nom'])) ? '<a href="' . outils::genLink('?cat=1') . '">la galerie</a>' : $this->data['infos']['hvc']['objet'] . ' ';
  7357. // Le nombre d'objet est-il supérieur ŕ 1?
  7358. if ($this->data['infos']['nb_objets'] > 1) {
  7359. $nb = $this->data['infos']['nb_objets'];
  7360. switch ($this->data['infos']['type']) {
  7361. case 'hits' :
  7362. $objet = 'les plus visitées';
  7363. break;
  7364. case 'votes' :
  7365. $objet = 'les mieux notées';
  7366. break;
  7367. case 'commentaires' :
  7368. $objet = 'les plus commentées';
  7369. break;
  7370. case 'recentes' :
  7371. $objet = 'de moins de ' . $this->data['infos']['recent_jours'] . ' jours';
  7372. break;
  7373. case 'images' :
  7374. $objet = '';
  7375. }
  7376. if ($this->data['infos']['type'] == 'images') {
  7377. $hvc = 'Les ' . $nb . ' images de ' . $type . $nom;
  7378. } else {
  7379. $l = outils::genLink('?' . $this->data['infos']['type'] . '=1');
  7380. $hvc = 'Classement des ' . $nb . ' images <a href="' . $l . '">' . $objet . '</a> de ' . $type . $nom . $total;
  7381. }
  7382. } else {
  7383. switch ($this->data['infos']['type']) {
  7384. case 'hits' :
  7385. $objet = 'visitée';
  7386. break;
  7387. case 'votes' :
  7388. $objet = 'notée';
  7389. break;
  7390. case 'commentaires' :
  7391. $objet = 'commentée';
  7392. break;
  7393. case 'recentes' :
  7394. $objet = 'de moins de ' . $this->data['infos']['recent_jours'] . ' jours';
  7395. break;
  7396. case 'images' :
  7397. $objet = '';
  7398. $total = '';
  7399. }
  7400. if (empty($this->data['infos']['nb_objets'])) {
  7401. $hvc = 'Aucune image ' . $objet . ' dans ' . $type . $nom . '.';
  7402. } else {
  7403. $hvc = 'La seule image <a href="' . htmlentities($_SERVER['REQUEST_URI']) . '">' . $objet . '</a> de ' . $type . $nom . $total . '.';
  7404. }
  7405. }
  7406. printf($s, '<span id="hvc_result">' . $hvc . '</span>', '', '', '');
  7407. }
  7408. /*
  7409. *
  7410. * ======================================== RSS ;
  7411. *
  7412. */
  7413. function getRSSImages($s = '%s') {
  7414. if (empty($this->data['infos']['type'])
  7415. || empty($this->data['infos']['rss'])
  7416. || empty($this->data['infos']['rss_objet'])) {
  7417. return;
  7418. }
  7419. $title = 'la galerie"';
  7420. if ($this->data['infos']['type'] == 'tag') {
  7421. $lien = $this->data['infos']['objet_type'] . '=' . $this->data['infos']['objet'];
  7422. $lien .= '&amp;tag=' . urlencode($_GET['tag']);
  7423. $title = 'ce tag"';
  7424. } elseif ($this->data['infos']['type'] == 'profil') {
  7425. if ($this->data['membre_profil'][0]['user_id'] > 1 &&
  7426. !$this->data['membre_profil'][0]['groupe_upload']) {
  7427. return;
  7428. }
  7429. $lien = 'user=' . $this->data['infos']['objet'];
  7430. $title = 'ce membre"';
  7431. } else {
  7432. $lien = $this->data['infos']['type'] . '=' . $this->data['infos']['objet'];
  7433. if ($this->data['infos']['type'] == 'cat' && $this->data['infos']['objet'] > 1) {
  7434. $title = 'cette catégorie"';
  7435. } elseif ($this->data['infos']['type'] == 'alb') {
  7436. $title = 'cet album"';
  7437. }
  7438. }
  7439. printf($s, 'title="Fil RSS 2.0 des images de ' . $title, GALERIE_PATH . '/rss.php?' . $lien);
  7440. }
  7441. function getRSSCommentaires($s = '%s') {
  7442. if (empty($this->data['infos']['type'])
  7443. || empty($this->data['infos']['rss'])
  7444. || empty($this->data['infos']['rss_objet'])) {
  7445. return;
  7446. }
  7447. if ($this->data['infos']['active_commentaires']) {
  7448. $title = 'la galerie"';
  7449. if ($this->data['infos']['type'] == 'tag') {
  7450. $lien = $this->data['infos']['objet_type'] . '=' . $this->data['infos']['objet'];
  7451. $lien .= '&amp;tag=' . urlencode($_GET['tag']);
  7452. $lien .= '&amp;type=com';
  7453. $title = 'ce tag"';
  7454. } elseif ($this->data['infos']['type'] == 'profil') {
  7455. if (!$this->data['membre_profil'][0]['groupe_commentaires']) {
  7456. return;
  7457. }
  7458. $lien = 'user=' . $this->data['infos']['objet'];
  7459. $lien .= '&amp;type=com';
  7460. $title = 'ce membre"';
  7461. } else {
  7462. $lien = $this->data['infos']['type'] . '=' . $this->data['infos']['objet'];
  7463. $lien .= '&amp;type=com';
  7464. if ($this->data['infos']['type'] == 'cat' && $this->data['infos']['objet'] > 1) {
  7465. $title = 'cette catégorie"';
  7466. } elseif ($this->data['infos']['type'] == 'alb') {
  7467. $title = 'cet album"';
  7468. } elseif ($this->data['infos']['type'] == 'img') {
  7469. $title = 'cette image"';
  7470. }
  7471. }
  7472. printf($s, 'title="Fil RSS 2.0 des commentaires de ' . $title, GALERIE_PATH . '/rss.php?' . $lien);
  7473. }
  7474. }
  7475. /*
  7476. *
  7477. * ======================================== PAGE DES COMMENTAIRES ;
  7478. *
  7479. */
  7480. function getNextPageComment() {
  7481. if (!empty($this->data['commentaires']) && is_array($this->data['commentaires'])) {
  7482. if (!isset($this->interne['comment_num'])) {
  7483. $this->interne['comment_num'] = 0;
  7484. } else {
  7485. $this->interne['comment_num']++;
  7486. }
  7487. if (isset($this->data['commentaires'][$this->interne['comment_num']])) {
  7488. return TRUE;
  7489. }
  7490. }
  7491. }
  7492. function getPageComment($type, $s = '%s', $o = '') {
  7493. switch ($type) {
  7494. case 'image_lien' :
  7495. $nom = $this->data['commentaires'][$this->interne['comment_num']]['image_nom'];
  7496. $lien = '?img=' . $this->data['commentaires'][$this->interne['comment_num']]['image_id'];
  7497. $lien = outils::genLink($lien, $nom);
  7498. if ($o) {
  7499. return $lien;
  7500. } else {
  7501. printf($s, $lien);
  7502. }
  7503. break;
  7504. case 'image_thumb' :
  7505. $s = ($s) ? $s : '<a title="%s" href="%s"><img width="%s" height="%s" alt="%s" src="%s" /></a>';
  7506. $alt = htmlentities($this->data['commentaires'][$this->interne['comment_num']]['image_nom']);
  7507. $href = $this->getPageComment('image_lien', 0, 1);
  7508. $file = $this->data['commentaires'][$this->interne['comment_num']]['image_chemin'];
  7509. $src = GALERIE_PATH . '/getimg.php?img=' . $file;
  7510. $size = outils::thumb_size('img', $o, $this->data['commentaires'][$this->interne['comment_num']]['image_largeur'], $this->data['commentaires'][$this->interne['comment_num']]['image_hauteur']);
  7511. printf($s, $alt, $href, $size[0], $size[1], $alt, $src);
  7512. break;
  7513. case 'album_lien' :
  7514. $nom = $this->data['commentaires'][$this->interne['comment_num']]['categorie_nom'];
  7515. $lien = '?alb=' . $this->data['commentaires'][$this->interne['comment_num']]['categorie_id'];
  7516. $lien = outils::genLink($lien, '', $nom);
  7517. printf($s, $lien);
  7518. break;
  7519. case 'album_nom' :
  7520. $nom = htmlentities($this->data['commentaires'][$this->interne['comment_num']]['categorie_nom']);
  7521. printf($s, $nom);
  7522. break;
  7523. case 'commentaire_date' :
  7524. $format = $this->data['infos']['im_date_format'] . ' ŕ %H:%M';
  7525. $date = $this->data['commentaires'][$this->interne['comment_num']]['commentaire_date'];
  7526. printf($s, outils::ladate($date, $format));
  7527. break;
  7528. case 'commentaire_auteur' :
  7529. if ($this->data['commentaires'][$this->interne['comment_num']]['user_id'] == 0) {
  7530. $auteur = outils::html_specialchars($this->data['commentaires'][$this->interne['comment_num']]['commentaire_auteur']);
  7531. } else {
  7532. if ($this->data['infos']['membres_active']) {
  7533. $login = $this->data['commentaires'][$this->interne['comment_num']]['user_login'];
  7534. $auteur = '<a href="' . outils::genLink('?profil=' . urlencode($login)) . '">' . str_replace('_', ' ', $login) . '</a>';
  7535. } else {
  7536. $auteur = str_replace('_', ' ', $this->data['commentaires'][$this->interne['comment_num']]['user_login']);
  7537. }
  7538. }
  7539. printf($s, $auteur);
  7540. break;
  7541. case 'commentaire_web' :
  7542. $web = $this->data['commentaires'][$this->interne['comment_num']]['commentaire_web'];
  7543. if ($web) {
  7544. $auteur = htmlentities($this->data['commentaires'][$this->interne['comment_num']]['commentaire_auteur']);
  7545. $web = '<a title="Site Web de ' . $auteur . '" href="' . $web . '">site</a>';
  7546. printf($s, $web);
  7547. }
  7548. break;
  7549. case 'commentaire_message' :
  7550. $message = $this->data['commentaires'][$this->interne['comment_num']]['commentaire_message'];
  7551. printf($s, outils::comment_format($message));
  7552. break;
  7553. }
  7554. }
  7555. /*
  7556. *
  7557. * ======================================== MEMBRES : identification ;
  7558. *
  7559. */
  7560. function getMembreIdent($s = '%s', $o = 'Informations incorrectes.') {
  7561. if (!empty($this->data['membres']['erreur_identification'])) {
  7562. printf($s, $o);
  7563. }
  7564. }
  7565. function getMembre($type, $s = '%s') {
  7566. switch ($type) {
  7567. case 'sid' :
  7568. echo '<input type="hidden" name="sid" value="' . md5($this->data['membre_user'][0]['user_session_id']) . '" />';
  7569. break;
  7570. case 'favori' :
  7571. if (isset($_GET['img']) && isset($this->data['image']) && empty($this->data['infos']['membres_connexion'])) {
  7572. $addfav = (empty($this->data['image']['user_id'])) ? 1 : 0;
  7573. $text = (empty($this->data['image']['user_id'])) ? 'ajouter aux favoris' : 'retirer des favoris';
  7574. $get = '';
  7575. foreach ($_GET as $p => $v) {
  7576. if ($p != 'addfav') {
  7577. $get .= '&amp;' . $p . '=' . urlencode($v);
  7578. }
  7579. }
  7580. $get = substr($get, 5);
  7581. $cat = 'galerie';
  7582. if (!empty($this->data['infos']['special_cat'][0]['categorie_nom'])) {
  7583. $cat = 'galerie';
  7584. if ($this->data['infos']['special_cat'][0]['categorie_id'] != 1) {
  7585. $cat = $this->data['infos']['special_cat'][0]['categorie_nom'];
  7586. }
  7587. } elseif (!empty($this->data['image']['album'])) {
  7588. $cat = $this->data['image']['album'];
  7589. }
  7590. $lien = outils::genLink('?' . $get . '&amp;addfav=' . $addfav, $this->data['image']['image_nom'], $cat);
  7591. printf($s, $lien, $text);
  7592. }
  7593. break;
  7594. case 'nom' :
  7595. printf($s, $this->getMembre('lien_profil'), $this->data['membre_user'][0]['user_nom'], $this->data['membre_user'][0]['groupe_titre']);
  7596. break;
  7597. case 'avatar' :
  7598. if ($this->data['infos']['membres_avatar']) {
  7599. if ($this->data['membre_user'][0]['user_avatar']) {
  7600. $src = GALERIE_PATH . '/membres/avatars/avatar_' . $this->data['membre_user'][0]['user_login'] . '_thumb.jpg';
  7601. $alt = 'avatar de ' . $this->data['membre_user'][0]['user_nom'];
  7602. } else {
  7603. $src = dirname($this->data['infos']['style']) . '/avatar_default.png';
  7604. $alt = 'pas d\'avatar';
  7605. }
  7606. printf($s, $this->getMembre('lien_profil'), $alt, $src);
  7607. }
  7608. break;
  7609. case 'lien_liste' :
  7610. printf($s, outils::genLink('?membres=liste'));
  7611. break;
  7612. case 'lien_modif_profil' :
  7613. printf($s, outils::genLink('?membres=modif_profil'));
  7614. break;
  7615. case 'lien_deconnect' :
  7616. printf($s, outils::genLink('?membres=deconnect'));
  7617. break;
  7618. case 'lien_profil' :
  7619. return outils::genLink('?profil=' . urlencode($this->data['membre_user'][0]['user_login']));
  7620. case 'lien_upload' :
  7621. if ($this->data['membre_user'][0]['groupe_upload']) {
  7622. printf($s, outils::genLink('?membres=upload'));
  7623. break;
  7624. }
  7625. }
  7626. }
  7627. /*
  7628. *
  7629. * ======================================== PAGE DES MEMBRES ;
  7630. *
  7631. */
  7632. function getMembresMsg($s1 = '<p id="msg_erreur"><span>%s</span></p>',
  7633. $s2 = '<p id="msg_succes"><span>%s</span></p>') {
  7634. if (isset($this->data['erreur'])) {
  7635. if (is_array($this->data['erreur'])) {
  7636. $erreurs = '';
  7637. foreach ($this->data['erreur'] as $k => $v) {
  7638. $erreurs .= $v . '<br />';
  7639. }
  7640. if ($erreurs) {
  7641. printf($s1, $erreurs);
  7642. }
  7643. } else {
  7644. printf($s1, $this->data['erreur']);
  7645. }
  7646. }
  7647. if (isset($this->data['succes'])) {
  7648. if (is_array($this->data['succes'])) {
  7649. $succes = '';
  7650. foreach ($this->data['succes'] as $k => $v) {
  7651. $succes .= $v . '<br />';
  7652. }
  7653. if ($succes) {
  7654. printf($s2, $succes);
  7655. }
  7656. } else {
  7657. printf($s2, $this->data['succes']);
  7658. }
  7659. }
  7660. }
  7661. function getMembresList($o, $s = '%s') {
  7662. switch ($o) {
  7663. case 'list':
  7664. echo $this->data['users'];
  7665. break;
  7666. case 'pos':
  7667. $nb_objets = $this->data['nb_objets'];
  7668. $lien = '<a href="' . outils::genLink('?cat=1') . '">galerie</a>';
  7669. $msg = ($nb_objets > 1) ? 'Les %s membres de la ' . $lien : 'Le seul membre de la ' . $lien;
  7670. $texte = sprintf($msg, $nb_objets);
  7671. printf($s, $texte);
  7672. break;
  7673. }
  7674. }
  7675. /*
  7676. *
  7677. * ======================================== PAGE DES MEMBRES : profil ;
  7678. *
  7679. */
  7680. function getProfil($o, $s = '%s') {
  7681. switch ($o) {
  7682. case 'objets' :
  7683. if (!empty($this->data['membre_profil'][0]['nb_comments'])
  7684. || !empty($this->data['membre_profil'][0]['nb_images'])
  7685. || !empty($this->data['membre_profil'][0]['nb_favoris'])) {
  7686. $list = '<ul id="membre_objets">';
  7687. if (!empty($this->data['membre_profil'][0]['nb_comments'])) {
  7688. $nb_comments = $this->data['membre_profil'][0]['nb_comments'];
  7689. $m = '%s commentaires';
  7690. $u = '%s commentaire';
  7691. $s = ($nb_comments > 1) ? $m : $u;
  7692. $lien = outils::genLink('?mcom=' . urlencode($this->data['membre_profil'][0]['user_login']));
  7693. $s = '<a href="' . $lien . '">' . $s . '</a>';
  7694. $list .= '<li>' . sprintf($s, $nb_comments) . '</li>';
  7695. }
  7696. if (!empty($this->data['membre_profil'][0]['nb_images'])) {
  7697. $nb_images = $this->data['membre_profil'][0]['nb_images'];
  7698. $m = '%s images';
  7699. $u = '%s image';
  7700. $s = ($nb_images > 1) ? $m : $u;
  7701. $lien = outils::genLink('?mimg=' . urlencode($this->data['membre_profil'][0]['user_login']));
  7702. $s = '<a href="' . $lien . '">' . $s . '</a>';
  7703. $list .= '<li>' . sprintf($s, $nb_images) . '</li>';
  7704. }
  7705. if (!empty($this->data['membre_profil'][0]['nb_favoris'])) {
  7706. $nb_images = $this->data['membre_profil'][0]['nb_favoris'];
  7707. $m = '%s favoris';
  7708. $u = '%s favori';
  7709. $s = ($nb_images > 1) ? $m : $u;
  7710. $lien = outils::genLink('?mfav=' . urlencode($this->data['membre_profil'][0]['user_login']));
  7711. $s = '<a href="' . $lien . '">' . $s . '</a>';
  7712. $list .= '<li>' . sprintf($s, $nb_images) . '</li>';
  7713. }
  7714. $list .= '</ul>';
  7715. echo $list;
  7716. }
  7717. break;
  7718. case 'mail_public' :
  7719. if ($this->data['membre_profil'][0]['user_mail_public']) {
  7720. echo $s;
  7721. }
  7722. break;
  7723. case 'newsletter' :
  7724. if ($this->data['membre_profil'][0]['user_newsletter']) {
  7725. echo $s;
  7726. }
  7727. break;
  7728. case 'nom' :
  7729. printf($s, $this->data['membre_profil'][0]['user_nom']);
  7730. break;
  7731. case 'avatar' :
  7732. if ($this->data['infos']['membres_avatar']) {
  7733. if ($this->data['membre_profil'][0]['user_avatar']) {
  7734. $src = GALERIE_PATH . '/membres/avatars/avatar_' . $this->data['membre_profil'][0]['user_login'] . '.jpg';
  7735. $alt = 'avatar de ' . $this->data['membre_profil'][0]['user_nom'];
  7736. } else {
  7737. $src = dirname($this->data['infos']['style']) . '/avatar_default.png';
  7738. $alt = 'pas d\'avatar';
  7739. }
  7740. printf($s, $alt, $src);
  7741. }
  7742. break;
  7743. case 'date_creation' :
  7744. printf($s, outils::ladate($this->data['membre_profil'][0]['user_date_creation'], '%A %d %B %Y'));
  7745. break;
  7746. case 'date_derniere' :
  7747. printf($s, outils::ladate($this->data['membre_profil'][0]['user_date_derniere_visite'], '%A %d %B %Y'));
  7748. break;
  7749. case 'mail' :
  7750. if ($this->data['membre_profil'][0]['user_mail_public']
  7751. && $this->data['membre_profil'][0]['user_mail']) {
  7752. printf($s, $this->data['membre_profil'][0]['user_mail']);
  7753. }
  7754. break;
  7755. case 'mail_modif' :
  7756. if ($this->data['membre_profil'][0]['user_mail']) {
  7757. printf($s, $this->data['membre_profil'][0]['user_mail']);
  7758. }
  7759. break;
  7760. case 'web' :
  7761. if ($this->data['membre_profil'][0]['user_web']) {
  7762. printf($s, $this->data['membre_profil'][0]['user_web']);
  7763. }
  7764. break;
  7765. case 'lieu' :
  7766. if ($this->data['membre_profil'][0]['user_lieu']) {
  7767. printf($s, htmlentities($this->data['membre_profil'][0]['user_lieu']));
  7768. }
  7769. break;
  7770. case 'groupe' :
  7771. printf($s, $this->data['membre_profil'][0]['groupe_titre']);
  7772. break;
  7773. case 'lien_pass':
  7774. echo outils::genLink('?membres=modif_pass');
  7775. break;
  7776. case 'lien_avatar':
  7777. echo outils::genLink('?membres=modif_avatar');
  7778. break;
  7779. }
  7780. }
  7781. /*
  7782. *
  7783. * ======================================== UPLOAD;
  7784. *
  7785. */
  7786. function getUpload($o, $s = '%s') {
  7787. switch ($o) {
  7788. case 'list' :
  7789. printf($s, $this->data['categories_list']);
  7790. break;
  7791. case 'mod' :
  7792. if ($this->data['membre_user'][0]['groupe_upload_mode'] != 'direct') {
  7793. echo $s;
  7794. }
  7795. break;
  7796. case 'create' :
  7797. if ($this->data['membre_user'][0]['groupe_upload_create']) {
  7798. printf($s, outils::genLink('?membres=create'));
  7799. }
  7800. break;
  7801. case 'format' :
  7802. $s = 'format JPEG, GIF ou PNG uniquement; '
  7803. . $this->data['infos']['users_upload_maxsize'] . ' Ko et '
  7804. . $this->data['infos']['users_upload_maxwidth'] . ' x '
  7805. . $this->data['infos']['users_upload_maxheight'] . ' pixels maximum par fichier';
  7806. printf($s);
  7807. break;
  7808. case 'MAX_FILE_SIZE' :
  7809. echo '<input name="MAX_FILE_SIZE" value="' . ($this->data['infos']['users_upload_maxsize']*1024) . '" type="hidden" />';
  7810. break;
  7811. }
  7812. }
  7813. }
  7814. ?>