PageRenderTime 23ms CodeModel.GetById 10ms RepoModel.GetById 1ms app.codeStats 0ms

/controllers/controller.news.php

https://gitlab.com/theinfra/equatroLMS
PHP | 408 lines | 338 code | 70 blank | 0 comment | 44 complexity | 4fe3c31cf73a9bf5df63011604e4d333 MD5 | raw file
  1. <?php
  2. class APPCONTROLLER_NEWS extends APP_BASE {
  3. public $menu = array(
  4. "view" => 0,
  5. "admin" => 2,
  6. "create" => 2,
  7. "createsubmit" => 2,
  8. "remote_getNewsList" => 2,
  9. "edit" => 2,
  10. "editsubmit" => 2,
  11. "remote_deleteNews" => 2,
  12. "sendemail" => 2,
  13. "sendemailsubmit" => 2,
  14. );
  15. function view(){
  16. $request = parseGetVars();
  17. if(isset($request[2])){
  18. $GLOBALS['AppRequestVars'][1] = "viewsingle";
  19. return $this->viewsingle($request[2]);
  20. }
  21. $this->breadcrumbs = array("index" => GetLang("Home"), "#" => GetLang("News"));
  22. $GLOBALS["NewsViewNewsList"] = $this->renderNews("*");
  23. }
  24. private function viewsingle($newsid){
  25. if(!isId($newsid)){
  26. flashMessage(GetLang("NewsItemInvalid"));
  27. $GLOBALS['AppRequestVars'][1] = "view";
  28. unset($GLOBALS['AppRequestVars'][2]);
  29. return;
  30. }
  31. $GLOBALS["ViewStylesheet"] .= "<link rel=\"stylesheet\" href=\"".$GLOBALS["AppPath"]."/views/Templates/base/news.css\">";
  32. $news_model = getModel("news");
  33. $news_item = $news_model->getSingleResultSet(
  34. 0,
  35. "*",
  36. array(
  37. "newsid" => $newsid,
  38. ), //where
  39. array(
  40. ), //order
  41. array(
  42. ) //columns
  43. );
  44. $this->breadcrumbs = array("index" => GetLang("Home"), "News" => GetLang("News"), "#" => $news_item["newstitle"]);
  45. $author = getUser($news_item["newsauthor"]);
  46. if(!$author){
  47. $author = $author = array("username" => GetLang("Unknown"));
  48. }
  49. $GLOBALS["NewsViewSingleNewsTitle"] = $news_item["newstitle"];
  50. $GLOBALS["NewsViewSingleNewsAuthor"] = $author["username"];
  51. $GLOBALS["NewsViewSingleNewsDate"] = date('d-M-Y H:m:s', $news_item["created"]);
  52. $GLOBALS["NewsViewSingleNewsContent"] = html_entity_decode($news_item["newscontent"]);
  53. }
  54. function admin(){
  55. $this->breadcrumbs = array("news/admin" => GetLang("News"), "#" => GetLang("Admin"));
  56. $GLOBALS["ViewStylesheet"] .= "<link rel=\"stylesheet\" href=\"".$GLOBALS["AppPath"]."/views/Styles/jquery-tablesorter/theme.blue.css\">";
  57. $GLOBALS["ViewScripts"] .= "<script src=\"".$GLOBALS["AppPath"]."/javascript/jquery-tablesorter/jquery.tablesorter.combined.min.js\"></script>";
  58. }
  59. function create(){
  60. $GLOBALS["ViewScripts"] .= '<script src="%%GLOBAL_AppPath%%/javascript/tinymce/tinymce.min.js"></script>';
  61. }
  62. function createsubmit(){
  63. $postFields = array(
  64. "NewsCreateNewsTitle",
  65. "NewsCreateNewsContent",
  66. "NewsCreateNewsStatus",
  67. );
  68. foreach($postFields as $field){
  69. if(!isset($_POST[$field])){
  70. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/Create', $field));
  71. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  72. $GLOBALS['AppRequestVars'][1] = "create";
  73. overwritePostToGlobalVars();
  74. return;
  75. }
  76. }
  77. if(trim($_POST["NewsCreateNewsTitle"]) == ""){
  78. flashMessage(sprintf(GetLang("PleaseInputText"), GetLang("NewsTitle")));
  79. $GLOBALS["AppRequestVars"][1] = "create";
  80. overwritePostToGlobalVars();
  81. return;
  82. }
  83. if(trim($_POST["NewsCreateNewsStatus"]) != "" && !is_numeric($_POST["NewsCreateNewsStatus"])){
  84. flashMessage(sprintf(GetLang("PlaseInputNumber"), GetLang("NewsStatus")));
  85. $GLOBALS["AppRequestVars"][1] = "create";
  86. overwritePostToGlobalVars();
  87. return;
  88. }
  89. $user = getUserData();
  90. $news_model = getModel("news");
  91. $new_news = array(
  92. "newstitle" => $_POST["NewsCreateNewsTitle"],
  93. "newscontent" => htmlentities($_POST["NewsCreateNewsContent"]),
  94. "status" => $_POST["NewsCreateNewsStatus"],
  95. "newsauthor" => $user["userid"],
  96. "created" => microtime(true),
  97. );
  98. $GLOBALS["APP_CLASS_DB"]->StartTransaction();
  99. $newsid = $news_model->add($new_news);
  100. if(!$newsid){
  101. $GLOBALS["APP_CLASS_DB"]->RollbackTransaction();
  102. AddLog(sprintf(GetLang("ErrorCreatingNews") . ". Error: ".$news_model->getError().".- Array[".print_r($_POST, true)."]", $new_news["newstitle"]), APP_SEVERITY_ERROR);
  103. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  104. overwritePostToGlobalVars();
  105. header("Location: ".$GLOBALS['AppPath']."/news/create");
  106. exit;
  107. }
  108. $GLOBALS["APP_CLASS_DB"]->CommitTransaction();
  109. flashMessage(GetLang("NewsCreatedSuccess"), APP_SEVERITY_SUCCESS);
  110. header("Location: ".$GLOBALS['AppPath']."/news/admin");
  111. exit;
  112. }
  113. function remote_getNewsList(){
  114. $news_model = getModel("news");
  115. $news = $news_model->getResultSet(
  116. 0,
  117. "*",
  118. array(
  119. ), //where
  120. array(
  121. "modified" => "DESC",
  122. "created" => "DESC",
  123. "id" => "DESC",
  124. ), //order
  125. array(
  126. "*",
  127. "created_date" => "FROM_UNIXTIME(created)",
  128. "modified_date" => "IFNULL(FROM_UNIXTIME(modified), '-')",
  129. ) //columns
  130. );
  131. foreach($news as $index => $news_item){
  132. $news[$index]["content_cropped"] = preg_replace('/[\r\n]+/', ' ', substr(strip_tags(html_entity_decode($news_item["newscontent"])), 0, 20));
  133. }
  134. echo app_json_encode(array("news" => $news));
  135. exit;
  136. }
  137. function edit(){
  138. $this->breadcrumbs = array("news/admin" => GetLang("News"), "#" => GetLang("Edit"));
  139. if(!isset($_GET['newsid']) || !isId($_GET['newsid'])){
  140. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/Edit', 'NewsEditNewsId'));
  141. flashMessage(GetLang('ErrorMsgGeneric'), APP_SEVERITY_ERROR);
  142. header("Location: ".$GLOBALS["AppPath"]."/news/admin");
  143. exit;
  144. }
  145. $GLOBALS["ViewScripts"] .= '<script src="%%GLOBAL_AppPath%%/javascript/tinymce/tinymce.min.js"></script>';
  146. $newsid = $_GET['newsid'];
  147. $GLOBALS["NewsEditNewsId"] = $newsid;
  148. $news_model = getModel("news");
  149. $news = $news_model->get(array("newsid" => $newsid));
  150. if(!$news){
  151. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/EditSubmit', 'NewsEditNewsId'));
  152. flashMessage(GetLang('ErrorNoNewsFound'), APP_SEVERITY_ERROR);
  153. header("Location: ".$GLOBALS["AppPath"]."/news/admin");
  154. exit;
  155. }
  156. overwritePostToGlobalVars(array(
  157. "NewsEditNewsTitle" => $news["newstitle"],
  158. "NewsEditNewsContent" => $news["newscontent"],
  159. "NewsEditNewsStatus" => $news["status"],
  160. ));
  161. }
  162. function editsubmit(){
  163. if(!isset($_POST['NewsEditNewsId']) || !isId($_POST['NewsEditNewsId'])){
  164. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/EditSubmit', 'NewsEditNewsId'));
  165. flashMessage(GetLang('ErrorMsgGeneric'), APP_SEVERITY_ERROR);
  166. header("Location: ".$GLOBALS["AppPath"]."/news/admin");
  167. exit;
  168. }
  169. $newsid = $_POST['NewsEditNewsId'];
  170. $GLOBALS["NewsEditNewsId"] = $newsid;
  171. $postFields = array(
  172. "NewsEditNewsTitle",
  173. "NewsEditNewsContent",
  174. "NewsEditNewsStatus",
  175. );
  176. foreach($postFields as $field){
  177. if(!isset($_POST[$field])){
  178. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/Create', $field));
  179. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  180. overwritePostToGlobalVars();
  181. header("Location: ".$GLOBALS['AppPath']."/news/edit?newsid=".$newsid);
  182. exit;
  183. }
  184. }
  185. if(trim($_POST["NewsEditNewsTitle"]) == ""){
  186. flashMessage(sprintf(GetLang("PleaseInputText"), GetLang("NewsTitle")));
  187. overwritePostToGlobalVars();
  188. header("Location: ".$GLOBALS['AppPath']."/news/edit?newsid=".$newsid);
  189. exit;
  190. }
  191. if(trim($_POST["NewsEditNewsStatus"]) != "" && (!is_numeric($_POST["NewsEditNewsStatus"]))){
  192. flashMessage(sprintf(GetLang("PlaseInputNumber"), GetLang("NewsStatus")));
  193. overwritePostToGlobalVars();
  194. header("Location: ".$GLOBALS['AppPath']."/news/edit?newsid=".$newsid);
  195. exit;
  196. }
  197. $news_model = getModel("news");
  198. $new_news = array(
  199. "newstitle" => $_POST["NewsEditNewsTitle"],
  200. "newscontent" => htmlentities($_POST["NewsEditNewsContent"]),
  201. "status" => $_POST["NewsEditNewsStatus"],
  202. "modified" => microtime(true),
  203. );
  204. $GLOBALS["APP_CLASS_DB"]->StartTransaction();
  205. $success = $news_model->edit($new_news, array("newsid" => $newsid));
  206. if(!$newsid){
  207. $GLOBALS["APP_CLASS_DB"]->RollbackTransaction();
  208. AddLog(sprintf(GetLang("ErrorCreatingNews") . ". Error: ".$news_model->getError().".- Array[".print_r($_POST, true)."]", $new_news["newstitle"]), APP_SEVERITY_ERROR);
  209. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  210. overwritePostToGlobalVars();
  211. header("Location: ".$GLOBALS['AppPath']."/news/edit?newsid=".$newsid);
  212. exit;
  213. }
  214. $GLOBALS["APP_CLASS_DB"]->CommitTransaction();
  215. flashMessage(GetLang("NewsEditedSuccess"), APP_SEVERITY_SUCCESS);
  216. header("Location: ".$GLOBALS['AppPath']."/news/admin");
  217. exit;
  218. }
  219. function remote_deleteNews(){
  220. if(!isset($_GET["newsid"]) || !isId($_GET["newsid"])){
  221. AddLog(sprintf(GetLang("ErrorPostVarNotSet"), 'News/RemoteDeleteNews', 'newsid'));
  222. echo app_json_encode(array("success" => 0, "msg" => GetLang("ErrorMsgGeneric")));
  223. exit;
  224. }
  225. $news_model = getModel("news");
  226. $success = $news_model->delete(array("newsid" => $_GET["newsid"]));
  227. if($success){
  228. echo app_json_encode(array("success" => 1));
  229. exit;
  230. }
  231. else {
  232. AddLog(sprintf(GetLang("ErrorDeletingNews"), $_GET["newsid"]) . ". Error: ".$news_model->getError(), APP_SEVERITY_ERROR);
  233. echo app_json_encode(array("success" => 0, "msg" => GetLang("ErrorMsgGeneric")));
  234. exit;
  235. }
  236. }
  237. public function renderNews($limit = 5){
  238. $news_model = getModel("news");
  239. $news = $news_model->getResultSet(
  240. 0,
  241. $limit,
  242. array(
  243. "status" => 1,
  244. ), //where
  245. array(
  246. "created" => "DESC",
  247. ), //order
  248. array(
  249. ) //columns
  250. );
  251. if(empty($news)){
  252. return "<div>".GetLang("NoNewsFound")."</div>";
  253. }
  254. $return = "";
  255. foreach($news as $news_item){
  256. $author = getUser($news_item["newsauthor"]);
  257. if(!$author){
  258. $author = $author = array("username" => GetLang("Unknown"));
  259. }
  260. $return .= '<div class="NewsItem">
  261. <div class="NewsTitle"><h3><a href="'.$GLOBALS["AppPath"].'/news/view/'.$news_item["newsid"].'">'.$news_item["newstitle"].'</a></h3></div>
  262. <h4><span class="NewsAuthor">'.$author["username"].'</span> - <span class="NewsDate">'.date('d-M-Y H:m:s', $news_item["created"]).'</span></h4>
  263. <div class="NewsContent">'.html_entity_decode($news_item["newscontent"]).'</div>
  264. </div>';
  265. }
  266. return $return;
  267. }
  268. public function sendemail(){
  269. if(!isset($_GET["newsid"]) || !isId($_GET["newsid"])){
  270. AddLogError(GetLang("ErrorInvalidNews"));
  271. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  272. return;
  273. }
  274. $GLOBALS["NewsSendMailNewsId"] = $_GET["newsid"];
  275. $usergroup_model = getModel("usergroup");
  276. $usergroups = $usergroup_model->getResultSet(0, "*");
  277. $GLOBALS["NewsSendEmailUserGroups"] = "";
  278. if(is_array($usergroups) && !empty($usergroups)){
  279. foreach($usergroups as $usergroup){
  280. $GLOBALS["NewsSendEmailUserGroups"] .= '<li><label for="NewsSentEmailUserGroup'.$usergroup["groupid"].'"><input type="checkbox" name="NewsSentEmailUserGroups[]" id="NewsSentEmailUserGroup'.$usergroup["groupid"].'" value="'.$usergroup["groupid"].'" />'.$usergroup["groupname"].'</label></li>';
  281. }
  282. }
  283. if(isset($_SESSION["UserSendMailResultTable"]) && trim($_SESSION["UserSendMailResultTable"]) != ""){
  284. $GLOBALS["NewsSendMailResultsShow"] = "display: block";
  285. $GLOBALS["UserSendMailResultTable"] = $_SESSION["UserSendMailResultTable"];
  286. unset($_SESSION["UserSendMailResultTable"]);
  287. }
  288. else {
  289. $GLOBALS["NewsSendMailResultsShow"] = "display: none";
  290. }
  291. }
  292. public function sendemailsubmit(){
  293. if(!isset($_POST["NewsSendMailNewsId"]) || !isId($_POST["NewsSendMailNewsId"])){
  294. AddLogError(GetLang("ErrorInvalidNews"));
  295. flashMessage(GetLang("ErrorMsgGeneric"), APP_SEVERITY_ERROR);
  296. header("Location: ".$GLOBALS["AppPath"]."/news/admin");
  297. return;
  298. }
  299. $news_model = getModel("news");
  300. $newsitem = $news_model->get(array("newsid" => $_POST["NewsSendMailNewsId"]));
  301. $mailer = getLib("smtpmailer");
  302. $subject = "[".GetConfig("SiteName")."] ".GetLang("MailSubjectNews").": ".$newsitem["newstitle"];
  303. $GLOBALS["MailNewsTitle"] = $newsitem["newstitle"];
  304. $author = getUser($newsitem["newsauthor"]);
  305. $GLOBALS["MailNewsAuthorName"] = $author["firstname"]." ".$author["lastname"];
  306. $GLOBALS["MailNewsDate"] = formatDateSpanish($newsitem["created"]);
  307. $GLOBALS["MailNewsContent"] = html_entity_decode($newsitem["newscontent"]);
  308. $body = $GLOBALS["APP_CLASS_VIEW"]->GetSnippet("MailNews");
  309. $user_model = getModel("user");
  310. $users = $user_model->getResultSet(0, "*", 'membershiptype IN ("'.implode('", "', $_POST["NewsSentEmailUserGroups"]).'")');
  311. $_SESSION["UserSendMailResultTable"] = "";
  312. $_SESSION["NewsSendMailResultsShow"] = "display: none";
  313. if(is_array($users) && !empty($users)){
  314. flashMessage(GetLang("EmailsSent"), APP_SEVERITY_SUCCESS);
  315. $GLOBALS["NewsSendMailResultsShow"] = "display: block";
  316. foreach($users as $user){
  317. if(trim($user["mail"]) == ""){
  318. continue;
  319. }
  320. $success = $mailer->send($subject, $body, $user["mail"]);
  321. if($success){
  322. $class = "UserSendMailResultRowSuccess";
  323. $msg = "-";
  324. }
  325. else {
  326. $class = "UserSendMailResultRowError";
  327. $msg = $mailer->getErrors();
  328. }
  329. $_SESSION["UserSendMailResultTable"] .= '<tr class="'.$class.'">
  330. <td>'.$user["mail"].'</td>
  331. <td>'.$msg.'</td>
  332. </tr>';
  333. }
  334. }
  335. header("Location: ".$GLOBALS["AppPath"]."/news/sendemail?newsid=".$_POST["NewsSendMailNewsId"]);
  336. exit;
  337. }
  338. }