PageRenderTime 31ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 1ms

/root/gallery/image_page.php

https://github.com/grotevoet/phpbb-gallery
PHP | 747 lines | 607 code | 81 blank | 59 comment | 161 complexity | 48d8e2ade424b0c77cf34d6feb41b944 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package phpBB Gallery
  5. * @version $Id$
  6. * @copyright (c) 2007 nickvergessen nickvergessen@gmx.de http://www.flying-bits.org
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. * @ignore
  12. */
  13. define('IN_PHPBB', true);
  14. $phpEx = substr(strrchr(__FILE__, '.'), 1);
  15. include('includes/root_path.' . $phpEx);
  16. include($phpbb_root_path . 'common.' . $phpEx);
  17. phpbb_gallery::setup(array('mods/gallery', 'mods/exif_data'));
  18. phpbb_gallery_url::_include('functions_display', 'phpbb');
  19. /**
  20. * Filestructure:
  21. *
  22. * - Check the request and get image_data
  23. * - Check the permissions and approval
  24. * - Main work here...
  25. * - Exif-Data
  26. * - Rating
  27. * - Posting comment
  28. * - Listing comment
  29. *
  30. */
  31. /**
  32. * Check the request and get image_data
  33. */
  34. $image_id = request_var('image_id', 0);
  35. $image_data = phpbb_gallery_image::get_info($image_id);
  36. $album_id = $image_data['image_album_id'];
  37. $album_data = phpbb_gallery_album::get_info($album_id);
  38. $user_id = $image_data['image_user_id'];
  39. if (!file_exists(phpbb_gallery_url::path('upload') . $image_data['image_filename']))
  40. {
  41. $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . '
  42. SET image_filemissing = 1
  43. WHERE image_id = ' . $image_id;
  44. $db->sql_query($sql);
  45. }
  46. /**
  47. * Check the permissions and approval
  48. */
  49. if (!phpbb_gallery::$auth->acl_check('i_view', $album_id, $album_data['album_user_id']))
  50. {
  51. if (!$user->data['is_registered'])
  52. {
  53. login_box(phpbb_gallery_url::append_sid('relative', 'image_page', "album_id=$album_id&amp;image_id=$image_id"), $user->lang['LOGIN_INFO']);
  54. }
  55. else
  56. {
  57. trigger_error('NOT_AUTHORISED');
  58. }
  59. }
  60. if (!phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']) && ($image_data['image_status'] == phpbb_gallery_image::STATUS_UNAPPROVED))
  61. {
  62. trigger_error('NOT_AUTHORISED');
  63. }
  64. // Build the navigation
  65. phpbb_gallery_album::generate_nav($album_data);
  66. // Salting the form...yumyum ...
  67. add_form_key('gallery');
  68. /**
  69. * Main work here...
  70. */
  71. // Increase the counter, as we load the image with increment-blocker from this site it's no problem.
  72. // We also copy some parts from topic_views here
  73. if (isset($user->data['session_page']) && !$user->data['is_bot'] && (strpos($user->data['session_page'], '&image_id=' . $image_id) === false || isset($user->data['session_created'])))
  74. {
  75. $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . '
  76. SET image_view_count = image_view_count + 1
  77. WHERE image_id = ' . $image_id;
  78. $db->sql_query($sql);
  79. }
  80. $image_approval_sql = ' AND image_status <> ' . phpbb_gallery_image::STATUS_UNAPPROVED;
  81. if (phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']))
  82. {
  83. $image_approval_sql = '';
  84. }
  85. //$sort_days = request_var('st', 0);
  86. $sort_key = request_var('sk', ($album_data['album_sort_key']) ? $album_data['album_sort_key'] : phpbb_gallery_config::get('default_sort_key'));
  87. $sort_dir = request_var('sd', ($album_data['album_sort_dir']) ? $album_data['album_sort_dir'] : phpbb_gallery_config::get('default_sort_dir'));
  88. $sort_by_sql = array('t' => 'image_time', 'n' => 'image_name_clean', 'u' => 'image_username_clean', 'vc' => 'image_view_count', 'ra' => 'image_rate_avg', 'r' => 'image_rates', 'c' => 'image_comments', 'lc' => 'image_last_comment');
  89. $sql_sort_by = (isset($sort_by_sql[$sort_key])) ? $sort_by_sql[$sort_key] : $sort_by_sql['t'];
  90. if ($sort_dir == 'd')
  91. {
  92. $sql_next_condition = '<';
  93. $sql_next_ordering = 'DESC';
  94. $sql_previous_condition = '>';
  95. $sql_previous_ordering = 'ASC';
  96. }
  97. else
  98. {
  99. $sql_next_condition = '>';
  100. $sql_next_ordering = 'ASC';
  101. $sql_previous_condition = '<';
  102. $sql_previous_ordering = 'DESC';
  103. }
  104. // Two sqls now, but much better performance!
  105. // As we do not allow to duplicate images, we can relay on the id as second sort parameter
  106. $sql = 'SELECT image_id, image_name
  107. FROM ' . GALLERY_IMAGES_TABLE . '
  108. WHERE image_album_id = ' . (int) $album_id . $image_approval_sql . "
  109. AND (($sql_sort_by = '" . $db->sql_escape($image_data[$sql_sort_by]) . "' AND image_id $sql_next_condition {$image_id})
  110. OR $sql_sort_by $sql_next_condition '" . $db->sql_escape($image_data[$sql_sort_by]) . "')
  111. ORDER BY $sql_sort_by $sql_next_ordering";
  112. $result = $db->sql_query_limit($sql, 1);
  113. $next_data = $db->sql_fetchrow($result);
  114. $db->sql_freeresult($result);
  115. $sql = 'SELECT image_id, image_name
  116. FROM ' . GALLERY_IMAGES_TABLE . '
  117. WHERE image_album_id = ' . (int) $album_id . $image_approval_sql . "
  118. AND (($sql_sort_by = '" . $db->sql_escape($image_data[$sql_sort_by]) . "' AND image_id $sql_previous_condition {$image_id})
  119. OR $sql_sort_by $sql_previous_condition '" . $db->sql_escape($image_data[$sql_sort_by]) . "')
  120. ORDER BY $sql_sort_by $sql_previous_ordering";
  121. $result = $db->sql_query_limit($sql, 1);
  122. $previous_data = $db->sql_fetchrow($result);
  123. $db->sql_freeresult($result);
  124. $s_allowed_delete = $s_allowed_edit = $s_allowed_status = false;
  125. if ((phpbb_gallery::$auth->acl_check('m_', $album_id, $album_data['album_user_id']) || ($image_data['image_user_id'] == $user->data['user_id'])) && ($user->data['user_id'] != ANONYMOUS))
  126. {
  127. $s_user_allowed = (($image_data['image_user_id'] == $user->data['user_id']) && ($album_data['album_status'] != phpbb_gallery_album::STATUS_LOCKED));
  128. $s_allowed_delete = ((phpbb_gallery::$auth->acl_check('i_delete', $album_id, $album_data['album_user_id']) && $s_user_allowed) || phpbb_gallery::$auth->acl_check('m_delete', $album_id, $album_data['album_user_id']));
  129. $s_allowed_edit = ((phpbb_gallery::$auth->acl_check('i_edit', $album_id, $album_data['album_user_id']) && $s_user_allowed) || phpbb_gallery::$auth->acl_check('m_edit', $album_id, $album_data['album_user_id']));
  130. $s_allowed_status = phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']);
  131. $s_quick_mod = ($s_allowed_delete || $s_allowed_edit || $s_allowed_status || phpbb_gallery::$auth->acl_check('m_move', $album_id, $album_data['album_user_id']));
  132. $user->add_lang('mods/gallery_mcp');
  133. $template->assign_vars(array(
  134. 'S_MOD_ACTION' => phpbb_gallery_url::append_sid('mcp', "album_id=$album_id&amp;image_id=$image_id&amp;quickmod=1" /*&amp;redirect=" . urlencode(str_replace('&amp;', '&', $viewtopic_url))*/, true, $user->session_id),
  135. 'S_QUICK_MOD' => $s_quick_mod,
  136. 'S_QM_MOVE' => phpbb_gallery::$auth->acl_check('m_move', $album_id, $album_data['album_user_id']),
  137. 'S_QM_DELETE' => $s_allowed_delete,
  138. 'S_QM_REPORT' => phpbb_gallery::$auth->acl_check('m_report', $album_id, $album_data['album_user_id']),
  139. 'S_QM_STATUS' => phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']),
  140. 'S_IMAGE_REPORTED' => $image_data['image_reported'],
  141. 'U_IMAGE_REPORTED' => phpbb_gallery_url::append_sid('mcp', "mode=report_details&amp;album_id=$album_id&amp;option_id=" . $image_data['image_reported']),
  142. 'S_STATUS_APPROVED' => ($image_data['image_status'] == phpbb_gallery_image::STATUS_APPROVED),
  143. 'S_STATUS_UNAPPROVED' => ($image_data['image_status'] == phpbb_gallery_image::STATUS_UNAPPROVED),
  144. 'S_STATUS_LOCKED' => ($image_data['image_status'] == phpbb_gallery_image::STATUS_LOCKED),
  145. ));
  146. }
  147. $template->assign_vars(array(
  148. 'U_VIEW_ALBUM' => phpbb_gallery_url::append_sid("album.$phpEx", "album_id=$album_id"),
  149. 'UC_PREVIOUS_IMAGE' => (!empty($previous_data) && phpbb_gallery_config::get('disp_nextprev_thumbnail')) ? generate_image_link('thumbnail', 'image_page', $previous_data['image_id'], $previous_data['image_name'], $album_id) : '',
  150. 'UC_PREVIOUS' => (!empty($previous_data)) ? phpbb_gallery_image::generate_link('image_name_unbold', 'image_page_prev', $previous_data['image_id'], $previous_data['image_name'], $album_id) : '',
  151. 'UC_IMAGE' => phpbb_gallery_image::generate_link('medium', phpbb_gallery_config::get('link_imagepage'), $image_id, $image_data['image_name'], $album_id, ((substr($image_data['image_filename'], 0 -3) == 'gif') ? true : false), false),
  152. 'UC_NEXT_IMAGE' => (!empty($next_data) && phpbb_gallery_config::get('disp_nextprev_thumbnail')) ? generate_image_link('thumbnail', 'image_page', $next_data['image_id'], $next_data['image_name'], $album_id) : '',
  153. 'UC_NEXT' => (!empty($next_data)) ? phpbb_gallery_image::generate_link('image_name_unbold', 'image_page_next', $next_data['image_id'], $next_data['image_name'], $album_id) : '',
  154. 'EDIT_IMG' => $user->img('icon_post_edit', 'EDIT_IMAGE'),
  155. 'DELETE_IMG' => $user->img('icon_post_delete', 'DELETE_IMAGE'),
  156. 'REPORT_IMG' => $user->img('icon_post_report', 'REPORT_IMAGE'),
  157. 'STATUS_IMG' => $user->img('icon_post_info', 'STATUS_IMAGE'),
  158. 'U_DELETE' => ($s_allowed_delete) ? phpbb_gallery_url::append_sid('posting', "mode=image&amp;submode=delete&amp;album_id=$album_id&amp;image_id=$image_id") : '',
  159. 'U_EDIT' => ($s_allowed_edit) ? phpbb_gallery_url::append_sid('posting', "mode=image&amp;submode=edit&amp;album_id=$album_id&amp;image_id=$image_id") : '',
  160. 'U_REPORT' => (phpbb_gallery::$auth->acl_check('i_report', $album_id, $album_data['album_user_id']) && ($image_data['image_user_id'] != $user->data['user_id'])) ? phpbb_gallery_url::append_sid('posting', "mode=image&amp;submode=report&amp;album_id=$album_id&amp;image_id=$image_id") : '',
  161. 'U_STATUS' => ($s_allowed_status) ? phpbb_gallery_url::append_sid('mcp', "mode=queue_details&amp;album_id=$album_id&amp;option_id=$image_id") : '',
  162. 'CONTEST_RANK' => ($image_data['image_contest_rank']) ? $user->lang['CONTEST_RESULT_' . $image_data['image_contest_rank']] : '',
  163. 'IMAGE_NAME' => $image_data['image_name'],
  164. 'IMAGE_DESC' => generate_text_for_display($image_data['image_desc'], $image_data['image_desc_uid'], $image_data['image_desc_bitfield'], 7),
  165. 'IMAGE_BBCODE' => '[album]' . $image_id . '[/album]',
  166. 'IMAGE_IMGURL_BBCODE' => (phpbb_gallery_config::get('disp_image_url')) ? '[url=' . phpbb_gallery_url::path('full') . "image.$phpEx?album_id=$album_id&amp;image_id=$image_id" . '][img]' . generate_board_url(false) . '/' . phpbb_gallery_url::path('relative') . "image.$phpEx?album_id=$album_id&amp;image_id=$image_id&amp;mode=thumbnail" . '[/img][/url]' : '',
  167. 'IMAGE_URL' => (phpbb_gallery_config::get('disp_image_url')) ? phpbb_gallery_url::path('full') . "image.$phpEx?album_id=$album_id&amp;image_id=$image_id" : '',
  168. 'IMAGE_TIME' => $user->format_date($image_data['image_time']),
  169. 'IMAGE_VIEW' => $image_data['image_view_count'],
  170. 'L_BOOKMARK_TOPIC' => ($image_data['favorite_id']) ? $user->lang['UNFAVORITE_IMAGE'] : $user->lang['FAVORITE_IMAGE'],
  171. 'U_BOOKMARK_TOPIC' => ($user->data['user_id'] != ANONYMOUS) ? phpbb_gallery_url::append_sid('posting', "mode=image&amp;submode=" . (($image_data['favorite_id']) ? 'un' : '') . "favorite&amp;album_id=$album_id&amp;image_id=$image_id") : '',
  172. 'L_WATCH_TOPIC' => ($image_data['watch_id']) ? $user->lang['UNWATCH_IMAGE'] : $user->lang['WATCH_IMAGE'],
  173. 'U_WATCH_TOPIC' => ($user->data['user_id'] != ANONYMOUS) ? phpbb_gallery_url::append_sid('posting', "mode=image&amp;submode=" . (($image_data['watch_id']) ? 'un' : '') . "watch&amp;album_id=$album_id&amp;image_id=$image_id") : '',
  174. 'S_WATCHING_TOPIC' => ($image_data['watch_id']) ? true : false,
  175. 'S_ALBUM_ACTION' => phpbb_gallery_url::append_sid('image_page', "album_id=$album_id&amp;image_id=$image_id"),
  176. 'U_RETURN_LINK' => phpbb_gallery_url::append_sid('album', "album_id=$album_id"),
  177. 'S_RETURN_LINK' => $album_data['album_name'],
  178. 'S_JUMPBOX_ACTION' => phpbb_gallery_url::append_sid('album'),
  179. 'ALBUM_JUMPBOX' => phpbb_gallery_album::get_albumbox(false, '', $album_id),
  180. ));
  181. /**
  182. * Exif-Data
  183. */
  184. if (phpbb_gallery_config::get('disp_exifdata') && ($image_data['image_has_exif'] != phpbb_gallery_constants::EXIF_UNAVAILABLE) && (substr($image_data['image_filename'], -4) == '.jpg') && function_exists('exif_read_data') && (phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']) || ($image_data['image_contest'] != phpbb_gallery_image::IN_CONTEST)))
  185. {
  186. if ($image_data['image_has_exif'] == phpbb_gallery_constants::EXIF_DBSAVED)
  187. {
  188. $exif = unserialize($image_data['image_exif_data']);
  189. }
  190. else
  191. {
  192. $image_tools = new phpbb_gallery_image_tools();
  193. $image_tools->set_image_data(phpbb_gallery_url::path('upload') . $image_data['image_filename']);
  194. $image_tools->read_exif_data();
  195. $exif = $image_tools->exif_data;
  196. }
  197. if (!empty($exif["EXIF"]))
  198. {
  199. $exif_data = array();
  200. if (isset($exif["EXIF"]["DateTimeOriginal"]))
  201. {
  202. $timestamp_year = substr($exif["EXIF"]["DateTimeOriginal"], 0, 4);
  203. $timestamp_month = substr($exif["EXIF"]["DateTimeOriginal"], 5, 2);
  204. $timestamp_day = substr($exif["EXIF"]["DateTimeOriginal"], 8, 2);
  205. $timestamp_hour = substr($exif["EXIF"]["DateTimeOriginal"], 11, 2);
  206. $timestamp_minute = substr($exif["EXIF"]["DateTimeOriginal"], 14, 2);
  207. $timestamp_second = substr($exif["EXIF"]["DateTimeOriginal"], 17, 2);
  208. $timestamp = (int) @mktime($timestamp_hour, $timestamp_minute, $timestamp_second, $timestamp_month, $timestamp_day, $timestamp_year);
  209. if ($timestamp)
  210. {
  211. $exif_data['exif_date'] = $user->format_date($timestamp + phpbb_gallery_constants::EXIFTIME_OFFSET);
  212. }
  213. }
  214. if (isset($exif["EXIF"]["FocalLength"]))
  215. {
  216. list($num, $den) = explode("/", $exif["EXIF"]["FocalLength"]);
  217. if ($den)
  218. {
  219. $exif_data['exif_focal'] = sprintf($user->lang['EXIF_FOCAL_EXP'], ($num / $den));
  220. }
  221. }
  222. if (isset($exif["EXIF"]["ExposureTime"]))
  223. {
  224. list($num, $den) = explode("/", $exif["EXIF"]["ExposureTime"]);
  225. $exif_exposure = '';
  226. if (($num > $den) && $den)
  227. {
  228. $exif_exposure = $num / $den;
  229. }
  230. else if ($num)
  231. {
  232. $exif_exposure = ' 1/' . $den / $num ;
  233. }
  234. if ($exif_exposure)
  235. {
  236. $exif_data['exif_exposure'] = sprintf($user->lang['EXIF_EXPOSURE_EXP'], $exif_exposure);
  237. }
  238. }
  239. if (isset($exif["EXIF"]["FNumber"]))
  240. {
  241. list($num,$den) = explode("/",$exif["EXIF"]["FNumber"]);
  242. if ($den)
  243. {
  244. $exif_data['exif_aperture'] = "F/" . ($num / $den);
  245. }
  246. }
  247. if (isset($exif["EXIF"]["ISOSpeedRatings"]) && !is_array($exif["EXIF"]["ISOSpeedRatings"]))
  248. {
  249. $exif_data['exif_iso'] = $exif["EXIF"]["ISOSpeedRatings"];
  250. }
  251. if (isset($exif["EXIF"]["WhiteBalance"]))
  252. {
  253. $exif_data['exif_whiteb'] = $user->lang['EXIF_WHITEB_' . (($exif["EXIF"]["WhiteBalance"]) ? 'MANU' : 'AUTO')];
  254. }
  255. if (isset($exif["EXIF"]["Flash"]))
  256. {
  257. if (isset($user->lang['EXIF_FLASH_CASE_' . $exif["EXIF"]["Flash"]]))
  258. {
  259. $exif_data['exif_flash'] = $user->lang['EXIF_FLASH_CASE_' . $exif["EXIF"]["Flash"]];
  260. }
  261. }
  262. if (isset($exif["IFD0"]["Model"]))
  263. {
  264. $exif_data['exif_cam_model'] = ucwords($exif["IFD0"]["Model"]);
  265. }
  266. if (isset($exif["EXIF"]["ExposureProgram"]))
  267. {
  268. if (isset($user->lang['EXIF_EXPOSURE_PROG_' . $exif["EXIF"]["ExposureProgram"]]))
  269. {
  270. $exif_data['exif_exposure_prog'] = $user->lang['EXIF_EXPOSURE_PROG_' . $exif["EXIF"]["ExposureProgram"]];
  271. }
  272. }
  273. if (isset($exif["EXIF"]["ExposureBiasValue"]))
  274. {
  275. list($num,$den) = explode("/", $exif["EXIF"]["ExposureBiasValue"]);
  276. if ($den)
  277. {
  278. if (($num / $den) == 0)
  279. {
  280. $exif_exposure_bias = 0;
  281. }
  282. else
  283. {
  284. $exif_exposure_bias = $exif["EXIF"]["ExposureBiasValue"];
  285. }
  286. $exif_data['exif_exposure_bias'] = sprintf($user->lang['EXIF_EXPOSURE_BIAS_EXP'], $exif_exposure_bias);
  287. }
  288. }
  289. if (isset($exif["EXIF"]["MeteringMode"]))
  290. {
  291. if (isset($user->lang['EXIF_METERING_MODE_' . $exif["EXIF"]["MeteringMode"]]))
  292. {
  293. $exif_data['exif_metering_mode'] = $user->lang['EXIF_METERING_MODE_' . $exif["EXIF"]["MeteringMode"]];
  294. }
  295. }
  296. if (sizeof($exif_data))
  297. {
  298. foreach ($exif_data as $exif => $value)
  299. {
  300. $template->assign_block_vars('exif_value', array(
  301. 'EXIF_NAME' => $user->lang[strtoupper($exif)],
  302. 'EXIF_VALUE' => htmlspecialchars($value),
  303. ));
  304. }
  305. $template->assign_vars(array(
  306. 'S_EXIF_DATA' => true,
  307. 'S_VIEWEXIF' => $user->gallery['user_viewexif'],
  308. ));
  309. if ($image_data['image_has_exif'] == phpbb_gallery_constants::EXIF_UNKNOWN)
  310. {
  311. $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . '
  312. SET image_has_exif = ' . phpbb_gallery_constants::EXIF_AVAILABLE . '
  313. WHERE image_id = ' . $image_id;
  314. $db->sql_query($sql);
  315. }
  316. }
  317. }
  318. else
  319. {
  320. $sql = 'UPDATE ' . GALLERY_IMAGES_TABLE . '
  321. SET image_has_exif = ' . phpbb_gallery_constants::EXIF_UNAVAILABLE . '
  322. WHERE image_id = ' . $image_id;
  323. $db->sql_query($sql);
  324. }
  325. }
  326. /**
  327. * Rating
  328. */
  329. if (phpbb_gallery_config::get('allow_rates'))
  330. {
  331. $allowed_to_rate = $your_rating = $contest_rating_msg = $contest_result_hidden = false;
  332. if ($user->data['is_registered'])
  333. {
  334. $sql = 'SELECT *
  335. FROM ' . GALLERY_RATES_TABLE . '
  336. WHERE rate_image_id = ' . $image_id . '
  337. AND rate_user_id = ' . (int) $user->data['user_id'];
  338. $result = $db->sql_query($sql);
  339. if ($db->sql_affectedrows($result) > 0)
  340. {
  341. $rated = $db->sql_fetchrow($result);
  342. $your_rating = $rated['rate_point'];
  343. }
  344. $db->sql_freeresult($result);
  345. }
  346. // Hide the result, while still rating on contests
  347. if ($image_data['image_contest'])
  348. {
  349. $contest_result_hidden = sprintf($user->lang['CONTEST_RESULT_HIDDEN'], $user->format_date(($album_data['contest_start'] + $album_data['contest_end']), false, true));
  350. }
  351. // Check: User didn't rate yet, has permissions, it's not the users own image and the user is logged in
  352. if (!$your_rating && phpbb_gallery::$auth->acl_check('i_rate', $album_id, $album_data['album_user_id']) && ($user->data['user_id'] != $image_data['image_user_id']) && ($user->data['user_id'] != ANONYMOUS) && ($album_data['album_status'] != phpbb_gallery_album::STATUS_LOCKED) && ($image_data['image_status'] != phpbb_gallery_image::STATUS_LOCKED))
  353. {
  354. $hide_rate = false;
  355. if ($album_data['contest_id'])
  356. {
  357. if (time() < ($album_data['contest_start'] + $album_data['contest_rating']))
  358. {
  359. $hide_rate = true;
  360. $contest_rating_msg = sprintf($user->lang['CONTEST_RATING_STARTS'], $user->format_date(($album_data['contest_start'] + $album_data['contest_rating']), false, true));
  361. }
  362. if (($album_data['contest_start'] + $album_data['contest_end']) < time())
  363. {
  364. $hide_rate = true;
  365. $contest_rating_msg = sprintf($user->lang['CONTEST_RATING_ENDED'], $user->format_date(($album_data['contest_start'] + $album_data['contest_end']), false, true));
  366. }
  367. }
  368. if (!$hide_rate)
  369. {
  370. for ($rate_scale = 1; $rate_scale <= phpbb_gallery_config::get('max_rating'); $rate_scale++)
  371. {
  372. $template->assign_block_vars('rate_scale', array(
  373. 'RATE_POINT' => $rate_scale,
  374. ));
  375. }
  376. }
  377. $allowed_to_rate = true;
  378. }
  379. $template->assign_vars(array(
  380. 'IMAGE_RATING' => ($image_data['image_rates'] != 0) ? sprintf((($image_data['image_rates'] == 1) ? $user->lang['RATE_STRING'] : $user->lang['RATES_STRING']), $image_data['image_rate_avg'] / 100, $image_data['image_rates']) : $user->lang['NOT_RATED'],
  381. 'S_YOUR_RATING' => $your_rating,
  382. 'S_ALLOWED_TO_RATE' => $allowed_to_rate,
  383. 'CONTEST_RATING' => $contest_rating_msg,
  384. 'CONTEST_RESULT_HIDDEN' => $contest_result_hidden,
  385. 'S_VIEW_RATE' => (phpbb_gallery::$auth->acl_check('i_rate', $album_id, $album_data['album_user_id'])) ? true : false,
  386. 'S_COMMENT_ACTION' => phpbb_gallery_url::append_sid('posting', "album_id=$album_id&amp;image_id=$image_id&amp;mode=comment&amp;submode=rate"),
  387. ));
  388. }
  389. /**
  390. * Posting comment
  391. */
  392. if (phpbb_gallery_config::get('allow_comments') && phpbb_gallery::$auth->acl_check('c_post', $album_id, $album_data['album_user_id']) && ($album_data['album_status'] != ITEM_LOCKED) && (($image_data['image_status'] != phpbb_gallery_image::STATUS_LOCKED) || phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id'])))
  393. {
  394. $user->add_lang('posting');
  395. phpbb_gallery_url::_include('functions_posting', 'phpbb');
  396. $bbcode_status = ($config['allow_bbcode']) ? true : false;
  397. $smilies_status = ($config['allow_smilies']) ? true : false;
  398. $img_status = ($bbcode_status) ? true : false;
  399. $url_status = ($config['allow_post_links']) ? true : false;
  400. $flash_status = false;
  401. $quote_status = true;
  402. // Build custom bbcodes array
  403. display_custom_bbcodes();
  404. // Build smilies array
  405. generate_smilies('inline', 0);
  406. $s_hide_comment_input = (time() < ($album_data['contest_start'] + $album_data['contest_end'])) ? true : false;
  407. $template->assign_vars(array(
  408. 'S_ALLOWED_TO_COMMENT' => true,
  409. 'S_HIDE_COMMENT_INPUT' => $s_hide_comment_input,
  410. 'CONTEST_COMMENTS' => sprintf($user->lang['CONTEST_COMMENTS_STARTS'], $user->format_date(($album_data['contest_start'] + $album_data['contest_end']), false, true)),
  411. 'BBCODE_STATUS' => ($bbcode_status) ? sprintf($user->lang['BBCODE_IS_ON'], '<a href="' . phpbb_gallery_url::append_sid('phpbb', 'faq', 'mode=bbcode') . '">', '</a>') : sprintf($user->lang['BBCODE_IS_OFF'], '<a href="' . phpbb_gallery_url::append_sid('phpbb', 'faq', 'mode=bbcode') . '">', '</a>'),
  412. 'IMG_STATUS' => ($img_status) ? $user->lang['IMAGES_ARE_ON'] : $user->lang['IMAGES_ARE_OFF'],
  413. 'FLASH_STATUS' => ($flash_status) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'],
  414. 'SMILIES_STATUS' => ($smilies_status) ? $user->lang['SMILIES_ARE_ON'] : $user->lang['SMILIES_ARE_OFF'],
  415. 'URL_STATUS' => ($bbcode_status && $url_status) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'],
  416. 'S_BBCODE_ALLOWED' => $bbcode_status,
  417. 'S_SMILIES_ALLOWED' => $smilies_status,
  418. 'S_LINKS_ALLOWED' => $url_status,
  419. 'S_BBCODE_IMG' => $img_status,
  420. 'S_BBCODE_URL' => $url_status,
  421. 'S_BBCODE_FLASH' => $flash_status,
  422. 'S_BBCODE_QUOTE' => $quote_status,
  423. 'L_COMMENT_LENGTH' => sprintf($user->lang['COMMENT_LENGTH'], phpbb_gallery_config::get('comment_length')),
  424. ));
  425. if (phpbb_gallery_misc::display_captcha('comment'))
  426. {
  427. // Get the captcha instance
  428. phpbb_gallery_url::_include('captcha/captcha_factory', 'phpbb');
  429. $captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
  430. $captcha->init(CONFIRM_POST);
  431. $template->assign_vars(array(
  432. 'S_CONFIRM_CODE' => true,
  433. 'CAPTCHA_TEMPLATE' => $captcha->get_template(),
  434. ));
  435. }
  436. // Different link, when we rate and dont comment
  437. if (!$s_hide_comment_input)
  438. {
  439. $template->assign_var('S_COMMENT_ACTION', phpbb_gallery_url::append_sid('posting', "album_id=$album_id&amp;image_id=$image_id&amp;mode=comment&amp;submode=add"));
  440. }
  441. }
  442. /**
  443. * Listing comment
  444. */
  445. if ((phpbb_gallery_config::get('allow_comments') && phpbb_gallery::$auth->acl_check('c_read', $album_id, $album_data['album_user_id'])) && (time() > ($album_data['contest_start'] + $album_data['contest_end'])))
  446. {
  447. $user->add_lang('viewtopic');
  448. $start = request_var('start', 0);
  449. $sort_order = (request_var('sort_order', 'ASC') == 'ASC') ? 'ASC' : 'DESC';
  450. $template->assign_vars(array(
  451. 'S_ALLOWED_READ_COMMENTS' => true,
  452. 'IMAGE_COMMENTS' => $image_data['image_comments'],
  453. 'SORT_ASC' => ($sort_order == 'ASC') ? true : false,
  454. ));
  455. if ($image_data['image_comments'] > 0)
  456. {
  457. if (!class_exists('bbcode'))
  458. {
  459. phpbb_gallery_url::_include('bbcode', 'phpbb');
  460. }
  461. $bbcode = new bbcode();
  462. $comments = $users = $user_cache = array();
  463. $users[] = $image_data['image_user_id'];
  464. $sql = 'SELECT *
  465. FROM ' . GALLERY_COMMENTS_TABLE . '
  466. WHERE comment_image_id = ' . $image_id . '
  467. ORDER BY comment_id ' . $sort_order;
  468. $result = $db->sql_query_limit($sql, $config['posts_per_page'], $start);
  469. while ($row = $db->sql_fetchrow($result))
  470. {
  471. $comments[] = $row;
  472. $users[] = $row['comment_user_id'];
  473. if ($row['comment_edit_count'] > 0)
  474. {
  475. $users[] = $row['comment_edit_user_id'];
  476. }
  477. }
  478. $db->sql_freeresult($result);
  479. $users = array_unique($users);
  480. $sql = $db->sql_build_query('SELECT', array(
  481. 'SELECT' => 'u.*, gu.personal_album_id, gu.user_images',
  482. 'FROM' => array(USERS_TABLE => 'u'),
  483. 'LEFT_JOIN' => array(
  484. array(
  485. 'FROM' => array(GALLERY_USERS_TABLE => 'gu'),
  486. 'ON' => 'gu.user_id = u.user_id'
  487. ),
  488. ),
  489. 'WHERE' => $db->sql_in_set('u.user_id', $users),
  490. ));
  491. $result = $db->sql_query($sql);
  492. while ($row = $db->sql_fetchrow($result))
  493. {
  494. phpbb_gallery_user::add_user_to_user_cache($user_cache, $row);
  495. }
  496. $db->sql_freeresult($result);
  497. if ($config['load_onlinetrack'] && sizeof($users))
  498. {
  499. // Load online-information
  500. $sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline
  501. FROM ' . SESSIONS_TABLE . '
  502. WHERE ' . $db->sql_in_set('session_user_id', $users) . '
  503. GROUP BY session_user_id';
  504. $result = $db->sql_query($sql);
  505. $update_time = $config['load_online_time'] * 60;
  506. while ($row = $db->sql_fetchrow($result))
  507. {
  508. $user_cache[$row['session_user_id']]['online'] = (time() - $update_time < $row['online_time'] && (($row['viewonline']) || $auth->acl_get('u_viewonline'))) ? true : false;
  509. }
  510. $db->sql_freeresult($result);
  511. }
  512. foreach ($comments as $row)
  513. {
  514. $edit_info = '';
  515. if ($row['comment_edit_count'] > 0)
  516. {
  517. $edit_info = ($row['comment_edit_count'] == 1) ? $user->lang['EDITED_TIME_TOTAL'] : $user->lang['EDITED_TIMES_TOTAL'];
  518. $edit_info = sprintf($edit_info, get_username_string('full', $user_cache[$row['comment_edit_user_id']]['user_id'], $user_cache[$row['comment_edit_user_id']]['username'], $user_cache[$row['comment_edit_user_id']]['user_colour']), $user->format_date($row['comment_edit_time'], false, true), $row['comment_edit_count']);
  519. }
  520. $user_id = $row['comment_user_id'];
  521. if ($user_cache[$user_id]['sig'] && empty($user_cache[$user_id]['sig_parsed']))
  522. {
  523. $user_cache[$user_id]['sig'] = censor_text($user_cache[$user_id]['sig']);
  524. if ($user_cache[$user_id]['sig_bbcode_bitfield'])
  525. {
  526. $bbcode->bbcode_second_pass($user_cache[$user_id]['sig'], $user_cache[$user_id]['sig_bbcode_uid'], $user_cache[$user_id]['sig_bbcode_bitfield']);
  527. }
  528. $user_cache[$user_id]['sig'] = bbcode_nl2br($user_cache[$user_id]['sig']);
  529. $user_cache[$user_id]['sig'] = smiley_text($user_cache[$user_id]['sig']);
  530. $user_cache[$user_id]['sig_parsed'] = true;
  531. }
  532. $template->assign_block_vars('commentrow', array(
  533. 'U_COMMENT' => phpbb_gallery_url::append_sid('image_page', "album_id=$album_id&amp;image_id=$image_id&amp;start=$start&amp;sort_order=$sort_order") . '#' . $row['comment_id'],
  534. 'COMMENT_ID' => $row['comment_id'],
  535. 'TIME' => $user->format_date($row['comment_time']),
  536. 'TEXT' => generate_text_for_display($row['comment'], $row['comment_uid'], $row['comment_bitfield'], 7),
  537. 'EDIT_INFO' => $edit_info,
  538. 'U_DELETE' => (phpbb_gallery::$auth->acl_check('m_comments', $album_id, $album_data['album_user_id']) || (phpbb_gallery::$auth->acl_check('c_delete', $album_id, $album_data['album_user_id']) && ($row['comment_user_id'] == $user->data['user_id']) && $user->data['is_registered'])) ? phpbb_gallery_url::append_sid('posting', "album_id=$album_id&amp;image_id=$image_id&amp;mode=comment&amp;submode=delete&amp;comment_id=" . $row['comment_id']) : '',
  539. 'U_EDIT' => (phpbb_gallery::$auth->acl_check('m_comments', $album_id, $album_data['album_user_id']) || (phpbb_gallery::$auth->acl_check('c_edit', $album_id, $album_data['album_user_id']) && ($row['comment_user_id'] == $user->data['user_id']) && $user->data['is_registered'])) ? phpbb_gallery_url::append_sid('posting', "album_id=$album_id&amp;image_id=$image_id&amp;mode=comment&amp;submode=edit&amp;comment_id=" . $row['comment_id']) : '',
  540. 'U_INFO' => ($auth->acl_get('a_')) ? phpbb_gallery_url::append_sid('mcp', 'mode=whois&amp;ip=' . $row['comment_user_ip']) : '',
  541. 'POST_AUTHOR_FULL' => get_username_string('full', $user_id, $row['comment_username'], $user_cache[$user_id]['user_colour']),
  542. 'POST_AUTHOR_COLOUR' => get_username_string('colour', $user_id, $row['comment_username'], $user_cache[$user_id]['user_colour']),
  543. 'POST_AUTHOR' => get_username_string('username', $user_id, $row['comment_username'], $user_cache[$user_id]['user_colour']),
  544. 'U_POST_AUTHOR' => get_username_string('profile', $user_id, $row['comment_username'], $user_cache[$user_id]['user_colour']),
  545. 'SIGNATURE' => $user_cache[$user_id]['sig'],
  546. 'RANK_TITLE' => $user_cache[$user_id]['rank_title'],
  547. 'RANK_IMG' => $user_cache[$user_id]['rank_image'],
  548. 'RANK_IMG_SRC' => $user_cache[$user_id]['rank_image_src'],
  549. 'POSTER_JOINED' => $user_cache[$user_id]['joined'],
  550. 'POSTER_POSTS' => $user_cache[$user_id]['posts'],
  551. 'POSTER_FROM' => $user_cache[$user_id]['from'],
  552. 'POSTER_AVATAR' => $user_cache[$user_id]['avatar'],
  553. 'POSTER_WARNINGS' => $user_cache[$user_id]['warnings'],
  554. 'POSTER_AGE' => $user_cache[$user_id]['age'],
  555. 'ICQ_STATUS_IMG' => $user_cache[$user_id]['icq_status_img'],
  556. 'ONLINE_IMG' => ($user_id == ANONYMOUS || !$config['load_onlinetrack']) ? '' : (($user_cache[$user_id]['online']) ? $user->img('icon_user_online', 'ONLINE') : $user->img('icon_user_offline', 'OFFLINE')),
  557. 'S_ONLINE' => ($user_id == ANONYMOUS || !$config['load_onlinetrack']) ? false : (($user_cache[$user_id]['online']) ? true : false),
  558. 'U_PROFILE' => $user_cache[$user_id]['profile'],
  559. 'U_SEARCH' => $user_cache[$user_id]['search'],
  560. 'U_PM' => ($user_id != ANONYMOUS && $config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($user_cache[$user_id]['allow_pm'] || $auth->acl_gets('a_', 'm_'))) ? phpbb_gallery_url::append_sid('phpbb', 'ucp', 'i=pm&amp;mode=compose&amp;u=' . $user_id) : '',
  561. 'U_EMAIL' => $user_cache[$user_id]['email'],
  562. 'U_WWW' => $user_cache[$user_id]['www'],
  563. 'U_ICQ' => $user_cache[$user_id]['icq'],
  564. 'U_AIM' => $user_cache[$user_id]['aim'],
  565. 'U_MSN' => $user_cache[$user_id]['msn'],
  566. 'U_YIM' => $user_cache[$user_id]['yim'],
  567. 'U_JABBER' => $user_cache[$user_id]['jabber'],
  568. 'U_GALLERY' => $user_cache[$user_id]['gallery_album'],
  569. 'GALLERY_IMAGES' => $user_cache[$user_id]['gallery_images'],
  570. 'U_GALLERY_SEARCH' => $user_cache[$user_id]['gallery_search'],
  571. ));
  572. }
  573. $db->sql_freeresult($result);
  574. $template->assign_vars(array(
  575. 'DELETE_IMG' => $user->img('icon_post_delete', 'DELETE_COMMENT'),
  576. 'EDIT_IMG' => $user->img('icon_post_edit', 'EDIT_COMMENT'),
  577. 'INFO_IMG' => $user->img('icon_post_info', 'IP'),
  578. 'MINI_POST_IMG' => $user->img('icon_post_target_unread', 'COMMENT'),
  579. 'PAGE_NUMBER' => sprintf($user->lang['PAGE_OF'], (floor($start / $config['posts_per_page']) + 1), ceil($image_data['image_comments'] / $config['posts_per_page'])),
  580. 'PAGINATION' => generate_pagination(phpbb_gallery_url::append_sid('image_page', "album_id=$album_id&amp;image_id=$image_id&amp;sort_order=$sort_order"), $image_data['image_comments'], $config['posts_per_page'], $start),
  581. ));
  582. }
  583. }
  584. // Get the data of the image-uploader, if we don't have it from the comments anyway.
  585. if (!isset($user_cache[$image_data['image_user_id']]))
  586. {
  587. $sql = $db->sql_build_query('SELECT', array(
  588. 'SELECT' => 'u.*, gu.personal_album_id, gu.user_images',
  589. 'FROM' => array(USERS_TABLE => 'u'),
  590. 'LEFT_JOIN' => array(
  591. array(
  592. 'FROM' => array(GALLERY_USERS_TABLE => 'gu'),
  593. 'ON' => 'gu.user_id = u.user_id'
  594. ),
  595. ),
  596. 'WHERE' => 'u.user_id = ' . $image_data['image_user_id'],
  597. ));
  598. $result = $db->sql_query($sql);
  599. $user_cache = array();
  600. while ($row = $db->sql_fetchrow($result))
  601. {
  602. phpbb_gallery_user::add_user_to_user_cache($user_cache, $row);
  603. }
  604. $db->sql_freeresult($result);
  605. }
  606. if (phpbb_gallery::$auth->acl_check('m_status', $album_id, $album_data['album_user_id']) || ($image_data['image_contest'] != phpbb_gallery_image::IN_CONTEST))
  607. {
  608. $user_cache[$user_id]['username'] = ($image_data['image_username']) ? $image_data['image_username'] : $user->lang['GUEST'];
  609. $template->assign_vars(array(
  610. 'POSTER_FULL' => get_username_string('full', $user_id, $user_cache[$user_id]['username'], $user_cache[$user_id]['user_colour']),
  611. 'POSTER_COLOUR' => get_username_string('colour', $user_id, $user_cache[$user_id]['username'], $user_cache[$user_id]['user_colour']),
  612. 'POSTER_USERNAME' => get_username_string('username', $user_id, $user_cache[$user_id]['username'], $user_cache[$user_id]['user_colour']),
  613. 'U_POSTER' => get_username_string('profile', $user_id, $user_cache[$user_id]['username'], $user_cache[$user_id]['user_colour']),
  614. 'POSTER_SIGNATURE' => $user_cache[$user_id]['sig'],
  615. 'POSTER_RANK_TITLE' => $user_cache[$user_id]['rank_title'],
  616. 'POSTER_RANK_IMG' => $user_cache[$user_id]['rank_image'],
  617. 'POSTER_RANK_IMG_SRC' => $user_cache[$user_id]['rank_image_src'],
  618. 'POSTER_JOINED' => $user_cache[$user_id]['joined'],
  619. 'POSTER_POSTS' => $user_cache[$user_id]['posts'],
  620. 'POSTER_FROM' => $user_cache[$user_id]['from'],
  621. 'POSTER_AVATAR' => $user_cache[$user_id]['avatar'],
  622. 'POSTER_WARNINGS' => $user_cache[$user_id]['warnings'],
  623. 'POSTER_AGE' => $user_cache[$user_id]['age'],
  624. 'POSTER_ICQ_STATUS_IMG' => $user_cache[$user_id]['icq_status_img'],
  625. 'POSTER_ONLINE_IMG' => ($user_id == ANONYMOUS || !$config['load_onlinetrack']) ? '' : (($user_cache[$user_id]['online']) ? $user->img('icon_user_online', 'ONLINE') : $user->img('icon_user_offline', 'OFFLINE')),
  626. 'S_POSTER_ONLINE' => ($user_id == ANONYMOUS || !$config['load_onlinetrack']) ? false : (($user_cache[$user_id]['online']) ? true : false),
  627. 'U_POSTER_PROFILE' => $user_cache[$user_id]['profile'],
  628. 'U_POSTER_SEARCH' => $user_cache[$user_id]['search'],
  629. 'U_POSTER_PM' => ($user_id != ANONYMOUS && $config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($user_cache[$user_id]['allow_pm'] || $auth->acl_gets('a_', 'm_'))) ? phpbb_gallery_url::append_sid('phpbb', 'ucp', 'i=pm&amp;mode=compose&amp;u=' . $user_id) : '',
  630. 'U_POSTER_EMAIL' => $user_cache[$user_id]['email'],
  631. 'U_POSTER_WWW' => $user_cache[$user_id]['www'],
  632. 'U_POSTER_ICQ' => $user_cache[$user_id]['icq'],
  633. 'U_POSTER_AIM' => $user_cache[$user_id]['aim'],
  634. 'U_POSTER_MSN' => $user_cache[$user_id]['msn'],
  635. 'U_POSTER_YIM' => $user_cache[$user_id]['yim'],
  636. 'U_POSTER_JABBER' => $user_cache[$user_id]['jabber'],
  637. 'U_POSTER_GALLERY' => $user_cache[$user_id]['gallery_album'],
  638. 'POSTER_GALLERY_IMAGES' => $user_cache[$user_id]['gallery_images'],
  639. 'U_POSTER_GALLERY_SEARCH' => $user_cache[$user_id]['gallery_search'],
  640. ));
  641. }
  642. else
  643. {
  644. $template->assign_vars(array(
  645. 'POSTER_FULL' => sprintf($user->lang['CONTEST_USERNAME_LONG'], $user->format_date(($album_data['contest_start'] + $album_data['contest_end']), false, true)),
  646. ));
  647. }
  648. $template->assign_vars(array(
  649. 'PROFILE_IMG' => $user->img('icon_user_profile', 'READ_PROFILE'),
  650. 'SEARCH_IMG' => $user->img('icon_user_search', 'SEARCH_USER_POSTS'),
  651. 'PM_IMG' => $user->img('icon_contact_pm', 'SEND_PRIVATE_MESSAGE'),
  652. 'EMAIL_IMG' => $user->img('icon_contact_email', 'SEND_EMAIL'),
  653. 'WWW_IMG' => $user->img('icon_contact_www', 'VISIT_WEBSITE'),
  654. 'ICQ_IMG' => $user->img('icon_contact_icq', 'ICQ'),
  655. 'AIM_IMG' => $user->img('icon_contact_aim', 'AIM'),
  656. 'MSN_IMG' => $user->img('icon_contact_msnm', 'MSNM'),
  657. 'YIM_IMG' => $user->img('icon_contact_yahoo', 'YIM'),
  658. 'JABBER_IMG' => $user->img('icon_contact_jabber', 'JABBER') ,
  659. 'GALLERY_IMG' => $user->img('icon_contact_gallery', 'PERSONAL_ALBUM'),
  660. ));
  661. page_header($user->lang['VIEW_IMAGE'] . ' - ' . $image_data['image_name'], false);
  662. $template->set_filenames(array(
  663. 'body' => 'gallery/viewimage_body.html')
  664. );
  665. page_footer();
  666. ?>