PageRenderTime 31ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/administrator/components/com_jomcomment/admin.jomcomment.php

https://bitbucket.org/dgough/annamaria-daneswood-25102012
PHP | 2316 lines | 1828 code | 326 blank | 162 comment | 156 complexity | fbbe5ed4f8ca85b69c6667ad1c68b7d4 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. ob_start();
  3. (defined('_VALID_MOS') OR defined('_JEXEC')) or die('Direct Access to this location is not allowed.');
  4. define('JOMCOMMENT_DEFAULT_LIMIT', 30);
  5. if(!defined('CMSLIB_DEFINED'))
  6. include_once (dirname(dirname(dirname(dirname(__FILE__)))). '/components/libraries/cmslib/spframework.php');
  7. global $task, $_JC_CONFIG;
  8. global $jcPatchClass;
  9. $jcPatchClass = array ();
  10. $cms =& cmsInstance('CMSCore');
  11. // Load helper for directories
  12. $cms->load('helper','directory');
  13. $cms->load('helper','url');
  14. require_once ($cms->get_path('root') . "/administrator/components/com_jomcomment/class.jomcomment.php");
  15. require_once ($cms->get_path('root') . "/administrator/components/com_jomcomment/admin.jomcomment.html.php");
  16. require_once ($cms->get_path('root') . "/components/com_jomcomment/jomcomment.php");
  17. include_once ($cms->get_path('plugins') . "/system/pc_includes/ajax.php");
  18. include_once ($cms->get_path('plugins') . "/system/pc_includes/template.php");
  19. require_once ($cms->get_path('root') . "/administrator/components/com_jomcomment/patch.jomcomment.php");
  20. /* CMS Compatibilities */
  21. if(cmsVersion() == _CMS_JOOMLA10 || cmsVersion() == _CMS_MAMBO)
  22. $patchFiles = mosReadDirectory($cms->get_path('root') . "/administrator/components/com_jomcomment/patch", "php");
  23. else if(cmsVersion() == _CMS_JOOMLA15){
  24. $patchFiles = JFolder::folders($cms->get_path('root') . "/administrator/components/com_jomcomment/patch", "php");
  25. #Import Joomla 1.5 libraries
  26. jimport('joomla.cache.cache');
  27. }
  28. /* End CMS Compatibilities */
  29. foreach ($patchFiles as $p) {
  30. #Some ISP include php.ini in every subfolders
  31. #Need to check if its a php.ini file
  32. if($p != 'php.ini')
  33. require_once ($cms->get_path('root') . "/administrator/components/com_jomcomment/patch/" . $p);
  34. }
  35. $cid = cmsGetVar('cid', 0, 'POST');
  36. $task = cmsGetVar('task', '', 'POST');
  37. if (empty ($task))
  38. $task = cmsGetVar('task','comments', 'GET');
  39. $option = "com_jomcomment";
  40. switch ($task) {
  41. case 'xajax' :
  42. break;
  43. case 'exportEmail' :
  44. jcExportEmail();
  45. break;
  46. case 'hacks' :
  47. ob_start();
  48. showAjaxedAdmin();
  49. $panel = ob_get_contents();
  50. ob_end_clean();
  51. ob_start();
  52. showAvailableHacks();
  53. $content = ob_get_contents();
  54. ob_end_clean();
  55. $content = str_replace("{CONTENT}", $content, $panel);
  56. echo $content;
  57. break;
  58. case "import" :
  59. ob_start();
  60. showAjaxedAdmin();
  61. $panel = ob_get_contents();
  62. ob_end_clean();
  63. ob_start();
  64. importComments($option);
  65. $content = ob_get_contents();
  66. ob_end_clean();
  67. $content = str_replace("{CONTENT}", $content, $panel);
  68. echo $content;
  69. break;
  70. case "latestnews" :
  71. ob_start();
  72. showAjaxedAdmin();
  73. $panel = ob_get_contents();
  74. ob_end_clean();
  75. ob_start();
  76. showLatestNews();
  77. $content = ob_get_contents();
  78. ob_end_clean();
  79. $content = str_replace("{CONTENT}", $content, $panel);
  80. echo $content;
  81. break;
  82. case "save" :
  83. saveComment($option);
  84. break;
  85. case "maintd" :
  86. ob_start();
  87. showAjaxedAdmin();
  88. $panel = ob_get_contents();
  89. ob_end_clean();
  90. ob_start();
  91. showMaintd();
  92. $content = ob_get_contents();
  93. ob_end_clean();
  94. $content = str_replace("{CONTENT}", $content, $panel);
  95. echo $content;
  96. break;
  97. case "remove" :
  98. removeComments($cid, $option);
  99. break;
  100. case "publish" :
  101. publishComments($cid, 1, $option, $task);
  102. break;
  103. case "unpublish" :
  104. publishComments($cid, 0, $option, $task);
  105. break;
  106. case "publish_tb" :
  107. publishTrackbacks($cid, 1, $option);
  108. break;
  109. case "unpublish_tb" :
  110. publishTrackbacks($cid, 0, $option);
  111. break;
  112. case "remove_tb" :
  113. removeTrackbacks($cid, $option);
  114. break;
  115. case 'publish_reports':
  116. publishComments($cid, 1, $option, 'reports');
  117. break;
  118. case 'unpublish_reports':
  119. publishComments($cid, 0, $option, 'reports');
  120. break;
  121. case 'dismiss_reports':
  122. dismissReports($cid, $option);
  123. case "config" :
  124. ob_start();
  125. showAjaxedAdmin();
  126. $panel = ob_get_contents();
  127. ob_end_clean();
  128. ob_start();
  129. showConfig($option);
  130. $content = ob_get_contents();
  131. ob_end_clean();
  132. $content = str_replace("{CONTENT}", $content, $panel);
  133. echo $content;
  134. break;
  135. case "editLanguage" :
  136. ob_start();
  137. showAjaxedAdmin();
  138. $panel = ob_get_contents();
  139. ob_end_clean();
  140. ob_start();
  141. editLanguage("xxx");
  142. $content = ob_get_contents();
  143. ob_end_clean();
  144. $content = str_replace("{CONTENT}", $content, $panel);
  145. echo $content;
  146. break;
  147. case "savesettings" :
  148. saveConfig($option);
  149. break;
  150. case "savelanguagesettings":
  151. saveLanguageConfig($option);
  152. break;
  153. case "stats" :
  154. ob_start();
  155. showAjaxedAdmin();
  156. $panel = ob_get_contents();
  157. ob_end_clean();
  158. ob_start();
  159. showStatistics();
  160. $content = ob_get_contents();
  161. ob_end_clean();
  162. $content = str_replace("{CONTENT}", $content, $panel);
  163. echo $content;
  164. break;
  165. case "about" :
  166. ob_start();
  167. showAjaxedAdmin();
  168. $panel = ob_get_contents();
  169. ob_end_clean();
  170. ob_start();
  171. showAbout();
  172. $content = ob_get_contents();
  173. ob_end_clean();
  174. $content = str_replace("{CONTENT}", $content, $panel);
  175. echo $content;
  176. break;
  177. case "support" :
  178. ob_start();
  179. showAjaxedAdmin();
  180. $panel = ob_get_contents();
  181. ob_end_clean();
  182. ob_start();
  183. showSupport();
  184. $content = ob_get_contents();
  185. ob_end_clean();
  186. $content = str_replace("{CONTENT}", $content, $panel);
  187. echo $content;
  188. break;
  189. case "license" :
  190. ob_start();
  191. showAjaxedAdmin();
  192. $panel = ob_get_contents();
  193. ob_end_clean();
  194. ob_start();
  195. showLicense();
  196. $content = ob_get_contents();
  197. ob_end_clean();
  198. $content = str_replace("{CONTENT}", $content, $panel);
  199. echo $content;
  200. break;
  201. case "trackbacks" :
  202. ob_start();
  203. showAjaxedAdmin();
  204. $panel = ob_get_contents();
  205. ob_end_clean();
  206. ob_start();
  207. showTrackbacks($option);
  208. $content = ob_get_contents();
  209. ob_end_clean();
  210. $content = str_replace("{CONTENT}", $content, $panel);
  211. echo $content;
  212. break;
  213. case "reports" :
  214. ob_start();
  215. showAjaxedAdmin();
  216. $panel = ob_get_contents();
  217. ob_end_clean();
  218. ob_start();
  219. showReports($option);
  220. $content = ob_get_contents();
  221. ob_end_clean();
  222. $content = str_replace("{CONTENT}", $content, $panel);
  223. echo $content;
  224. break;
  225. case 'language':
  226. ob_start();
  227. showAjaxedAdmin();
  228. $panel = ob_get_contents();
  229. ob_end_clean();
  230. ob_start();
  231. showLanguageConfig($option);
  232. $content = ob_get_contents();
  233. ob_end_clean();
  234. $content = str_replace("{CONTENT}", $content, $panel);
  235. echo $content;
  236. break;
  237. case "comments" :
  238. default :
  239. ob_start();
  240. showAjaxedAdmin();
  241. $panel = ob_get_contents();
  242. ob_end_clean();
  243. ob_start();
  244. showComments($option);
  245. $content = ob_get_contents();
  246. ob_end_clean();
  247. $content = str_replace("{CONTENT}", $content, $panel);
  248. echo $content;
  249. break;
  250. }
  251. function dismissReports($cid, $option){
  252. $cms =& cmsInstance('CMSCore');
  253. if (!is_array($cid) || count($cid) < 1) {
  254. echo "<script> alert('Select an item to $action'); window.history.go(-1);</script>\n";
  255. exit;
  256. }
  257. $cids = implode(',', $cid);
  258. // If data is not an array, format it to be an array so that it would be
  259. // much easier to be processed.
  260. if(!is_array($cids))
  261. $cids = array($cids);
  262. foreach($cids as $id){
  263. $strSQL = "SELECT COUNT(*) FROM #__jomcomment_reported WHERE `commentid`='{$id}'";
  264. $cms->db->query($strSQL);
  265. if(!$cms->db->get_value())
  266. $cms->db->query("INSERT INTO #__jomcomment_reported SET `commentid`='{$id}'");
  267. $cms->db->query("DELETE FROM #__jomcomment_reports WHERE `commentid`='{$id}'");
  268. }
  269. # Clear the cache, otherwise it won't show after refresh
  270. jcClearCache();
  271. cmsRedirect("index2.php?option=$option&task=reports");
  272. }
  273. function transformDbText ($source) {
  274. // if mbstring is available, use it instead
  275. // array used to figure what number to decrement from character order value
  276. // according to number of characters used to map unicode to ascii by utf-8
  277. $decrement[4] = 240;
  278. $decrement[3] = 224;
  279. $decrement[2] = 192;
  280. $decrement[1] = 0;
  281. // the number of bits to shift each charNum by
  282. $shift[1][0] = 0;
  283. $shift[2][0] = 6;
  284. $shift[2][1] = 0;
  285. $shift[3][0] = 12;
  286. $shift[3][1] = 6;
  287. $shift[3][2] = 0;
  288. $shift[4][0] = 18;
  289. $shift[4][1] = 12;
  290. $shift[4][2] = 6;
  291. $shift[4][3] = 0;
  292. $pos = 0;
  293. $len = strlen ($source);
  294. $encodedString = '';
  295. while ($pos < $len) {
  296. $asciiPos = ord (substr ($source, $pos, 1));
  297. // we must skip standard ascii cahracter from being unicode encoded!
  298. if($asciiPos > 31 && $asciiPos <= 127){
  299. $encodedString .= substr ($source, $pos, 1);
  300. $pos++;
  301. }
  302. else
  303. {
  304. if (($asciiPos >= 240) && ($asciiPos <= 255)) {
  305. // 4 chars representing one unicode character
  306. $thisLetter = substr ($source, $pos, 4);
  307. $pos += 4;
  308. }
  309. else if (($asciiPos >= 224) && ($asciiPos <= 239)) {
  310. // 3 chars representing one unicode character
  311. $thisLetter = substr ($source, $pos, 3);
  312. $pos += 3;
  313. }
  314. else if (($asciiPos >= 192) && ($asciiPos <= 223)) {
  315. // 2 chars representing one unicode character
  316. $thisLetter = substr ($source, $pos, 2);
  317. $pos += 2;
  318. }
  319. else {
  320. // 1 char (lower ascii)
  321. $thisLetter = substr ($source, $pos, 1);
  322. $pos += 1;
  323. }
  324. // process the string representing the letter to a unicode entity
  325. $thisLen = strlen ($thisLetter);
  326. $thisPos = 0;
  327. $decimalCode = 0;
  328. while ($thisPos < $thisLen) {
  329. $thisCharOrd = ord (substr ($thisLetter, $thisPos, 1));
  330. if ($thisPos == 0) {
  331. $charNum = intval ($thisCharOrd - $decrement[$thisLen]);
  332. $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
  333. }
  334. else {
  335. $charNum = intval ($thisCharOrd - 128);
  336. $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
  337. }
  338. $thisPos++;
  339. }
  340. if ($thisLen == 1)
  341. $encodedLetter = "&#". str_pad($decimalCode, 3, "0", STR_PAD_LEFT) . ';';
  342. else
  343. $encodedLetter = "&#". str_pad($decimalCode, 5, "0", STR_PAD_LEFT) . ';';
  344. $encodedString .= $encodedLetter;
  345. }
  346. }
  347. return $encodedString;
  348. }
  349. function editLanguage() {
  350. $cms =& cmsInstance('CMSCore');
  351. $cms->load('helper','directory');
  352. $languages = cmsGetFiles($cms->get_path('root') . '/components/com_jomcomment/languages', '.php');
  353. $options = '';
  354. foreach($languages as $language){
  355. $options .= '<option value="' . $language . '">' . $language . '</option>';
  356. }
  357. HTML_comment :: showLanguageEdit($options);
  358. }
  359. /**
  360. * Patch com_content/content.php for pagination support
  361. */
  362. function jcxPatchContent(){
  363. $objResponse = new JAXResponse();
  364. $cms =& cmsInstance('CMSCore');
  365. include_once(JC_COM_PATH . '/helper/system.hacks.php');
  366. $patchok = jcPatchContentPagination();
  367. if($patchok){
  368. $objResponse->addAlert('Patch applied successfully');
  369. $objResponse->addAssign('paginationPatchAction','innerHTML', '<input type="button" name="Submit" class="CommonTextButtonSmall" value="Restore com_content file" onClick="javascript:void(0);jax.call(\'jomcomment\',\'jcxRestorePatchedContent\');"/>');
  370. } else {
  371. $objResponse->addAlert('File already patched');
  372. }
  373. return $objResponse->sendResponse();
  374. }
  375. /**
  376. * Restore old com_content hacks
  377. */
  378. function jcxRestorePatchedContent(){
  379. $objResponse = new JAXResponse();
  380. $cms =& cmsInstance('CMSCore');
  381. include_once(JC_COM_PATH . '/helper/system.hacks.php');
  382. if(jcCheckContentPagination()){
  383. jcRestoreContentPagination();
  384. $objResponse->addAssign('paginationPatchAction', 'innerHTML','<input type="button" name="Submit" class="CommonTextButtonSmall" value="Patch com_content" onClick="javascript:void(0);jax.call(\'jomcomment\',\'jcxPatchContent\');"/>');
  385. }
  386. $objResponse->addAlert('Backup loaded successfully');
  387. return $objResponse->sendResponse();
  388. }
  389. /*
  390. * Patch Artio's file so that we can include our custom pagination
  391. */
  392. function jcxPatchArtio(){
  393. #Include our own libraries
  394. $cms =& cmsInstance('CMSCore');
  395. while (@ ob_end_clean());
  396. ob_start();
  397. $sef_file = $cms->get_path('root') . '/components/com_sef/sef_ext/com_content.php';
  398. $patch_file = JC_ADMIN_COM_PATH . '/patch/artio/com_content.php';
  399. $objResponse = new JAXResponse();
  400. #Make backup copy of existing file before doing anything
  401. if(copy($sef_file,JC_ADMIN_COM_PATH . '/patch/artio/com_content.php.backup')){
  402. #Now, remove the old file
  403. if(unlink($sef_file)){
  404. #If sucessfull remove old file copy our patch to new path
  405. if(copy($patch_file,$sef_file)){
  406. $objResponse->addAlert('JoomSEF for Jom Comment Patched! Please purge JoomSEF URLs!');
  407. #Reload the page
  408. $objResponse->addScriptCall('window.location.reload();');
  409. }else{
  410. $objResponse->addAlert('Error copying sef patch file - com_content.php');
  411. }
  412. }else{
  413. $objResponse->addAlert('Error deleting sef old file - com_content.php');
  414. }
  415. }else{
  416. $objResponse->addAlert('Error backing up sef old file - com_content.php');
  417. }
  418. return $objResponse->sendResponse();
  419. }
  420. /*
  421. * Restore Artio's backup file
  422. */
  423. function jcxRestoreArtio(){
  424. #Include our own libraries
  425. $cms =& cmsInstance('CMSCore');
  426. while (@ ob_end_clean());
  427. ob_start();
  428. $sef_file = $cms->get_path('root') . '/components/com_sef/sef_ext/com_content.php';
  429. $backup_file = JC_ADMIN_COM_PATH . '/patch/artio/com_content.php.backup';
  430. $objResponse = new JAXResponse();
  431. #Remove our patch file from sef folder
  432. if(unlink($sef_file)){
  433. if(rename($backup_file,$sef_file)){
  434. $objResponse->addAlert('Original sef file restored! Please purge JoomSEF URLs!');
  435. #Reload the page
  436. $objResponse->addScriptCall('window.location.reload();');
  437. }else{
  438. $objResponse->addAlert('Error copying backup file - com_content.php');
  439. }
  440. }else{
  441. $objResponse->addAlert('Error removing sef patch file - com_content.php');
  442. }
  443. return $objResponse->sendResponse();
  444. }
  445. function jcxDoPatch($com, $action) {
  446. global $jcPatchClass;
  447. $result = "";
  448. eval ('$patch = new ' . $jcPatchClass[$com] . '();');
  449. $result = $patch->action($action);
  450. return $result;
  451. }
  452. function modifyText(& $item, $key) {
  453. $item->comment = transformDbText($item->comment);
  454. }
  455. function jcxLoadLangFile($fileName) {
  456. $cms =& cmsInstance('CMSCore');
  457. while (@ ob_end_clean());
  458. ob_start();
  459. $filename = $cms->get_path('root') . "/components/com_jomcomment/languages/" . $fileName;
  460. $handle = fopen($filename, "r");
  461. $contents = fread($handle, filesize($filename));
  462. fclose($handle);
  463. $pattern = "'<?" . "php(.*)\?" . ">'s";
  464. preg_match($pattern, $contents, $matches);
  465. $contents = @ $matches[1];
  466. $contents = trim($contents);
  467. $objResponse = new JAXResponse();
  468. $objResponse->addAssign('editLangTextArea', 'value', $contents);
  469. $objResponse->addAssign('currentFile', 'value', $fileName);
  470. $objResponse->addAssign('ajaxInfo', 'innerHTML', $fileName . " loaded...");
  471. return $objResponse->sendResponse();
  472. }
  473. function jcxTogglePublish($id) {
  474. $db =& cmsInstance('CMSDb');
  475. while (@ ob_end_clean());
  476. ob_start();
  477. $db->query("SELECT published FROM #__jomcomment WHERE id=$id");
  478. $publish = $db->get_value();
  479. $publish = intval(!($publish));
  480. $db->query("UPDATE #__jomcomment SET published='$publish' WHERE id=$id");
  481. $objResponse = new JAXResponse();
  482. if ($publish) {
  483. $objResponse->addAssign('pubImg' . $id, 'src', 'images/publish_g.png');
  484. $d['id'] = $id;
  485. } else {
  486. $objResponse->addAssign('pubImg' . $id, 'src', 'images/publish_x.png');
  487. $d['id'] = $id;
  488. }
  489. return $objResponse->sendResponse();
  490. }
  491. function jcxToggleTrackbackPublish($id) {
  492. $db =& cmsInstance('CMSDb');
  493. while (@ ob_end_clean());
  494. ob_start();
  495. $db->query("SELECT published FROM #__jomcomment_tb WHERE id=$id");
  496. $publish = $db->get_value();
  497. $publish = intval(!($publish));
  498. $db->query("UPDATE #__jomcomment_tb SET published='$publish' WHERE id=$id");
  499. $objResponse = new JAXResponse();
  500. if ($publish) {
  501. $objResponse->addAssign('pubImg' . $id, 'src', 'images/publish_g.png');
  502. } else {
  503. $objResponse->addAssign('pubImg' . $id, 'src', 'images/publish_x.png');
  504. }
  505. return $objResponse->sendResponse();
  506. }
  507. function jcxEditComment($commentid) {
  508. global $_JC_CONFIG;
  509. while (@ ob_end_clean());
  510. ob_start();
  511. $obj = null;
  512. $cms =& cmsInstance('CMSCore');
  513. $cms->db->query('SELECT * FROM #__jomcomment WHERE `id`=' . $commentid . ' LIMIT 1');
  514. $comment = $cms->db->object_to_array($cms->db->get_object_list());
  515. $comment[0]['comment'] = str_replace("<br />", '\n', stripslashes($comment[0]['comment']));
  516. $comment[0]['comment'] = str_replace("<br/>", '\n', stripslashes($comment[0]['comment']));
  517. $comment[0]['comment'] = str_replace("</br>", '\n', stripslashes($comment[0]['comment']));
  518. $tpl = & new AzrulJXTemplate();
  519. foreach ($comment[0] as $key => $val) {
  520. $tpl->set($key, $val);
  521. }
  522. $cms->db->query("SELECT title FROM #__content WHERE id='" . $comment[0]['contentid'] . "'");
  523. $tpl->set('content_title', $cms->db->get_value());
  524. $html = $tpl->fetch(JC_ADMIN_COM_PATH . '/templates/edit_comment.tpl.html');
  525. $objResponse = new JAXResponse();
  526. $objResponse->addScriptCall("showFloatingDialog", $html);
  527. return $objResponse->sendResponse();
  528. }
  529. function jcxSendMail($args){
  530. global $_JC_CONFIG, $mainframe;
  531. $cms =& cmsInstance('CMSCore');
  532. $cms->load('libraries','user');
  533. $from = $args['from'];
  534. $to = $args['recipient'];
  535. $title = $args['title'];
  536. $msg = $args['message'];
  537. if(!function_exists('jomMail'))
  538. require_once($cms->get_path('root') . '/components/com_jomcomment/functions.jomcomment.php');
  539. $response = new JAXResponse();
  540. if(jomMail($cms->user->email, $from, $to, $title, $msg)){
  541. $response->addScriptCall("alert('Email sent!');");
  542. $response->addScriptCall("jQuery('#popupWindowContainer').css('visibility', 'hidden');");
  543. } else {
  544. $response->addScriptCall("alert('Error while sending mail. Please check mail configuration in Global Configuration.');");
  545. }
  546. return $response->sendResponse();
  547. }
  548. function jcxMoveComment($id, $contentid){
  549. $cms =& cmsInstance('CMSCore');
  550. $strSQL = "UPDATE #__jomcomment SET `contentid`='{$contentid}' WHERE `id`='{$id}'";
  551. $cms->db->query($strSQL);
  552. $response = new JAXResponse();
  553. $response->addScriptCall("alert('Comment moved!');");
  554. $response->addScriptCall("jQuery('#popupWindowContainer').css('visibility', 'hidden');");
  555. // Update new content title
  556. $strSQL = "SELECT `title` FROM #__content WHERE `id`='{$contentid}'";
  557. $cms->db->query($strSQL);
  558. $title = $cms->db->get_value();
  559. $response->addAssign("content-" . $id, 'innerHTML', $title);
  560. return $response->sendResponse();
  561. }
  562. function jcxMoveCommentForm($id){
  563. global $_JC_CONFIG;
  564. $cms =& cmsInstance('CMSCore');
  565. while (@ ob_end_clean());
  566. ob_start();
  567. $strSQL = "SELECT b.title FROM #__jomcomment AS a, #__content AS b "
  568. . "WHERE a.id='{$id}' "
  569. . "AND b.id=a.contentid";
  570. $cms->db->query($strSQL);
  571. $oldTitle = $cms->db->get_value();
  572. $categories = trim($_JC_CONFIG->get('categories'));
  573. $strSQL = "SELECT DISTINCT(b.id),(b.title) "
  574. . "FROM #__jomcomment AS a, #__content AS b "
  575. . "WHERE a.contentid != b.id "
  576. . "AND `sectionid` IN(" . $categories . ")";
  577. $cms->db->query($strSQL);
  578. $newTitles = $cms->db->get_object_list();
  579. $template =& new AzrulJXTemplate();
  580. $template->set('id', $id);
  581. $template->set('oldTitle', $oldTitle);
  582. $template->set('newTitles', $newTitles);
  583. $data = $template->fetch(JC_ADMIN_COM_PATH . '/templates/move.tpl.html');
  584. $response = new JAXResponse();
  585. $response->addScriptCall('showFloatingDialog', $data);
  586. return $response->sendResponse();
  587. }
  588. function jcxEmailForm($recipient) {
  589. global $_JC_CONFIG;
  590. $cms =& cmsInstance('CMSCore');
  591. while (@ ob_end_clean());
  592. ob_start();
  593. $template =& new AzrulJXTemplate();
  594. $template->set('recipient', $recipient);
  595. $data = $template->fetch(JC_ADMIN_COM_PATH . '/templates/email.tpl.html');
  596. $response = new JAXResponse();
  597. $response->addScriptCall('showFloatingDialog', $data);
  598. return $response->sendResponse();
  599. }
  600. function jcxSaveComment($xajaxArgs) {
  601. global $mainframe;
  602. require_once(JC_COM_PATH . '/views.jomcomment.php');
  603. $view = new JCView();
  604. while (@ ob_end_clean());
  605. ob_start();
  606. $row = new mosJomcomment();
  607. $commentid = $xajaxArgs['id'];
  608. $row->load($commentid);
  609. $row->bind($xajaxArgs);
  610. // Set the preview
  611. $row->preview = $view->_formatComment($row->comment, '', $commentid);
  612. $row->store();
  613. //$row->updateOrder("contentid='$row->contentid'");
  614. $newrow = new mosJomcomment();
  615. $newrow->load($commentid);
  616. $nlSearch = array (
  617. "\n",
  618. "\r"
  619. );
  620. $nlReplace = array (
  621. " ",
  622. " "
  623. );
  624. $newrow->comment = str_replace($nlSearch, $nlReplace, $newrow->comment);
  625. $newrow->comment = transformDbText($row->comment);
  626. if (strlen($newrow->comment) > 300) {
  627. $newrow->comment = stripslashes(substr($newrow->comment, 0, 300 - 3));
  628. $newrow->comment .= "...";
  629. }
  630. $newrow->comment = strip_tags($newrow->comment);
  631. $objResponse = new JAXResponse();
  632. jcClearCache();
  633. $objResponse->addScriptCall("jQuery('#popupWindowContainer').css", 'visibility', 'hidden');
  634. $objResponse->addAssign("comment-" . $commentid, 'innerHTML', $newrow->comment);
  635. $objResponse->addAssign('comment-name-' . $commentid , 'innerHTML' , $newrow->name );
  636. $objResponse->addAssign('comment-email-' . $commentid , 'innerHTML' , $newrow->email );
  637. $objResponse->addAssign('comment-title-' . $commentid , 'innerHTML' , $newrow->title );
  638. $click = 'jQuery("#comment-email-' . $commentid . '").click(function(){';
  639. $click .= 'jax.call("jomcomment","jcxEmailForm", "' . $newrow->email . '");';
  640. $click .= '});';
  641. $objResponse->addScriptCall( $click );
  642. //$objResponse->addAssign('comment-email-' . $commentid , 'innerHTML' , $newrow->email );
  643. $objResponse->addAssign('comment-website-' . $commentid , 'innerHTML' , $newrow->website );
  644. $objResponse->addAssign("date-" . $commentid, 'innerHTML', $newrow->date);
  645. return $objResponse->sendResponse();
  646. }
  647. function jcxBanUserName($name) {
  648. global $_JC_CONFIG;
  649. $_JC_CONFIG->addBlockedUser($name);
  650. $objResponse = new JAXResponse();
  651. $objResponse->addScriptCall("alert", "$name blocked");
  652. return $objResponse->sendResponse();
  653. }
  654. function jcxBanUserIP($ip) {
  655. global $_JC_CONFIG;
  656. $_JC_CONFIG->addBlockedIP($ip);
  657. $objResponse = new JAXResponse();
  658. $objResponse->addScriptCall("alert", "$ip IP blocked");
  659. return $objResponse->sendResponse();
  660. }
  661. /*
  662. * function : jcxSaveLanguage
  663. * : Saves a specific language file
  664. * params : $content (language files data)
  665. * : $fileName (language file name english.php)
  666. */
  667. function jcxSaveLanguage($content, $fileName){
  668. $cms =& cmsInstance('CMSCore');
  669. while (@ ob_end_clean());
  670. $content = "<?php\n" . $content . "?" . ">";
  671. $content = stripslashes($content);
  672. $filename = $cms->get_path('root') . '/components/com_jomcomment/languages/' . $fileName;
  673. $handle = fopen($filename, "w");
  674. fwrite($handle, ($content));
  675. fclose($handle);
  676. $objResponse = new JAXResponse();
  677. $objResponse->addAssign(" ajaxInfo ", 'innerHTML', $fileName . " saved . . . ");
  678. return $objResponse->sendResponse();
  679. }
  680. function jcxTrainFilterTest($id){
  681. return jcxTrainTrackbackFilterTest($id, false);
  682. }
  683. function jcxTrainTrackbackFilterTest($id, $isTrackback=true){
  684. $cms =& cmsInstance('CMSCore');
  685. if($isTrackback)
  686. $cms->db->query("SELECT excerpt, url FROM #__jomcomment_tb WHERE id='$id'");
  687. else
  688. $cms->db->query("SELECT comment FROM #__jomcomment WHERE id='$id'");
  689. #$comment = $database->loadRow();
  690. $comment = $cms->db->row();
  691. $document = $comment[0] . " " . $comment[1] ;
  692. $data = "action=cat&type=comment&version=2&document=" . urlencode($document);
  693. $response = post("filter0.azrul.com/index.php", $data);
  694. $objResponse = new JAXResponse();
  695. $objResponse->addAlert($response);
  696. return $objResponse->sendResponse();
  697. }
  698. function jcxTrainTrackbackFilter($contentid, $cat, $quite = true) {
  699. return jcxTrainFilter($contentid, $cat, $quite, true);
  700. }
  701. /**
  702. * Send the filter setting to our centralize server
  703. */
  704. function jcxTrainFilter($contentid, $cat, $quite = true, $trackback= false) {
  705. global $database, $mainframe;
  706. $document = "";
  707. $docid = $mainframe->getCfg('live_site') . "-$contentid";
  708. if($trackback){
  709. $database->setQuery("SELECT excerpt, url FROM #__jomcomment_tb WHERE id=$contentid");
  710. $docid .= "-tb";
  711. $comment = $database->loadRow();
  712. $document = $comment[0] . " " . $comment[1] ;
  713. } else {
  714. $database->setQuery("SELECT comment FROM #__jomcomment WHERE id=$contentid");
  715. $docid .= "-comment";
  716. $comment = $database->loadResult();
  717. $document = $comment;
  718. }
  719. if (true) {
  720. while (@ ob_end_clean());
  721. ob_start();
  722. $data = "action=train&server=$docid&cat=$cat&document=" . urlencode($document) . "&version=2&lang=" . $mainframe->getCfg('lang');
  723. $response = post("filter0.azrul.com/index.php", $data);
  724. $objResponse = new JAXResponse();
  725. $objResponse->addAlert($response);
  726. $objResponse->addAlert("Filter Trained");
  727. return $objResponse->sendResponse();
  728. } else {
  729. ob_start();
  730. $data = "action=train&docid=" . $mainframe->getCfg('live_site') . "-$contentid&cat=$cat&document=" . urlencode($document) . "&version=2&lang=" . $mainframe->getCfg('lang');
  731. $response = post("filter0.azrul.com/index.php", $data);
  732. ob_end_clean();
  733. }
  734. }
  735. /**
  736. * Remove all unpublished comments and trackbacks
  737. */
  738. function jcxRemoveUnpublished(){
  739. $cms =& cmsInstance('CMSCore');
  740. while (@ ob_end_clean());
  741. ob_start();
  742. $objResponse = new JAXResponse();
  743. return $objResponse->sendResponse();
  744. }
  745. /**
  746. * Rebuild table index
  747. */
  748. function jcxRebuildIndex(){
  749. $cms =& cmsInstance('CMSCore');
  750. while (@ ob_end_clean());
  751. ob_start();
  752. $objResponse = new JAXResponse();
  753. // Check jomcomment table index
  754. $doIndex = array('option','published','contentid');
  755. $availableIndex = array();
  756. $cms->db->query('SHOW INDEX FROM #__jomcomment');
  757. $createdIndexes = $cms->db->get_object_list();
  758. foreach($createdIndexes as $row){
  759. $availableIndex[] = $row->Key_name;
  760. }
  761. foreach($doIndex as $key){
  762. if(!in_array($key,$availableIndex)){
  763. $strSQL = 'ALTER TABLE #__jomcomment ADD INDEX (`' . $key . '`)';
  764. $cms->db->query($strSQL);
  765. }
  766. }
  767. // Check jomcomment_tb table index
  768. $doIndex = array('url','published','contentid', 'ip', 'option');
  769. $availableIndex = array();
  770. $cms->db->query('SHOW INDEX FROM #__jomcomment_tb');
  771. $createdIndexes = $cms->db->get_object_list();
  772. foreach($createdIndexes as $row){
  773. $availableIndex[] = $row->Key_name;
  774. }
  775. foreach($doIndex as $key){
  776. if(!in_array($key,$availableIndex)){
  777. $strSQL = 'ALTER TABLE #__jomcomment_tb ADD INDEX (`' . $key . '`)';
  778. $cms->db->query($strSQL);
  779. }
  780. }
  781. $objResponse->addAlert('Database tables for Jom Comment has been optimized!');
  782. return $objResponse->sendResponse();
  783. }
  784. /**
  785. * Clearing jom comment cache
  786. */
  787. function jcxClearCache(){
  788. while (@ ob_end_clean());
  789. ob_start();
  790. $objResponse = new JAXResponse();
  791. return $objResponse->sendResponse();
  792. }
  793. function post($host, $query, $others = '') {
  794. if(function_exists('curl_init')){
  795. $ch = curl_init();
  796. curl_setopt ($ch, CURLOPT_URL, "http://" .$host . "?". $query);
  797. curl_setopt ($ch, CURLOPT_HEADER, 0);
  798. ob_start();
  799. curl_exec ($ch);
  800. curl_close ($ch);
  801. $string = ob_get_contents();
  802. ob_end_clean();
  803. return $string;
  804. }
  805. if(ini_get('allow_url_fopen') == 1){
  806. $dh = fopen("http://". $host . "?". $query,'r');
  807. $result = fread($dh,8192);
  808. return $result;
  809. }
  810. /////////////////////////
  811. $path = explode('/', $host);
  812. $host = $path[0];
  813. $r = "";
  814. unset ($path[0]);
  815. $path = '/' . (implode('/', $path));
  816. $post = "POST $path HTTP/1.0\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: " . strlen($query) . "\r\nConnection: close\r\n\r\n$query";
  817. $h = fsockopen($host, 80, $errno, $errstr, 7);
  818. if ($h) {
  819. fwrite($h, $post);
  820. for ($a = 0, $r = ''; !$a;) {
  821. $b = fread($h, 8192);
  822. $r .= $b;
  823. $a = (($b == '') ? 1 : 0);
  824. }
  825. fclose($h);
  826. }
  827. return $r;
  828. }
  829. function jcPagination($total, $limitstart, $limit){
  830. $pagination = new stdClass();
  831. if(cmsVersion() == _CMS_JOOMLA15){
  832. jimport('joomla.html.pagination');
  833. $pageNav = new JPagination($total, $limitstart, $limit);
  834. $pagination->limitstart = $limitstart;
  835. $pagination->limit = $limit;
  836. $pagination->total = $total;
  837. $pagination->footer = $pageNav->getListFooter();
  838. }
  839. else{
  840. $cms =& cmsInstance('CMSCore');
  841. include_once($cms->get_path('root') . '/administrator/includes/pageNavigation.php');
  842. // We assume that this is a joomla 1.0 or mambo.
  843. $pageNav = new mosPageNav($total, $limitstart, $limit);
  844. $pagination->limitstart = $limitstart;
  845. $pagination->limit = $limit;
  846. $pagination->total = $total;
  847. $pagination->footer = $pageNav->getListFooter();
  848. }
  849. return $pagination;
  850. }
  851. /**
  852. * Show the comment listing page
  853. */
  854. function showComments($option) {
  855. global $database, $mainframe;
  856. $cms =& cmsInstance('CMSCore');
  857. $cms->db->query("SELECT distinct `option` FROM #__jomcomment");
  858. $results = $cms->db->get_object_list();
  859. #Set the default option
  860. $default_com = 'com_content';
  861. //$default_com = $cms->db->get_value();
  862. if(count($results) == 1){
  863. $default_com = $results[0]->option;
  864. }
  865. $limitOption = cmsGetVar('limitOption', $default_com, 'REQUEST');
  866. $limit = $mainframe->getUserStateFromRequest("viewlistlimit", 'limit', 10);
  867. $limitstart = $mainframe->getUserStateFromRequest("view{$option}limitstart", 'limitstart', 0);
  868. $search = $mainframe->getUserStateFromRequest("search{$option}", 'search', '');
  869. $search = $cms->db->_escape(trim(strtolower($search)));
  870. $searchContent = $mainframe->getUserStateFromRequest("searchContent{$option}", 'searchContent', '');
  871. $searchContent = $cms->db->_escape(trim(strtolower($searchContent)));
  872. $searchUser = $mainframe->getUserStateFromRequest("searchUser",'searchUser','');
  873. $searchUser = $cms->db->_escape(trim(strtolower($searchUser)));
  874. $where = array ();
  875. // Seach for comment with the given string
  876. if ($search) {
  877. $where[] = "LOWER(comment) LIKE '%$search%'";
  878. }
  879. $where[] = "`option`='$limitOption' ";
  880. // search for comment with the given content. Only the first content that
  881. // matches is displayed
  882. if($searchContent){
  883. $cms->db->query("SELECT id FROM #__content WHERE `title` LIKE '%$searchContent%'");
  884. $contentid = $cms->db->get_value();
  885. if($contentid != 0){
  886. $where[] = " `contentid`=$contentid ";
  887. $where[] = " `option`='$limitOption' ";
  888. }
  889. }
  890. // User wants to search comments from specific user
  891. if($searchUser){
  892. include_once(JC_COM_PATH . '/helper/comments.helper.php');
  893. $userId = intval($searchUser);
  894. if($userId == 0){
  895. $userId = jcGetUserId($searchUser, true);
  896. $where[] = "`user_id`='{$userId}'";
  897. } else {
  898. // User input user id
  899. $where[] = "`user_id`='{$searchUser}'";
  900. }
  901. }
  902. $cms->db->query("SELECT count(*) FROM #__jomcomment AS a" . (count($where) ? "\nWHERE " . implode(' AND ', $where) : ""));
  903. $total = $cms->db->get_value();
  904. $pageNav = jcPagination($total, $limitstart, $limit);
  905. $cms->db->query("SELECT * FROM #__jomcomment" . (count($where) ? "\nWHERE " . implode(' AND ', $where) : "") . "\nORDER BY id DESC" . "\nLIMIT $pageNav->limitstart,$pageNav->limit");
  906. $rows = $cms->db->get_object_list();
  907. #Check if $rows is array first
  908. if(is_array($rows)){
  909. array_walk($rows, 'modifyText');
  910. }
  911. HTML_comment :: showComments($option, $rows, $search, $pageNav, $searchContent, $searchUser);
  912. }
  913. /**
  914. * Show the trackback list page
  915. */
  916. function showTrackbacks($option) {
  917. global $mainframe;
  918. $cms =& cmsInstance('CMSCore');
  919. $limit = $mainframe->getUserStateFromRequest("viewlistlimit", 'limit', 10);
  920. $limitstart = $mainframe->getUserStateFromRequest("view{$option}limitstart", 'limitstart', 0);
  921. $search = $mainframe->getUserStateFromRequest("search{$option}", 'search', '');
  922. $search = $cms->db->_escape(trim(strtolower($search)));
  923. $searchContent = $mainframe->getUserStateFromRequest("searchContent{$option}", 'searchContent', '');
  924. $searchContent = $cms->db->_escape(trim(strtolower($searchContent)));
  925. $where = array ();
  926. if ($search) {
  927. $where[] = "LOWER(excerpt) LIKE '%$search%'";
  928. }
  929. // search for comment with the given content. Only the first content that
  930. // matches is displayed
  931. if($searchContent){
  932. $cms->db->query("SELECT id FROM #__content WHERE `title` LIKE '%$searchContent%'");
  933. $contentid = $cms->db->get_value();
  934. if($contentid != 0){
  935. $where[] = " `contentid`=$contentid ";
  936. }
  937. }
  938. $cms->db->query("SELECT count(*) FROM #__jomcomment_tb AS a" . (count($where) ? "\nWHERE " . implode(' AND ', $where) : ""));
  939. $total = $cms->db->get_value();
  940. include_once ("includes/pageNavigation.php");
  941. $pageNav = new mosPageNav($total, $limitstart, $limit);
  942. $cms->db->query("SELECT * FROM #__jomcomment_tb" . (count($where) ? "\nWHERE " . implode(' AND ', $where) : "") . "\nORDER BY id DESC" . "\nLIMIT $pageNav->limitstart,$pageNav->limit");
  943. $rows = $cms->db->get_object_list();
  944. HTML_trackbacks :: showTrackbacks($option, $rows, $search, $pageNav, $searchContent);
  945. }
  946. /**
  947. *
  948. */
  949. function publishComments($cid = null, $publish = 1, $option, $task = 'comments') {
  950. $cms =& cmsInstance('CMSCore');
  951. if (!is_array($cid) || count($cid) < 1) {
  952. $action = $publish ? 'publish' : 'unpublish';
  953. echo "<script> alert('Select an item to $action'); window.history.go(-1);</script>\n";
  954. exit;
  955. }
  956. $cids = implode(',', $cid);
  957. $cms->db->query("UPDATE #__jomcomment SET `published`='{$publish}' WHERE `id` IN ({$cids})");
  958. # Clear the cache, otherwise it won't show after refresh
  959. jcClearCache();
  960. cmsRedirect("index2.php?option=$option&task=$task");
  961. }
  962. function joomfishExists(){
  963. $cms =& cmsInstance('CMSCore');
  964. if(file_exists($cms->get_path('root') . '/components/com_joomfish/joomfish.php'))
  965. return true;
  966. return false;
  967. }
  968. /**
  969. *
  970. */
  971. function publishTrackbacks($cid = null, $publish = 1, $option, $task = 'comments') {
  972. global $mainframe;
  973. $cms =& cmsInstance('CMSCore');
  974. if (!is_array($cid) || count($cid) < 1) {
  975. $action = $publish ? 'publish' : 'unpublish';
  976. echo "<script> alert('Select an item to $action'); window.history.go(-1);</script>\n";
  977. exit;
  978. }
  979. $cids = implode(',', $cid);
  980. $cms->db->query("UPDATE #__jomcomment_tb SET published='$publish' WHERE id IN ($cids)");
  981. cmsRedirect("index2.php?option=$option&task=$task");
  982. }
  983. function showMaintd(){
  984. global $mainframe;
  985. $cms =& cmsInstance('CMSCore');
  986. $db =& cmsInstance('CMSDb');
  987. if(isset($_POST['maintd']) && $_POST['maintd'] == 'syncUser'){
  988. $strSQL = "SELECT `id`,`name` FROM #__users";
  989. $cms->db->query($strSQL);
  990. $users = $cms->db->get_object_list();
  991. foreach($users as $user){
  992. $strSQL = "UPDATE #__jomcomment SET `name`='{$user->name}' WHERE `user_id`='{$user->id}'";
  993. $cms->db->query($strSQL);
  994. }
  995. jcClearCache();
  996. echo "<h3>Name's synchronized...</h3>";
  997. }
  998. if(isset($_POST['maintd']) && $_POST['maintd'] == 'clearunpublished'){
  999. $db->query("DELETE FROM #__jomcomment WHERE published=0");
  1000. $db->query("DELETE FROM #__jomcomment_tb WHERE published=0");
  1001. echo "<h3>Unpublished items deleted...</h3>";
  1002. }
  1003. if(isset($_POST['maintd']) && $_POST['maintd'] == 'clearcache'){
  1004. $cms->load('libraries', 'cache');
  1005. $cms->cache->clear();
  1006. jcClearCache();
  1007. echo "<h3>Cache cleared...</h3>";
  1008. }
  1009. ?>
  1010. <table width="800" border="0" cellspacing="2" cellpadding="0">
  1011. <tr>
  1012. <td width="558"><h2>Clear all Jom Comment cache.</h2>
  1013. Jom Comment cache the generated page to significantly increase the loading performance. This cache is independent of Joomla cache and are automatically cleared at a specific interval. If you want, you can force the cache to be cleared here
  1014. <p>
  1015. <form id="form1" name="form1" method="post" action="">
  1016. <input name="maintd" type="hidden" id="maintd" value="clearcache" />
  1017. <input type="submit" name="Submit" class="CommonTextButtonSmall" value="Clear Jom Comment Cache" />
  1018. </form>
  1019. </p>
  1020. </td>
  1021. <td valign="bottom" width="274"> </td>
  1022. </tr>
  1023. <tr>
  1024. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1025. </tr>
  1026. <tr>
  1027. <td><h2>Synchronize User's Real Name</h2>
  1028. This tool will synchronize the user's real name with the latest real name used by the user.<br /><br />
  1029. Note: This operation may take a little while if you have a huge set of user's database.
  1030. <p>
  1031. <form id="form1" name="form1" method="post" action="">
  1032. <input type="submit" name="Submit" class="CommonTextButtonSmall" value="Synchronize Now" />
  1033. <input name="maintd" type="hidden" id="maintd" value="syncUser" />
  1034. </form>
  1035. </p>
  1036. </td>
  1037. <td valign="bottom">&nbsp;</td>
  1038. </tr>
  1039. <tr>
  1040. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1041. </tr>
  1042. <tr>
  1043. <td><h2>Removed unpublished comments and trackbacks</h2>
  1044. You can delete all unpublished items from Jom Comment database to make the database smaller.
  1045. <p>
  1046. <form id="form1" name="form1" method="post" action="">
  1047. <input type="submit" name="Submit" class="CommonTextButtonSmall" value="Delete unpublished items" />
  1048. <input name="maintd" type="hidden" id="maintd" value="clearunpublished" />
  1049. </form>
  1050. </p>
  1051. </td>
  1052. <td valign="bottom"></td>
  1053. </tr>
  1054. <tr>
  1055. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1056. </tr>
  1057. <tr>
  1058. <td><h2 style="margin-top:0px;">Rebuild and optimize table index</h2>
  1059. If you are upgrading from an older version of Jom Comment,
  1060. the table index might be missing. Click the button below to rebuild the
  1061. table index. Indexing the table properly will greatly improve Jom Comment
  1062. performance on site with huge number of comments.
  1063. <p><form id="form1" name="form1" method="post" action="">
  1064. <input type="button" name="Submit" class="CommonTextButtonSmall" value="Rebuild table index" onClick="javascript:void(0);jax.call('jomcomment','jcxRebuildIndex');"/>
  1065. <input name="maintd" type="hidden" id="maintd" value="clearunpublished" />
  1066. </form>
  1067. </p>
  1068. </td>
  1069. <td valign="bottom"></td>
  1070. </tr>
  1071. <tr>
  1072. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1073. </tr>
  1074. <?php
  1075. // Do not display the following for Joomla 1.5
  1076. if(cmsVersion() != _CMS_JOOMLA15){
  1077. ?>
  1078. <tr>
  1079. <td width="558"><h2>Patch JoomSEF for Pagination</h2>
  1080. To have Jom Comment's pagination to work correctly with ARTIO JoomSEF, please use this patch.<br /><br />
  1081. <strong>* Please purge ARTIO's SEF URL after patching the file.</strong>
  1082. <p>
  1083. <form id="form1" name="form1" method="post" action="">
  1084. <?php
  1085. #Check if the file has been patched by checking if there is a file in
  1086. #JOOMLA/administrator/components/com_jomcomment/patch/artio/com_content.php.backup
  1087. $sef_backupfile = JC_ADMIN_COM_PATH . '/patch/artio/com_content.php.backup';
  1088. if(!file_exists($sef_backupfile)){
  1089. #No backup files, allow patch
  1090. ?>
  1091. <input type="button" name="Submit" class="CommonTextButtonSmall" value="Patch Artio JoomSEF File" onClick="javascript:void(0);jax.call('jomcomment','jcxPatchArtio');"/>
  1092. <?php
  1093. }else{
  1094. #Already have backup files, allow undo?
  1095. ?>
  1096. <input type="button" name="Submit" class="CommonTextButtonSmall" value="Restore Artio JoomSEF File" onClick="javascript:void(0);jax.call('jomcomment','jcxRestoreArtio');"/>
  1097. <?php
  1098. }
  1099. ?>
  1100. <input name="maintd" type="hidden" id="maintd" value="clearcache" />
  1101. </form>
  1102. </p>
  1103. </td>
  1104. <td valign="bottom" width="274"> </td>
  1105. </tr>
  1106. <tr>
  1107. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1108. </tr>
  1109. <tr><!-- patch for pagination -->
  1110. <td><h2 style="margin-top:0px;">Fix com_content pagination cache bug</h2>
  1111. If you are using pagination feature, you will need to apply a small hack
  1112. to the com_content/content.php file to work-around Joomla's aggrasive caching.
  1113. Joomla by default, does not recognize comment pagination. Don't worry, a backup
  1114. file are created and stored as content.php.backup
  1115. <p><form id="formPaginationHack" name="formPaginationHack" method="post" action="">
  1116. <?php
  1117. include_once(JC_COM_PATH . '/helper/system.hacks.php');
  1118. if(!jcCheckContentPagination()) {
  1119. ?>
  1120. <div id="paginationPatchAction">
  1121. <input type="button" name="Submit" class="CommonTextButtonSmall" value="Patch com_content" onClick="javascript:void(0);jax.call('jomcomment','jcxPatchContent');"/>
  1122. </div>
  1123. <?php
  1124. } else {
  1125. ?>
  1126. <div id="paginationPatchAction">
  1127. <input type="button" name="Submit" class="CommonTextButtonSmall" value="Restore com_content patched file" onClick="javascript:void(0);jax.call('jomcomment','jcxRestorePatchedContent');"/>
  1128. </div>
  1129. <?php
  1130. }
  1131. ?>
  1132. </form>
  1133. </p>
  1134. </td>
  1135. <td valign="bottom"></td>
  1136. </tr>
  1137. <tr>
  1138. <td colspan="2"><hr size="1" noshade="noshade" /></td>
  1139. </tr>
  1140. <?php
  1141. }
  1142. ?>
  1143. </table>
  1144. <?php
  1145. }
  1146. function showAbout() {
  1147. HTML_comment :: showAbout();
  1148. }
  1149. function showSupport() {
  1150. HTML_comment :: showSupport();
  1151. }
  1152. function showReports(){
  1153. //Displays the administration section of View Reports
  1154. global $mainframe;
  1155. $jq = JC_ADMIN_LIVEPATH . '/js';
  1156. $template = JC_ADMIN_LIVEPATH . '/templates';
  1157. ?>
  1158. <script src="<?php echo $jq;?>/jquery-1.2.6.pack.js" type="text/javascript"></script>
  1159. <script type='text/javascript'>
  1160. /*<![CDATA[*/
  1161. jQuery.noConflict();
  1162. /*]]>*/
  1163. </script>
  1164. <script src="<?php echo $jq;?>/ui.mouse.js" type="text/javascript"></script>
  1165. <script src="<?php echo $jq;?>/jquery.dimensions.js" type="text/javascript"></script>
  1166. <script src="<?php echo $jq;?>/ui.draggable.js" type="text/javascript"></script>
  1167. <script src="<?php echo $template;?>/edit_comment.js" type="text/javascript"></script>
  1168. <link rel="stylesheet" href="<?php echo $template;?>/edit_comment.css" type="text/css" />
  1169. <div id="popupWindowContainer" style="visibility:hidden; position:absolute" >
  1170. <div class="dropshadowBox">
  1171. <div class="innerbox">
  1172. <div id="popupWindowHandle"></div>
  1173. <div id="popupWindowEditable" ></div>
  1174. </div>
  1175. </div>
  1176. </div>
  1177. <?php
  1178. $cms = &cmsInstance('CMSCore');
  1179. //Prepare for html output.
  1180. $html = '<form action="index2.php?option=com_jomcomment&task=reports" method="post" name="adminForm" id="adminForm" >';
  1181. //$html = '<form action="index2.php?option=com_jomcomment&task=reports" method="post" name="adminForm" id="adminForm" >';
  1182. //Set header logo
  1183. $html .= '<table cellpadding="4" cellspacing="0" border="0" width="100%">'
  1184. . ' <tr>'
  1185. . ' <td><img src="components/com_jomcomment/logo.png"></td>'
  1186. . ' </tr>'
  1187. . '</table>';
  1188. // Load libraries
  1189. $cms->load('libraries','trunchtml');
  1190. $cms->load('libraries','table');
  1191. // $cms->load('libraries','pagination');
  1192. // Pagination values
  1193. // Get limitstart value from query string.
  1194. //$limitstart = cmsGetVar('limitstart', 0, 'GET');
  1195. //$limit = $limitstart ? "LIMIT $limitstart, " . JOMCOMMENT_DEFAULT_LIMIT : 'LIMIT ' . JOMCOMMENT_DEFAULT_LIMIT;
  1196. $limit = $mainframe->getUserStateFromRequest("viewlistlimit", 'limit', JOMCOMMENT_DEFAULT_LIMIT );
  1197. $limitstart = $mainframe->getUserStateFromRequest("viewcom_jomcommentlimitstart", 'limitstart', 0);
  1198. // $pageNav = jcPagination($total, $limitstart, $limit);
  1199. #Query database for the comments by only selecting the comments that
  1200. #has been reported.
  1201. $strSQL = "SELECT DISTINCT(b.commentid) as id,a.name,a.email,a.website,a.date,a.ip, "
  1202. . "a.comment, a.title, a.published FROM #__jomcomment AS a "
  1203. . "INNER JOIN #__jomcomment_reports AS b "
  1204. . "ON b.commentid = a.id "
  1205. . "ORDER BY a.id DESC LIMIT {$limitstart} , {$limit}";
  1206. $cms->db->query($strSQL);
  1207. $rows = $cms->db->get_object_list();
  1208. // set table properties
  1209. $tmpl = array (
  1210. 'table_open' => '<table border="0" width="100%" class="mytable" cellpadding="4" cellspacing="0">',
  1211. 'heading_row_start' => '<tr>',
  1212. 'heading_row_end' => '</tr>',
  1213. 'heading_cell_start' => '',
  1214. 'heading_cell_end' => '</th>',
  1215. 'row_start' => '<tr class="row0">',
  1216. 'row_end' => '</tr>',
  1217. 'cell_start' => '',
  1218. 'cell_end' => '</td>',
  1219. 'row_alt_start' => '<tr class="row1">',
  1220. 'row_alt_end' => '</tr>',
  1221. 'cell_alt_start' => '',
  1222. 'cell_alt_end' => '</td>',
  1223. 'table_close' => '</table>'
  1224. );
  1225. $cms->table->set_template($tmpl);
  1226. $cms->table->set_heading('<th width="5%"><input type="checkbox" name="toggle" value="" onclick="checkAll(' . count($rows) . ');" />','<th width="50%">Comment', '<th width="10%">Total Reports','<th width="15%" align=center>Date','<th width="15%">Publish Status');
  1227. //<input type="checkbox" name="toggle" value="" onclick="checkAll(' . $totalRows . ');" />'
  1228. $i = 0;
  1229. if($rows){
  1230. foreach($rows as $row){
  1231. # Get total number of reports for particular comment
  1232. $strSQL = "SELECT COUNT(*) AS total FROM #__jomcomment_reports WHERE `commentid`='$row->id'";
  1233. $cms->db->query($strSQL);
  1234. $total = $cms->db->get_value();
  1235. $pubImg = $row->published ? 'publish_g.png' : 'publish_x.png';
  1236. #Format the comment output to a shorter comment
  1237. $row->comment = transformDbText($row->comment);
  1238. if(strlen($row->comment) > 300) {
  1239. $row->comment = stripslashes(substr($row->comment,0,300-3));
  1240. $row->comment .= "...";
  1241. }
  1242. $pubImg = "<a href=\"javascript: void(0);\" onclick=\"jax.call('jomcomment','jcxTogglePublish', $row->id);\">"
  1243. . "<img id=\"pubImg$row->id\" src=\"images/" . $pubImg . "\" width=\"12\" height=\"12\" border=\"0\">"
  1244. . "</a>";
  1245. $col1 = "
  1246. <div style=\"text-align:left\">
  1247. <strong>INFO: </strong>
  1248. <strong>Name: </strong>$row->name |
  1249. <strong>Email: </strong>$row->email |
  1250. <strong>URL: </strong>$row->website |
  1251. <strong>Date:</strong> <span id=\"date-{$row->id}\">$row->date</span> |
  1252. <strong>IP: </strong>$row->ip |
  1253. </div>";
  1254. $data = array('<td><input type="checkbox" id="cb' . $i . '" name="cid[]" value="' . $row->id . '" onclick="isChecked(this.checked);"" /></td>',
  1255. '<td>' . "<strong>{$row->title}</strong>" .'<div class="comment" id="comment-' . $row->id . '">' .strip_tags($row->comment) . '</div>' . $col1,
  1256. '<td align="center"><a href="#">' . $total . '</a>',
  1257. '<td align="center">' . $row->date,
  1258. '<td align="center">' . $pubImg.'&nbsp;|&nbsp;<a href="javascript:void(0);" onclick="jax.call(\'jomcomment\',\'jcxDismissReport\', '.$row->id.');">dismiss</a>
  1259. &nbsp;|&nbsp;<a href="javascript:void(0);" onclick="jax.call(\'jomcomment\',\'jcxEditComment\', '.$row->id.');">edit</a>',
  1260. );
  1261. // Add hidden row
  1262. $cms->table->add_row($data);
  1263. $i++;
  1264. }
  1265. }
  1266. #Append the data into output
  1267. $html .= $cms->table->generate();
  1268. #Load pagination array
  1269. $config = array();
  1270. #Get amount of comments that has been reported.
  1271. $strSQL = "SELECT COUNT(DISTINCT `commentid`) FROM #__jomcomment_reports";
  1272. $cms->db->query($strSQL);
  1273. // $config['total_rows'] = $cms->db->get_value();
  1274. // $config['base_url'] = $_SERVER['REQUEST_URI'];
  1275. // $config['per_page'] = JOMCOMMENT_DEFAULT_LIMIT;
  1276. $pagination = jcPagination( $cms->db->get_value() , $limitstart , $limit );
  1277. //$cms->pagination->initialize($config);
  1278. //$html .= $cms->pagination->create_links();
  1279. $html .= $pagination->footer;
  1280. #End the form
  1281. $html .= '<input type="hidden" name="task" value="" />'
  1282. .'<input type="hidden" name="boxchecked" value="0" />'
  1283. .'</form>';
  1284. #Print data
  1285. echo $html;
  1286. }
  1287. // Show latest news from our rss feed
  1288. function showLatestNews(){
  1289. $cms = cmsInstance('CMSCore');
  1290. $cms->load('libraries', 'lastrss');
  1291. echo "<h2>Latest updates</h2>";
  1292. echo "<div style=\"width:640px;\"><p>";
  1293. $rss = $cms->lastrss;
  1294. $rss->cache_dir = $cms->get_path('root') . '/cache';
  1295. $rss->cache_time = 120;
  1296. $rss->date_format = 'M d, Y g:i:s A';
  1297. $rss->CDATA = 'content';
  1298. $url = "http://support.azrul.com/rss/index.php?_m=news&_a=view&group=default";
  1299. //$url = "http://localhost/joomla/dev/index.php?option=com_myblog&Itemid=27&task=rss";
  1300. $i = 0;
  1301. if ($rs = $rss->get($url)) {
  1302. $rs = $rss->get($url);
  1303. foreach ($rs['items'] as $item) {
  1304. if($i < 10){
  1305. echo "<div style=\"padding:8px;border-bottom:1px dotted #666666;\"><div style=\"font-weight:bold\"><a parent=\"_blank\"href=\"{$item['link']}\">{$item['title']}</a></div>";
  1306. echo "<div>{$item['pubDate']}</div><div>{$item['description']}</div></div>";
  1307. }
  1308. $i++;
  1309. }
  1310. if ($rs['items_count'] <= 0) { echo "<li>Sorry, no items found in the RSS file :-(</li>"; }
  1311. } else {
  1312. echo "Sorry: It's not possible to reach RSS file $url\n<br />";
  1313. // you will probably hide this message in a live version
  1314. }
  1315. // List of RSS URLs
  1316. echo "</p></div>";
  1317. }
  1318. function showLicense() {
  1319. HTML_comment :: showLicense();
  1320. }
  1321. function importMXComment(){
  1322. $cms =& cmsInstance('CMSCore');
  1323. $strSQL = "INSERT INTO #__jomcomment(`contentid`, `option`, `ip`, `name`, `email`, `website`, `title`, `comment`, `date`, `published`)"
  1324. . "SELECT contentid, component, ip, name, email, web, title, comment,date,published FROM #__mxc_comments";
  1325. $cms->db->query($strSQL);
  1326. echo 'Import completed.';
  1327. }
  1328. function importJoomlaComment() {
  1329. global $database;
  1330. $query = "INSERT INTO #__jomcomment
  1331. (contentid, `option…

Large files files are truncated, but you can click here to view the full file