PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/tfsbox_shouts_view.class.php

http://tfsbox.googlecode.com/
PHP | 331 lines | 275 code | 54 blank | 2 comment | 74 complexity | 0ddd3dc8149edeaac29c69094e4c8b60 MD5 | raw file
  1. <?php
  2. require_once "tfsbox_abstract_view.class.php";
  3. class TFsBOXShoutsView extends TFsBOXAbstractShoutView
  4. {
  5. function __construct()
  6. {
  7. }
  8. protected function renderPagination()
  9. {
  10. if ($count = TFsBOX::$Database->numOfShouts()) // Avoids zero
  11. {
  12. echo "<div id=\"tfsbox_pagination\">\n";
  13. $limit = (int) TFsBOX::$Config->value("shouts_per_page", 10);
  14. $total = $count / $limit;
  15. $cur_page = (int) TFsBOX::$Session->currentShoutPage();
  16. if (!$cur_page)
  17. $cur_page = 1;
  18. $page_prefix = $_SERVER['SCRIPT_NAME'] ."/tfsbox/page/";
  19. if ($cur_page > 1)
  20. echo "<a href=\"". $page_prefix . ($cur_page - 1) ."\">&lt;</a>\n";
  21. for ($int = 0; $int < $total; $int++)
  22. {
  23. if ($cur_page != ($int + 1))
  24. echo "<a href=\"". $page_prefix . ($int + 1) ."\">". ($int + 1) ."</a>\n";
  25. else
  26. echo "<b>". ($int + 1) ."</b>\n";
  27. }
  28. if ($cur_page < $total)
  29. echo "<a href=\"". $page_prefix . ($cur_page + 1) ."\">&gt;</a>\n";
  30. echo "</div>\n";
  31. }
  32. }
  33. static function parseSmilies($shout)
  34. {
  35. foreach (TFsBOX::$Database->smileyBbcodes() as $key => $value)
  36. {
  37. if ($key = TFsBOX::$Database->smiley($key))
  38. $shout = preg_replace("#". $value ."#i",
  39. "<img src=\"". TFsBOXSession::urlRoot() ."/". TFsBOX::$Config->value("smiley_pack", "images/smileys/trillian") ."/". $key ."\" style=\"vertical-align: middle;\" alt=\"$key\"/>",
  40. $shout);
  41. }
  42. return $shout;
  43. }
  44. function renderShoutForm()
  45. {
  46. echo "<form id=\"tfsbox_shoutform\" action=\"". $_SERVER['SCRIPT_NAME'] ."\" method=\"post\" onsubmit=\"tfsbox_add_shout('". $_SERVER['SCRIPT_NAME'].'/tfsbox/shouts' ."'); return false;\">\n";
  47. echo "<table cellspacing=\"3\" cellpadding=\"3\" style=\"border: 0; width: 100%;\">\n";
  48. echo "<tr>\n";
  49. echo "<td><b style=\"display: block;\">Name:</b></td>\n";
  50. if (!TFsBOX::$Session->hasUsername())
  51. echo "<td id=\"tfsbox_name_field\"><input name=\"tfsbox_name\" class=\"tfsbox_textfield\" title=\"Only letters, numbers and underscores allowed for name. Name must start with a letter.\" type=\"text\"/></td>\n";
  52. else
  53. echo "<td id=\"tfsbox_name_field\"><b>". TFsBOX::$Session->username() ."</b><input type=\"hidden\" name=\"tfsbox_name\" value=\"". TFsBOX::$Session->username() ."\"/></td>\n";
  54. echo "<td valign=\"top\" rowspan=\"4\" style=\"text-align: center; width: 36px;\">\n";
  55. echo "<div class=\"button\" title=\"HTML Tags\">A\n";
  56. $this->renderTextOptions();
  57. echo "</div>\n";
  58. echo "<div class=\"button\" style=\"line-height: 0;\" title=\"Smilies\">";
  59. echo "<img src=\"". TFsBOXSession::urlRoot() ."/". TFsBOX::$Config->value("smiley_pack", "images/smileys/trillian") ."/". TFsBOX::$Database->smiley("smile") ."\" alt=\"\"/>\n";
  60. $this->renderSmilies();
  61. echo "</div>\n";
  62. echo "</td>\n";
  63. echo "</tr>\n";
  64. echo "<tr>\n";
  65. echo "<td><b style=\"display: block;\">Site:</b></td>\n";
  66. if (!TFsBOX::$Session->hasUserSite())
  67. {
  68. if (!TFsBOX::$Session->loggedIn())
  69. echo "<td id=\"tfsbox_site_field\"><input name=\"tfsbox_site\" class=\"tfsbox_textfield\" title=\"URL must start with http:// and end with / and cannot contain port numbers or sub-directories.\" type=\"text\" value=\"http://\"/></td>";
  70. else
  71. echo "<td id=\"tfsbox_site_field\"><b>". TFsBOX::$Session->userSite() ."</b><input type=\"hidden\" name=\"tfsbox_site\" value=\"". TFsBOX::$Session->userSite() ."\"/></td>\n";
  72. }
  73. else
  74. echo "<td id=\"tfsbox_site_field\"><b>". TFsBOX::$Session->userSite() ."</b><input type=\"hidden\" name=\"tfsbox_site\" value=\"". TFsBOX::$Session->userSite() ."\"/></td>\n";
  75. echo "</tr>\n";
  76. echo "<tr>\n";
  77. echo "<td><b style=\"display: block;\">Shout:</b></td>\n";
  78. echo "<td><input name=\"tfsbox_shout\" class=\"tfsbox_textfield\" type=\"text\"/></td>";
  79. echo "</tr>\n";
  80. echo "<tr><td></td>";
  81. echo "<td style=\"text-align: center;\">";
  82. echo "<input type=\"reset\" value=\"Clear\"/>\n";
  83. echo "<input type=\"submit\" value=\"Shout\"/>";
  84. echo "</td></tr>\n";
  85. echo "</table>\n";
  86. echo "</form>\n";
  87. }
  88. static function renderShout($shout)
  89. {
  90. $options = false;
  91. $sep = ":";
  92. $r_class = ($shout->report
  93. && TFsBOX::$Session->userRanking() != TFsBOXSession::REGULAR)
  94. ? " class=\"tfsbox_reported\"" : "";
  95. $me = "";
  96. if (strlen($shout->shout) > 3)
  97. {
  98. $me = $shout->shout[0] .
  99. $shout->shout[1] .
  100. $shout->shout[2] .
  101. $shout->shout[3];
  102. }
  103. if ($me == "/me ")
  104. {
  105. $sep = "";
  106. $shout->shout = str_replace("/me ", "", $shout->shout);
  107. }
  108. if (TFsBOX::$Database->isUrlBanned($shout->site))
  109. $shout->site = TFsBOX_SITE;
  110. echo "\t<div$r_class";
  111. if ($me == "/me ")
  112. echo " style=\"font-weight: bold;\"";
  113. echo ">\n";
  114. if ($me == "/me ")
  115. echo "* ";
  116. echo "\t<b><a rel=\"nofollow\" href=\"". $shout->site ."\">". $shout->name ."</a>$sep</b>\n";
  117. echo "\t". self::parseSmilies($shout->shout) ."\n";
  118. echo "\t<div class=\"tfsbox_shout_time\">". date('M d, Y / g:i:s A T', $shout->date) ."</div>\n";
  119. echo "\t\t<div class=\"tfsbox_shout_options\">\n";
  120. // Flatfile
  121. if (!TFsBOX::$Database->databaseMode()
  122. && strtolower($shout->name) == strtolower(TFsBOX::USERNAME))
  123. $shout->ranking = TFsBOXSession::ADMIN;
  124. // Banned users need not interact with the system
  125. if (!TFsBOX::$Database->isIpBanned(TFsBOX::$Session->ip()))
  126. {
  127. if (TFsBOX::$Session->userRanking() != TFsBOXSession::REGULAR)
  128. {
  129. $options = true;
  130. $cp = (defined("TFsBOX_CONTROL_PANEL")) ? "/cpanel" : "";
  131. if ($shout->ranking == TFsBOXSession::REGULAR
  132. || TFsBOX::$Session->userRanking() == TFsBOXSession::ADMIN)
  133. {
  134. if ($shout->ranking != TFsBOXSession::ADMIN
  135. && !TFsBOX::$Database->isIpBanned($shout->ip))
  136. TFsBOXAbstractView::renderButton("Ban IP", $_SERVER['SCRIPT_NAME']."/tfsbox$cp/ban/ip/".ip2long($shout->ip), TFsBOXSession::urlRoot()."/images/icons/ban-ip.png", NULL, 2);
  137. if (preg_match(TFsBOX::SiteRegex, $shout->site)
  138. && $shout->site != TFsBOX_SITE
  139. && !TFsBOX::$Database->isUrlBanned($shout->site))
  140. TFsBOXAbstractView::renderButton("Ban URL", $_SERVER['SCRIPT_NAME']."/tfsbox$cp/ban/url?".rawurlencode($shout->site), TFsBOXSession::urlRoot() ."/images/icons/ban-url.png", NULL, 2);
  141. }
  142. TFsBOXAbstractView::renderButton("Edit Shout", "javascript: edit_shout(".$shout->id.", '".$_SERVER['SCRIPT_NAME']."/tfsbox$cp/shouts/edit');", TFsBOXSession::urlRoot()."/images/icons/document-edit.png", NULL, 2);
  143. TFsBOXAbstractView::renderButton("Delete Shout", $_SERVER['SCRIPT_NAME']."/tfsbox$cp/shouts/delete/".$shout->id, TFsBOXSession::urlRoot() ."/images/icons/edit-delete.png", NULL, 2);
  144. if ($shout->report)
  145. TFsBOXAbstractView::renderButton("Clear Report", $_SERVER['SCRIPT_NAME']."/tfsbox$cp/reports/clear/".$shout->id, TFsBOXSession::urlRoot() ."/images/icons/clear-history.png", NULL, 2);
  146. }
  147. else if (!$shout->report
  148. && $shout->ranking == TFsBOXSession::REGULAR
  149. && $shout->name != TFsBOX::$Session->username())
  150. {
  151. $options = true;
  152. TFsBOXAbstractView::renderButton("Report Shout", $_SERVER['SCRIPT_NAME']."/tfsbox/report/".$shout->id, TFsBOXSession::urlRoot() ."/images/icons/operator.png", NULL, 2);
  153. }
  154. if (TFsBOX::$Database->databaseMode()
  155. && TFsBOX::$Session->loggedIn()
  156. && $shout->name != TFsBOX::$Session->username()
  157. && !in_array($shout->name, TFsBOX::$Session->userSubscriptions())
  158. && !defined("TFsBOX_CONTROL_PANEL"))
  159. {
  160. $options = true;
  161. TFsBOXAbstractView::renderButton("Subcribe to ".$shout->name, $_SERVER['SCRIPT_NAME']."/tfsbox$cp/subscribe/".$shout->name, TFsBOXSession::urlRoot() ."/images/icons/subscribe.png", NULL, 2);
  162. }
  163. }
  164. if (!$options)
  165. echo "<span class=\"tfsbox_caption\">There are no options available for this shout.</span>\n";
  166. echo "\t\t</div>\n";
  167. echo "\t</div>\n";
  168. }
  169. function renderShouts($show_header = true, $show_pagination = true, $show_issues = true)
  170. {
  171. if (TFsBOX::$Session->hasErrors()
  172. && TFsBOX::pathInfo() == "/tfsbox/shouts"
  173. && $show_issues)
  174. {
  175. echo "<errors>\n";
  176. foreach (TFsBOX::$Session->errors() as $error)
  177. {
  178. echo "<error>$error</error>\n";
  179. }
  180. echo "</errors>\n";
  181. }
  182. else
  183. {
  184. if (TFsBOX::$Session->hasNotices()
  185. && TFsBOX::pathInfo() == "/tfsbox/shouts"
  186. && $show_issues)
  187. {
  188. echo "<notices>\n";
  189. foreach (TFsBOX::$Session->notices() as $notice)
  190. {
  191. echo "<notice>$notice</notice>\n";
  192. }
  193. echo "</notices>\n";
  194. }
  195. if (TFsBOX::pathInfo() == "/tfsbox/shouts")
  196. echo "<div id=\"tfsbox_content\">";
  197. if (empty($_SERVER['QUERY_STRING']) && $show_pagination)
  198. $this->renderPagination();
  199. echo "<div id=\"tfsbox_shouts\">\n";
  200. if ($show_header)
  201. echo "<h2>Shouts</h2>\n";
  202. $arr = TFsBOX::$Database->shouts();
  203. if (!TFsBOX::$Database->databaseMode())
  204. {
  205. $arr = array_splice(array_reverse($arr),
  206. (TFsBOX::$Session->currentShoutPage()-1) * (int) TFsBOX::$Config->value("shouts_per_page", 10),
  207. (int) TFsBOX::$Config->value("shouts_per_page", 10));
  208. }
  209. if (empty($arr))
  210. {
  211. if (!isset($_SERVER['QUERY_STRING']))
  212. {
  213. $li = (!TFsBOX::$Database->allowedToShout()) ? "<br/>\n(You must be logged in to shout.)" : "";
  214. echo "<div style=\"text-align: center;\">No one has shouted. Be the first to shout!$li</div>\n";
  215. }
  216. else echo "<div style=\"text-align: center;\">No shouts to display.</div>\n";
  217. }
  218. else
  219. {
  220. $class = get_class(TFsBOX::$View);
  221. foreach ($arr as $shout)
  222. call_user_func(array($class, 'renderShout'), $shout);
  223. }
  224. echo "</div>\n";
  225. if (TFsBOX::pathInfo() == "/tfsbox/shouts")
  226. echo "</div>\n";
  227. }
  228. }
  229. protected function renderSmilies()
  230. {
  231. echo "<div id=\"tfsbox_smilies\" class=\"tfsbox_menu\">\n";
  232. echo "<img src=\"". TFsBOXSession::urlRoot() ."/images/icons/detach.png\" onclick=\"detach(this, 'tfsbox_smilies')\" align=\"right\" style=\"cursor: pointer;\" alt=\"Detach\"/>\n";
  233. echo "<img src=\"". TFsBOXSession::urlRoot() ."/images/icons/attach.png\" onclick=\"attach(this, 'tfsbox_smilies')\" align=\"right\" style=\"cursor: pointer; display: none;\" alt=\"Attach\"/>\n";
  234. echo "<h3>Smilies</h3>\n";
  235. echo "<div style=\"overflow: auto; height: 200px;\">\n";
  236. foreach (TFsBOX::$Database->smilies() as $key => $value)
  237. {
  238. echo "<div>";
  239. $bbcode = preg_split("#(?<!\\\)\|#", TFsBOX::$Database->smileyBbcodes($key), -1, PREG_SPLIT_NO_EMPTY);
  240. $bbcode = array_map("stripslashes", $bbcode);
  241. echo "<img onclick=\"tfsbox_insert_smiley(' ". $bbcode[0] ." ')\" style=\"cursor: pointer;\" src=\"". TFsBOXSession::urlRoot() ."/". TFsBOX::$Config->value("smiley_pack", "images/smileys/trillian") ."/$value\" alt=\"$key\"/> ";
  242. echo "<tt>". implode("</tt> or <tt>", $bbcode) ."</tt>";
  243. echo "</div>\n";
  244. }
  245. echo "</div>\n";
  246. echo "</div>\n";
  247. }
  248. protected function renderTextOptions()
  249. {
  250. $h = "h4";
  251. echo "<div id=\"tfsbox_text_options\" class=\"tfsbox_menu\">\n";
  252. echo "<img src=\"". TFsBOXSession::urlRoot() ."/images/icons/detach.png\" onclick=\"detach(this, 'tfsbox_text_options')\" align=\"right\" style=\"cursor: pointer;\" alt=\"Detach\"/>\n";
  253. echo "<img src=\"". TFsBOXSession::urlRoot() ."/images/icons/attach.png\" onclick=\"attach(this, 'tfsbox_text_options')\" align=\"right\" style=\"cursor: pointer; display: none;\" alt=\"Attach\"/>\n";
  254. echo "<h3>HTML Tags</h3>\n";
  255. echo "<div style=\"overflow: auto; height: 200px;\">\n";
  256. echo "<div><$h>Link:</$h> &lt;a href=\"http://www.example.com/\"&gt;Link&lt;/a&gt;<br/>\n<a href=\"http://www.example.com/\">Link</a></div>\n";
  257. echo "<div><$h>Bold:</$h> &lt;b&gt;bold&lt;/b&gt;<br/>\n<b>bold</b></div>\n";
  258. echo "<div><$h>Italics:</$h> &lt;i&gt;italic&lt;/i&gt;<br/>\n<i>italic</i></div>\n";
  259. echo "<div><$h>Underline:</$h> &lt;u&gt;underline&lt;/u&gt;<br/>\n<u>underline</u></div>\n";
  260. echo "<div><$h>Strike-through:</$h> &lt;s&gt;strike&lt;/s&gt;<br/>\n<s>strike</s></div>";
  261. echo "<div><$h>Subscript:</$h> text&lt;sub&gt;sub&lt;/sub&gt;<br/>\ntext<sub>sub</sub></div>";
  262. echo "<div><$h>Superscript:</$h> text&lt;sub&gt;sup&lt;/sup&gt;<br/>\ntext<sup>sup</sup></div>";
  263. echo "<div><$h>Highlight:</$h> &lt;span style=\"background-color: yellow;\"&gt;text&lt;/span&gt;<br/>\n<span style=\"background-color: yellow;\">text</span></div>\n";
  264. echo "<div><$h>Font family:</$h> &lt;span style=\"font-family: 'Times New Roman';\"&gt;text&lt;/span&gt;<br/>\n<span style=\"font-family: 'Times New Roman';\">text</span></div>\n";
  265. echo "<div><$h>Font color:</$h> &lt;span style=\"color: blue;\"&gt;text&lt;/span&gt;<br/>\n<span style=\"color: blue;\">text</span></div>\n";
  266. if (TFsBOX::$Config->value("allow_images", "no") == "no")
  267. echo "<div><$h>Images are currently disabled.</$h></div>";
  268. else
  269. {
  270. echo "<div><$h>Images:</$h> &lt;img src=\"". TFsBOXSession::urlRoot() ."/". TFsBOX::$Config->value("smiley_pack", "images/smileys/trillian") ."/". TFsBOX::$Database->smiley("smile") ."\" alt=\"\"/&gt;<br/>\n";
  271. echo "<img src=\"". TFsBOXSession::urlRoot() ."/". TFsBOX::$Config->value("smiley_pack", "images/smileys/trillian") ."/". TFsBOX::$Database->smiley("smile") ."\" alt=\"\"/></div>";
  272. }
  273. echo "</div>\n";
  274. echo "</div>\n";
  275. }
  276. }
  277. ?>