system_announcements.lib.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <?php
  2. /*
  3. ==============================================================================
  4. Dokeos - elearning and course management software
  5. Copyright (c) 2004 Dokeos S.A.
  6. Copyright (c) 2003 Ghent University (UGent)
  7. Copyright (c) 2001 Universite catholique de Louvain (UCL)
  8. Copyright (c) 2004 Bart Mollet (HoGent)
  9. For a full list of contributors, see "credits.txt".
  10. The full license can be read in "license.txt".
  11. This program is free software; you can redistribute it and/or
  12. modify it under the terms of the GNU General Public License
  13. as published by the Free Software Foundation; either version 2
  14. of the License, or (at your option) any later version.
  15. See the GNU General Public License for more details.
  16. Contact address: Dokeos, 44 rue des palais, B-1030 Brussels, Belgium
  17. Mail: info@dokeos.com
  18. ==============================================================================
  19. */
  20. define('VISIBLE_GUEST', 1);
  21. define('VISIBLE_STUDENT', 2);
  22. define('VISIBLE_TEACHER', 3);
  23. /**
  24. ==============================================================================
  25. * This is the system announcements library for Dokeos.
  26. *
  27. * @package dokeos.library
  28. ==============================================================================
  29. */
  30. class SystemAnnouncementManager
  31. {
  32. /**
  33. * Displays all announcements
  34. * @param int $visible VISIBLE_GUEST, VISIBLE_STUDENT or VISIBLE_TEACHER
  35. * @param int $id The identifier of the announcement to display
  36. */
  37. function display_announcements($visible, $id = -1)
  38. {
  39. $user_selected_language = api_get_interface_language();
  40. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  41. $sql = "SELECT *, DATE_FORMAT(date_start,'%d-%m-%Y') AS display_date FROM ".$db_table." WHERE (lang='$user_selected_language' OR lang IS NULL) AND ((NOW() BETWEEN date_start AND date_end) OR date_end='0000-00-00') ";
  42. switch ($visible)
  43. {
  44. case VISIBLE_GUEST :
  45. $sql .= " AND visible_guest = 1 ";
  46. break;
  47. case VISIBLE_STUDENT :
  48. $sql .= " AND visible_student = 1 ";
  49. break;
  50. case VISIBLE_TEACHER :
  51. $sql .= " AND visible_teacher = 1 ";
  52. break;
  53. }
  54. $sql .= " ORDER BY date_start DESC LIMIT 0,7";
  55. $announcements = api_sql_query($sql,__FILE__,__LINE__);
  56. if (mysql_num_rows($announcements))
  57. {
  58. $query_string = ereg_replace('announcement=[1-9]+', '', $_SERVER['QUERY_STRING']);
  59. $query_string = ereg_replace('&$', '', $query_string);
  60. $url = api_get_self();
  61. echo '<div class="system_announcements">';
  62. echo '<h3>'.get_lang('SystemAnnouncements').'</h3>';
  63. echo '<table border="0">';
  64. while ($announcement = mysql_fetch_object($announcements))
  65. {
  66. if ($id != $announcement->id)
  67. {
  68. if (strlen($query_string) > 0)
  69. {
  70. $show_url = 'newsList.php#'.$announcement->id;
  71. //$show_url = $url.'?'.$query_string.'&announcement='.$announcement->id;
  72. }
  73. else
  74. {
  75. $show_url = 'newsList.php#'.$announcement->id;
  76. //$show_url = $url.'?announcement='.$announcement->id;
  77. }
  78. echo '<tr class="system_announcement">
  79. <td width="80px" valign="top" class="system_announcement_title">'
  80. .$announcement->display_date.'
  81. </td>
  82. <td valign="top">
  83. <a name="ann'.$announcement->id.'" href="'.$show_url.'">'.$announcement->title.'</a>
  84. </td>
  85. </tr>';
  86. }
  87. else
  88. {
  89. echo '<div class="system_announcement">
  90. <div class="system_announcement_title">'
  91. .$announcement->display_date.'
  92. <a name="ann'.$announcement->id.'" href="'.$url.'?'.$query_string.'#ann'.$announcement->id.'">'.$announcement->title.'</a>
  93. </div>
  94. <div class="system_announcement_content">'
  95. .$announcement->content.'
  96. </div>';
  97. }
  98. }
  99. /*echo '<tr><td height="15px"></td></tr>';*/
  100. echo '<tr><td colspan="2">';
  101. echo '<a href="newsList.php">'.get_lang("More").'</a>';
  102. echo '</td></tr>';
  103. echo '</table>';
  104. echo '</div>';
  105. }
  106. return;
  107. }
  108. function display_all_announcements($visible, $id = -1,$start = 0,$user_id)
  109. {
  110. $user_selected_language = api_get_interface_language();
  111. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  112. $sql = "SELECT *, DATE_FORMAT(date_start,'%d-%m-%Y') AS display_date FROM ".$db_table."
  113. WHERE (lang='$user_selected_language' OR lang IS NULL) AND ((NOW() BETWEEN date_start AND date_end) OR date_end='0000-00-00')";
  114. switch ($visible)
  115. {
  116. case VISIBLE_GUEST :
  117. $sql .= " AND visible_guest = 1 ";
  118. break;
  119. case VISIBLE_STUDENT :
  120. $sql .= " AND visible_student = 1 ";
  121. break;
  122. case VISIBLE_TEACHER :
  123. $sql .= " AND visible_teacher = 1 ";
  124. break;
  125. }
  126. if(!isset($_GET['start']) || $_GET['start'] == 0)
  127. {
  128. $sql .= " ORDER BY date_start DESC LIMIT ".$start.",20";
  129. }
  130. else
  131. {
  132. $sql .= " ORDER BY date_start DESC LIMIT ".($start+1).",20";
  133. }
  134. $announcements = api_sql_query($sql,__FILE__,__LINE__);
  135. if (mysql_num_rows($announcements))
  136. {
  137. $query_string = ereg_replace('announcement=[1-9]+', '', $_SERVER['QUERY_STRING']);
  138. $query_string = ereg_replace('&$', '', $query_string);
  139. $url = api_get_self();
  140. echo '<div class="system_announcements">';
  141. echo '<h3>'.get_lang('SystemAnnouncements').'</h3>';
  142. echo '<table align="center">';
  143. echo '<tr>';
  144. echo '<td>';
  145. SystemAnnouncementManager :: display_fleche($user_id);
  146. echo '</td>';
  147. echo '</tr>';
  148. echo '</table>';
  149. echo '<table align="center" border="0" width="900px">';
  150. while ($announcement = mysql_fetch_object($announcements))
  151. {
  152. echo '<tr><td>';
  153. echo '<a name="'.$announcement->id.'"></a>
  154. <div class="system_announcement">
  155. <div class="system_announcement_title">'
  156. .$announcement->display_date.' <strong>'.$announcement->title.'</strong>
  157. </div>
  158. <br />
  159. <div class="system_announcement_content">'
  160. .$announcement->content.'
  161. </div>
  162. </div>
  163. <br />
  164. <hr noshade size="1">';
  165. echo '</tr></td>';
  166. }
  167. echo '</table>';
  168. echo '<table align="center">';
  169. echo '<tr>';
  170. echo '<td>';
  171. SystemAnnouncementManager :: display_fleche($user_id);
  172. echo '</td>';
  173. echo '</tr>';
  174. echo '</table>';
  175. echo '</div>';
  176. }
  177. return;
  178. }
  179. function display_fleche($user_id)
  180. {
  181. $start = (int)$_GET['start'];
  182. $nb_announcement = SystemAnnouncementManager :: count_nb_announcement($start,$user_id);
  183. $next = ((int)$_GET['start']+19);
  184. $prev = ((int)$_GET['start']-19);
  185. if(!isset($_GET['start']) || $_GET['start'] == 0)
  186. {
  187. if($nb_announcement > 20)
  188. {
  189. echo '<a href="newsList.php?start='.$next.'">'.get_lang('NextBis').' >> </a>';
  190. }
  191. }
  192. else
  193. {
  194. echo '<a href="newsList.php?start='.$prev.'"> << '.get_lang('Prev').'</a>';
  195. if($nb_announcement > 20)
  196. {
  197. echo '<a href="newsList.php?start='.$next.'">'.get_lang('NextBis').' >> </a>';
  198. }
  199. }
  200. }
  201. function count_nb_announcement($start = 0,$user_id = '')
  202. {
  203. $visibility = api_is_allowed_to_create_course() ? VISIBLE_TEACHER : VISIBLE_STUDENT;
  204. $user_selected_language = api_get_interface_language();
  205. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  206. $sql = 'SELECT id
  207. FROM '.$db_table.'
  208. WHERE (lang="'.$user_selected_language.'" OR lang IS NULL) ';
  209. if (isset($user_id))
  210. {
  211. switch ($visibility)
  212. {
  213. case VISIBLE_GUEST :
  214. $sql .= " AND visible_guest = 1 ";
  215. break;
  216. case VISIBLE_STUDENT :
  217. $sql .= " AND visible_student = 1 ";
  218. break;
  219. case VISIBLE_TEACHER :
  220. $sql .= " AND visible_teacher = 1 ";
  221. break;
  222. }
  223. }
  224. $sql .= 'LIMIT '.$start.',21';
  225. $announcements = api_sql_query($sql,__FILE__,__LINE__);
  226. $i = 0;
  227. while($rows = mysql_fetch_array($announcements))
  228. {
  229. $i++;
  230. }
  231. return $i;
  232. }
  233. /**
  234. * Get all announcements
  235. * @return array An array with all available system announcements (as php
  236. * objects)
  237. */
  238. function get_all_announcements()
  239. {
  240. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  241. $sql = "SELECT *, IF( NOW() BETWEEN date_start AND date_end, '1', '0') AS visible FROM ".$db_table." ORDER BY date_start ASC";
  242. $announcements = api_sql_query($sql,__FILE__,__LINE__);
  243. $all_announcements = array();
  244. while ($announcement = mysql_fetch_object($announcements))
  245. {
  246. $all_announcements[] = $announcement;
  247. }
  248. return $all_announcements;
  249. }
  250. /**
  251. * Adds an announcement to the database
  252. * @param string $title Title of the announcement
  253. * @param string $content Content of the announcement
  254. * @param string $date_start Start date (YYYY-MM-DD HH:II: SS)
  255. * @param string $date_end End date (YYYY-MM-DD HH:II: SS)
  256. */
  257. function add_announcement($title, $content, $date_start, $date_end, $visible_teacher = 0, $visible_student = 0, $visible_guest = 0, $lang = null)
  258. {
  259. $a_dateS = explode(' ',$date_start);
  260. $a_arraySD = explode('-',$a_dateS[0]);
  261. $a_arraySH = explode(':',$a_dateS[1]);
  262. $date_start = array_merge($a_arraySD,$a_arraySH);
  263. $a_dateE = explode(' ',$date_end);
  264. $a_arrayED = explode('-',$a_dateE[0]);
  265. $a_arrayEH = explode(':',$a_dateE[1]);
  266. $date_end = array_merge($a_arrayED,$a_arrayEH);
  267. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  268. if (!checkdate($date_start[1], $date_start[2], $date_start[0]))
  269. {
  270. Display :: display_normal_message(get_lang('InvalidStartDate'));
  271. return false;
  272. }
  273. if (($date_end[1] || $date_end[2] || $date_end[0]) && !checkdate($date_end[1], $date_end[2], $date_end[0]))
  274. {
  275. Display :: display_normal_message(get_lang('InvalidEndDate'));
  276. return false;
  277. }
  278. if( strlen(trim($title)) == 0)
  279. {
  280. Display::display_normal_message(get_lang('InvalidTitle'));
  281. return false;
  282. }
  283. $start = $date_start[0]."-".$date_start[1]."-".$date_start[2]." ".$date_start[3].":".$date_start[4].":".$date_start[5];
  284. $end = $date_end[0]."-".$date_end[1]."-".$date_end[2]." ".$date_end[3].":".$date_end[4].":".$date_start[5];
  285. $title = mysql_real_escape_string($title);
  286. $content = mysql_real_escape_string($content);
  287. $lang = is_null($lang) ? 'NULL' : "'".mysql_real_escape_string($lang)."'";
  288. $sql = "INSERT INTO ".$db_table." (title,content,date_start,date_end,visible_teacher,visible_student,visible_guest, lang)
  289. VALUES ('".$title."','".$content."','".$start."','".$end."','".$visible_teacher."','".$visible_student."','".$visible_guest."',".$lang.")";
  290. return api_sql_query($sql,__FILE__,__LINE__);
  291. }
  292. /**
  293. * Updates an announcement to the database
  294. * @param integer $id : id of the announcement
  295. * @param string $title : title of the announcement
  296. * @param string $content : content of the announcement
  297. * @param array $date_start: start date of announcement (0 => day ; 1 => month ; 2 => year ; 3 => hour ; 4 => minute)
  298. * @param array $date_end : end date of announcement (0 => day ; 1 => month ; 2 => year ; 3 => hour ; 4 => minute)
  299. */
  300. function update_announcement($id, $title, $content, $date_start, $date_end, $visible_teacher = 0, $visible_student = 0, $visible_guest = 0,$lang=null)
  301. {
  302. $a_dateS = explode(' ',$date_start);
  303. $a_arraySD = explode('-',$a_dateS[0]);
  304. $a_arraySH = explode(':',$a_dateS[1]);
  305. $date_start = array_merge($a_arraySD,$a_arraySH);
  306. $a_dateE = explode(' ',$date_end);
  307. $a_arrayED = explode('-',$a_dateE[0]);
  308. $a_arrayEH = explode(':',$a_dateE[1]);
  309. $date_end = array_merge($a_arrayED,$a_arrayEH);
  310. $lang = is_null($lang) ? 'NULL' : "'".mysql_real_escape_string($lang)."'";
  311. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  312. if (!checkdate($date_start[1], $date_start[2], $date_start[0]))
  313. {
  314. Display :: display_normal_message(get_lang('InvalidStartDate'));
  315. return false;
  316. }
  317. if (($date_end[1] || $date_end[2] || $date_end[0]) && !checkdate($date_end[1], $date_end[2], $date_end[0]))
  318. {
  319. Display :: display_normal_message(get_lang('InvalidEndDate'));
  320. return false;
  321. }
  322. if( strlen(trim($title)) == 0)
  323. {
  324. Display::display_normal_message(get_lang('InvalidTitle'));
  325. return false;
  326. }
  327. $start = $date_start[0]."-".$date_start[1]."-".$date_start[2]." ".$date_start[3].":".$date_start[4].":".$date_start[5];
  328. $end = $date_end[0]."-".$date_end[1]."-".$date_end[2]." ".$date_end[3].":".$date_end[4].":".$date_start[5];
  329. $title = mysql_real_escape_string($title);
  330. $content = mysql_real_escape_string($content);
  331. $id = intval($id);
  332. $sql = "UPDATE ".$db_table." SET lang=$lang,title='".$title."',content='".$content."',date_start='".$start."',date_end='".$end."', ";
  333. $sql .= " visible_teacher = '".$visible_teacher."', visible_student = '".$visible_student."', visible_guest = '".$visible_guest."' WHERE id='".$id."'";
  334. return api_sql_query($sql,__FILE__,__LINE__);
  335. }
  336. /**
  337. * Deletes an announcement
  338. * @param integer $id The identifier of the announcement that should be
  339. * deleted
  340. */
  341. function delete_announcement($id)
  342. {
  343. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  344. $id = intval($id);
  345. $sql = "DELETE FROM ".$db_table." WHERE id='".$id."'";
  346. return api_sql_query($sql,__FILE__,__LINE__);
  347. }
  348. /**
  349. * Gets an announcement
  350. * @param integer $id The identifier of the announcement that should be
  351. * deleted
  352. */
  353. function get_announcement($id)
  354. {
  355. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  356. $id = intval($id);
  357. $sql = "SELECT * FROM ".$db_table." WHERE id='".$id."'";
  358. $announcement = mysql_fetch_object(api_sql_query($sql,__FILE__,__LINE__));
  359. return $announcement;
  360. }
  361. /**
  362. * Change the visibility of an announcement
  363. * @param integer $announcement_id
  364. * @param integer $user For who should the visibility be changed (possible
  365. * values are VISIBLE_TEACHER, VISIBLE_STUDENT, VISIBLE_GUEST)
  366. */
  367. function set_visibility($announcement_id, $user, $visible)
  368. {
  369. $db_table = Database :: get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS);
  370. $field = ($user == VISIBLE_TEACHER ? 'visible_teacher' : ($user == VISIBLE_STUDENT ? 'visible_student' : 'visible_guest'));
  371. $sql = "UPDATE ".$db_table." SET ".$field." = '".$visible."' WHERE id='".$announcement_id."'";
  372. return api_sql_query($sql,__FILE__,__LINE__);
  373. }
  374. }
  375. ?>