PageRenderTime 63ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/e107_admin/newspost.php

https://github.com/CasperGemini/e107
PHP | 3426 lines | 2259 code | 542 blank | 625 comment | 232 complexity | eee86931ae93c22b5a98a91e6aadad3f MD5 | raw file
Possible License(s): GPL-2.0
  1. <?php
  2. /*
  3. * e107 website system
  4. *
  5. * Copyright (C) 2008-2013 e107 Inc (e107.org)
  6. * Released under the terms and conditions of the
  7. * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
  8. *
  9. * News Administration
  10. *
  11. */
  12. require_once('../class2.php');
  13. if (!getperms('H|N'))
  14. {
  15. header('Location:'.e_BASE.'index.php');
  16. exit;
  17. }
  18. //include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_'.e_PAGE);
  19. e107::coreLan('newspost', true);
  20. // ------------------------------
  21. // done in class2: require_once(e_LANGUAGEDIR.e_LANGUAGE."/admin/lan_admin.php"); // maybe this should be put in class2.php when 'admin' is detected.
  22. $newspost = new admin_newspost(e_QUERY);
  23. e107::setRegistry('_newspost_admin', $newspost);
  24. $gen = new convert();
  25. //Handle Ajax Calls
  26. if($newspost->ajax_observer()) exit;
  27. // e107::js('core','core/admin.js','prototype');
  28. //e107::getJs()->requireCoreLib('core/admin.js');
  29. class news_admin extends e_admin_dispatcher
  30. {
  31. protected $modes = array(
  32. 'main' => array(
  33. 'controller' => 'news_admin_ui',
  34. 'path' => null,
  35. 'ui' => 'news_form_ui',
  36. 'uipath' => null
  37. ),
  38. 'cat' => array(
  39. 'controller' => 'news_cat_ui',
  40. 'path' => null,
  41. 'ui' => 'news_cat_form_ui',
  42. 'uipath' => null
  43. ),
  44. 'sub' => array(
  45. 'controller' => 'news_sub_ui',
  46. 'path' => null,
  47. 'ui' => 'news_sub_form_ui',
  48. 'uipath' => null
  49. )
  50. );
  51. protected $adminMenu = array(
  52. 'main/list' => array('caption'=> LAN_LIST, 'perm' => 'H'),
  53. 'main/create' => array('caption'=> NWSLAN_45, 'perm' => 'H'), // Create/Edit News Item
  54. // 'cat/list' => array('caption'=> NWSLAN_46, 'perm' => '7'), // Category List
  55. 'cat/list' => array('caption'=> LAN_CATEGORIES, 'perm' => 'H'), // Create Category.
  56. 'cat/create' => array('caption'=> "Create Category", 'perm' => 'H'), // Category List
  57. 'main/settings' => array('caption'=> LAN_PREFS, 'perm' => '0'), // Preferences
  58. // 'main/submitted' => array('caption'=> "Old Submitted ", 'perm' => 'N'), // Submitted News
  59. 'sub/list' => array('caption'=> NWSLAN_47, 'perm' => 'N'), // Submitted News
  60. // 'main/maint' => array('caption'=> LAN_NEWS_55, 'perm' => '0') // Maintenance
  61. );
  62. protected $adminMenuAliases = array(
  63. 'main/edit' => 'main/list',
  64. 'cat/edit' => 'cat/list'
  65. );
  66. protected $menuTitle = "News";
  67. }
  68. class news_cat_ui extends e_admin_ui
  69. {
  70. protected $pluginTitle = ADLAN_0; // "News"
  71. protected $pluginName = 'core';
  72. protected $table = "news_category";
  73. protected $pid = "category_id";
  74. protected $perPage = 0; //no limit
  75. protected $batchDelete = false;
  76. protected $sortField = 'category_order';
  77. protected $listOrder = "category_order ASC";
  78. protected $fields = array(
  79. 'checkboxes' => array('title'=> '', 'type' => null, 'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
  80. 'category_id' => array('title'=> LAN_ID, 'type' => 'number', 'width' =>'5%', 'forced'=> TRUE, 'readonly'=>TRUE),
  81. 'category_icon' => array('title'=> LAN_ICON, 'type' => 'icon', 'data' => 'str', 'width' => '100px', 'thclass' => 'center', 'class'=>'center', 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60','readonly'=>FALSE, 'batch' => FALSE, 'filter'=>FALSE),
  82. 'category_name' => array('title'=> LAN_TITLE, 'type' => 'text', 'inline'=>true, 'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE, 'validate' => true, 'inline' => true),
  83. 'category_meta_description' => array('title'=> LAN_DESCRIPTION, 'type' => 'textarea', 'inline'=>true, 'width' => 'auto', 'thclass' => 'left','readParms' => 'expand=...&truncate=150&bb=1', 'readonly'=>FALSE),
  84. 'category_meta_keywords' => array('title'=> LAN_KEYWORDS, 'type' => 'tags', 'inline'=>true, 'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE),
  85. 'category_sef' => array('title'=> LAN_SEFURL, 'type' => 'text', 'inline'=>true, 'width' => 'auto', 'readonly'=>FALSE), // Display name
  86. 'category_manager' => array('title'=> "Manage Permissions",'type' => 'userclass', 'inline'=>true, 'width' => 'auto', 'data' => 'int','batch'=>TRUE, 'filter'=>TRUE),
  87. 'category_order' => array('title'=> LAN_ORDER, 'type' => 'text', 'width' => 'auto', 'thclass' => 'right', 'class'=> 'right' ),
  88. 'options' => array('title'=> LAN_OPTIONS, 'type' => null, 'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center', 'sort' => true)
  89. );
  90. protected $fieldpref = array('checkboxes', 'category_icon', 'category_id', 'category_name', 'category_description','category_manager', 'category_order', 'options');
  91. protected $newspost;
  92. function init()
  93. {
  94. $this->newspost = new admin_newspost;
  95. }
  96. // function createPage()
  97. // {
  98. // $this->newspost->show_categories();
  99. // }
  100. public function beforeCreate($new_data)
  101. {
  102. if(empty($new_data['category_sef']))
  103. {
  104. $new_data['category_sef'] = eHelper::title2sef($new_data['category_name']);
  105. }
  106. else
  107. {
  108. $new_data['category_sef'] = eHelper::secureSef($new_data['category_sef']);
  109. }
  110. $sef = e107::getParser()->toDB($new_data['category_sef']);
  111. if(e107::getDb()->count('news_category', '(*)', "category_sef='{$sef}'"))
  112. {
  113. e107::getMessage()->addError('Please choose unique SEF URL string for this category');
  114. return false;
  115. }
  116. if(empty($new_data['category_order']))
  117. {
  118. $c = e107::getDb()->count('news_category');
  119. $new_data['category_order'] = $c ? $c : 0;
  120. }
  121. return $new_data;
  122. }
  123. public function beforeUpdate($new_data, $old_data, $id)
  124. {
  125. if(empty($new_data['category_sef']))
  126. {
  127. $new_data['category_sef'] = eHelper::title2sef($new_data['category_name']);
  128. }
  129. $sef = e107::getParser()->toDB($new_data['category_sef']);
  130. if(e107::getDb()->count('news_category', '(*)', "category_sef='{$sef}' AND category_id!=".intval($id)))
  131. {
  132. e107::getMessage()->addError('Please choose unique SEF URL string for this category');
  133. return false;
  134. }
  135. return $new_data;
  136. }
  137. }
  138. class news_cat_form_ui extends e_admin_form_ui
  139. {
  140. }
  141. // Submitted News Area.
  142. class news_sub_ui extends e_admin_ui
  143. {
  144. protected $pluginTitle = ADLAN_0; // "News"
  145. protected $pluginName = 'core';
  146. protected $table = "submitnews";
  147. protected $pid = "submitnews_id";
  148. protected $perPage = 10; //no limit
  149. protected $batchDelete = true;
  150. protected $formQuery = "mode=main&amp;action=create";
  151. protected $listOrder = "submitnews_id desc";
  152. // submitnews_id submitnews_name submitnews_email submitnews_title submitnews_category submitnews_item submitnews_datestamp submitnews_ip submitnews_auth submitnews_file
  153. protected $fields = array(
  154. 'checkboxes' => array('title'=> '', 'type' => null, 'width' =>'5%', 'forced'=> TRUE, 'thclass'=>'center', 'class'=>'center'),
  155. 'submitnews_id' => array('title'=> LAN_ID, 'type' => 'number', 'width' =>'5%', 'forced'=> TRUE, 'readonly'=>TRUE),
  156. 'submitnews_title' => array('title'=> LAN_TITLE, 'type' => 'method', 'width' => '35%', 'thclass' => 'left', 'readonly'=>TRUE),
  157. 'submitnews_datestamp' => array('title' => LAN_NEWS_32, 'type' => 'datestamp', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  158. 'submitnews_category' => array('title'=> LAN_CATEGORY, 'type' => 'dropdown', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>FALSE),
  159. // 'submitnews_item' => array('title'=> LAN_DESCRIPTION, 'type' => 'method', 'width' => 'auto', 'thclass' => 'left','readParms' => 'expand=...&truncate=150&bb=1', 'readonly'=>TRUE),
  160. 'submitnews_name' => array('title'=> LAN_AUTHOR, 'type' => 'text', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>TRUE),
  161. 'submitnews_ip' => array('title'=> "IP", 'type' => 'text', 'width' => 'auto', 'thclass' => 'left', 'readonly'=>TRUE),
  162. 'submitnews_auth' => array('title'=> "User", 'type' => 'user', 'width' => 'auto', 'thclass' => 'right', 'class'=> 'right' ),
  163. 'options' => array('title'=> LAN_OPTIONS, 'type' => "method", 'width' => '10%', 'forced'=>TRUE, 'thclass' => 'center last', 'class' => 'center')
  164. );
  165. protected $fieldpref = array('checkboxes', 'submitnews_id', 'submitnews_title', 'submitnews_category', 'options');
  166. protected $newspost;
  167. protected $cats;
  168. function init()
  169. {
  170. $sql = e107::getDb();
  171. $sql->db_Select_gen("SELECT category_id,category_name FROM #news_category");
  172. while($row = $sql->fetch())
  173. {
  174. $cat = $row['category_id'];
  175. $this->cats[$cat] = $row['category_name'];
  176. }
  177. asort($this->cats);
  178. $this->fields['submitnews_category']['writeParms'] = $this->cats;
  179. $this->newspost = new admin_newspost;
  180. }
  181. // function createPage()
  182. // {
  183. // $this->newspost->show_categories();
  184. // }
  185. public function beforeCreate($new_data)
  186. {
  187. }
  188. public function beforeUpdate($new_data, $old_data, $id)
  189. {
  190. }
  191. }
  192. class news_sub_form_ui extends e_admin_form_ui
  193. {
  194. function submitnews_title($cur,$val)
  195. {
  196. $tp = e107::getParser();
  197. $row = $this->getController()->getListModel();
  198. $submitnews_id = $row->get('submitnews_id');
  199. $submitnews_title = $row->get('submitnews_title');
  200. $submitnews_file = $row->get('submitnews_file');
  201. $submitnews_item = $row->get('submitnews_item');
  202. // $text .= "<a href='#submitted_".$submitnews_id."' class='e-modal' >";
  203. $text .= "<a data-toggle='modal' href='#submitted_".$submitnews_id."' data-cache='false' data-target='#submitted_".$submitnews_id."' class='e-tip' title='".LAN_PREVIEW."'>";
  204. $text .= $tp->toHTML($submitnews_title,FALSE,'emotes_off, no_make_clickable');
  205. $text .= '</a>';
  206. $text .= '
  207. <div id="submitted_'.$submitnews_id.'" class="modal hide fade" tabindex="-1" role="dialog" aria-hidden="true">
  208. <div class="modal-header">
  209. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  210. <h4>'.$tp->toHtml($submitnews_title,false,'TITLE').'</h4>
  211. </div>
  212. <div class="modal-body">
  213. <p>';
  214. $text .= $tp->toHTML($submitnews_item,TRUE);
  215. if($submitnews_file)
  216. {
  217. $tmp = explode(',',$submitnews_file);
  218. $text .= "<br />";
  219. foreach($tmp as $imgfile)
  220. {
  221. $url = $tp->thumbUrl(e_UPLOAD.$imgfile,array('aw'=>400),true);
  222. $text .= "<br /><img src='".$url."' alt='".$imgfile."' />";
  223. }
  224. }
  225. $text .= '</p>
  226. </div>
  227. <div class="modal-footer">
  228. <a href="#" data-dismiss="modal" class="btn btn-primary">Close</a>
  229. </div>
  230. </div>';
  231. return $text;
  232. }
  233. // Override the default Options field.
  234. function options($parms, $value, $id, $attributes)
  235. {
  236. if($attributes['mode'] == 'read')
  237. {
  238. $text = "<div class='btn-group'>";
  239. $approved = $this->getController()->getListModel()->get('submitnews_auth'); // approved;
  240. if($approved == 0)
  241. {
  242. //$text = $this->submit_image('submitnews['.$id.']', 1, 'execute', NWSLAN_58);
  243. $text = "<a class='btn btn-large' href='".e_SELF."?mode=main&action=create&sub={$id}'>".ADMIN_EXECUTE_ICON."</a>";
  244. // NWSLAN_103;
  245. }
  246. else // Already submitted;
  247. {
  248. }
  249. $text .= $this->submit_image('etrigger_delete['.$id.']', $id, 'delete', LAN_DELETE.' [ ID: '.$id.' ]', array('class' => 'btn btn-large action delete'.$delcls));
  250. $text .= "</div>";
  251. return $text;
  252. }
  253. }
  254. }
  255. // Main News Area.
  256. class news_admin_ui extends e_admin_ui
  257. {
  258. protected $pluginTitle = ADLAN_0; // "News"
  259. protected $pluginName = 'core';
  260. protected $table = "news";
  261. protected $pid = "news_id";
  262. protected $perPage = 10; //no limit
  263. protected $batchDelete = true;
  264. protected $batchCopy = true;
  265. protected $batchLink = true;
  266. protected $listOrder = "news_id desc";
  267. // true for 'vars' value means use same var
  268. protected $url = array(
  269. 'route'=>'news/view/item',
  270. 'name' => 'news_title',
  271. 'description' => 'news_summary',
  272. 'vars'=> array('news_id' => true, 'news_sef' => true, 'category_id' => 'news_category', 'category_sef' => true) // FIXME category_sef missing, we have to retrieve category data on the list view
  273. ); // 'link' only needed if profile not provided.
  274. protected $listQry = "SELECT n.*,u.user_id,u.user_name FROM #news AS n LEFT JOIN #user AS u ON n.news_author = u.user_id "; // without any Order or Limit.
  275. protected $fields = array(
  276. 'checkboxes' => array('title' => '', 'type' => null, 'width' => '3%', 'thclass' => 'center first', 'class' => 'center', 'nosort' => true, 'toggle' => 'news_selected', 'forced' => TRUE),
  277. 'news_id' => array('title' => LAN_ID, 'type' => 'text', 'width' => '5%', 'thclass' => 'center', 'class' => 'center', 'nosort' => false, 'readParms'=>'link=sef&target=blank'),
  278. 'news_thumbnail' => array('title' => NWSLAN_67, 'type' => 'method', 'width' => '110px', 'thclass' => 'center', 'class' => "center", 'nosort' => false, 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60','readonly'=>false),
  279. 'news_title' => array('title' => LAN_TITLE, 'type' => 'text', 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  280. 'news_summary' => array('title' => LAN_NEWS_27, 'type' => 'text', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  281. 'news_meta_keywords' => array('title' => LAN_KEYWORDS, 'type' => 'text', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  282. 'news_meta_description' => array('title' => LAN_DESCRIPTION,'type' => 'text', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  283. 'news_sef' => array('title' => LAN_SEFURL, 'type' => 'text', 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  284. 'user_name' => array('title' => LAN_AUTHOR, 'type' => 'text', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'noedit' => true),
  285. 'news_datestamp' => array('title' => LAN_NEWS_32, 'type' => 'datestamp', 'data' => 'int', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y', 'filter'=>true),
  286. 'news_category' => array('title' => NWSLAN_6, 'type' => 'dropdown', 'data' => 'int', 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'batch'=>true, 'filter'=>true),
  287. 'news_start' => array('title' => "Start", 'type' => 'datestamp', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  288. 'news_end' => array('title' => "End", 'type' => 'datestamp', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  289. 'news_class' => array('title' => LAN_VISIBILITY, 'type' => 'userclasses', 'inline'=>true, 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'batch'=>true, 'filter'=>true),
  290. 'news_render_type' => array('title' => LAN_TEMPLATE, 'type' => 'comma', 'inline'=>false, 'width' => 'auto', 'thclass' => 'center', 'class' => null, 'nosort' => false, 'batch'=>true, 'filter'=>true),
  291. 'news_sticky' => array('title' => LAN_NEWS_28, 'type' => 'boolean', 'data' => 'int' , 'width' => 'auto', 'thclass' => 'center', 'class' => 'center', 'nosort' => false, 'batch'=>true, 'filter'=>true),
  292. 'news_allow_comments' => array('title' => NWSLAN_15, 'type' => 'boolean', 'data' => 'int', 'width' => 'auto', 'thclass' => 'center', 'class' => 'center', 'nosort' => false,'batch'=>true, 'filter'=>true,'readParms'=>'reverse=1','writeParms'=>'reverse=1'),
  293. 'news_comment_total' => array('title' => LAN_NEWS_60, 'type' => 'number', 'width' => '10%', 'thclass' => '', 'class' => null, 'nosort' => false),
  294. 'options' => array('title' => LAN_OPTIONS, 'type' => null, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center', 'nosort' => true, 'forced' => TRUE)
  295. );
  296. protected $fieldpref = array('checkboxes','news_id', 'news_thumbnail', 'news_title', 'news_datestamp', 'news_category', 'options');
  297. protected $cats = array();
  298. protected $newspost;
  299. protected $news_renderTypes = array( // TODO Placement location and template should be separate.
  300. '0' => "Default Area",
  301. '1' => "Default Area - Title",
  302. '4' => "Default Area - Title/Summary",
  303. '2' => "Sidebar - Othernews",
  304. '3' => "Sidebar - Othernews 2",
  305. '5' => "Carousel",
  306. //'5' => "Featurebox"
  307. );
  308. function init()
  309. {
  310. // Ping Changes to Services.
  311. $pingServices = e107::getPref('news_ping_services');
  312. //TODO Use Ajax with progress-bar.
  313. $mes = e107::getMessage();
  314. if(vartrue($_POST['news_ping'],false) && (count($pingServices)>0) && in_array(e_UC_PUBLIC, $_POST['news_userclass']))
  315. {
  316. $mes->addDebug("Initiating ping",'default',true);
  317. include (e_HANDLER.'xmlrpc/xmlrpc.inc.php');
  318. include (e_HANDLER.'xmlrpc/xmlrpcs.inc.php');
  319. include (e_HANDLER.'xmlrpc/xmlrpc_wrappers.inc.php');
  320. $extendedServices = array('blogsearch.google.com');
  321. $port = 80;
  322. foreach($pingServices as $fullUrl)
  323. {
  324. $fullUrl = str_replace("http://","", trim($fullUrl));
  325. list($server,$path) = explode("/",$fullUrl, 2);
  326. $path = "/".$path;
  327. $weblog_name = SITENAME;
  328. $weblog_url = $_SERVER['HTTP_HOST'].e_HTTP;
  329. $changes_url = $_SERVER['HTTP_HOST'].e107::getUrl()->create('news/view/item', $_POST); // $_SERVER['HTTP_HOST'].e_HTTP."news.php?extend.".$_POST['news_id'];
  330. $cat_or_rss = $_SERVER['HTTP_HOST'].e_PLUGIN_ABS."rss_menu/rss.php?1.2";
  331. $extended = (in_array($server, $extendedServices)) ? true : false;
  332. if($this->ping($server, $port, $path, $weblog_name, $weblog_url, $changes_url, $cat_or_rss, $extended))
  333. {
  334. e107::getMessage()->addDebug("Successfully Pinged: ".$server .' with '.$changes_url , 'default', true);
  335. }
  336. }
  337. }
  338. $sql = e107::getDb();
  339. $sql->gen("SELECT category_id,category_name FROM #news_category");
  340. while($row = $sql->fetch())
  341. {
  342. $cat = $row['category_id'];
  343. $this->cats[$cat] = $row['category_name'];
  344. }
  345. asort($this->cats);
  346. $this->fields['news_category']['writeParms'] = $this->cats;
  347. $this->fields['news_render_type']['writeParms'] = $this->news_renderTypes; // array(NWSLAN_75,NWSLAN_76,NWSLAN_77,NWSLAN_77." 2","Featurebox");
  348. $this->newspost = new admin_newspost;
  349. $this->newspost->news_renderTypes = $this->news_renderTypes;
  350. $this->newspost->observer();
  351. }
  352. /* Multi-purpose ping for any XML-RPC server that supports the Weblogs.Com interface. */
  353. function ping($xml_rpc_server, $xml_rpc_port, $xml_rpc_path, $weblog_name, $weblog_url, $changes_url, $cat_or_rss='', $extended = false)
  354. {
  355. $mes = e107::getMessage();
  356. $log = e107::getAdminLog();
  357. $mes->addDebug("Attempting to ping: ".$xml_rpc_server, 'default', true);
  358. $name_param = new xmlrpcval($weblog_name, 'string');
  359. $url_param = new xmlrpcval($weblog_url, 'string');
  360. $changes_param = new xmlrpcval($changes_url, 'string');
  361. $cat_or_rss_param = new xmlrpcval($cat_or_rss, 'string');
  362. $method_name = ($extended) ? "weblogUpdates.extendedPing" : "weblogUpdates.ping";
  363. if ($cat_or_rss != "")
  364. {
  365. $params = array($name_param, $url_param, $changes_param, $cat_or_rss_param);
  366. $call_text = "$method_name(\"$weblog_name\", \"$weblog_url\", \"$changes_url\", \"$cat_or_rss\")";
  367. }
  368. else
  369. {
  370. if ($changes_url != "")
  371. {
  372. $params = array($name_param, $url_param, $changes_param);
  373. $call_text = "$method_name(\"$weblog_name\", \"$weblog_url\", \"$changes_url\")";
  374. }
  375. else
  376. {
  377. $params = array($name_param, $url_param);
  378. $call_text = "$method_name(\"$weblog_name\", \"$weblog_url\")";
  379. }
  380. }
  381. // create the message
  382. $message = new xmlrpcmsg($method_name, $params);
  383. $client = new xmlrpc_client($xml_rpc_path, $xml_rpc_server, $xml_rpc_port);
  384. $response = $client->send($message);
  385. $this->log_ping("Request: " . $call_text);
  386. $this->log_ping($message->serialize(), true);
  387. if ($response == 0)
  388. {
  389. $error_text = "Error: " . $xml_rpc_server . ": " . $client->errno . " " . $client->errstring;
  390. $this->report_error($error_text);
  391. $this->log_ping($error_text);
  392. $log->addArray(array('status'=>LAN_ERROR, 'service'=>$xml_rpc_server, 'url'=> $changes_url, 'response'=>$client->errstring))->save('PING_01');
  393. return false;
  394. }
  395. if ($response->faultCode() != 0)
  396. {
  397. $error_text = "Error: " . $xml_rpc_server . ": " . $response->faultCode() . " " . $response->faultString();
  398. $this->report_error($error_text);
  399. $log->addArray(array('status'=>LAN_ERROR, 'service'=>$xml_rpc_server, 'url'=> $changes_url, 'response'=>$response->faultString()))->save('PING_01');
  400. return false;
  401. }
  402. $response_value = $response->value();
  403. if ($this->debug)
  404. {
  405. $this->report_error($response_value->serialize());
  406. }
  407. $this->log_ping($response_value->serialize(), true);
  408. $fl_error = $response_value->structmem('flerror');
  409. $message = $response_value->structmem('message');
  410. // read the response
  411. if ($fl_error->scalarval() != false)
  412. {
  413. $error_text = "Error: " . $xml_rpc_server . ": " . $message->scalarval();
  414. $this->report_error($error_text);
  415. $log->addArray(array('status'=>LAN_ERROR, 'service'=>$xml_rpc_server, 'url'=> $changes_url, 'response'=>$message->scalarval()))->save('PING_01');
  416. // $this->log_ping($error_text);
  417. return false;
  418. }
  419. $log->addArray(array('status'=>LAN_OK, 'service'=>$xml_rpc_server, 'url'=> $changes_url, 'response'=>$message->scalarval()))->save('PING_01');
  420. return true;
  421. }
  422. // save ping data to a log file
  423. function log_ping($message, $xml_data = false)
  424. {
  425. $message = $xml_data." ".$message;
  426. file_put_contents(e_LOG."news_ping.log", $message, FILE_APPEND);
  427. }
  428. // sDisplay Ping errors.
  429. function report_error($message)
  430. {
  431. e107::getMessage()->addError($message, 'default', true);
  432. }
  433. function createPage()
  434. {
  435. // print_a($_POST);
  436. if(isset($_GET['sub']))
  437. {
  438. $id = intval($_GET['sub']);
  439. $this->loadSubmitted($id);
  440. }
  441. else
  442. {
  443. $this->preCreate();
  444. }
  445. $this->newspost->show_create_item();
  446. }
  447. function categoryPage()
  448. {
  449. if(!getperms('0|7'))
  450. {
  451. $this->noPermissions();
  452. }
  453. $this->newspost->show_categories();
  454. // $newspost->show_create_item();
  455. }
  456. function submittedPage()
  457. {
  458. $this->newspost->show_submitted_news();
  459. }
  460. function maintPage()
  461. {
  462. }
  463. function settingsPage()
  464. {
  465. return $this->newspost->show_news_prefs();
  466. }
  467. function noPermissions($qry = '')
  468. {
  469. $url = e_SELF.($qry ? '?'.$qry : '');
  470. if($qry !== e_QUERY)
  471. {
  472. $mes = e107::getMessage();
  473. $this->show_message('Insufficient permissions!', E_MESSAGE_ERROR, true);
  474. session_write_close();
  475. header('Location: '.$url);
  476. }
  477. exit;
  478. }
  479. function loadSubmitted($id)
  480. {
  481. $sql = e107::getDb();
  482. $tp = e107::getParser();
  483. if ($sql->select("submitnews", "*", "submitnews_id=".intval($id)))
  484. {
  485. //list($id, $submitnews_name, $submitnews_email, $_POST['news_title'], $submitnews_category, $_POST['news_body'], $submitnews_datestamp, $submitnews_ip, $submitnews_auth, $submitnews_file) = $sql->fetch();
  486. $row = $sql->fetch();
  487. $_POST['news_title'] = $row['submitnews_title'];
  488. $_POST['news_body'] = $row['submitnews_item'];
  489. $_POST['cat_id'] = $row['submitnews_category'];
  490. // if (defsettrue('e_WYSIWYG'))
  491. // {
  492. // if (substr($_POST['news_body'],-7,7) == '[/html]') $_POST['news_body'] = substr($_POST['news_body'],0,-7);
  493. // if (substr($_POST['news_body'],0,6) == '[html]') $_POST['news_body'] = substr($_POST['news_body'],6);
  494. // $_POST['news_body'] .= "<br /><b>".NWSLAN_49." {$row['submitnews_name']}</b>";
  495. // $_POST['news_body'] .= ($row['submitnews_file'])? "<br /><br /><img src='{e_NEWSIMAGE}{$row['submitnews_file']}' class='f-right' />": '';
  496. // }
  497. // else
  498. {
  499. $_POST['news_body'] .= "\n[[b]".NWSLAN_49." {$row['submitnews_name']}[/b]]";
  500. if($row['submitnews_file'])
  501. {
  502. $files = explode(",",$row['submitnews_file']);
  503. foreach($files as $f)
  504. {
  505. if($bbpath = e107::getMedia()->importFile($f,'news'))
  506. {
  507. $_POST['news_body'] .= "\n\n[img]".$bbpath."[/img]";
  508. }
  509. }
  510. }
  511. }
  512. $_POST['data'] = $tp->dataFilter($_POST['data']); // Filter any nasties
  513. $_POST['news_title'] = $tp->dataFilter($_POST['news_title']);
  514. }
  515. }
  516. function preCreate()
  517. {
  518. if($_GET['action'] == "edit" && !$_POST['preview'])
  519. {
  520. if(!isset($_POST['submit_news']))
  521. {
  522. if(e107::getDb()->select('news', '*', 'news_id='.intval($_GET['id'])))
  523. {
  524. $row = e107::getDb()->fetch();
  525. // if(!isset($this->news_categories[$row['news_category']]))
  526. {
  527. // $this->noPermissions();
  528. }
  529. $_POST['news_title'] = $row['news_title'];
  530. $_POST['news_sef'] = $row['news_sef'];
  531. $_POST['news_body'] = $row['news_body'];
  532. $_POST['news_author'] = $row['news_author'];
  533. $_POST['news_extended'] = $row['news_extended'];
  534. $_POST['news_allow_comments'] = $row['news_allow_comments'];
  535. $_POST['news_class'] = $row['news_class'];
  536. $_POST['news_summary'] = $row['news_summary'];
  537. $_POST['news_sticky'] = $row['news_sticky'];
  538. $_POST['news_datestamp'] = ($_POST['news_datestamp']) ? $_POST['news_datestamp'] : $row['news_datestamp'];
  539. $_POST['cat_id'] = $row['news_category'];
  540. $_POST['news_start'] = $row['news_start'];
  541. $_POST['news_end'] = $row['news_end'];
  542. $_POST['comment_total'] = e107::getDb()->db_Count("comments", "(*)", " WHERE comment_item_id={$row['news_id']} AND comment_type='0'");
  543. $_POST['news_render_type'] = $row['news_render_type'];
  544. $_POST['news_thumbnail'] = $row['news_thumbnail'];
  545. $_POST['news_meta_keywords'] = $row['news_meta_keywords'];
  546. $_POST['news_meta_description'] = $row['news_meta_description'];
  547. }
  548. }
  549. else // on submit
  550. {
  551. if(!empty($_POST['news_meta_keywords'])) $_POST['news_meta_keywords'] = eHelper::formatMetaKeys($_POST['news_meta_keywords']);
  552. }
  553. }
  554. }
  555. }
  556. class news_form_ui extends e_admin_form_ui
  557. {
  558. function news_thumbnail($curval,$mode)
  559. {
  560. if(!vartrue($curval)) return;
  561. if(strpos($curval, ",")!==false)
  562. {
  563. $tmp = explode(",",$curval);
  564. $curval = $tmp[0];
  565. }
  566. $vparm = array('thumb'=>'tag','w'=> 80);
  567. if($thumb = e107::getParser()->toVideo($curval,$vparm))
  568. {
  569. return $thumb;
  570. }
  571. if($curval[0] != "{")
  572. {
  573. $curval = "{e_IMAGE}newspost_images/".$curval;
  574. }
  575. $url = e107::getParser()->thumbUrl($curval,'aw=80');
  576. $link = e107::getParser()->replaceConstants($curval);
  577. return "<a class='e-dialog' href='{$link}'><img src='{$url}' alt='{$curval}' /></a>";
  578. }
  579. function news_title($value, $mode)
  580. {
  581. if($mode == 'read')
  582. {
  583. $news_item = $this->getController()->getListModel()->toArray();
  584. $url = e107::getUrl()->create('news/view/item', $news_item);
  585. return "<a class='e-tip' href='{$url}' title='Open in new tab' rel='external'>".$value."</a>";
  586. }
  587. return $value;
  588. }
  589. }
  590. new news_admin();
  591. require_once(e_ADMIN."auth.php");
  592. e107::getAdminUI()->runPage();
  593. if(!e_AJAX_REQUEST) require_once("footer.php");
  594. exit;
  595. function headerjs()
  596. {
  597. return;
  598. $newspost = e107::getRegistry('_newspost_admin');
  599. /*
  600. $ret .= "<script type='text/javascript'>
  601. function UpdateForm(id)
  602. {
  603. new e107Ajax.Updater('filterValue', '".e_SELF."?searchValue', {
  604. method: 'post',
  605. evalScripts: true,
  606. parameters: {filtertype: id}
  607. });
  608. }
  609. </script>";
  610. */
  611. // TODO - REMOVE
  612. $ret .= "
  613. <script type='text/javascript'>
  614. if(typeof e107Admin == 'undefined') var e107Admin = {}
  615. /**
  616. * OnLoad Init Control
  617. */
  618. e107Admin.initRules = {
  619. 'Helper': true,
  620. 'AdminMenu': false
  621. }
  622. //custom expand
  623. Element.addMethods( {
  624. newsDescToggle: function(element) {
  625. element = \$(element);
  626. if(!element.visible())
  627. element.fxToggle();
  628. return element;
  629. },
  630. newsScrollToMe: function(element) {
  631. element = \$(element);
  632. new Effect.ScrollTo(element);
  633. return element;
  634. },
  635. newsUpdateButtonSpan: function(element, str, swapClass) {
  636. element = \$(element);
  637. if(swapClass) {
  638. var swapO = swapClass.split('::');
  639. element.removeClassName(swapO[0]).addClassName(swapO[1]);
  640. }
  641. if(element.down('span')) {
  642. element.down('span').update(str);
  643. }
  644. return element;
  645. }
  646. });
  647. //fix form action if needed
  648. document.observe('dom:loaded', function() {
  649. if(\$('core-newspost-create-form')) {
  650. \$('core-newspost-create-form').observe('submit', function(event) {
  651. var form = event.element();
  652. action = form.readAttribute('action') + document.location.hash;
  653. //if(\$('create-edit-stay-1') && \$('create-edit-stay-1').checked)
  654. form.writeAttribute('action', action);
  655. });
  656. }
  657. });
  658. </script>
  659. ";
  660. if($newspost->getAction() == 'cat')
  661. {
  662. $ret .= "
  663. <script type='text/javascript'>
  664. var e_npadmin_ajaxsave = function(action, element) {
  665. var id = element.name.gsub(/[^\d]/, ''),
  666. cl = element.value,
  667. url = '#{e_ADMIN}newspost.php?' + action + '.' + id + '.' + cl;
  668. element.startLoading();
  669. new e107Ajax.Request(url.parsePath(), {
  670. onComplete: function(transport) {
  671. element.stopLoading();
  672. if(transport.responseText)
  673. alert(transport.responseText);//error
  674. }
  675. });
  676. }
  677. //e107 onload custom event
  678. e107.runOnLoad( function(event) {
  679. var celement = event.memo['element'] ? \$(event.memo.element) : \$\$('body')[0];
  680. //Unobtrusive AJAX category list reload
  681. if(\$('trigger-list-refresh')) {
  682. \$('trigger-list-refresh').observe('click', function(event) {
  683. event.stop();
  684. \$('core-newspost-cat-list-form').submitForm(
  685. 'core-newspost-cat-list-cont',
  686. { overlayPage: \$\$('body')[0] },
  687. \$('core-newspost-cat-list-form').action + '_list_refresh'
  688. );
  689. });
  690. }
  691. //Unobtrusive AJAX save category manage permissions
  692. celement.select('select[name^=multi_category_manager]').invoke('observe', 'change', function(event) {
  693. e_npadmin_ajaxsave('catmanager', event.element());
  694. });
  695. //Category order fields - user convenience
  696. celement.select('input[name^=multi_category_order]').invoke('observe', 'focus', function(event) {
  697. event.element().select();
  698. });
  699. //Unobtrusive AJAX save category order
  700. celement.select('input[name^=multi_category_order]').invoke('observe', 'blur', function(event) {
  701. e_npadmin_ajaxsave('catorder', event.element());
  702. });
  703. //Fill form - click observer (Unobtrusive AJAX edit category)
  704. \$\$('a.action[id^=core-news-catedit-]').each(function(element) {
  705. element.observe('click', function(event) {
  706. event.stop();
  707. var el = event.findElement('a');
  708. $('core-newspost-cat-create-form').fillForm(\$\$('body')[0], { handler: el.readAttribute('href') });
  709. });
  710. });
  711. }, null, true);
  712. </script>
  713. ";
  714. }
  715. elseif ($newspost->getAction() == 'pref')
  716. {
  717. $ret .= "
  718. <script type='text/javascript'>
  719. document.observe('dom:loaded', function(){
  720. \$('newsposts').observe('change', function(event) {
  721. new e107Ajax.Updater(
  722. 'newsposts-archive-cont',
  723. '".e_SELF."?pref_archnum.' + (event.element().selectedIndex + 1) + '.' + event.element().readAttribute('tabindex'),
  724. { overlayElement: 'newsposts-archive-cont' }
  725. );
  726. });
  727. });
  728. </script>
  729. ";
  730. }
  731. $ret .= $newspost->_cal->load_files();
  732. return $ret;
  733. }
  734. $e_sub_cat = 'news';
  735. require_once('auth.php');
  736. /*
  737. * Observe for delete action
  738. */
  739. $newspost->observer();
  740. /*
  741. * Show requested page
  742. */
  743. $newspost->show_page();
  744. /* OLD JS? Can't find references to this func
  745. echo "
  746. <script type=\"text/javascript\">
  747. function fclear() {
  748. document.getElementById('core-newspost-create-form').data.value = \"\";
  749. document.getElementById('core-newspost-create-form').news_extended.value = \"\";
  750. }
  751. </script>\n";
  752. */
  753. require_once("footer.php");
  754. exit;
  755. class admin_newspost
  756. {
  757. var $_request = array();
  758. var $_cal = array();
  759. var $_pst;
  760. var $_fields;
  761. var $_sort_order;
  762. var $_sort_link;
  763. var $fieldpref;
  764. var $news_categories;
  765. public $news_renderTypes = array();
  766. public $error = false;
  767. function __construct($qry='')
  768. {
  769. global $user_pref;
  770. $qry = "";
  771. $this->parseRequest($qry);
  772. require_once(e_HANDLER."cache_handler.php");
  773. require_once(e_HANDLER."news_class.php");
  774. $this->fieldpref = varset($user_pref['admin_news_columns'], array('news_id', 'news_title', 'news_author', 'news_render_type', 'options'));
  775. $this->fields = array(
  776. 'checkboxes' => array('title' => '', 'type' => null, 'data'=> false, 'width' => '3%', 'thclass' => 'center first', 'class' => 'center', 'nosort' => true, 'toggle' => 'news_selected', 'forced' => TRUE),
  777. 'news_id' => array('title' => LAN_ID, 'type' => 'number', 'data'=> 'int', 'width' => '5%', 'thclass' => 'center', 'class' => 'center', 'nosort' => false),
  778. 'news_thumbnail' => array('title' => NWSLAN_67, 'type' => 'image', 'data'=> 'str', 'width' => '110px', 'thclass' => 'center', 'class' => "center", 'nosort' => false, 'readParms'=>'thumb=60&thumb_urlraw=0&thumb_aw=60','writeParams' => 'path={e_MEDIA}','readonly'=>false),
  779. 'news_title' => array('title' => LAN_TITLE, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  780. 'news_summary' => array('title' => LAN_NEWS_27, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  781. 'news_meta_keywords' => array('title' => LAN_KEYWORDS, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  782. 'news_meta_description' => array('title' => LAN_DESCRIPTION,'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  783. 'news_sef' => array('title' => LAN_SEFURL, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  784. 'user_name' => array('title' => LAN_AUTHOR, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  785. 'news_datestamp' => array('title' => LAN_NEWS_32, 'type' => 'datestamp', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  786. 'category_name' => array('title' => NWSLAN_6, 'type' => 'text', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  787. 'news_start' => array('title' => "Start", 'type' => 'datestamp', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  788. 'news_end' => array('title' => "End", 'type' => 'datestamp', 'data'=> 'str','width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false, 'parms' => 'mask=%A %d %B %Y'),
  789. 'news_class' => array('title' => LAN_VISIBILITY, 'type' => 'userclass', 'data'=> 'str', 'width' => 'auto', 'thclass' => '', 'class' => null, 'nosort' => false),
  790. 'news_render_type' => array('title' => LAN_NEWS_49, 'type' => 'dropdown', 'data'=> 'comma', 'width' => 'auto', 'thclass' => 'center', 'class' => null, 'nosort' => false),
  791. 'news_sticky' => array('title' => LAN_NEWS_28, 'type' => 'boolean', 'data'=> 'int', 'width' => 'auto', 'thclass' => 'center', 'class' => 'center', 'nosort' => false),
  792. 'news_allow_comments' => array('title' => NWSLAN_15, 'type' => 'boolean', 'data'=> 'int', 'width' => 'auto', 'thclass' => 'center', 'class' => 'center', 'nosort' => false),
  793. 'news_comment_total' => array('title' => LAN_NEWS_60, 'type' => 'number', 'data'=> 'int', 'width' => '10%', 'thclass' => '', 'class' => null, 'nosort' => false),
  794. 'options' => array('title' => LAN_OPTIONS, 'type' => null, 'data'=> false, 'width' => '10%', 'thclass' => 'center last', 'class' => 'center', 'nosort' => true, 'forced' => TRUE)
  795. );
  796. /* $ren_type = array(NWSLAN_75,NWSLAN_76,NWSLAN_77,NWSLAN_77." 2");
  797. $r_array = array();
  798. foreach($ren_type as $key=>$value)
  799. {
  800. $this->news_renderTypes[$key] = $value;
  801. }*/
  802. // $this->news_renderTypes = array('0'=>NWSLAN_75,'1'=>NWSLAN_76,'2'=>NWSLAN_77,'3'=>NWSLAN_77." 2",'4'=>"Featurebox");
  803. // $this->news_renderTypes = array('0'=>"FrontPage",'1'=>"FrontPage - Linkonly",'2'=>"Othernews Sidebar",'3'=>"Othernews Sidebar"." 2",'4'=>"Featurebox");
  804. }
  805. function parseRequest($qry)
  806. {
  807. $tmp = explode(".", $qry);
  808. $action = varsettrue($tmp[0], 'main');
  809. $sub_action = varset($tmp[1], '');
  810. $id = isset($tmp[2]) && is_numeric($tmp[2]) ? intval($tmp[2]) : 0;
  811. $this->_sort_order = isset($tmp[2]) && !is_numeric($tmp[2]) ? $tmp[2] : 'desc';
  812. $from = intval(varset($tmp[3],0));
  813. unset($tmp);
  814. $action = vartrue($_GET['action'],'main');
  815. $sub_action = varset($_GET['sub'],'');
  816. $id = isset($_GET['id']) && is_numeric($_GET['id']) ? intval($_GET['id']) : 0;
  817. $this->_sort_order = isset($_GET['id']) && !is_numeric($_GET['id']) ? $_GET['id'] : 'desc';
  818. $from = intval(varset($_GET['frm'],0));
  819. if ($this->_sort_order != 'asc') $this->_sort_order = 'desc';
  820. $this->_sort_link = ($this->_sort_order) == 'asc' ? 'desc' : 'asc';
  821. $sort_order = 'desc';
  822. $this->_request = array($action, $sub_action, $id, $sort_order, $from);
  823. }
  824. function getAction()
  825. {
  826. return $this->_request[0];
  827. }
  828. /**
  829. * @param string $action
  830. * @return admin_newspost
  831. */
  832. function setAction($action)
  833. {
  834. $this->_request[0] = $action;
  835. return $this;
  836. }
  837. function getSubAction()
  838. {
  839. return $this->_request[1];
  840. }
  841. /**
  842. * @param string $action
  843. * @return admin_newspost
  844. */
  845. function setSubAction($action)
  846. {
  847. $this->_request[1] = $action;
  848. return $this;
  849. }
  850. function getId()
  851. {
  852. return $this->_request[2];
  853. }
  854. /**
  855. * @param integer $id
  856. * @return admin_newspost
  857. */
  858. function setId($id)
  859. {
  860. $this->_request[2] = intval($id);
  861. return $this;
  862. }
  863. function getSortOrder()
  864. {
  865. return $this->_request[3];
  866. }
  867. function getFrom()
  868. {
  869. return $this->_request[4];
  870. }
  871. function clear_cache()
  872. {
  873. $ecache = e107::getCache();
  874. $ecache->clear("news.php"); //TODO change it to 'news_*' everywhere
  875. $ecache->clear("news_", false, true); //NEW global news cache prefix
  876. //$ecache->clear("nq_news_"); - supported by cache::clear() now
  877. //$ecache->clear("nomd5_news_"); supported by cache::clear() now
  878. $ecache->clear("othernews"); //TODO change it to 'news_othernews' everywhere
  879. $ecache->clear("othernews2"); //TODO change it to 'news_othernews2' everywhere
  880. return $this;
  881. }
  882. function clear_rwcache($sefstr = '')
  883. {
  884. // obsolete
  885. }
  886. function set_rwcache($sefstr, $data)
  887. {
  888. // obsolete
  889. }
  890. function ajax_observer()
  891. {
  892. $method = 'ajax_exec_'.$this->getAction();
  893. if(e_AJAX_REQUEST && method_exists($this, $method))
  894. {
  895. $this->$method();
  896. return true;
  897. }
  898. return false;
  899. }
  900. function observer()
  901. {
  902. e107::getDb()->db_Mark_Time('News Administration');
  903. $this->news_categories = array();
  904. if(e107::getDb()->select('news_category', '*', (getperms('0') ? '' : 'category_manager IN ('.USERCLASS_LIST.')')))
  905. {
  906. $this->news_categories = e107::getDb()->db_getList('ALL', FALSE, FALSE, 'category_id');
  907. }
  908. //Required on create & savepreset action triggers
  909. if(isset($_POST['news_userclass']) && is_array($_POST['news_userclass']))
  910. {
  911. $_POST['news_class'] = implode(",", $_POST['news_userclass']);
  912. unset($_POST['news_userclass']);
  913. }
  914. $main = getperms('0');
  915. if(isset($_POST['delete']) && is_array($_POST['delete']))
  916. {
  917. $this->_observe_delete();
  918. }
  919. elseif(isset($_POST['execute_batch']))
  920. {
  921. $this->process_batch($_POST['news_selected']);
  922. }
  923. elseif(isset($_POST['submit_news']))
  924. {
  925. $this->_observe_submit_item($this->getSubAction(), $this->getId());
  926. }
  927. elseif($main && isset($_POST['create_category']))
  928. {
  929. $this->_observe_create_category();
  930. }
  931. elseif($main && isset($_POST['update_category']))
  932. {
  933. $this->_observe_update_category();
  934. }
  935. elseif($main && isset($_POST['multi_update_category']))
  936. {
  937. $this->_observe_multi_create_category();
  938. }
  939. elseif($main && isset($_POST['save_prefs']))
  940. {
  941. $this->_observe_save_prefs();
  942. }
  943. elseif(isset($_POST['submitupload']))
  944. {
  945. $this->_observe_upload();
  946. }
  947. elseif(isset($_POST['news_comments_recalc']))
  948. {
  949. $this->_observe_newsCommentsRecalc();
  950. }
  951. if(isset($_POST['etrigger_ecolumns'])) //elseif fails.
  952. {
  953. // $this->_observe_saveColumns();
  954. }
  955. }
  956. function show_page()
  957. {
  958. // print_a($POST);
  959. switch ($this->getAction()) {
  960. case 'create':
  961. $this->_pst->read_preset('admin_newspost'); //only works here because $_POST is used.
  962. $this->show_create_item();
  963. break;
  964. case 'cat':
  965. if(!getperms('0|7'))
  966. {
  967. $this->noPermissions();
  968. }
  969. $this->show_categories();
  970. break;
  971. case 'sn':
  972. $this->show_submitted_news();
  973. break;
  974. case 'pref':
  975. if(!getperms('0'))
  976. {
  977. $this->noPermissions();
  978. }
  979. $this->show_news_prefs();
  980. break;
  981. case 'maint' :
  982. if(!getperms('0'))
  983. {
  984. $this->noPermissions();
  985. }
  986. $this->showMaintenance();
  987. break;
  988. default:
  989. $this->show_existing_items();
  990. break;
  991. }
  992. }
  993. function _observe_delete()
  994. {
  995. $admin_log = e107::getAdminLog();
  996. //FIXME - SEF URL cache
  997. $tmp = array_keys($_POST['delete']);
  998. list($delete, $del_id) = explode("_", $tmp[0]);
  999. $del_id = intval($del_id);
  1000. if(!$del_id) return false;
  1001. $e107 = e107::getInstance();
  1002. switch ($delete) {
  1003. case 'main':
  1004. if ($sql->count('news','(*)',"news_id={$del_id}"))
  1005. {
  1006. e107::getEvent()->trigger("newsdel", $del_id);
  1007. if($sql->delete("news", "news_id={$del_id}"))
  1008. {
  1009. $admin_log->log_event('NEWS_01',$del_id,E_LOG_INFORMATIVE,'');
  1010. $this->show_message(NWSLAN_31." #".$del_id." ".NWSLAN_32, E_MESSAGE_SUCCESS);
  1011. $this->clear_cache();
  1012. $data = array('method'=>'delete', 'table'=>'news', 'id'=>$del_id, 'plugin'=>'news', 'function'=>'delete');
  1013. $this->show_message(e107::getEvent()->triggerHook($data), E_MESSAGE_WARNING);
  1014. admin_purge_related("news", $del_id);
  1015. }
  1016. }
  1017. break;
  1018. case 'category':
  1019. if(!getperms('0|7')) $this->noPermissions();
  1020. if (($count = $sql->count('news','(news_id)',"news_category={$del_id}")) === false || $count > 0)
  1021. {
  1022. $this->show_message('Category is in used in <strong>'.$count.'</strong> news items and cannot be deleted.', E_MESSAGE_ERROR);
  1023. return false;
  1024. }
  1025. if ($sql->count('news_category','(*)',"category_id={$del_id}"))
  1026. {
  1027. e107::getEvent()->trigger("newscatdel", $del_id);
  1028. if ($sql->delete("news_category", "category_id={$del_id}"))
  1029. {
  1030. $admin_log->log_event('NEWS_02',$del_id,E_LOG_INFORMATIVE,'');
  1031. $this->show_message(NWSLAN_33." #".$del_id." ".NWSLAN_32, E_MESSAGE_SUCCESS);
  1032. $this->clear_cache();
  1033. }
  1034. }
  1035. break;
  1036. case 'sn':
  1037. if ($sql->delete("submitnews", "submitnews_id={$del_id}"))
  1038. {
  1039. $admin_log->log_event('NEWS_03',$del_id,E_LOG_INFORMATIVE,'');
  1040. $this->show_message(NWSLAN_34." #".$del_id." ".NWSLAN_32);
  1041. $this->clear_cache();
  1042. }
  1043. break;
  1044. default:
  1045. return false;
  1046. }
  1047. return true;
  1048. }
  1049. /**
  1050. * For future use: multiple-images.
  1051. */
  1052. private function processThumbs($postedImage)
  1053. {
  1054. if(is_array($postedImage))
  1055. {
  1056. return implode(",",array_filter($postedImage));
  1057. }
  1058. else
  1059. {
  1060. return $postedImage;
  1061. }
  1062. }
  1063. // In USE.
  1064. function _observe_submit_item($sub_action, $id)
  1065. {
  1066. // ##### Format and submit item to DB
  1067. $ix = new news;
  1068. // jQuery UI temporary date-time fix - inputdatetime -> inputdate
  1069. $_POST['news_start'] = vartrue(e107::getDate()->convert($_POST['news_start'],'inputdatetime'), 0);
  1070. if($_POST['news_start'])
  1071. {
  1072. // $_POST['news_start'] = e107::getDate()->convert($_POST['news_start']);
  1073. }
  1074. else
  1075. {
  1076. // $_POST['news_start'] = 0;
  1077. }
  1078. if($_POST['news_end'])
  1079. {
  1080. $_POST['news_end'] = e107::getDate()->convert($_POST['news_end'],'inputdatetime');
  1081. }
  1082. else
  1083. {
  1084. $_POST['news_end'] = 0;
  1085. }
  1086. if($_POST['news_datestamp'])
  1087. {
  1088. $_POST['news_datestamp'] = e107::getDate()->convert($_POST['news_datestamp'],'inputdatetime');
  1089. }
  1090. else
  1091. {
  1092. $_POST['news_datestamp'] = time();
  1093. }
  1094. $_POST['news_thumbnail'] = $this->processThumbs($_POST['news_thumbnail']);
  1095. /*
  1096. $matches = array();
  1097. if(preg_match('#(.*?)/(.*?)/(.*?) (.*?):(.*?):(.*?)$#', $_POST['news_datestamp'], $matches))
  1098. {
  1099. $_POST['news_datestamp'] = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[1], $matches[3]);
  1100. }
  1101. else
  1102. {
  1103. $_POST['news_datestamp'] = time();
  1104. }
  1105. if($_POST['update_datestamp'])
  1106. {
  1107. $_POST['news_datestamp'] = time();
  1108. }
  1109. */
  1110. if ($id && $sub_action != "sn" && $sub_action != "upload")
  1111. {
  1112. $_POST['news_id'] = $id;
  1113. }
  1114. else
  1115. {
  1116. e107::getDb()->db_Update('submitnews', "submitnews_auth=1 WHERE submitnews_id ={$id}");
  1117. e107::getAdminLog()->log_event('NEWS_07', $id, E_LOG_INFORMATIVE,'');
  1118. }
  1119. if (!isset($_POST['cat_id']))
  1120. {
  1121. $_POST['cat_id'] = 0;
  1122. }
  1123. $_POST['news_category'] = $_POST['cat_id'];
  1124. if(!isset($this->news_categories[$_POST['news_category']]))
  1125. {
  1126. $this->noPermissions();
  1127. }
  1128. /*if(isset($_POST['news_thumbnail']))
  1129. {
  1130. $_POST['news_thumbnail'] = urldecode(basename($_POST['news_thumbnail']));
  1131. }*/
  1132. $_POST['news_render_type'] = implode(",",$_POST['news_render_type']);
  1133. // print_a($_POST);
  1134. // exit;
  1135. $tmp = explode(chr(35), $_POST['news_author']);
  1136. $_POST['news_author'] = $tmp[0];
  1137. $ret = $ix->submit_item($_POST, !vartrue($_POST['create_edit_stay']));
  1138. if($ret['error'])
  1139. {
  1140. e107::getMessage()->mergeWithSession() //merge with session messages
  1141. ->add(($id ? LAN_UPDATED_FAILED : LAN_CREATED_FAILED), E_MESSAGE_ERROR);
  1142. $_POST['news_sef'] = $ret['data']['news_sef'];
  1143. return false;
  1144. }
  1145. $this->clear_cache();
  1146. if(isset($_POST['create_edit_stay']) && !empty($_POST['create_edit_stay']))
  1147. {
  1148. if($this->getAction() != 'edit')
  1149. {
  1150. session_write_close();
  1151. $rurl = e_SELF.(vartrue($ret['news_id']) ? '?mode='.$_GET['mode'].'&action=edit&id='.$ret['news_id'] : '');
  1152. header('Location: '.$rurl);
  1153. exit;
  1154. }
  1155. }
  1156. else
  1157. {
  1158. session_write_close();
  1159. header('Location:'.e_SELF);
  1160. exit;
  1161. }
  1162. }
  1163. function _observe_create_category()
  1164. {
  1165. if(!getperms('0|7'))
  1166. {
  1167. $this->noPermissions();
  1168. }
  1169. //FIXME - lan, e_model based news administration model
  1170. $this->error = false;
  1171. if(empty($_POST['category_name']))
  1172. {
  1173. $this->show_message('Validation Error: Missing Category name', E_MESSAGE_ERROR);
  1174. $this->error = true;
  1175. if(!empty($_POST['category_sef']))
  1176. {
  1177. $_POST['category_sef'] = eHelper::secureSef($_POST['category_sef']);
  1178. }
  1179. }
  1180. else
  1181. {
  1182. // first format sef...
  1183. if(empty($_POST['category_sef']))
  1184. {
  1185. $_POST['category_sef'] = eHelper::title2sef($_POST['category_name']);
  1186. }
  1187. else
  1188. {
  1189. $_POST['category_sef'] = eHelper::secureSef($_POST['category_sef']);
  1190. }
  1191. }
  1192. // ...then check it
  1193. if(empty($_POST['category_sef']))
  1194. {
  1195. $this->error = true;
  1196. $this->show_message('Validation error: News Category SEF URL value is required field and can\'t be empty!', E_MESSAGE_ERROR);
  1197. }
  1198. elseif(e107::getDb()->db_Count('news_category', '(category_id)', "category_sef='".e107::getParser()->toDB($_POST['category_sef'])."'"))
  1199. {
  1200. $this->error = true;
  1201. $this->show_message('Validation error: News Category SEF URL is unique field - current value already in use! Please choose another SEF URL value.', E_MESSAGE_ERROR);
  1202. }
  1203. if (!$this->error)
  1204. {
  1205. $inserta = array();
  1206. $inserta['data']['category_icon'] = $_POST['category_icon'];
  1207. $inserta['_FIELD_TYPES']['category_icon'] = 'todb';
  1208. $inserta['data']['category_name'] = $_POST['category_name'];
  1209. $inserta['_FIELD_TYPES']['category_name'] = 'todb';
  1210. $inserta['data']['category_sef'] = $_POST['category_sef'];
  1211. $inserta['_FIELD_TYPES']['category_sef'] = 'todb';
  1212. $inserta['data']['category_meta_description'] = eHelper::formatMetaDescription($_POST['category_meta_description']);
  1213. $inserta['_FIELD_TYPES']['category_meta_description'] = 'todb';
  1214. $inserta['data']['category_meta_keywords'] = eHelper::formatMetaKeys($_POST['category_meta_keywords']);
  1215. $inserta['_FIELD_TYPES']['category_meta_keywords'] = 'todb';
  1216. $inserta['data']['category_manager'] = $_POST['category_manager'];
  1217. $inserta['_FIELD_TYPES']['category_manager'] = 'int';
  1218. $inserta['data']['category_order'] = $_POST['category_order'];
  1219. $inserta['_FIELD_TYPES']['category_order'] = 'int';
  1220. $id = e107::getDb()->db_Insert('news_category', $inserta);
  1221. if($id)
  1222. {
  1223. $inserta['data']['category_id'] = $id;
  1224. //admin log now supports DB array and method chaining
  1225. e107::getAdminLog()->log_event('NEWS_04', $inserta, E_LOG_INFORMATIVE, '');
  1226. $this->show_message(NWSLAN_35, E_MESSAGE_SUCCESS);
  1227. $this->clear_cache();
  1228. //TODO - add to WIKI docs
  1229. e107::getEvent()->trigger("newscatpost", array_merge($inserta['data'], $rwinserta['data']));
  1230. }
  1231. else
  1232. {
  1233. //debug + error message
  1234. if(e107::getDb()->getLastErrorNumber())
  1235. {
  1236. $this->error = true;
  1237. $this->show_message('mySQL Error detected!', E_MESSAGE_ERROR);
  1238. e107::getMessage()->addDebug('mySQL error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText());
  1239. }
  1240. }
  1241. }
  1242. }
  1243. function _observe_update_category()
  1244. {
  1245. if(!getperms('0|7'))
  1246. {
  1247. $this->noPermissions();
  1248. }
  1249. $this->setId(intval($_POST['category_id']));
  1250. if(!$this->getId())
  1251. {
  1252. return;
  1253. }
  1254. //FIXME - lan, e_model based news administration model
  1255. $this->error = false;
  1256. if(empty($_POST['category_name']))
  1257. {
  1258. $this->show_message('Validation Error: Missing Category name', E_MESSAGE_ERROR);
  1259. $this->error = true;
  1260. if(!empty($_POST['category_sef']))
  1261. {
  1262. $_POST['category_sef'] = eHelper::secureSef($_POST['category_sef']);
  1263. }
  1264. }
  1265. else
  1266. {
  1267. // first format sef...
  1268. if(empty($_POST['category_sef']))
  1269. {
  1270. $_POST['category_sef'] = eHelper::title2sef($_POST['category_name']);
  1271. }
  1272. else
  1273. {
  1274. $_POST['category_sef'] = eHelper::secureSef($_POST['category_sef']);
  1275. }
  1276. }
  1277. // ...then check it
  1278. if(empty($_POST['category_sef']))
  1279. {
  1280. $this->error = true;
  1281. $this->show_message('Validation error: News Category SEF URL value is required field and can\'t be empty!', E_MESSAGE_ERROR);
  1282. }
  1283. elseif(e107::getDb()->db_Count('news_category', '(category_id)', "category_id<>".$this->getId()." AND category_sef='".(e107::getParser()->toDB($_POST['category_sef'])."'")))
  1284. {
  1285. $this->error = true;
  1286. $this->show_message('Validation error: News Category SEF URL is unique field - current value already in use! Please choose another SEF URL value.', E_MESSAGE_ERROR);
  1287. }
  1288. if (!$this->error)
  1289. {
  1290. $updatea = array();
  1291. $updatea['data']['category_icon'] = $_POST['category_icon'];
  1292. $updatea['_FIELD_TYPES']['category_icon'] = 'todb';
  1293. $updatea['data']['category_name'] = $_POST['category_name'];
  1294. $updatea['_FIELD_TYPES']['category_name'] = 'todb';
  1295. $updatea['data']['category_sef'] = $_POST['category_sef'];
  1296. $updatea['_FIELD_TYPES']['category_sef'] = 'todb';
  1297. $updatea['data']['category_meta_description'] = strip_tags($_POST['category_meta_description']);
  1298. $updatea['_FIELD_TYPES']['category_meta_description'] = 'str';
  1299. $updatea['data']['category_meta_keywords'] = $_POST['category_meta_keywords'];
  1300. $updatea['_FIELD_TYPES']['category_meta_keywords'] = 'str';
  1301. $updatea['data']['category_manager'] = $_POST['category_manager'];
  1302. $updatea['_FIELD_TYPES']['category_manager'] = 'int';
  1303. $updatea['data']['category_order'] = $_POST['category_order'];
  1304. $updatea['_FIELD_TYPES']['category_order'] = 'int';
  1305. $updatea['WHERE'] = 'category_id='.$this->getId();
  1306. $inserta = array();
  1307. $rid = 0;
  1308. $upcheck = e107::getDb()->db_Update("news_category", $updatea);
  1309. $rwupcheck = false;
  1310. if($upcheck || !e107::getDb()->getLastErrorNumber())
  1311. {
  1312. if ($upcheck || $rwupcheck)
  1313. {
  1314. //admin log now supports DB array and method chaining
  1315. $updatea['data']['category_id'] = $this->getId();
  1316. if($upcheck) e107::getAdminLog()->log_event('NEWS_05', $updatea['data'], E_LOG_INFORMATIVE, '');
  1317. if($rwupcheck && $inserta['data']) e107::getAdminLog()->log_event('NEWS_10', $inserta['data'], E_LOG_INFORMATIVE, '');
  1318. $this->show_message(NWSLAN_36, E_MESSAGE_SUCCESS);
  1319. $this->clear_cache();
  1320. //TODO - add to WIKI docs
  1321. e107::getEvent()->trigger("newscatupd", array_merge($updatea['data'], $inserta['data']));
  1322. }
  1323. else
  1324. {
  1325. $this->show_message(LAN_NO_CHANGE);
  1326. }
  1327. $this->setId(0);
  1328. }
  1329. else
  1330. {
  1331. $this->error = true;
  1332. $this->setSubAction('edit');
  1333. $this->show_message('mySQL Error detected!', E_MESSAGE_ERROR);
  1334. $this->show_message('#'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText(), E_MESSAGE_DEBUG);
  1335. return;
  1336. }
  1337. }
  1338. }
  1339. function _observe_multi_create_category()
  1340. {
  1341. if(!getperms('0|7'))
  1342. {
  1343. $this->noPermissions();
  1344. }
  1345. $cnt = 0;
  1346. foreach ($_POST['multi_category_manager'] as $cid => $val)
  1347. {
  1348. $order = $_POST['multi_category_order'][$cid];
  1349. $cnt += (int) e107::getDb()->db_Update('news_category', 'category_manager='.intval($val).', category_order='.intval($order).' WHERE category_id='.intval($cid));
  1350. }
  1351. if($cnt) e107::getMessage()->addSuccess(LAN_UPDATED);
  1352. }
  1353. function _observe_save_prefs()
  1354. {
  1355. if(!getperms('0'))
  1356. {
  1357. $this->noPermissions();
  1358. }
  1359. $temp = array();
  1360. $temp['newsposts'] = intval($_POST['newsposts']);
  1361. $temp['newsposts_archive'] = intval($_POST['newsposts_archive']);
  1362. $temp['newsposts_archive_title'] = e107::getParser()->toDB($_POST['newsposts_archive_title']);
  1363. $temp['news_cats'] = intval($_POST['news_cats']);
  1364. $temp['nbr_cols'] = intval($_POST['nbr_cols']);
  1365. $temp['subnews_attach'] = intval($_POST['subnews_attach']);
  1366. $temp['subnews_resize'] = intval($_POST['subnews_resize']);
  1367. $temp['subnews_class'] = intval($_POST['subnews_class']);
  1368. $temp['subnews_htmlarea'] = intval($_POST['subnews_htmlarea']);
  1369. $temp['news_subheader'] = e107::getParser()->toDB($_POST['news_subheader']);
  1370. $temp['news_newdateheader'] = intval($_POST['news_newdateheader']);
  1371. $temp['news_unstemplate'] = intval($_POST['news_unstemplate']);
  1372. $temp['news_editauthor'] = intval($_POST['news_editauthor']);
  1373. $temp['news_ping_services'] = explode("\n",$_POST['news_ping_services']);
  1374. $temp['news_sefbase'] = preg_replace('#[^\w\pL\-]#u', '', $_POST['news_sefbase']);
  1375. $temp['news_list_limit'] = intval($_POST['news_list_limit']);
  1376. e107::getConfig()->updatePref($temp);
  1377. if(e107::getConfig()->save(false))
  1378. {
  1379. e107::getAdminLog()->logArrayDiffs($temp, e107::getPref(), 'NEWS_06');
  1380. $this->clear_cache();
  1381. }
  1382. }
  1383. function _observe_upload()
  1384. {
  1385. //$pref['upload_storagetype'] = "1";
  1386. require_once(e_HANDLER."upload_handler.php");
  1387. $uploaded = file_upload(e_NEWSIMAGE);
  1388. foreach($_POST['uploadtype'] as $key=>$uploadtype)
  1389. {
  1390. if($uploadtype == "thumb")
  1391. {
  1392. rename(e_NEWSIMAGE.$uploaded[$key]['name'],e_NEWSIMAGE."thumb_".$uploaded[$key]['name']);
  1393. }
  1394. if($uploadtype == "file")
  1395. {
  1396. rename(e_NEWSIMAGE.$uploaded[$key]['name'],e_DOWNLOAD.$uploaded[$key]['name']);
  1397. }
  1398. if ($uploadtype == "resize" && $_POST['resize_value'])
  1399. {
  1400. require_once(e_HANDLER."resize_handler.php");
  1401. resize_image(e_NEWSIMAGE.$uploaded[$key]['name'], e_NEWSIMAGE.$uploaded[$key]['name'], $_POST['resize_value'], "copy");
  1402. }
  1403. }
  1404. }
  1405. /*
  1406. function _observe_saveColumns()
  1407. {
  1408. global $user_pref,$admin_log;
  1409. $user_pref['admin_news_columns'] = $_POST['e-columns'];
  1410. save_prefs('user');
  1411. $this->fieldpref = $user_pref['admin_news_columns'];
  1412. }
  1413. function show_existing_items()
  1414. {
  1415. $user_pref = e107::getUser()->getPref();
  1416. $sql = e107::getDb();
  1417. if(!getperms('H'))
  1418. {
  1419. return;
  1420. }
  1421. //require_once(e_HANDLER."form_handler.php");
  1422. $frm = e107::getForm(true); //enable inner tabindex counter
  1423. // Effectively toggle setting for headings
  1424. $amount = 10;//TODO - pref
  1425. if(!is_array($user_pref['admin_news_columns']))
  1426. {
  1427. $user_pref['admin_news_columns'] = array("news_id","news_title","news_author","news_render_type");
  1428. }
  1429. $field_columns = $this->fields;
  1430. $e107 = e107::getInstance();
  1431. // ------ Search Filter ------
  1432. $text .= "
  1433. <form method='get' action='".e_SELF."'>
  1434. <div class='left' style='padding:20px'>
  1435. <input type='text' name='srch' value='".$_GET['srch']."' />\n";
  1436. $text .= "<select class='tbox' name='filter' onchange='this.form.submit()' >
  1437. <option value=''>All Categories</option>\n"; // TODO LAN
  1438. foreach($this->news_categories as $arr)
  1439. {
  1440. $key = $arr['category_id'];
  1441. $val = $arr['category_name'];
  1442. $sel = ($_GET['filter'] == $key) ? "selected='selected'" : "";
  1443. $text .= "<option value='$key' {$sel}>".$val."</option>\n";
  1444. }
  1445. $text .= "</select>";
  1446. $text .= $frm->admin_button('searchsubmit', NWSLAN_63, 'search');
  1447. $text .= "
  1448. </div></form>
  1449. ";
  1450. // --------------------------------------------
  1451. $query = "
  1452. SELECT n.*, nc.*, u.user_name, u.user_id FROM #news AS n
  1453. LEFT JOIN #news_category AS nc ON n.news_category=nc.category_id
  1454. LEFT JOIN #user AS u ON n.news_author=u.user_id
  1455. ";
  1456. $check_perms = !getperms('0') ? " nc.category_manager IN (".USERCLASS_LIST.") " : '';
  1457. // Quick qry fix.
  1458. $check_perms .= (vartrue($_GET['filter'])) ? " n.news_category = ".intval($_GET['filter'])." " : "";
  1459. if (vartrue($_GET['srch']))
  1460. {
  1461. $query .= "WHERE {$check_perms}n.news_title REGEXP('".$_GET['srch']."') OR n.news_body REGEXP('".$_GET['srch']."') OR n.news_extended REGEXP('".$_GET['srch']."') ORDER BY n.news_datestamp DESC";
  1462. }
  1463. else
  1464. {
  1465. $ordfield = 'n.news_datestamp';
  1466. if($this->getSubAction() == 'user_name')
  1467. {
  1468. $ordfield = "u.user_name";
  1469. }
  1470. elseif(strpos($this->getSubAction(), 'category_'))
  1471. {
  1472. $ordfield = 'nc.'.$this->getSubAction();
  1473. }
  1474. elseif($this->getSubAction())
  1475. {
  1476. $ordfield = 'n.'.$this->getSubAction();
  1477. }
  1478. $query .= ($check_perms ? "WHERE {$check_perms}" : '')."ORDER BY {$ordfield} ".strtoupper($this->_sort_order);
  1479. }
  1480. $newsposts = $sql->db_Select_gen($query);
  1481. //echo "sql=".$query;
  1482. if ($sql->db_Select_gen($query." LIMIT ".$this->getFrom().", {$amount}"))
  1483. {
  1484. $newsarray = $e107->sql->db_getList();
  1485. $text .= "
  1486. <form action='".e_SELF."' id='newsform' method='post'>
  1487. <fieldset id='core-newspost-list'>
  1488. <legend class='e-hideme'>".NWSLAN_4."</legend>
  1489. <table class='table adminlist'>
  1490. ".$frm->colGroup($this->fields, $this->fieldpref)."
  1491. ".$frm->thead($this->fields, $this->fieldpref, 'action=main&amp;sub=[FIELD]&amp;id=[ASC]&amp;filter='.intval($_GET['filter']).'&amp;srch='.$_GET['srch'].'&amp;frm=[FROM]')."
  1492. <tbody>";
  1493. $ren_type = array("default","title","other-news","other-news 2"); // Shortened
  1494. foreach($newsarray as $row)
  1495. {
  1496. // PREPARE SOME DATA
  1497. // safe to pass $row as it contains username and id only (no sensitive data), user_id and user_name will be internal converted to 'id', 'name' vars
  1498. $row['user_name'] = "<a href='".e107::getUrl()->create('user/profile/view', $row)."' title='{$row['user_name']}'>{$row['user_name']}</a>";
  1499. $row['news_title'] = "<a href='".e107::getUrl()->create('news/view/item', $row)."'>".$tp->toHTML($row['news_title'], false, 'TITLE')."</a>";
  1500. $row['category_name'] = "<a href='".e107::getUrl()->create('news/list/items', $row)."'>".$row['category_name']."</a>";
  1501. $row['news_render_type'] = $ren_type[$row['news_render_type']];
  1502. $row['news_allow_comments'] = !$row['news_allow_comments'] ? true : false; // old reverse logic
  1503. $row['options'] = "
  1504. <a class='action' href='".e_SELF."?action=create&amp;sub=edit&amp;id={$row['news_id']}' tabindex='".$frm->getNext()."'>".ADMIN_EDIT_ICON."</a>
  1505. ".$frm->submit_image("delete[main_{$row['news_id']}]", LAN_DELETE, 'delete', NWSLAN_39." [ID: {$row['news_id']}]")."
  1506. ";
  1507. $row['checkboxes'] = $row['news_id'];
  1508. // AUTO RENDER
  1509. $text .= $frm->renderTableRow($this->fields, $this->fieldpref, $row, 'news_id');
  1510. }
  1511. $text .= "
  1512. </tbody>
  1513. </table>";
  1514. $text .= "<div class='buttons-bar center'>".$this->show_batch_options()."</div>";
  1515. $text .= "
  1516. </fieldset>
  1517. </form>
  1518. ";
  1519. }
  1520. else
  1521. {
  1522. $tmp = NWSLAN_43;
  1523. if(vartrue($_GET['srch']))
  1524. {
  1525. $tmp = sprintXXXf(NWSLAN_121, '<em>&quot;'.$_GET['srch'])."&quot;</em> <a href='".e_SELF."'>&laquo; ".LAN_BACK."</a>";
  1526. }
  1527. $text = "<div class='center warning'>{$tmp}</div>";
  1528. }
  1529. // $newsposts = $sql->count('news');
  1530. if ($newsposts > $amount)
  1531. {
  1532. // $parms = $newsposts.",".$amount.",".$this->getFrom().",".e_SELF."?".$this->getAction().'.'.($this->getSubAction() ? $this->getSubAction() : 0).'.'.$this->_sort_order.".[FROM]";
  1533. $parms = $newsposts.",".$amount.",".$this->getFrom().",".e_SELF."?action=".$this->getAction().'&amp;sub='.($this->getSubAction() ? $this->getSubAction() : 0).'&amp;id='.$this->_sort_order.'&amp;filter='.intval($_GET['filter']).'&amp;srch='.$_GET['srch']."&amp;frm=[FROM]";
  1534. $nextprev = $tp->parseTemplate("{NEXTPREV={$parms}}");
  1535. if ($nextprev) $text .= "<div class='nextprev-bar'>".$nextprev."</div>";
  1536. }
  1537. e107::getRender()->tablerender(NWSLAN_4, e107::getMessage()->render().$text);
  1538. }
  1539. function show_batch_options()
  1540. {
  1541. $classes = e107::getUserClass()->uc_get_classlist();
  1542. // Grab news Category Names;
  1543. e107::getDb()->select('news_category', '*');
  1544. $newscatarray = e107::getDb()->db_getList();
  1545. $news_category = $news_manage = array();
  1546. foreach($newscatarray as $val)
  1547. {
  1548. $news_category[$val['category_id']] = $val['category_name'];
  1549. $news_manage[$val['category_id']] = $val['category_manager'];
  1550. }
  1551. $comments_array = array('Allow Comments', 'Disable Comments', 'Reverse Allow/Disalow');
  1552. $sticky_array = array(1 => 'Sticky', 0 => 'Not Sticky', 2 => 'Reverse Them'); // more proper controls order
  1553. return e107::getForm()->batchoptions(
  1554. array(
  1555. 'delete_selected' => LAN_DELETE,
  1556. 'category' => array('Modify Category', $news_category),
  1557. 'sticky_selected' => array('Modify Sticky', $sticky_array),
  1558. 'rendertype' => array('Modify Render-type', $this->news_renderTypes),
  1559. 'comments' => array('Modify Comments', $comments_array),
  1560. '__check_class' => array('category' => $news_manage)
  1561. ),
  1562. array(
  1563. 'userclass' => array('Assign Visibility...',$classes),
  1564. )
  1565. );
  1566. }
  1567. function batch_category($ids, $value)
  1568. {
  1569. if(!isset($this->news_categories[$value]))
  1570. {
  1571. $this->noPermissions();
  1572. }
  1573. $sql = e107::getDb();
  1574. $count = $sql->db_Update("news","news_category = ".$value." WHERE news_id IN (".implode(",",$ids).") ");
  1575. }
  1576. function batch_comments($ids, $value)
  1577. {
  1578. $sql = e107::getDb();
  1579. $value = intval($value);
  1580. if(2 === $value) //reverse it
  1581. {
  1582. $count = $sql->db_Update("news","news_allow_comments=1-news_allow_comments WHERE news_id IN (".implode(",",$ids).") ");
  1583. }
  1584. else //set it
  1585. {
  1586. $count = $sql->db_Update("news","news_allow_comments=".$value." WHERE news_id IN (".implode(",",$ids).") ");
  1587. }
  1588. }
  1589. function batch_rendertype($ids, $value)
  1590. {
  1591. $sql = e107::getDb();
  1592. $count = $sql->db_Update("news","news_render_type = ".$value." WHERE news_id IN (".implode(",",$ids).") ");
  1593. }
  1594. function batch_userclass($ids, $value)
  1595. {
  1596. $sql = e107::getDb();
  1597. $count = $sql->db_Update("news","news_class = ".$value." WHERE news_id IN (".implode(",",$ids).") ");
  1598. }
  1599. function batch_delete($ids, $value)
  1600. {
  1601. $sql = e107::getDb();
  1602. $count = $sql->db_Delete("news","news_id IN (".implode(",",$ids).") ");
  1603. }
  1604. function batch_subdelete($ids, $value)
  1605. {
  1606. $sql = e107::getDb();
  1607. $count = $sql->db_Delete("submitnews","submitnews_id IN (".implode(",",$ids).") ");
  1608. }
  1609. function batch_subcategory($ids, $value)
  1610. {
  1611. if(!isset($this->news_categories[$value]))
  1612. {
  1613. $this->noPermissions();
  1614. }
  1615. $sql = e107::getDb();
  1616. $count = $sql->db_Update("submitnews","submitnews_category = ".$value." WHERE submitnews_id IN (".implode(",",$ids).") ");
  1617. }
  1618. function batch_sticky($ids, $value)
  1619. {
  1620. $sql = e107::getDb();
  1621. $value = intval($value);
  1622. if(2 === $value) //reverse it
  1623. {
  1624. $count = $sql->db_Update("news","news_sticky=1-news_sticky WHERE news_id IN (".implode(",",$ids).") ");
  1625. }
  1626. else //set it
  1627. {
  1628. $count = $sql->db_Update("news","news_sticky=".$value." WHERE news_id IN (".implode(",",$ids).") ");
  1629. }
  1630. }
  1631. function process_batch($id_array)
  1632. {
  1633. list($type, $tmp, $value) = explode("_",$_POST['execute_batch']);
  1634. $method = "batch_".$type;
  1635. if (method_exists($this,$method) && isset($id_array) )
  1636. {
  1637. $this->$method($id_array,$value);
  1638. }
  1639. }
  1640. */
  1641. // In Use.
  1642. function _pre_create()
  1643. {
  1644. if($this->getSubAction() == "edit" && !$_POST['preview'])
  1645. {
  1646. if(!isset($_POST['submit_news']))
  1647. {
  1648. if(e107::getDb()->select('news', '*', 'news_id='.intval($this->getId())))
  1649. {
  1650. $row = e107::getDb()->fetch();
  1651. if(!isset($this->news_categories[$row['news_category']]))
  1652. {
  1653. $this->noPermissions();
  1654. }
  1655. $_POST['news_title'] = $row['news_title'];
  1656. $_POST['news_sef'] = $row['news_sef'];
  1657. $_POST['news_body'] = $row['news_body'];
  1658. $_POST['news_author'] = $row['news_author'];
  1659. $_POST['news_extended'] = $row['news_extended'];
  1660. $_POST['news_allow_comments'] = $row['news_allow_comments'];
  1661. $_POST['news_class'] = $row['news_class'];
  1662. $_POST['news_summary'] = $row['news_summary'];
  1663. $_POST['news_sticky'] = $row['news_sticky'];
  1664. $_POST['news_datestamp'] = ($_POST['news_datestamp']) ? $_POST['news_datestamp'] : $row['news_datestamp'];
  1665. $_POST['cat_id'] = $row['news_category'];
  1666. $_POST['news_start'] = $row['news_start'];
  1667. $_POST['news_end'] = $row['news_end'];
  1668. $_POST['comment_total'] = e107::getDb()->db_Count("comments", "(*)", " WHERE comment_item_id={$row['news_id']} AND comment_type='0'");
  1669. $_POST['news_render_type'] = $row['news_render_type'];
  1670. $_POST['news_thumbnail'] = $row['news_thumbnail'];
  1671. $_POST['news_meta_keywords'] = $row['news_meta_keywords'];
  1672. $_POST['news_meta_description'] = $row['news_meta_description'];
  1673. }
  1674. }
  1675. }
  1676. }
  1677. function show_create_item()
  1678. {
  1679. $pref = e107::getPref();
  1680. $this->_pre_create();
  1681. require_once(e_HANDLER."userclass_class.php");
  1682. $frm = e107::getForm();
  1683. $text = '';
  1684. /// if (isset($_POST['preview'])) // Deprecated
  1685. // {
  1686. // $text = $this->preview_item($this->getId());
  1687. // }
  1688. $sub_action = $this->getSubAction();
  1689. $id = $this->getSubAction() != 'sn' && $this->getSubAction() != 'upload' ? $this->getId() : 0;
  1690. $e107 = e107::getInstance();
  1691. $tp = e107::getParser();
  1692. $sql = e107::getDb();
  1693. if ($sub_action == "sn" && !varset($_POST['preview']))
  1694. {
  1695. if ($sql->select("submitnews", "*", "submitnews_id=".$this->getId(), TRUE))
  1696. {
  1697. //list($id, $submitnews_name, $submitnews_email, $_POST['news_title'], $submitnews_category, $_POST['news_body'], $submitnews_datestamp, $submitnews_ip, $submitnews_auth, $submitnews_file) = $sql->fetch();
  1698. $row = $sql->fetch();
  1699. $_POST['news_title'] = $row['submitnews_title'];
  1700. $_POST['news_body'] = $row['submitnews_item'];
  1701. $_POST['cat_id'] = $row['submitnews_category'];
  1702. if (defsettrue('e_WYSIWYG'))
  1703. {
  1704. if (substr($_POST['news_body'],-7,7) == '[/html]') $_POST['news_body'] = substr($_POST['news_body'],0,-7);
  1705. if (substr($_POST['news_body'],0,6) == '[html]') $_POST['news_body'] = substr($_POST['news_body'],6);
  1706. $_POST['news_body'] .= "<br /><b>".NWSLAN_49." {$row['submitnews_name']}</b>";
  1707. $_POST['news_body'] .= ($row['submitnews_file'])? "<br /><br /><img src='{e_NEWSIMAGE}{$row['submitnews_file']}' class='f-right' />": '';
  1708. }
  1709. else
  1710. {
  1711. $_POST['news_body'] .= "\n[[b]".NWSLAN_49." {$row['submitnews_name']}[/b]]";
  1712. $_POST['news_body'] .= ($row['submitnews_file'])?"\n\n[img]{e_NEWSIMAGE}{$row['submitnews_file']}[/img]": "";
  1713. }
  1714. $_POST['data'] = $tp->dataFilter($_POST['data']); // Filter any nasties
  1715. $_POST['news_title'] = $tp->dataFilter($_POST['news_title']);
  1716. }
  1717. }
  1718. /*
  1719. if ($sub_action == "upload" && !varset($_POST['preview']))
  1720. {
  1721. if ($sql->select('upload', '*', "upload_id=".$this->getId())) {
  1722. $row = $sql->fetch();
  1723. $post_author_id = substr($row['upload_poster'], 0, strpos($row['upload_poster'], "."));
  1724. $post_author_name = substr($row['upload_poster'], (strpos($row['upload_poster'], ".")+1));
  1725. $match = array();
  1726. //XXX DB UPLOADS STILL SUPPORTED?
  1727. $upload_file = "pub_" . (preg_match('#Binary\s(.*?)\/#', $row['upload_file'], $match) ? $match[1] : $row['upload_file']);
  1728. $_POST['news_title'] = LAN_UPLOAD.": ".$row['upload_name'];
  1729. $_POST['news_body'] = $row['upload_description']."\n[b]".NWSLAN_49." [link=".$e107->url->create('user/profile/view', 'id='.$post_author_id.'&name='.$post_author_name)."]".$post_author_name."[/link][/b]\n\n[file=request.php?".$upload_file."]{$row['upload_name']}[/file]\n";
  1730. }
  1731. }
  1732. */
  1733. $text .= "
  1734. <ul class='nav nav-tabs'>
  1735. <li class='active'><a href='#core-newspost-create' data-toggle='tab'>".LAN_NEWS_52."</a></li>
  1736. <li><a href='#core-newspost-seo' data-toggle='tab'>SEO</a></li>
  1737. <li><a href='#core-newspost-edit-options' data-toggle='tab'>".LAN_NEWS_53."</a></li>
  1738. </ul>
  1739. <form method='post' action='".e_SELF."?".e_QUERY."' id='core-newspost-create-form' ".(FILE_UPLOADS ? "enctype='multipart/form-data'" : "")." >
  1740. <div class='tab-content'>
  1741. <div class='tab-pane active' id='core-newspost-create'>
  1742. <fieldset>
  1743. <legend>".LAN_NEWS_52."</legend>
  1744. <table class='table adminform'>
  1745. <colgroup>
  1746. <col class='col-label' />
  1747. <col class='col-control' />
  1748. </colgroup>
  1749. <tbody>
  1750. <tr>
  1751. <td>".NWSLAN_6.": </td>
  1752. <td>
  1753. ";
  1754. if (!$this->news_categories)
  1755. {
  1756. $text .= NWSLAN_10;
  1757. }
  1758. else
  1759. {
  1760. // $text .= $frm->select("cat_id",$this->news_category,$_POST['cat_id']);
  1761. $catopt = array();
  1762. foreach ($this->news_categories as $row)
  1763. {
  1764. $catopt[$row['category_id']] = $tp->toHTML($row['category_name'], FALSE, "LINKTEXT");
  1765. }
  1766. $text .= $frm->select("cat_id", $catopt, $_POST['cat_id']);
  1767. /*
  1768. $text .= $frm->select_open('cat_id');
  1769. foreach ($this->news_categories as $row)
  1770. {
  1771. $text .= $frm->option($tp->toHTML($row['category_name'], FALSE, "LINKTEXT"), $row['category_id'], varset($_POST['cat_id']) == $row['category_id']);
  1772. }
  1773. $text .= "</select>";
  1774. */
  1775. }
  1776. $text .= "
  1777. </td>
  1778. </tr>
  1779. <tr>
  1780. <td>".LAN_TITLE.":</td>
  1781. <td>
  1782. <input type='text' name='news_title' value=\"". $tp->post_toForm(vartrue($_POST['news_title']))."\" class='tbox' style='width:90%' required='required' />
  1783. ".
  1784. // TOO short -> $frm->text('news_title', $tp->post_toForm($_POST['news_title']),200,array('size'=>300)).
  1785. "
  1786. </td>
  1787. </tr>
  1788. <tr>
  1789. <td>".LAN_NEWS_27.":</td>
  1790. <td>
  1791. <input type='text' name='news_summary' value=\"". $tp->post_toForm(vartrue($_POST['news_summary']))."\" class='tbox' style='width:90%' />
  1792. ".
  1793. // $frm->text('news_summary', $tp->post_toForm($_POST['news_summary']), 250).
  1794. "
  1795. </td>
  1796. </tr>
  1797. <tr>
  1798. <td>".LAN_TEMPLATE.":</td>
  1799. <td>
  1800. ";
  1801. //XXX multiple -selections at once. (comma separated) - working
  1802. $text .= $frm->select('news_render_type', $this->news_renderTypes, vartrue($_POST['news_render_type']), "multiple=1")."
  1803. <div class='field-help'>
  1804. ".NWSLAN_74."
  1805. </div>
  1806. </td>
  1807. </tr>
  1808. ";
  1809. // -------- News Author ---------------------
  1810. $text .="
  1811. <tr>
  1812. <td>".LAN_AUTHOR.":</td>
  1813. <td>
  1814. ";
  1815. if(!getperms('0') && !check_class($pref['news_editauthor']))
  1816. {
  1817. $auth = ($_POST['news_author']) ? intval($_POST['news_author']) : USERID;
  1818. $sql->select("user", "user_name", "user_id={$auth} LIMIT 1");
  1819. $row = $sql->fetch(MYSQL_ASSOC);
  1820. $text .= "<input type='hidden' name='news_author' value='".$auth.chr(35).$row['user_name']."' />";
  1821. $text .= "<a href='".$e107->url->create('user/profile/view', 'name='.$row['user_name'].'&id='.$_POST['news_author'])."'>".$row['user_name']."</a>";
  1822. }
  1823. else // allow master admin to
  1824. {
  1825. $text .= $frm->select_open('news_author');
  1826. $qry = "SELECT user_id,user_name FROM #user WHERE user_perms = '0' OR user_perms = '0.' OR user_perms REGEXP('(^|,)(H)(,|$)') ";
  1827. if($pref['subnews_class'] && $pref['subnews_class']!= e_UC_GUEST && $pref['subnews_class']!= e_UC_NOBODY)
  1828. {
  1829. if($pref['subnews_class']== e_UC_MEMBER)
  1830. {
  1831. $qry .= " OR user_ban != 1";
  1832. }
  1833. elseif($pref['subnews_class']== e_UC_ADMIN)
  1834. {
  1835. $qry .= " OR user_admin = 1";
  1836. }
  1837. else
  1838. {
  1839. $qry .= " OR FIND_IN_SET(".intval($pref['subnews_class']).", user_class) ";
  1840. }
  1841. }
  1842. $sql->db_Select_gen($qry);
  1843. while($row = $sql->fetch())
  1844. {
  1845. if(vartrue($_POST['news_author']))
  1846. {
  1847. $sel = ($_POST['news_author'] == $row['user_id']);
  1848. }
  1849. else
  1850. {
  1851. $sel = (USERID == $row['user_id']);
  1852. }
  1853. $text .= $frm->option($row['user_name'], $row['user_id'].chr(35).$row['user_name'], $sel);
  1854. }
  1855. $text .= "</select>
  1856. ";
  1857. }
  1858. $text .= "</td></tr>\n";
  1859. // -----
  1860. $text .= "<tr>
  1861. <td colspan='2'>\n";
  1862. $text .= '<ul class="nav nav-tabs">
  1863. <li class="active"><a href="#news-body-container" data-toggle="tab">'.NWSLAN_13.'</a></li>
  1864. <li><a href="#news-extended-container" data-toggle="tab">'.NWSLAN_14.'</a></li>
  1865. </ul>
  1866. <div class="tab-content">';
  1867. $val = (strstr($tp->post_toForm(vartrue($_POST['news_body'])), "[img]http") ? $tp->post_toForm(vartrue($_POST['news_body'])) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['news_body'])));
  1868. $text .= "<div id='news-body-container' class='tab-pane active'>";
  1869. $text .= $frm->bbarea('news_body', $val, 'news', 'news');
  1870. $text .= "</div>";
  1871. $text .= "<div id='news-extended-container' class='tab-pane'>";
  1872. $val = (strstr($tp->post_toForm(vartrue($_POST['news_extended'])), "[img]http") ? $tp->post_toForm($_POST['news_extended']) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['news_extended'])));
  1873. $text .= $frm->bbarea('news_extended', $val, 'extended', 'news','large');
  1874. $text .= "</div>
  1875. </div></td></tr>";
  1876. //-----------
  1877. /*
  1878. $text .= "
  1879. <tr>
  1880. <td>".NWSLAN_13.":<br /></td>
  1881. <td>
  1882. ";
  1883. $val = (strstr($tp->post_toForm($_POST['news_body']), "[img]http") ? $tp->post_toForm($_POST['news_body']) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['news_body'])));
  1884. $text .= $frm->bbarea('news_body', $val, 'news', 'helpb');
  1885. // Extended news form textarea
  1886. // Fixes Firefox issue with hidden wysiwyg textarea.
  1887. // XXX - WYSIWYG is already plugin, this should go
  1888. // if(defsettrue('e_WYSIWYG')) $ff_expand = "tinyMCE.execCommand('mceResetDesignMode')";
  1889. $val = (strstr($tp->post_toForm($_POST['news_extended']), "[img]http") ? $tp->post_toForm($_POST['news_extended']) : str_replace("[img]../", "[img]", $tp->post_toForm($_POST['news_extended'])));
  1890. $text .= "
  1891. </td>
  1892. </tr>
  1893. <tr>
  1894. <td>".NWSLAN_14.":</td>
  1895. <td>
  1896. ".$frm->bbarea('news_extended', $val, 'extended', 'helpc')."
  1897. <!-- <div class='field-help'>".NWSLAN_83."</div> -->
  1898. </td>
  1899. </tr>";
  1900. /*
  1901. /*
  1902. $text .= "
  1903. <tr>
  1904. <td>".NWSLAN_66.":</td>
  1905. <td>";
  1906. $text .= $frm->mediaUrl('news', NWSLAN_69);
  1907. $text .= "
  1908. </td>
  1909. </tr>";
  1910. */
  1911. $text .= "
  1912. <tr>
  1913. <td>".NWSLAN_67."s:<br />
  1914. ".$frm->help(LAN_NEWS_23)."</td>
  1915. <td>
  1916. ";
  1917. if(vartrue($_POST['news_thumbnail']) && (strpos($_POST['news_thumbnail'], ",") == false) && $_POST['news_thumbnail'][0] != "{" && substr($_POST['news_thumbnail'],-8) !== '.youtube')//BC compat
  1918. {
  1919. $_POST['news_thumbnail'] = "{e_IMAGE}newspost_images/".$_POST['news_thumbnail'];
  1920. }
  1921. // $text .= $frm->imagepicker('news_thumbnail[0]', $_POST['news_thumbnail'] ,'','media=news&video=1');
  1922. // * XXX Experimental
  1923. $thumbTmp = explode(",",$_POST['news_thumbnail']);
  1924. $text .= $frm->imagepicker('news_thumbnail[0]', varset($thumbTmp[0]),'','media=news&video=1');
  1925. $text .= $frm->imagepicker('news_thumbnail[1]', varset($thumbTmp[1]),'','media=news&video=1');
  1926. $text .= $frm->imagepicker('news_thumbnail[2]', varset($thumbTmp[2]),'','media=news&video=1');
  1927. $text .= $frm->imagepicker('news_thumbnail[3]', varset($thumbTmp[3]),'','media=news&video=1');
  1928. $text .= $frm->imagepicker('news_thumbnail[4]', varset($thumbTmp[4]),'','media=news&video=1');
  1929. $text .= "
  1930. </td>
  1931. </tr>
  1932. </tbody>
  1933. </table>
  1934. </fieldset></div>
  1935. ";
  1936. //BEGIN SEO block
  1937. $text .= "<div class='tab-pane' id='core-newspost-seo'>
  1938. <fieldset>
  1939. <legend>SEO</legend>
  1940. <table class='table adminform'>
  1941. <colgroup>
  1942. <col class='col-label' />
  1943. <col class='col-control' />
  1944. </colgroup>
  1945. <tbody>
  1946. <tr>
  1947. <td>Friendly URL string: </td>
  1948. <td>
  1949. ".$frm->text('news_sef', $tp->post_toForm(vartrue($_POST['news_sef'])), 255, 'size=xxlarge')."
  1950. <div class='field-help'>If left empty will be automatically created from current News Title based on your current <a href='".e_ADMIN_ABS."eurl.php?mode=main&amp;action=settings' title='To URL settings area' rel='external'>URL settings</a></div>
  1951. </td>
  1952. </tr>
  1953. <tr>
  1954. <td>".LAN_KEYWORDS.": </td>
  1955. <td>".$frm->tags('news_meta_keywords', $tp->post_toForm(vartrue($_POST['news_meta_keywords'])), 255)."
  1956. <div class='field-help'>Keywords/tags associated to associate with this news item</div>
  1957. </td>
  1958. </tr>
  1959. <tr>
  1960. <td>Meta description: </td>
  1961. <td>".$frm->textarea('news_meta_description', $tp->post_toForm(vartrue($_POST['news_meta_description'])), 7)."</td>
  1962. </tr>
  1963. <tr>
  1964. <td>Notify Ping Services: </td>
  1965. <td>".$frm->checkbox('news_ping',1, false)."</td>
  1966. </tr>
  1967. </tbody>
  1968. </table>
  1969. </fieldset></div>
  1970. ";
  1971. //BEGIN Options block
  1972. $text .= "<div class='tab-pane' id='core-newspost-edit-options'>
  1973. <fieldset>
  1974. <legend>".LAN_NEWS_53."</legend>
  1975. <table class='table adminform'>
  1976. <colgroup>
  1977. <col class='col-label' />
  1978. <col class='col-control' />
  1979. </colgroup>
  1980. <tbody>
  1981. <tr>
  1982. <td>".NWSLAN_15.":</td>
  1983. <td>
  1984. ".$frm->radio_switch('news_allow_comments', vartrue($_POST['news_allow_comments']))."
  1985. <div class='field-help'>
  1986. ".NWSLAN_18."
  1987. </div>
  1988. </td>
  1989. </tr>
  1990. <tr>
  1991. <td>".NWSLAN_19.":</td>
  1992. <td>
  1993. <div class='field-spacer'>".NWSLAN_21.":</div>
  1994. <div class='field-spacer'>
  1995. ";
  1996. $text .= $frm->datepicker("news_start",vartrue($_POST['news_start']),"type=datetime");
  1997. $text .= " - ";
  1998. $text .= $frm->datepicker("news_end",vartrue($_POST['news_end']),"type=datetime");
  1999. $text .= "</div>
  2000. <div class='field-help'>
  2001. ".NWSLAN_72."
  2002. </div>
  2003. </td>
  2004. </tr>
  2005. <tr>
  2006. <td>".LAN_NEWS_32.":</td>
  2007. <td>
  2008. <div class='field-spacer'>
  2009. ";
  2010. $text .= $frm->datepicker("news_datestamp",vartrue($_POST['news_datestamp']),"type=datetime"); //XXX should be 'datetime' when working correctly.
  2011. $text .= "</div>";
  2012. /*
  2013. $text .= "<div class='field-spacer'>
  2014. ".$frm->checkbox('update_datestamp', '1', $_POST['update_datestamp']).$frm->label(NWSLAN_105, 'update_datestamp', '1')."
  2015. </div>
  2016. <div class='field-help'>
  2017. ".LAN_NEWS_33."
  2018. </div>";
  2019. */
  2020. $text .= "
  2021. </td>
  2022. </tr>
  2023. ";
  2024. // --------------------- News Userclass ---------------------------
  2025. $text .= "
  2026. <tr>
  2027. <td>".LAN_VISIBILITY.":</td>
  2028. <td>
  2029. ".$frm->uc_select('news_userclass[]', vartrue($_POST['news_class'],0), 'nobody,public,guest,member,admin,classes,language', 'description=1&multiple=1')."
  2030. <div class='field-help'>
  2031. ".NWSLAN_84."
  2032. </div>
  2033. </td>
  2034. </tr>
  2035. <tr>
  2036. <td>".LAN_NEWS_28.":</td>
  2037. <td>
  2038. ".$frm->checkbox('news_sticky', '1', vartrue($_POST['news_sticky']), array('label' => LAN_NEWS_29))."
  2039. <div class='field-help'>
  2040. ".LAN_NEWS_30."
  2041. </div>
  2042. </td>
  2043. </tr>
  2044. ";
  2045. if($pref['trackbackEnabled']){ // FIXME onclick expandit not working
  2046. $text .= "
  2047. <tr>
  2048. <td>".LAN_NEWS_34.":</td>
  2049. <td>
  2050. <a class='e-pointer' onclick='expandit(this);'>".LAN_NEWS_35."</a>
  2051. <div class='e-hideme'>
  2052. <div class='field-spacer'>
  2053. <span class='field-help>".LAN_NEWS_37."</span>
  2054. </div>
  2055. <div class='field-spacer'>
  2056. <textarea class='tbox textarea' name='trackback_urls' style='width:95%' cols='80' rows='5'>".$_POST['trackback_urls']."</textarea>
  2057. </div>
  2058. </div>
  2059. </td>
  2060. </tr>
  2061. ";
  2062. }
  2063. //triggerHook
  2064. $data = array('method'=>'form', 'table'=>'news', 'id'=>$id, 'plugin'=>'news', 'function'=>'create_item');
  2065. $text .= $frm->renderHooks($data);
  2066. $text .= "</tbody>
  2067. </table>
  2068. </fieldset>
  2069. </div>
  2070. <div class='buttons-bar center'>
  2071. <div class=' btn-group'>";
  2072. // ".$frm->admin_button('preview', isset($_POST['preview']) ? NWSLAN_24 : NWSLAN_27 , 'other')."
  2073. $text .= $frm->admin_button('submit_news', ($id && $sub_action != "sn" && $sub_action != "upload") ? NWSLAN_25 : NWSLAN_26 , 'update');
  2074. $text .= '<button class="btn btn-success dropdown-toggle left" data-toggle="dropdown">
  2075. <span class="caret"></span>
  2076. </button>
  2077. <ul class="dropdown-menu col-selection">
  2078. <li class="nav-header">After submit:</li>
  2079. ';
  2080. $text .= "<li><a href='#' class='e-noclick'>".$frm->checkbox('create_edit_stay', 1, isset($_POST['create_edit_stay']), array('label' => LAN_NEWS_54))."</a></li>";
  2081. $text .= "</ul>
  2082. </div>
  2083. <input type='hidden' name='news_id' value='{$id}' />
  2084. </div>
  2085. </form>
  2086. </div>
  2087. ";
  2088. $mes = e107::getMessage();
  2089. echo $mes->render().$text;
  2090. // $e107->ns->tablerender($this->getSubAction() == 'edit' ? NWSLAN_29a : NWSLAN_29, $emessage->render().$text);
  2091. }
  2092. function preview_item($id)
  2093. {
  2094. $ix = new news;
  2095. $e107 = &e107::getInstance();
  2096. $_POST['news_title'] = $tp->toDB($_POST['news_title']);
  2097. $_POST['news_summary'] = $tp->toDB($_POST['news_summary']);
  2098. $_POST['news_id'] = $id;
  2099. if($_POST['news_start'])
  2100. {
  2101. $tmp = explode("/", $_POST['news_start']);
  2102. $_POST['news_start'] = mktime(0, 0, 0, $tmp[1], $tmp[0], $tmp[2]);
  2103. }
  2104. else
  2105. {
  2106. $_POST['news_start'] = 0;
  2107. }
  2108. if($_POST['news_end'])
  2109. {
  2110. $tmp = explode("/", $_POST['news_end']);
  2111. $_POST['news_end'] = mktime(0, 0, 0, $tmp[1], $tmp[0], $tmp[2]);
  2112. }
  2113. else
  2114. {
  2115. $_POST['news_end'] = 0;
  2116. }
  2117. $matches = array();
  2118. if(preg_match("#(.*?)/(.*?)/(.*?) (.*?):(.*?):(.*?)$#", $_POST['news_datestamp'], $matches))
  2119. {
  2120. $_POST['news_datestamp'] = mktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[1], $matches[3]);
  2121. }
  2122. else
  2123. {
  2124. $_POST['news_datestamp'] = time();
  2125. }
  2126. if($_POST['update_datestamp'])
  2127. {
  2128. $_POST['news_datestamp'] = time();
  2129. }
  2130. $sql->select("news_category", "*", "category_id='".intval($_POST['cat_id'])."'");
  2131. list($_POST['category_id'], $_POST['category_name'], $_POST['category_icon']) = $sql->fetch();
  2132. list($_POST['user_id'],$_POST['user_name']) = explode(chr(35), $_POST['news_author']);
  2133. $_POST['news_author'] = $_POST['user_id'];
  2134. $_POST['comment_total'] = $id ? $sql->count("comments", "(*)", " WHERE comment_item_id={$id} AND comment_type='0'") : 0;
  2135. $_PR = $_POST;
  2136. $_PR['news_body'] = $tp->post_toHTML($_PR['news_body'],FALSE);
  2137. $_PR['news_title'] = $tp->post_toHTML($_PR['news_title'],FALSE,"emotes_off, no_make_clickable");
  2138. $_PR['news_summary'] = $tp->post_toHTML($_PR['news_summary']);
  2139. $_PR['news_extended'] = $tp->post_toHTML($_PR['news_extended']);
  2140. $_PR['news_file'] = $_POST['news_file'];
  2141. $_PR['news_thumbnail'] = basename($_POST['news_thumbnail']);
  2142. //$ix->render_newsitem($_PR);
  2143. return "
  2144. <fieldset id='core-newspost-preview'>
  2145. <legend>".NWSLAN_27."</legend>
  2146. <table class='admininfo'>
  2147. <tbody>
  2148. <tr>
  2149. <td colspan='2'>
  2150. ".$tp->parseTemplate('{NEWSINFO}').$ix->render_newsitem($_PR, 'return')."
  2151. </td>
  2152. </tr>
  2153. </tbody>
  2154. </table>
  2155. </fieldset>
  2156. ";
  2157. }
  2158. function ajax_exec_cat()
  2159. {
  2160. if(!getperms('0|7'))
  2161. {
  2162. exit;
  2163. }
  2164. //require_once (e_HANDLER.'js_helper.php');
  2165. $e107 = e107::getInstance();
  2166. $category = array();
  2167. if ($sql->select("news_category", "*", "category_id=".$this->getId()))
  2168. {
  2169. $category = $sql->fetch();
  2170. }
  2171. if(empty($category))
  2172. {
  2173. e_jshelper::sendAjaxError(404, 'Page not found!', 'Requested news category was not found in the DB.', true);
  2174. }
  2175. $jshelper = new e_jshelper();
  2176. $jshelper->addResponseAction('fill-form', $category);
  2177. //show cancel and update, hide create buttons; disable create button (just in case)
  2178. $jshelper->addResponseAction('element-invoke-by-id', array(
  2179. 'show' => 'category-clear,update-category',
  2180. 'disabled,1' => 'create-category',
  2181. 'hide' => 'create-category',
  2182. 'newsScrollToMe' => 'core-newspost-cat-create'
  2183. ));
  2184. //Send the prefered response type
  2185. $jshelper->sendResponse('XML');
  2186. }
  2187. function ajax_exec_cat_list_refresh()
  2188. {
  2189. if(!getperms('0|7'))
  2190. {
  2191. exit;
  2192. }
  2193. echo $this->show_categoriy_list();
  2194. }
  2195. function ajax_exec_catorder()
  2196. {
  2197. if(!getperms('0|7'))
  2198. {
  2199. exit;
  2200. }
  2201. //interactive category order
  2202. $check = e107::getDb()->db_Update('news_category', 'category_order='.intval($this->getId()).' WHERE category_id='.intval($this->getSubAction()));
  2203. if(e107::getDb()->getLastErrorNumber())
  2204. {
  2205. echo 'mySQL Error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText();
  2206. return;
  2207. }
  2208. if($check)
  2209. {
  2210. e107::getAdminLog()->log_event('NEWS_05', 'category_id='.intval($this->getSubAction()).', category_order='.intval($this->getId()), E_LOG_INFORMATIVE, '');
  2211. }
  2212. }
  2213. function ajax_exec_catmanager()
  2214. {
  2215. if(!getperms('0|7'))
  2216. {
  2217. exit;
  2218. }
  2219. //interactive category manage permissions
  2220. $check = e107::getDb()->db_Update('news_category', 'category_manager='.intval($this->getId()).' WHERE category_id='.intval($this->getSubAction()));
  2221. if(e107::getDb()->getLastErrorNumber())
  2222. {
  2223. echo 'mySQL Error #'.e107::getDb()->getLastErrorNumber().': '.e107::getDb()->getLastErrorText();
  2224. retrun;
  2225. }
  2226. if($check)
  2227. {
  2228. $class_name = e107::getUserClass()->uc_get_classname($this->getId());
  2229. e107::getAdminLog()->log_event('NEWS_05', 'category_id='.intval($this->getSubAction()).', category_manager='.intval($this->getId()).' ('.$class_name.')', E_LOG_INFORMATIVE, '');
  2230. }
  2231. }
  2232. function show_categories()
  2233. {
  2234. $frm = e107::getForm(false, true);
  2235. $category = array();
  2236. if ($this->getSubAction() == "edit" && !isset($_POST['update_category']))
  2237. {
  2238. if (e107::getDb()->select("news_category", "*", "category_id=".$this->getId()))
  2239. {
  2240. $category = e107::getDb()->fetch();
  2241. }
  2242. }
  2243. if($this->error && (isset($_POST['update_category']) || isset($_POST['create_category'])))
  2244. {
  2245. foreach ($_POST as $k=>$v)
  2246. {
  2247. if(strpos($k, 'category_') === 0)
  2248. {
  2249. $category[$k] = e107::getParser()->post_toForm($v);
  2250. continue;
  2251. }
  2252. if(strpos($k, 'news_rewrite_') === 0)
  2253. {
  2254. $category_rewrite[$k] = e107::getParser()->post_toForm($v);
  2255. continue;
  2256. }
  2257. }
  2258. }
  2259. //FIXME - lan
  2260. $text = "
  2261. <form method='post' action='".e_SELF."?cat' id='core-newspost-cat-create-form'>
  2262. <fieldset id='core-newspost-cat-create'>
  2263. <legend>".NWSLAN_56."</legend>
  2264. <table class='table adminform'>
  2265. <colgroup>
  2266. <col class='col-label' />
  2267. <col class='col-control' />
  2268. </colgroup>
  2269. <tbody>
  2270. <tr>
  2271. <td>".NWSLAN_52."</td>
  2272. <td>
  2273. ".$frm->text('category_name', $category['category_name'], 200)."
  2274. <div class='field-help'>Required field</div>
  2275. </td>
  2276. </tr>
  2277. <tr>
  2278. <td>Category friendly URL string</td>
  2279. <td>
  2280. ".$frm->text('category_sef', $category['category_sef'], 200)."
  2281. <div class='field-help'>If left empty will be automatically created from current Category Title based on your current <a href='".e_ADMIN_ABS."eurl.php?mode=main&amp;action=settings' title='To URL settings area' rel='external'>URL settings</a></div>
  2282. </td>
  2283. </tr>
  2284. <tr>
  2285. <td>Category meta keywords</td>
  2286. <td>
  2287. ".$frm->text('category_meta_keywords', $category['category_meta_keywords'], 255)."
  2288. <div class='field-help'>Used on news categoty list page</div>
  2289. </td>
  2290. </tr>
  2291. <tr>
  2292. <td>Category meta description</td>
  2293. <td>
  2294. ".$frm->textarea('category_meta_description', $category['category_meta_description'], 5)."
  2295. <div class='field-help'>Used on news categoty list page</div>
  2296. </td>
  2297. </tr>
  2298. <tr>
  2299. <td>Category management permissions</td>
  2300. <td>
  2301. ".$frm->uc_select('category_manager', vartrue($category['category_manager'], e_UC_ADMIN), 'main,admin,classes')."
  2302. <div class='field-help'>Which group of site administrators are able to manage this category related news</div>
  2303. </td>
  2304. </tr>
  2305. <tr>
  2306. <td>".NWSLAN_53."</td>
  2307. <td>
  2308. ".$frm->iconpicker('category_icon', $category['category_icon'], NWSLAN_54)."
  2309. ".$frm->hidden('category_order', $category['category_order'])."
  2310. </td>
  2311. </tr>
  2312. </tbody>
  2313. </table>
  2314. <div class='buttons-bar center'>
  2315. ";
  2316. if($this->getId())
  2317. {
  2318. $text .= "
  2319. ".$frm->admin_button('update_category', NWSLAN_55, 'update')."
  2320. ".$frm->admin_button('category_clear', LAN_CANCEL, 'cancel')."
  2321. ".$frm->hidden("category_id", $this->getId())."
  2322. ";
  2323. }
  2324. else
  2325. {
  2326. $text .= "
  2327. ".$frm->admin_button('create_category', NWSLAN_56, 'create')."
  2328. ".$frm->admin_button('update_category', NWSLAN_55, 'update', '', 'other=style="display:none"')."
  2329. ".$frm->admin_button('category_clear', LAN_CANCEL, 'cancel', '', 'other=style="display:none"')."
  2330. ".$frm->hidden("category_id", 0)."
  2331. ";
  2332. }
  2333. $text .= "
  2334. </div>
  2335. </fieldset>
  2336. </form>
  2337. <div id='core-newspost-cat-list-cont'>
  2338. ".$this->show_categoriy_list()."
  2339. </div>
  2340. ";
  2341. echo e107::getMessage()->render().$text;
  2342. // e107::getRender()->tablerender(NWSLAN_46a, e107::getMessage()->render().$text);
  2343. }
  2344. function show_categoriy_list()
  2345. {
  2346. $frm = e107::getForm();
  2347. //FIXME - lan
  2348. $text = "
  2349. <form action='".e_SELF."?cat' id='core-newspost-cat-list-form' method='post'>
  2350. <fieldset id='core-newspost-cat-list'>
  2351. <legend>".NWSLAN_51."</legend>
  2352. <table class='table adminlist'>
  2353. <colgroup>
  2354. <col style='width: 5%' />
  2355. <col style='width: 10%' />
  2356. <col style='width: 40%' />
  2357. <col style='width: 20%' />
  2358. <col style='width: 15%' />
  2359. <col style='width: 10%' />
  2360. </colgroup>
  2361. <thead>
  2362. <tr>
  2363. <th class='center'>".LAN_ID."</th>
  2364. <th class='center'>".LAN_ICON."</th>
  2365. <th>".NWSLAN_6."</th>
  2366. <th>Manage Permissions</th>
  2367. <th class='center last'>".LAN_OPTIONS."</th>
  2368. <th class='center'>Order</th>
  2369. </tr>
  2370. </thead>
  2371. <tbody>
  2372. ";
  2373. if ($category_total = e107::getDb()->gen("SELECT ncat.* FROM #news_category AS ncat ORDER BY ncat.category_order ASC"))
  2374. {
  2375. $tindex = 100;
  2376. while ($category = e107::getDb()->fetch()) {
  2377. $icon = '';
  2378. if ($category['category_icon'])
  2379. {
  2380. $icon = (strstr($category['category_icon'], "images/") ? THEME_ABS.$category['category_icon'] : (strpos($category['category_icon'], '{') === 0 ? e107::getParser()->replaceConstants($category['category_icon'], 'abs') : e_IMAGE_ABS."icons/".$category['category_icon']));
  2381. $icon = "<img class='icon action' src='{$icon}' alt='' />";
  2382. }
  2383. $url = '<a href="'.e107::getUrl()->create('news/list/category', $category).'" title="'.$category['category_name'].'" rel="external">'.$category['category_name'].'</a>';
  2384. $text .= "
  2385. <tr>
  2386. <td class='center middle'>{$category['category_id']}</td>
  2387. <td class='center middle'>{$icon}</td>
  2388. <td class='middle'>{$url}</td>
  2389. <td class='middle'>".$frm->uc_select('multi_category_manager['.$category['category_id'].']', vartrue($category['category_manager'], e_UC_ADMIN), 'main,admin,classes')."</td>
  2390. <td class='center middle'>";
  2391. $text .= "<a class='action' id='core-news-catedit-{$category['category_id']}' href='".e_SELF."?mode=cat&amp;action=edit&amp;id={$category['category_id']}' tabindex='".$frm->getNext()."'>".defset('ADMIN_EDIT_ICON', '<img src="'.e_IMAGE_ABS.'admin_images/edit_16.png" alt="Edit" />')."</a>";
  2392. // $text .= "<a class='action' id='core-news-catedit-{$category['category_id']}' href='".e_SELF."?cat.edit.{$category['category_id']}' tabindex='".$frm->getNext()."'>".defset('ADMIN_EDIT_ICON', '<img src="'.e_IMAGE_ABS.'admin_images/edit_16.png" alt="Edit" />')."</a>";
  2393. $text .= "
  2394. ".$frm->submit_image("delete[category_{$category['category_id']}]", $category['category_id'], 'delete', e107::getParser()->toJS(NWSLAN_37." [ID: {$category['category_id']} ]"))."
  2395. </td>
  2396. <td class='middle center'>".$frm->text('multi_category_order['.$category['category_id'].']', $category['category_order'], 3, 'size=2&tabindex='.$tindex)."</td>
  2397. </tr>
  2398. ";
  2399. $tindex++;
  2400. }
  2401. $text .= "
  2402. </tbody>
  2403. </table>
  2404. <div class='buttons-bar center'>
  2405. ".$frm->admin_button('multi_update_category', LAN_UPDATE, 'update e-hide-if-js')."
  2406. ".$frm->admin_button('trigger_list_refresh', 'Refresh List', 'refresh')."
  2407. </div>
  2408. ";
  2409. }
  2410. else
  2411. {
  2412. $text .= "<div class='center'>".NWSLAN_10."</div>";
  2413. }
  2414. $text .= "
  2415. </fieldset>
  2416. </form>
  2417. ";
  2418. return $text;
  2419. }
  2420. function _optrange($num, $zero = true)
  2421. {
  2422. $tmp = range(0, $num < 0 ? 0 : $num);
  2423. if(!$zero) unset($tmp[0]);
  2424. return $tmp;
  2425. }
  2426. function ajax_exec_pref_archnum()
  2427. {
  2428. $frm = e107::getForm();
  2429. echo $frm->select('newsposts_archive', $this->_optrange(intval($this->getSubAction()) - 1), intval(e107::getPref('newsposts_archive')), 'class=tbox&tabindex='.intval($this->getId()));
  2430. }
  2431. /*
  2432. function ajax_exec_searchValue()
  2433. {
  2434. $frm = e107::getForm();
  2435. echo $frm->filterValue($_POST['filtertype'], $this->fields);
  2436. }
  2437. */
  2438. function show_news_prefs()
  2439. {
  2440. $pref = e107::getPref();
  2441. $frm = e107::getForm();
  2442. $sefbaseDiz = str_replace(array("[br]","[","]"), array("<br />","<a href='".e_ADMIN_ABS."eurl.php'>","</a>"), NWSLAN_128 );
  2443. $pingOpt = array('placeholder'=>'eg. blogsearch.google.com/ping/RPC2');
  2444. $text = "
  2445. <form method='post' action='".e_SELF."?pref' id='core-newspost-settings-form'>
  2446. <fieldset id='core-newspost-settings'>
  2447. <legend class='e-hideme'>".NWSLAN_90."</legend>
  2448. <table class='table adminform'>
  2449. <colgroup>
  2450. <col class='col-label' />
  2451. <col class='col-control' />
  2452. </colgroup>
  2453. <tbody>
  2454. <tr>
  2455. <td>".NWSLAN_127."</td>
  2456. <td>
  2457. ".$frm->text('news_sefbase', $pref['news_sefbase'])."
  2458. <div class='field-help'>".$sefbaseDiz.'<strong>'.SITEURL.($pref['news_sefbase'] ? $pref['news_sefbase'].'/' : '')."</strong></div>
  2459. </td>
  2460. </tr>
  2461. <tr>
  2462. <td>Ping Services</td>
  2463. <td>
  2464. ".$frm->textarea('news_ping_services', implode("\n",$pref['news_ping_services']), 4, 100,$pingOpt)."
  2465. <div class='field-help'>Notify these services when you create/update news items. <br />One per line.</div>
  2466. </td>
  2467. </tr>
  2468. <tr>
  2469. <td>".NWSLAN_86."</td>
  2470. <td>
  2471. ".$frm->radio_switch('news_cats', $pref['news_cats'])."
  2472. </td>
  2473. </tr>
  2474. <tr>
  2475. <td>".NWSLAN_87."</td>
  2476. <td>
  2477. ".$frm->select('nbr_cols', $this->_optrange(6, false), $pref['nbr_cols'], 'class=tbox')."
  2478. </td>
  2479. </tr>
  2480. <tr>
  2481. <td>".NWSLAN_88."</td>
  2482. <td>
  2483. ".$frm->select('newsposts', $this->_optrange(50, false), $pref['newsposts'], 'class=tbox')."
  2484. </td>
  2485. </tr>
  2486. <tr>
  2487. <td>Limit for News-Listing Pages</td>
  2488. <td>
  2489. ".$frm->select('news_list_limit', $this->_optrange(50, false), $pref['news_list_limit'], 'class=tbox')."
  2490. <div class='field-help'>eg. news.php?all or news.php?cat.1 or news.php?tag=xxx</div>
  2491. </td>
  2492. </tr>
  2493. ";
  2494. // ##### ADDED FOR NEWS ARCHIVE --------------------------------------------------------------------
  2495. // the possible archive values are from "0" to "< $pref['newsposts']"
  2496. // this should really be made as an onchange event on the selectbox for $pref['newsposts'] ...
  2497. //SecretR - Done
  2498. $text .= "
  2499. <tr>
  2500. <td>".NWSLAN_115."</td>
  2501. <td id='newsposts-archive-cont'>
  2502. ".$frm->select('newsposts_archive', $this->_optrange(intval($pref['newsposts']) - 1), intval($pref['newsposts_archive']), 'class=tbox')."
  2503. <div class='field-help'>".NWSLAN_116."</div>
  2504. </td>
  2505. </tr>
  2506. <tr>
  2507. <td>".NWSLAN_117."</td>
  2508. <td>
  2509. ".$frm->text('newsposts_archive_title', $pref['newsposts_archive_title'])."
  2510. </td>
  2511. </tr>
  2512. ";
  2513. // ##### END --------------------------------------------------------------------------------------
  2514. $text .= "
  2515. <tr>
  2516. <td>".LAN_NEWS_51."</td>
  2517. <td>
  2518. ".$frm->uc_select('news_editauthor', vartrue($pref['news_editauthor']), 'nobody,main,admin,classes')."
  2519. </td>
  2520. </tr>
  2521. <tr>
  2522. <td>".NWSLAN_106."</td>
  2523. <td>
  2524. ".$frm->uc_select('subnews_class', $pref['subnews_class'], 'nobody,public,guest,member,admin,classes')."
  2525. </td>
  2526. </tr>
  2527. <tr>
  2528. <td>".NWSLAN_107."</td>
  2529. <td>
  2530. ".$frm->radio_switch('subnews_htmlarea', $pref['subnews_htmlarea'])."
  2531. </td>
  2532. </tr>
  2533. <tr>
  2534. <td>".NWSLAN_100."</td>
  2535. <td>
  2536. ".$frm->radio_switch('subnews_attach', $pref['subnews_attach'])."
  2537. </td>
  2538. </tr>
  2539. <tr>
  2540. <td>".NWSLAN_101."</td>
  2541. <td>
  2542. ".$frm->number('subnews_resize', $pref['subnews_resize'], 5, 'size=6&class=tbox')."
  2543. <div class='field-help'>".NWSLAN_102."</div>
  2544. </td>
  2545. </tr>
  2546. <tr>
  2547. <td>".NWSLAN_111."</td>
  2548. <td>
  2549. <div class='auto-toggle-area autocheck'>
  2550. ".$frm->radio_switch('news_newdateheader', $pref['news_newdateheader'])."
  2551. <div class='field-help'>".NWSLAN_112."</div>
  2552. </div>
  2553. </td>
  2554. </tr>
  2555. <tr>
  2556. <td>".NWSLAN_113."</td>
  2557. <td>
  2558. <div class='auto-toggle-area autocheck'>
  2559. ".$frm->radio_switch('news_unstemplate', vartrue($pref['news_unstemplate']))."
  2560. <div class='field-help'>".NWSLAN_114."</div>
  2561. </div>
  2562. </td>
  2563. </tr>
  2564. <tr>
  2565. <td>".NWSLAN_120."</td>
  2566. <td>
  2567. ".$frm->bbarea('news_subheader', stripcslashes(vartrue($pref['news_subheader'])), 2, 'helpb')."
  2568. </td>
  2569. </tr>
  2570. </tbody>
  2571. </table>
  2572. <div class='buttons-bar center'>
  2573. ".$frm->admin_button('save_prefs', LAN_UPDATE, 'update')."
  2574. </div>
  2575. </fieldset>
  2576. </form>
  2577. ";
  2578. return e107::getMessage()->render().$text;
  2579. // e107::getRender()->tablerender(NWSLAN_90, e107::getMessage()->render().$text);
  2580. }
  2581. function show_submitted_news()
  2582. {
  2583. //TODO - image upload path should be e_MEDIA and using generic upload handler on submitnews.php.
  2584. $e107 = e107::getInstance();
  2585. $frm = e107::getForm();
  2586. $tp = e107::getParser();
  2587. $sql = e107::getDb();
  2588. $newsCat = array();
  2589. $sql->select('news_category');
  2590. while($row = $sql->fetch())
  2591. {
  2592. $newsCat[$row['category_id']] = $tp->toHTML($row['category_name'],FALSE,'TITLE');
  2593. }
  2594. if ($sql->select("submitnews", "*", "submitnews_id !='' ORDER BY submitnews_id DESC"))
  2595. {
  2596. $text .= "
  2597. <form action='".e_SELF."?sn' method='post'>
  2598. <fieldset id='core-newspost-sn-list'>
  2599. <legend class='e-hideme'>".NWSLAN_47."</legend>
  2600. <table class='table adminlist'>
  2601. <colgroup>
  2602. <col style='width: 2%' />
  2603. <col style='width: 5%' />
  2604. <col style='width: 60%' />
  2605. <col style='width: auto' />
  2606. <col style='width: auto' />
  2607. <col style='width: auto' />
  2608. <col style='width: auto' />
  2609. <col style='width: 20%' />
  2610. </colgroup>
  2611. <thead>
  2612. <tr>
  2613. <th class='center'>&nbsp;</th>
  2614. <th class='center'>ID</th>
  2615. <th>".NWSLAN_57."</th>
  2616. <th>".LAN_DATE."</th>
  2617. <th>".LAN_AUTHOR."</th>
  2618. <th>".NWSLAN_6."</th>
  2619. <th>".NWSLAN_123."</th>
  2620. <th class='center last'>".LAN_OPTIONS."</th>
  2621. </tr>
  2622. </thead>
  2623. <tbody>
  2624. ";
  2625. while ($row = $sql->fetch())
  2626. {
  2627. $buttext = ($row['submitnews_auth'] == 0)? NWSLAN_58 : NWSLAN_103;
  2628. if (substr($row['submitnews_item'], -7, 7) == '[/html]') $row['submitnews_item'] = substr($row['submitnews_item'], 0, -7);
  2629. if (substr($row['submitnews_item'],0 , 6) == '[html]') $row['submitnews_item'] = substr($row['submitnews_item'], 6);
  2630. $text .= "
  2631. <tr>
  2632. <td class='center'><input type='checkbox' name='news_selected[".$row['submitnews_id']."]' value='".$row['submitnews_id']."' /></td>
  2633. <td class='center'>{$row['submitnews_id']}</td>
  2634. <td>
  2635. <a href=\"javascript:expandit('submitted_".$row['submitnews_id']."')\">";
  2636. $text .= $tp->toHTML($row['submitnews_title'],FALSE,'TITLE');
  2637. $text .= '</a>';
  2638. // $text .= [ '.NWSLAN_104.' '.$submitnews_name.' '.NWSLAN_108.' '.date('D dS M y, g:ia', $submitnews_datestamp).']<br />';
  2639. $text .= "<div id='submitted_".$row['submitnews_id']."' style='display:none'>".$tp->toHTML($row['submitnews_item'],TRUE);
  2640. $text .= ($row['submitnews_file']) ? "<br /><img src='".e_IMAGE_ABS."newspost_images/".$row['submitnews_file']."' alt=\"".$row['submitnews_file']."\" />" : "";
  2641. $text .= "
  2642. </div>
  2643. </td>";
  2644. $text .= "<td class='nowrap'>".date('D jS M, Y, g:ia', $row['submitnews_datestamp'])."</td>
  2645. <td><a href=\"mailto:".$row['submitnews_email']."?subject=[".SITENAME."] ".trim($row['submitnews_title'])."\" title='".$row['submitnews_email']." - ".e107::getIPHandler()->ipDecode($row['submitnews_ip'])."'>".$row['submitnews_name']."</a></td>
  2646. <td>".$newsCat[$row['submitnews_category']]."</td>
  2647. <td class='center'>".($row['submitnews_auth'] == 0 ? "-" : ADMIN_TRUE_ICON)."</td>
  2648. <td>
  2649. <div class='field-spacer center nowrap'>
  2650. ".$frm->admin_button("category_view_{$row['submitnews_id']}", NWSLAN_27, 'action', '', array('id'=>false, 'other'=>"onclick=\"expandit('submitted_".$row['submitnews_id']."')\""))."
  2651. ".$frm->admin_button("category_edit_{$row['submitnews_id']}", $buttext, 'action', '', array('id'=>false, 'other'=>"onclick=\"document.location='".e_SELF."?create.sn.{$row['submitnews_id']}'\""))."
  2652. ".$frm->admin_button("delete[sn_{$row['submitnews_id']}]", LAN_DELETE, 'delete', '', array('id'=>false, 'title'=>$tp->toJS(NWSLAN_38." [".LAN_ID.": {$row['submitnews_id']} ]")))."
  2653. </div>
  2654. </td>
  2655. </tr>
  2656. ";
  2657. }
  2658. $text .= "
  2659. </tbody>
  2660. </table>";
  2661. $text .= "<div class='buttons-bar center'>";
  2662. $text .= e107::getForm()->batchoptions(array(
  2663. 'subdelete_selected' => LAN_DELETE,
  2664. 'subcategory' => array('Modify Category', $newsCat)
  2665. ));
  2666. $text .= "</div>
  2667. </fieldset>
  2668. </form>
  2669. ";
  2670. }
  2671. else
  2672. {
  2673. $text .= "<div class='center'>".NWSLAN_59."</div>";
  2674. }
  2675. e107::getRender()->tablerender(NWSLAN_47, e107::getMessage()->render().$text);
  2676. }
  2677. function showMaintenance()
  2678. {
  2679. $frm = e107::getForm();
  2680. $text = "
  2681. <form method='post' action='".e_SELF."?maint' id='core-newspost-maintenance-form'>
  2682. <fieldset id='core-newspost-maintenance'>
  2683. <legend class='e-hideme'>".LAN_NEWS_59."</legend>
  2684. <table class='table adminform'>
  2685. <colgroup>
  2686. <col class='col-label' />
  2687. <col class='col-control' />
  2688. <col class='col-control' />
  2689. </colgroup>
  2690. <tbody>
  2691. <tr>
  2692. <td>".LAN_NEWS_56."</td>
  2693. <td>
  2694. ".$frm->checkbox('newsdeletecomments', '1', '0').LAN_NEWS_61."
  2695. </td>
  2696. <td>
  2697. ".$frm->admin_button('news_comments_recalc', LAN_NEWS_57, 'update')."
  2698. </td>
  2699. </tr>
  2700. </tbody>
  2701. </table>
  2702. </fieldset>
  2703. </form>
  2704. ";
  2705. e107::getRender()->tablerender(LAN_NEWS_59, e107::getMessage()->render().$text);
  2706. }
  2707. function _observe_newsCommentsRecalc()
  2708. {
  2709. if(!getperms('0'))
  2710. {
  2711. $this->noPermissions();
  2712. }
  2713. $qry = "SELECT
  2714. COUNT(`comment_id`) AS c_count,
  2715. `news_id`, `news_comment_total`, `news_allow_comments`
  2716. FROM `#news` LEFT JOIN `#comments` ON `news_id`=`comment_item_id`
  2717. WHERE (`comment_type`='0') OR (`comment_type`='news')
  2718. GROUP BY `comment_item_id`";
  2719. $deleteCount = 0;
  2720. $updateCount = 0;
  2721. $canDelete = isset($_POST['newsdeletecomments']);
  2722. if ($result = e107::getDb()->db_Select_gen($qry))
  2723. {
  2724. while ($row = e107::getDb()->fetch(MYSQL_ASSOC))
  2725. {
  2726. if ($canDelete && ($row['news_allow_comments'] != 0) && ($row['c_count'] > 0)) // N.B. sense of 'news_allow_comments' is 0 = allow!!!
  2727. { // Delete comments
  2728. e107::getDb('sql2')->db_Delete('comments', 'comment_item_id='.$row['news_id']);
  2729. $deleteCount = $deleteCount + $row['c_count'];
  2730. $row['c_count'] = 0; // Forces update of news table if necessary
  2731. }
  2732. if ($row['news_comment_total'] != $row['c_count'])
  2733. {
  2734. e107::getDb('sql2')->db_Update('news', 'news_comment_total = '.$row['c_count'].' WHERE news_id='.$row['news_id']);
  2735. $updateCount++;
  2736. }
  2737. }
  2738. $this->show_message(str_replace(array('--UPDATE--', '--DELETED--'), array($updateCount, $deleteCount), LAN_NEWS_58), E_MESSAGE_SUCCESS);
  2739. }
  2740. else
  2741. {
  2742. $this->show_message(LAN_NEWS_62, E_MESSAGE_WARNING);
  2743. }
  2744. }
  2745. function show_message($message, $type = E_MESSAGE_INFO, $session = false)
  2746. {
  2747. // ##### Display comfort ---------
  2748. e107::getMessage()->add($message, $type, $session);
  2749. }
  2750. function noPermissions($qry = '')
  2751. {
  2752. $url = e_SELF.($qry ? '?'.$qry : '');
  2753. if($qry !== e_QUERY)
  2754. {
  2755. $this->show_message('Insufficient permissions!', E_MESSAGE_ERROR, true);
  2756. session_write_close();
  2757. header('Location: '.$url);
  2758. }
  2759. exit;
  2760. }
  2761. /*
  2762. function show_options()
  2763. {
  2764. $e107 = e107::getInstance();
  2765. $var['main']['text'] = NWSLAN_44;
  2766. $var['main']['link'] = e_SELF;
  2767. $var['main']['perm'] = "H";
  2768. $var['create']['text'] = NWSLAN_45;
  2769. $var['create']['link'] = e_SELF."?action=create";
  2770. $var['create']['perm'] = "H";
  2771. $var['cat']['text'] = NWSLAN_46;
  2772. $var['cat']['link'] = e_SELF."?action=cat";
  2773. $var['cat']['perm'] = "7";
  2774. $var['pref']['text'] = NWSLAN_90;
  2775. $var['pref']['link'] = e_SELF."?action=pref";
  2776. $var['pref']['perm'] = "0";
  2777. //TODO remove commented code before release.
  2778. // $c = $sql->count('submitnews');
  2779. // if ($c) {
  2780. $var['sn']['text'] = NWSLAN_47." ({$c})";
  2781. $var['sn']['link'] = e_SELF."?action=sn";
  2782. $var['sn']['perm'] = "N";
  2783. // }
  2784. if (getperms('0'))
  2785. {
  2786. $var['maint']['text'] = LAN_NEWS_55;
  2787. $var['maint']['link'] = e_SELF."?action=maint";
  2788. $var['maint']['perm'] = "N";
  2789. }
  2790. e107::getNav()->admin(NWSLAN_48, $this->getAction(), $var);
  2791. }
  2792. */
  2793. }
  2794. function newspost_adminmenu()
  2795. {
  2796. // e107::getRegistry('_newspost_admin')->show_options();
  2797. }