A new, object-oriented, better vesion of μForum
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

540 lines
20 KiB

  1. <?php
  2. /**
  3. * @package uForum2
  4. * @file inc/views/MainView.class.php
  5. * @copyright 2007-2015 (c) PioDer
  6. * @link http://www.pioder.pl/
  7. * @license see LICENSE.txt
  8. **/
  9. class MainView extends View
  10. {
  11. private function setDefaults($admin = false)
  12. {
  13. //logged user information
  14. $this->assign('is_logged', $this->getModel('SessionModel')->isLogged());
  15. $this->assign('my_nick', $this->getModel('SessionModel')->getNick());
  16. $this->assign('my_id', $this->getModel('SessionModel')->getID());
  17. $this->assign('my_rank', $this->getModel('SessionModel')->getRank());
  18. $this->assign('actual_time', date('Y-m-d G:i', $_SERVER['REQUEST_TIME']));
  19. //forum prefs
  20. $this->assign('forum_name', $this->getModel('ConfigModel')->getConf('forum_name'));
  21. $this->assign('forum_desc', $this->getModel('ConfigModel')->getConf('forum_desc'));
  22. //navigation
  23. $this->loadModel('NavigationModel');
  24. $this->getModel('NavigationModel')->setForumName($this->getModel('ConfigModel')->getConf('forum_name'));
  25. if ($admin)
  26. $this->getModel('NavigationModel')->addLink('ACP Admin', 'index.php?mode=admin');
  27. }
  28. //widok strony głównej
  29. public function main()
  30. {
  31. $this->setDefaults();
  32. // get categories, forums, forums statistics
  33. $this->loadModel('ForumsModel');
  34. $this->assign('forums_list', $this->getModel('ForumsModel')->getForums());
  35. //get data for bottom statistics
  36. $this->loadModel('StatisticsModel');
  37. $this->assign('posts_count', $this->getModel('StatisticsModel')->getPostsCount());
  38. $this->assign('users_count', $this->getModel('StatisticsModel')->getUsersCount());
  39. $this->assign('last_user', $this->getModel('StatisticsModel')->getLastRegisteredUser());
  40. $this->assign('logged_users_count', $this->getModel('StatisticsModel')->getLoggedUsersCount());
  41. $this->assign('logged_users', $this->getModel('StatisticsModel')->getLoggedUsers());
  42. //nawigacja po witrynie
  43. $this->getModel('NavigationModel')->setSubTitle('Main Page');
  44. $this->getModel('NavigationModel')->addLink('Main Page', 'index.php');
  45. // końcowe rzeczy
  46. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  47. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  48. $this->show('main');
  49. }
  50. public function viewforum()
  51. {
  52. $this->setDefaults();
  53. // get forum info
  54. $f_info = $this->getModel('ForumsModel')->getForum($_GET['id']);
  55. $this->assign('f_name', $f_info['name']);
  56. $this->assign('forum_info', $f_info);
  57. $this->assign('topics_list', $this->getModel('ForumsModel')->getTopics($_GET['id']));
  58. //nawigacja po witrynie
  59. $this->getModel('NavigationModel')->setSubTitle('View forum: '.$f_info['name']);
  60. $this->getModel('NavigationModel')->addLink($f_info['name'], 'index.php?mode=viewforum&amp;id='.$_GET['id']);
  61. // końcowe rzeczy
  62. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  63. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  64. $this->show('viewforum');
  65. }
  66. public function userlist()
  67. {
  68. $this->setDefaults();
  69. $this->loadModel('UsersModel');
  70. $this->assign('users_list', $this->getModel('UsersModel')->getUsers($_POST['sort_type'], $_POST['sort_desc'], $_GET['rank']));
  71. $this->assign('regdate_selected', ($_POST['sort_type'] == 'regdate') ? 'selected="selected"' : '');
  72. $this->assign('lastvisit_selected', ($_POST['sort_type'] == 'lastvisit') ? 'selected="selected"' : '');
  73. $this->assign('username_selected', ($_POST['sort_type'] == 'nick') ? 'selected="selected"' : '');
  74. $this->assign('posts_selected', ($_POST['sort_type'] == 'post_count') ? 'selected="selected"' : '');
  75. $this->assign('desc_checked', ($_POST['sort_desc'] == 'DESC') ? 'checked="checked"' : '');
  76. //nawigacja po witrynie
  77. $this->getModel('NavigationModel')->setSubTitle('Users list');
  78. $this->getModel('NavigationModel')->addLink('Users list', 'index.php?mode=userlist');
  79. // końcowe rzeczy
  80. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  81. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  82. $this->show('userlist');
  83. }
  84. public function viewtopic()
  85. {
  86. $this->setDefaults();
  87. // get forum info
  88. $t_info = $this->getModel('PostsModel')->getTopic($_GET['id']);
  89. $this->assign('topic_info', $t_info);
  90. $this->assign('posts_list', $this->getModel('PostsModel')->getPosts($_GET['id']));
  91. //nawigacja po witrynie
  92. $this->getModel('NavigationModel')->setSubTitle('View topic: '.$t_info['topic_title']);
  93. $this->getModel('NavigationModel')->addLink($t_info['forum_name'], 'index.php?mode=viewforum&amp;id='.$t_info['forum_id']);
  94. $this->getModel('NavigationModel')->addLink($t_info['topic_title'], 'index.php?mode=viewtopic&amp;id='.$_GET['id']);
  95. // końcowe rzeczy
  96. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  97. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  98. $this->show('viewtopic');
  99. }
  100. public function login_form($msg)
  101. {
  102. $this->setDefaults();
  103. $this->assign('nick', $_POST['nick']);
  104. $this->assign('error_msg', $msg);
  105. //nawigacja po witrynie
  106. $this->getModel('NavigationModel')->setSubTitle('Log in');
  107. $this->getModel('NavigationModel')->addLink('Log in', 'index.php?mode=login');
  108. // końcowe rzeczy
  109. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  110. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  111. $this->show('login_form');
  112. }
  113. public function register_form($msg)
  114. {
  115. $this->setDefaults();
  116. $this->assign('nick', $_POST['nick']);
  117. $this->assign('email', $_POST['email']);
  118. $this->assign('error_msg', $msg);
  119. //nawigacja po witrynie
  120. $this->getModel('NavigationModel')->setSubTitle('Register');
  121. $this->getModel('NavigationModel')->addLink('Register', 'index.php?mode=register');
  122. // końcowe rzeczy
  123. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  124. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  125. $this->show('register_form');
  126. }
  127. public function viewprofile()
  128. {
  129. $this->setDefaults();
  130. $this->loadModel('StatisticsModel');
  131. $user_info = $this->getModel('UsersModel')->getUserInformation($_GET['id']);
  132. $this->assign('user_info', $user_info);
  133. $total_posts = $this->getModel('StatisticsModel')->getPostsCount();
  134. $posts_ration = ($total_posts > 0) ? round(100*$user_info['post_count']/$total_posts, 2) : 0;
  135. $this->assign('post_ratio', $total_posts);
  136. $this->assign('logged_id', $this->getModel('SessionModel')->getID());
  137. //nawigacja po witrynie
  138. $this->getModel('NavigationModel')->addLink('Users list', 'index.php?mode=userlist');
  139. $this->getModel('NavigationModel')->setSubTitle('View profile: '.$user_info['nick']);
  140. $this->getModel('NavigationModel')->addLink('Profile: '.$user_info['nick'], 'index.php?mode=viewprofile&amp;id='.$_GET['id']);
  141. // końcowe rzeczy
  142. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  143. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  144. $this->show('viewprofile');
  145. }
  146. public function edprofile_form($msg, $admin = false)
  147. {
  148. $this->setDefaults($admin);
  149. if ($admin)
  150. $user_info = $this->getModel('UsersModel')->getUserInformation($_GET['id']);
  151. else
  152. $user_info = $this->getModel('UsersModel')->getUserInformation($this->getModel('SessionModel')->getID());
  153. $this->assign('nick', $_POST['nick']);
  154. $this->assign('is_admin', $admin);
  155. $this->assign('email', $_POST['email']);
  156. $this->assign('location', $_POST['location']);
  157. $this->assign('signature', $_POST['signature']);
  158. $this->assign('avatar', $user_info['avatar']);
  159. $this->assign('error_msg', $msg);
  160. if ($admin)
  161. {
  162. $this->assign('user_selected', ($_POST['user_rank'] == RANK_USER) ? 'checked="checked"' : '');
  163. $this->assign('mod_selected', ($_POST['user_rank'] == RANK_MOD) ? 'checked="checked"' : '');
  164. $this->assign('admin_selected', ($_POST['user_rank'] == RANK_ADMIN) ? 'checked="checked"' : '');
  165. }
  166. //nawigacja po witrynie
  167. if ($admin)
  168. {
  169. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Edit profile');
  170. $this->getModel('NavigationModel')->addLink('Users list', 'index.php?mode=admin&amp;submode=users');
  171. $this->getModel('NavigationModel')->addLink('Edit user: '.$user_info['nick']);
  172. }
  173. else
  174. {
  175. $this->getModel('NavigationModel')->setSubTitle('Edit profile');
  176. $this->getModel('NavigationModel')->addLink('Edit profile', 'index.php?mode=editprofile');
  177. }
  178. // końcowe rzeczy
  179. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  180. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  181. $this->show('edprofile');
  182. }
  183. public function posting_form($type, $msg='')
  184. {
  185. $this->setDefaults();
  186. $this->assign('error_msg', $msg);
  187. //nawigacja po witrynie
  188. switch ($type)
  189. {
  190. case POSTING_NEWTOPIC:
  191. $forum_info = $this->getModel('ForumsModel')->getForum($_GET['id']);
  192. $this->getModel('NavigationModel')->setSubTitle('New topic');
  193. $this->getModel('NavigationModel')->addLink($forum_info['name'], 'index.php?mode=viewforum&amp;id='.$forum_info['forum_id']);
  194. $this->getModel('NavigationModel')->addLink('New topic', $_SERVER['REQUEST_URI']);
  195. break;
  196. case POSTING_REPLY:
  197. case POSTING_QUOTE:
  198. $topic_info = $this->getModel('PostsModel')->getTopic($_GET['id']);
  199. $this->getModel('NavigationModel')->setSubTitle('Reply');
  200. $this->getModel('NavigationModel')->addLink($topic_info['forum_name'], 'index.php?mode=viewforum&amp;id='.$topic_info['forum_id']);
  201. $this->getModel('NavigationModel')->addLink($topic_info['topic_title'], 'index.php?mode=viewtopic&amp;id='.$topic_info['topic_id']);
  202. $this->getModel('NavigationModel')->addLink('Write a reply', $_SERVER['REQUEST_URI']);
  203. break;
  204. case POSTING_EDIT:
  205. $topic_info = $this->getModel('PostsModel')->getTopic($_GET['id']);
  206. $this->getModel('NavigationModel')->setSubTitle('Edit post');
  207. $this->getModel('NavigationModel')->addLink($topic_info['forum_name'], 'index.php?mode=viewforum&amp;id='.$topic_info['forum_id']);
  208. $this->getModel('NavigationModel')->addLink($topic_info['topic_title'], 'index.php?mode=viewtopic&amp;id='.$topic_info['topic_id']);
  209. $this->getModel('NavigationModel')->addLink('Edit post', $_SERVER['REQUEST_URI']);
  210. break;
  211. case POSTING_EDITTOPIC:
  212. $topic_info = $this->getModel('PostsModel')->getTopic($_GET['id']);
  213. $this->getModel('NavigationModel')->setSubTitle('Edit topic');
  214. $this->getModel('NavigationModel')->addLink($topic_info['forum_name'], 'index.php?mode=viewforum&amp;id='.$topic_info['forum_id']);
  215. $this->getModel('NavigationModel')->addLink($topic_info['topic_title'], 'index.php?mode=viewtopic&amp;id='.$topic_info['topic_id']);
  216. $this->getModel('NavigationModel')->addLink('Edit topic', $_SERVER['REQUEST_URI']);
  217. break;
  218. }
  219. $this->assign('post', $_POST['post']);
  220. if (isset($_POST['preview']))
  221. $this->assign('preview', true);
  222. if ($type == POSTING_NEWTOPIC || $type == POSTING_EDITTOPIC)
  223. $this->assign('topic', $_POST['topic']);
  224. // końcowe rzeczy
  225. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  226. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  227. $this->show('posting');
  228. }
  229. public function move_topic()
  230. {
  231. $this->setDefaults();
  232. $this->loadModel('ForumsModel');
  233. //nawigacja po witrynie
  234. $this->getModel('NavigationModel')->setSubTitle('Move topic');
  235. $this->getModel('NavigationModel')->addLink('Move topic', $_SERVER['REQUEST_URI']);
  236. $this->assign('topic_info', $this->getModel('PostsModel')->getTopic($_GET['id']));
  237. $this->assign('forums_list', $this->getModel('ForumsModel')->getForumsNames());
  238. // końcowe rzeczy
  239. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  240. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  241. $this->show('move_topic');
  242. }
  243. public function forum_message($msg, $url = '', $timeout = 2)
  244. {
  245. $this->setDefaults();
  246. $this->assign('message', $msg);
  247. $this->assign('url', $url);
  248. $this->assign('timeout', $timeout);
  249. //nawigacja po witrynie
  250. $this->getModel('NavigationModel')->setSubTitle('Forum message');
  251. $this->getModel('NavigationModel')->addLink('Forum message', 'index.php');
  252. // końcowe rzeczy
  253. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  254. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  255. $this->show('forum_message');
  256. }
  257. public function confirm_action($msg)
  258. {
  259. $this->setDefaults();
  260. $this->assign('message', $msg);
  261. //nawigacja po witrynie
  262. $this->getModel('NavigationModel')->setSubTitle('Confirm action');
  263. $this->getModel('NavigationModel')->addLink('Confirm action', $_SERVER['REQUEST_URI']);
  264. // końcowe rzeczy
  265. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  266. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  267. $this->show('confirm_action');
  268. }
  269. public function colorRank($username, $rank)
  270. {
  271. if ($rank == RANK_ADMIN)
  272. return '<span class="fadmin">'.$username.'</span>';
  273. if ($rank == RANK_MOD)
  274. return '<span class="fmod">'.$username.'</span>';
  275. return $username;
  276. }
  277. public function getRankLevel($rank)
  278. {
  279. if ($rank == RANK_ADMIN)
  280. return $this->colorRank('Admin', $rank);
  281. if ($rank == RANK_MOD)
  282. return $this->colorRank('Mod', $rank);
  283. return 'User';
  284. }
  285. // ADMIN PANEL -----------------------------------------------------------------
  286. public function admin_main()
  287. {
  288. $this->setDefaults(true);
  289. $this->loadModel('StatisticsModel');
  290. //nawigacja po witrynie
  291. $this->getModel('NavigationModel')->setSubTitle('Main Page');
  292. $this->assign('installation_date', $this->getModel('ConfigModel')->getConf('installation_date'));
  293. $this->assign('topics_total', $this->getModel('StatisticsModel')->getTopicsCount());
  294. $this->assign('posts_total', $this->getModel('StatisticsModel')->getPostsCount());
  295. $this->assign('users_total', $this->getModel('StatisticsModel')->getUsersCount());
  296. $this->assign('script_version', VERSION);
  297. $this->assign('logged_users', $this->getModel('StatisticsModel')->getLoggedUsers());
  298. $this->assign('logged_users_total', $this->getModel('StatisticsModel')->getLoggedUsersCount());
  299. // końcowe rzeczy
  300. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  301. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  302. $this->show('admin/main');
  303. }
  304. public function admin_userlist()
  305. {
  306. $this->setDefaults(true);
  307. $this->loadModel('UsersModel');
  308. $this->assign('users_list', $this->getModel('UsersModel')->getUsers($_POST['sort_type'], $_POST['sort_desc'], $_GET['rank']));
  309. $this->assign('regdate_selected', ($_POST['sort_type'] == 'regdate') ? 'selected="selected"' : '');
  310. $this->assign('lastvisit_selected', ($_POST['sort_type'] == 'lastvisit') ? 'selected="selected"' : '');
  311. $this->assign('username_selected', ($_POST['sort_type'] == 'nick') ? 'selected="selected"' : '');
  312. $this->assign('posts_selected', ($_POST['sort_type'] == 'post_count') ? 'selected="selected"' : '');
  313. $this->assign('desc_checked', ($_POST['sort_desc'] == 'DESC') ? 'checked="checked"' : '');
  314. //nawigacja po witrynie
  315. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Users list');
  316. $this->getModel('NavigationModel')->addLink('Users list');
  317. // końcowe rzeczy
  318. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  319. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  320. $this->show('admin/userlist');
  321. }
  322. public function admin_config($msg)
  323. {
  324. $this->setDefaults(true);
  325. $this->loadModel('UsersModel');
  326. $this->assign('forum_name', $_POST['forum_name']);
  327. $this->assign('forum_desc', $_POST['forum_desc']);
  328. $this->assign('error_msg', $msg);
  329. //nawigacja po witrynie
  330. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Admin config');
  331. $this->getModel('NavigationModel')->addLink('Forum configuration');
  332. // końcowe rzeczy
  333. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  334. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  335. $this->show('admin/config');
  336. }
  337. //widok strony głównej
  338. public function admin_forums()
  339. {
  340. $this->setDefaults(true);
  341. // get categories, forums, forums statistics
  342. $this->loadModel('ForumsModel');
  343. $this->assign('forums_list', $this->getModel('ForumsModel')->getForums());
  344. //nawigacja po witrynie
  345. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Forums list');
  346. $this->getModel('NavigationModel')->addLink('Forums list');
  347. // końcowe rzeczy
  348. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  349. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  350. $this->show('admin/forums');
  351. }
  352. public function admin_cat_form($msg, $m)
  353. {
  354. $this->setDefaults(true);
  355. $this->assign('name', $_POST['name']);
  356. $this->assign('error_msg', $msg);
  357. //nawigacja po witrynie
  358. $this->getModel('NavigationModel')->addLink('Forums list', 'index.php?mode=admin&amp;submode=forums');
  359. if ($m == 'add')
  360. {
  361. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Add category');
  362. $this->getModel('NavigationModel')->addLink('Add category');
  363. $this->assign('cat_form_name', 'Add new category');
  364. }
  365. else
  366. {
  367. $cat_info = $this->getModel('ForumsModel')->getCat($_GET['id']);
  368. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Edit category');
  369. $this->getModel('NavigationModel')->addLink('Edit category: '.$cat_info['name']);
  370. $this->assign('cat_form_name', 'Edit category');
  371. }
  372. // końcowe rzeczy
  373. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  374. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  375. $this->show('admin/cat_form');
  376. }
  377. public function admin_forum_form($msg, $m)
  378. {
  379. $this->setDefaults(true);
  380. $this->assign('name', $_POST['name']);
  381. $this->assign('desc', $_POST['desc']);
  382. $this->assign('category_id', $_POST['category_id']);
  383. $this->assign('lock_selected', ($_POST['locked']) ? 'checked="checked"' : '');
  384. $this->assign('unlock_selected', (!$_POST['locked']) ? 'checked="checked"' : '');
  385. $this->assign('error_msg', $msg);
  386. $this->assign('cats_list', $this->getModel('ForumsModel')->getCats());
  387. //nawigacja po witrynie
  388. $this->getModel('NavigationModel')->addLink('Forums list', 'index.php?mode=admin&amp;submode=forums');
  389. if ($m == 'add')
  390. {
  391. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Add forum');
  392. $this->getModel('NavigationModel')->addLink('Add forum');
  393. $this->assign('forum_form_name', 'Add new forum');
  394. }
  395. else
  396. {
  397. $forum_info = $this->getModel('ForumsModel')->getForum($_GET['id']);
  398. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Edit forum');
  399. $this->getModel('NavigationModel')->addLink('Edit forum'.$forum_info['name']);
  400. $this->assign('forum_form_name', 'Edit forum');
  401. }
  402. // końcowe rzeczy
  403. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  404. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  405. $this->show('admin/forum_form');
  406. }
  407. public function admin_banlist()
  408. {
  409. $this->setDefaults(true);
  410. $this->loadModel('BansModel');
  411. $this->assign('bans_list', $this->getModel('BansModel')->getBans());
  412. //nawigacja po witrynie
  413. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Banlist');
  414. $this->getModel('NavigationModel')->addLink('Banlist');
  415. // końcowe rzeczy
  416. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  417. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  418. $this->show('admin/banlist');
  419. }
  420. public function admin_ban_form($msg)
  421. {
  422. $this->setDefaults(true);
  423. $this->assign('user_id', $_POST['user_id']);
  424. $this->assign('reason', $_POST['reason']);
  425. $this->loadModel('UsersModel');
  426. $this->assign('error_msg', $msg);
  427. $this->assign('users_list', $this->getModel('UsersModel')->getUsersNicks());
  428. //nawigacja po witrynie
  429. $this->getModel('NavigationModel')->addLink('Banlist', 'index.php?mode=admin&amp;submode=banlist');
  430. $this->getModel('NavigationModel')->setSubTitle('ACP &bull; Add ban');
  431. $this->getModel('NavigationModel')->addLink('Add ban');
  432. $this->assign('forum_form_name', 'Add ban');
  433. // końcowe rzeczy
  434. $this->assign('nav', $this->getModel('NavigationModel')->getNav());
  435. $this->assign('meta_title', $this->getModel('NavigationModel')->getTitle());
  436. $this->show('admin/ban_form');
  437. }
  438. }
  439. ?>