PageRenderTime 63ms CodeModel.GetById 18ms 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
  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`, ip, name, title, comment, date, published)
  1332. SELECT
  1333. contentid, 'com_content', ip, name, title, comment,date,published
  1334. FROM #__comment";
  1335. $database->setQuery($query);
  1336. $database->query();
  1337. $numImported = $database->getAffectedRows();
  1338. echo "Finished... "; echo $numImported . " comments imported";
  1339. }
  1340. function importAkoData() {
  1341. global $database;
  1342. $tname = array ( "#__akocomment" );
  1343. $fields = @ $database->getTableFields($tname);
  1344. if (!empty ($fields)) {
  1345. $prefix = "#__akocomment"; $addwhere = "";
  1346. if (isset ($_REQUEST['nounpublished']) && (@ $_REQUEST['nounpublished'])) {
  1347. $addwhere = " AND published=1 ";
  1348. }
  1349. $fieldURL = array_key_exists("url", $fields[$prefix]);
  1350. $fieldWeb = array_key_exists("web", $fields[$prefix]);
  1351. $fieldEmail = array_key_exists("email", $fields[$prefix]);
  1352. $insertMore = "";
  1353. $selectMore = "";
  1354. if ($fieldURL) {
  1355. $insertMore .= ", website";
  1356. $selectMore .= ", url";
  1357. } else if ($fieldWeb) {
  1358. $insertMore .= ", website"; $selectMore .= ", web"; }
  1359. if ($fieldEmail) {
  1360. $insertMore .= ", email";
  1361. $selectMore .= ", email";
  1362. }
  1363. $query = sprintf("
  1364. INSERT INTO #__jomcomment
  1365. (contentid, `option`, ip, name, title, comment, date, published %s)
  1366. SELECT contentid, 'com_content', ip, name, title, comment,date,published %s
  1367. from #__akocomment where 1 %s;", $insertMore, $selectMore, $addwhere);
  1368. $database->setQuery($query);
  1369. $database->query();
  1370. $database->getQuery();
  1371. $numImported = $database->getAffectedRows();
  1372. echo "Finished... ";
  1373. echo $numImported . " comments imported";
  1374. } else { echo "No AkoCOmment data detected"; } }
  1375. function importComments($option) {
  1376. $cms =& cmsInstance('CMSCore');
  1377. $cms->load('helper','url');
  1378. ?>
  1379. <table cellpadding="4" cellspacing="0" border="0" width="100%">
  1380. <tr>
  1381. <td width="100%" class="sectionname"><img src="components/com_jomcomment/logo.png"></td>
  1382. </tr>
  1383. </table>
  1384. <?php
  1385. if (!empty ($_REQUEST['confirm'])) {
  1386. if ($_REQUEST['from'] == "joomlacomment") {
  1387. importJoomlaComment();
  1388. } else if($_REQUEST['from'] == 'mxcomment'){
  1389. importMXComment();
  1390. } else if ($_REQUEST['from'] == "ako") {
  1391. importAkoData();
  1392. } else if ($_REQUEST['from'] == "combomax") {
  1393. $tname = array ( "#__combomax" );
  1394. $fields = $database->getTableFields($tname);
  1395. if (!empty ($fields)) {
  1396. $prefix = "#__combomax";
  1397. if (array_key_exists("imported", $fields[$prefix])) {
  1398. echo "<p><div align=\"left\">Database records has been imported.</div></p>";
  1399. return;
  1400. }
  1401. $addwhere = "";
  1402. if (isset ($_REQUEST['nounpublished']) && (@ $_REQUEST['nounpublished'])) {
  1403. $addwhere = " AND approved=1 ";
  1404. }
  1405. $fieldURL = array_key_exists("url", $fields[$prefix]);
  1406. $fieldEmail = array_key_exists("email", $fields[$prefix]);
  1407. $insertMore = ""; $selectMore = "";
  1408. if ($fieldURL) {
  1409. $insertMore .= ", website"; $selectMore .= ", url";
  1410. } else if ($fieldWeb) {
  1411. $insertMore .= ", website";
  1412. $selectMore .= ", web";
  1413. }
  1414. if ($fieldEmail) {
  1415. $insertMore .= ", email"; $selectMore .= ", email";
  1416. }
  1417. $query = "ALTER TABLE #__combomax ADD imported tinyint null;";
  1418. $database->setQuery($query);
  1419. $database->query(); $query = sprintf("
  1420. INSERT INTO #__jomcomment
  1421. (contentid, `option`, ip, name, title, comment, date, published %s)
  1422. SELECT contentid, 'com_content', ip, name, '...', comment,date,approved %s
  1423. from #__combomax where imported IS null %s;", $insertMore, $selectMore, $addwhere);
  1424. $database->setQuery($query); $database->query();
  1425. $numImported = $database->getAffectedRows();
  1426. $query = "UPDATE #__akocomment SET imported=1;";
  1427. $database->setQuery($query); $database->query();
  1428. echo "Finished... "; echo $numImported . " comments imported";
  1429. } else {
  1430. echo "No ComboMax data detected";
  1431. }
  1432. } else {
  1433. $tname = array ( "#__content_comments" );
  1434. $fields = $database->getTableFields($tname);
  1435. if (!empty ($fields)) {
  1436. $prefix = "#__content_comments";
  1437. if (array_key_exists("imported", $fields[$prefix])) {
  1438. echo "<p><div align=\"left\">Database records has been imported.</div></p>";
  1439. return;
  1440. }
  1441. $addwhere = "";
  1442. if (isset ($_REQUEST['nounpublished']) && (@ $_REQUEST['nounpublished'])) {
  1443. $addwhere = " AND `published`=1 ";
  1444. }
  1445. $fieldURL = array_key_exists("homepage", $fields[$prefix]);
  1446. $fieldEmail = array_key_exists("email", $fields[$prefix]);
  1447. $insertMore = ""; $selectMore = "";
  1448. if ($fieldURL) {
  1449. $insertMore .= ", website"; $selectMore .= ", homepage";
  1450. }
  1451. if ($fieldEmail) {
  1452. $insertMore .= ", email"; $selectMore .= ", email";
  1453. }
  1454. $query = "ALTER TABLE #__content_comments ADD imported tinyint null;";
  1455. $database->setQuery($query);
  1456. $database->query();
  1457. $query = sprintf("
  1458. INSERT INTO #__jomcomment
  1459. (contentid, `option`, name, title, comment, date, published %s)
  1460. SELECT articleid, 'com_content', name, '...', entry, NOW(),approved %s
  1461. from #__content_comments where imported IS null %s;", $insertMore, $selectMore, $addwhere);
  1462. $database->setQuery($query);
  1463. $database->query();
  1464. $numImported = $database->getAffectedRows();
  1465. $query = "UPDATE #__content_comments SET imported=1;";
  1466. $database->setQuery($query);
  1467. $database->query();
  1468. echo "Finished... ";
  1469. echo $numImported . " comments imported";
  1470. } else { echo "No MosCom data detected"; } }
  1471. } else {
  1472. $jq = JC_ADMIN_LIVEPATH . '/js/jquery-1.2.6.pack.js';
  1473. $jq_tabs = JC_ADMIN_LIVEPATH . '/js/jquery.tabs.pack.js';
  1474. $jq_css = JC_ADMIN_LIVEPATH . '/js/jquery.tabs.css';
  1475. ?>
  1476. <link rel="stylesheet" href="<?PHP echo $jq_css;?>" type="text/css" media="print, projection, screen">
  1477. <script src="<?PHP echo $jq;?>" type="text/javascript"></script>
  1478. <script src="<?PHP echo $jq_tabs;?>" type="text/javascript"></script>
  1479. <script type="text/javascript">
  1480. $(function() {
  1481. $('#importTab').tabs();
  1482. });
  1483. </script>
  1484. <div id="importTab">
  1485. <ul>
  1486. <li><a href="#ako"><span>AkoComment</span></a></li>
  1487. <li><a href="#combomax"><span>Combomax</span></a></li>
  1488. <li><a href="#moscom"><span>MosCom</span></a></li>
  1489. <li><a href="#JoomlaComment"><span>!JoomlaComment</span></a></li>
  1490. <li><a href="#MXComment"><span>MXComments</span></a></li>
  1491. </ul>
  1492. <div id="ako">
  1493. <a name="ako"></a>
  1494. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable" >
  1495. <th>Import from AkoComment</th>
  1496. <tr>
  1497. <td><form name="formAko" method="post" action="">
  1498. <p></p>
  1499. <p>We will now attempt to import existing AkoComment data into Jom Comment. No data will be lost in this process. Click &quot;Import Now&quot;to proceed. </p>
  1500. <p>
  1501. <input name="nounpublished" type="checkbox" id="nounpublished" value="true">
  1502. Do not import unpublished comments </p>
  1503. <p><input type="hidden" name="from" id="from" value="ako" />
  1504. <input type="submit" name="Submit" value="Import Now" class="CommonTextButtonSmall"><input name="confirm" type="hidden" id="confirm" value="true">
  1505. </p>
  1506. </form>
  1507. </td>
  1508. </tr>
  1509. </table
  1510. </div>
  1511. <div id="combomax">
  1512. <a name="combomax"></a>
  1513. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable" >
  1514. <th>Import from ComboMax</th>
  1515. <tr>
  1516. <td><form name="formCombomax" method="post" action="">
  1517. <p></p>
  1518. <p>We will now attempt to import existing ComboMax data into Jom Comment. No data will be lost in this process. Click &quot;Import Now&quot;to proceed. </p>
  1519. <p>
  1520. <input name="nounpublished" type="checkbox" id="nounpublished" value="true">
  1521. Do not import unpublished comments </p>
  1522. <p><input type="hidden" name="from" id="from" value="combomax" />
  1523. <input type="submit" name="Submit" value="Import Now" class="CommonTextButtonSmall"><input name="confirm" type="hidden" id="confirm" value="true">
  1524. </p>
  1525. </form>
  1526. </td>
  1527. </tr>
  1528. </table>
  1529. </div>
  1530. <div id="moscom">
  1531. <a name="moscom"></a>
  1532. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable" >
  1533. <th>Import from MosCom</th>
  1534. <tr>
  1535. <td><form name="formMoscom" method="post" action="">
  1536. <p></p>
  1537. <p>We will now attempt to import existing MosCom data into Jom Comment. No data will be lost in this process. Click &quot;Import Now&quot;to proceed. Note that due to MosCom database structure, it is not possible to import MosCom entry date information </p>
  1538. <p>
  1539. <input name="nounpublished" type="checkbox" id="nounpublished" value="true">
  1540. Do not import unpublished comments </p>
  1541. <p><input type="hidden" name="from" id="from" value="moscom" />
  1542. <input type="submit" name="Submit" value="Import Now" class="CommonTextButtonSmall"><input name="confirm" type="hidden" id="confirm" value="true">
  1543. </p>
  1544. </form>
  1545. </td>
  1546. </tr>
  1547. </table>
  1548. </div>
  1549. <div id="JoomlaComment">
  1550. <a name="!JoomlaComment"></a>
  1551. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable" >
  1552. <th>Import from !JoomlaComment</th>
  1553. <tr>
  1554. <td><form name="formMosJoomla" method="post" action="">
  1555. <p></p>
  1556. <p>We will now attempt to import existing !JoomlaComment data into Jom Comment. No data will be lost in this process. Click &quot;Import Now&quot;to proceed.</p>
  1557. <p><input type="hidden" name="from" id="from" value="joomlacomment" />
  1558. <input type="submit" name="Submit" value="Import Now" class="CommonTextButtonSmall"><input name="confirm" type="hidden" id="confirm" value="true">
  1559. </p>
  1560. </form>
  1561. </td>
  1562. </tr>
  1563. </table>
  1564. </div>
  1565. <div id="MXComment">
  1566. <a name="MXComment"></a>
  1567. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable" >
  1568. <th>Import from MXComments</th>
  1569. <tr>
  1570. <td>
  1571. <form name="formMXComment" method="post" action="">
  1572. <p></p>
  1573. <p>We will now attempt to import existing !JoomlaComment data into Jom Comment. No data will be lost in this process. Click &quot;Import Now&quot;to proceed.</p>
  1574. <p><input type="hidden" name="from" id="from" value="mxcomment" />
  1575. <input type="submit" name="Submit" value="Import Now" class="CommonTextButtonSmall"><input name="confirm" type="hidden" id="confirm" value="true">
  1576. </p>
  1577. </form>
  1578. </td>
  1579. </tr>
  1580. </table>
  1581. </div>
  1582. </div>
  1583. <?php
  1584. }
  1585. }
  1586. function showStatistics() {
  1587. global $database, $mainframe;
  1588. ?>
  1589. <table cellpadding="4" cellspacing="0" border="0" width="100%" >
  1590. <tr>
  1591. <td width="100%" class="sectionname"><img src="components/com_jomcomment/logo.png"></td>
  1592. </tr>
  1593. </table>
  1594. <?php
  1595. $cms =& cmsInstance('CMSCore');
  1596. $pcTemplate = $cms->get_path('root') . "/administrator/components/com_jomcomment/templates/statistics.html.php";
  1597. $handle = fopen($pcTemplate, "r");
  1598. $fdata = fread($handle, filesize($pcTemplate)); fclose($handle);
  1599. $cms->db->query('SELECT count(*) FROM #__jomcomment');
  1600. $contentSum = $cms->db->get_value();
  1601. $fdata = str_replace("{totalComments}", $contentSum, $fdata);
  1602. $cms->db->query("SELECT count(*) from #__jomcomment WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date");
  1603. $contentSum = $cms->db->get_value();
  1604. $fdata = str_replace("{commentThisMonth}", $contentSum, $fdata);
  1605. $query = (sprintf("
  1606. select count(*) as numComment, name, email from #__jomcomment
  1607. where DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date
  1608. AND name != ''
  1609. GROUP BY name order by numComment desc LIMIT 0, 20
  1610. "));
  1611. $cms->db->query($query);
  1612. $result = $cms->db->get_object_list(); $topMember = "<ul>";
  1613. foreach ($result as $row) {
  1614. $topMember .= "<li><a href=\"mailto:$row->email\">$row->name</a> , ($row->numComment comments)</li>";
  1615. }
  1616. $topMember .= "</ul>";
  1617. $fdata = str_replace("{topMember}", $topMember, $fdata);
  1618. $query = (sprintf("
  1619. select count(*) as numComment, contentid from #__jomcomment
  1620. where DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date
  1621. GROUP BY contentid order by numComment desc LIMIT 0, 20
  1622. "));
  1623. $cms->db->query($query);
  1624. $result = $cms->db->get_object_list();
  1625. $topContent = "<ul>";
  1626. foreach ($result as $row) {
  1627. $cms->db->query("SELECT title from #__content WHERE id=$row->contentid");
  1628. $contentTitle = $cms->db->get_value();
  1629. $topContent .= "<li>$contentTitle</li>";
  1630. }
  1631. $topContent .= "</ul>";
  1632. $fdata = str_replace("{topContent}", $topContent, $fdata);
  1633. echo $fdata;
  1634. }
  1635. function formatLanguage($language){
  1636. if(is_array($language)){
  1637. $languages = array();
  1638. // Format language file so that it doesn't appear with .php
  1639. foreach($language as $file){
  1640. $languages[$file] = substr($file, 0, -4);
  1641. }
  1642. } else {
  1643. return substr($language, 0, -4);
  1644. }
  1645. return $languages;
  1646. }
  1647. function showLanguageConfig($option){
  1648. global $mainframe, $_JC_CONFIG;
  1649. $cms =& cmsInstance('CMSCore');
  1650. // Load helper library for directory manipulations
  1651. $cms->load('helper','directory');
  1652. // Checking #__jomcomment_config for language row.
  1653. $strSQL = "SELECT COUNT(*) FROM #__jomcomment_config WHERE `name`='language'";
  1654. $cms->db->query($strSQL);
  1655. // Insert default language config
  1656. if($cms->db->get_value() < 1){
  1657. $defaultLanguage = $mainframe->getCfg('lang') . '.php';
  1658. $strSQL = "INSERT INTO #__jomcomment_config (`name` ,`value`) "
  1659. . "VALUES ('language', '\$languages = array(\"language\" => \"{$defaultLanguage}\","
  1660. . "\"\" => \"arabic\", \"\" => \"brazilian\", "
  1661. . "\"\" => \"bulgarian\", \"\" => \"czech\", "
  1662. . "\"\" => \"danish\", \"\" => \"dutch\", "
  1663. . "\"\" => \"english\", \"\" => \"estonian\", "
  1664. . "\"\" => \"finnish\", \"\" => \"french\", "
  1665. . "\"\" => \"german\", \"\" => \"germani\", "
  1666. . "\"\" => \"greek\", \"\" => \"hebrew\", "
  1667. . "\"\" => \"hindi\", \"\" => \"hrvatski\", "
  1668. . "\"\" => \"hungarian\", \"\" => \"hungariani\", "
  1669. . "\"\" => \"italian\", \"\" => \"japanese\", "
  1670. . "\"\" => \"latvian\", \"\" => \"malay\", "
  1671. . "\"\" => \"norwegian\", \"\" => \"polish\", "
  1672. . "\"\" => \"russian\", \"\" => \"spanish\", "
  1673. . "\"\" => \"srpski\", \"\" => \"srpski_cyr\", "
  1674. . "\"\" => \"swedish\", \"autoLang\" => \"\" );')";
  1675. $cms->db->query($strSQL);
  1676. cmsRedirect('index2.php?option=com_jomcomment&task=language');
  1677. exit;
  1678. }
  1679. $files = cmsGetFiles(JC_COM_PATH . '/languages', '.php');
  1680. $lists = formatLanguage($files);
  1681. include(JC_ADMIN_COM_PATH . '/templates/config_language.php');
  1682. }
  1683. function showConfig($option) {
  1684. global $mainframe, $_JC_CONFIG;
  1685. $cms =& cmsInstance('CMSCore');
  1686. /******************************************
  1687. * Get templates lists
  1688. ******************************************/
  1689. /* CMS Compatibilities */
  1690. if(cmsVersion() == _CMS_JOOMLA10 || cmsVersion() == _CMS_MAMBO){
  1691. $file_list = mosReadDirectory($cms->get_path('root') . "/components/com_jomcomment/templates", "");
  1692. }
  1693. else if(cmsVersion() == _CMS_JOOMLA15){
  1694. $file_list = JFolder::folders($cms->get_path('root') . "/components/com_jomcomment/templates", "");
  1695. }
  1696. /* End CMS Compatibilities */
  1697. $t_list = array ();
  1698. $filecount = 0;
  1699. $temp_lists = array();
  1700. foreach ($file_list as $val) {
  1701. if (!strstr($val, "svn") && !strstr($val, "_") && !strstr($val, "admin")){
  1702. #$t_list[] = mosHTML :: makeOption($val, $val);
  1703. $temp_lists[$val] = $val;
  1704. }
  1705. }
  1706. /******************************************
  1707. * End Get templates lists
  1708. ******************************************/
  1709. #$templates = mosHTML :: selectList($t_list, 'template', 'class="inputbox" size="1"', 'value', 'text', $_JC_CONFIG->get('template'));
  1710. /******************************************
  1711. * Get Sections
  1712. ******************************************/
  1713. $query = "SELECT id,title FROM #__sections ORDER BY title ASC";
  1714. $cms->db->query($query);
  1715. $rows = $cms->db->get_object_list();
  1716. $sections = "<select name=\"sections[]\" size=\"" . count($rows) . "\" multiple>";
  1717. $pc_section_array = explode(",", $_JC_CONFIG->get('sections'));
  1718. foreach ($rows as $row) {
  1719. $sections .= "<option value='$row->id' ";
  1720. if (in_array($row->id, $pc_section_array))
  1721. $sections .= "selected";
  1722. $sections .= ">$row->title</option>";
  1723. }
  1724. $sections .= "</select>";
  1725. $lookup_array = explode(",", $_JC_CONFIG->get('categories'));
  1726. $lookup = array ();
  1727. $sel_cat = array();
  1728. for ($i = 0; $i < count($lookup_array); $i++) {
  1729. $lookup[$i] = new stdClass();
  1730. $lookup[$i]->value = $lookup_array[$i];
  1731. $sel_cat[$i] = $lookup_array[$i];
  1732. }
  1733. /******************************************
  1734. * End Get Sections
  1735. ******************************************/
  1736. /******************************************
  1737. * Get Categories
  1738. ******************************************/
  1739. $categories = array ();
  1740. $cat_list = array();
  1741. $query = "SELECT c.id AS `value`, c.section AS `id`, CONCAT_WS( ' / ', s.title, c.title) AS `text`" . "\n FROM #__sections AS s" . "\n INNER JOIN #__categories AS c ON c.section = s.id" . "\n WHERE s.scope = 'content'" . "\n ORDER BY s.name,c.name";
  1742. $cms->db->query($query);
  1743. $categories = array_merge($categories, $cms->db->get_object_list());
  1744. foreach($categories as $cat){
  1745. $cat_list[$cat->value] = $cat->text;
  1746. }
  1747. /******************************************
  1748. * End Get Categories
  1749. ******************************************/
  1750. //$name_list = array ();
  1751. include ($cms->get_path('root') . "/administrator/components/com_jomcomment/templates/config_template.php");
  1752. }
  1753. function saveLanguageConfig($option){
  1754. global $_JC_CONFIG, $mainframe;
  1755. $cms =& cmsInstance('CMSCore');
  1756. require_once(JC_ADMIN_COM_PATH . '/config.jomcomment.php');
  1757. $_JC_CONFIG->saveLanguage();
  1758. jcClearCache();
  1759. cmsRedirect('index2.php?option=com_jomcomment&task=language','Settings saved');
  1760. }
  1761. function saveConfig($option) {
  1762. global $database, $option, $_JC_CONFIG,$mainframe;
  1763. $cms =& cmsInstance('CMSCore');
  1764. require_once ($cms->get_path('root') . "/administrator/components/com_jomcomment/config.jomcomment.php");
  1765. $_JC_CONFIG->save();
  1766. // Clear cache
  1767. jcClearCache();
  1768. // Need to rebuild the config cache
  1769. unset($_JC_CONFIG);
  1770. $_JC_CONFIG = new JCConfig();
  1771. //$_JC_CONFIG->rebuildCache();
  1772. $cms->load('libraries', 'cache');
  1773. $cms->cache->clear();
  1774. cmsRedirect("index2.php?option=com_jomcomment&task=config", "Settings saved");
  1775. return;
  1776. }
  1777. function removeComments($cid, $option) {
  1778. $cms =& cmsInstance('CMSCore');
  1779. if (count($cid)) {
  1780. $cids = implode(',', $cid);
  1781. $cms->db->query("DELETE FROM #__jomcomment WHERE `id` IN ({$cids})");
  1782. }
  1783. cmsRedirect("index2.php?option=$option&task=comments");
  1784. }
  1785. function removeTrackbacks($cid, $option) {
  1786. global $database;
  1787. if (count($cid)) {
  1788. $cids = implode(',', $cid);
  1789. $database->setQuery("DELETE FROM #__jomcomment_tb WHERE id IN ($cids)");
  1790. if (!$database->query()) {
  1791. echo "<script> alert('" . $database->getErrorMsg() . "'); window.history.go(-1); </script>\n";
  1792. }
  1793. }
  1794. cmsRedirect("index2.php?option=$option&task=trackbacks");
  1795. }
  1796. function showAjaxedAdmin() {
  1797. global $database, $mainframe, $option;
  1798. $cms =& cmsInstance('CMSCore');
  1799. $xajax = new JAX($cms->get_path('plugin-live') . "/system/pc_includes");
  1800. if (cmsVersion() == _CMS_JOOMLA15){
  1801. $xajax->setReqURI("index.php?option=com_jomcomment&no_html=1&hidemainmenu=1");
  1802. } else{
  1803. $xajax->setReqURI("index2.php?option=com_jomcomment&no_html=1&hidemainmenu=1");
  1804. }
  1805. $xajax->process();
  1806. echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"" . $cms->get_path('live') . "/components/com_jomcomment/admin_style-3.0.css\" />";
  1807. ?>
  1808. <script src="<?php echo $cms->get_path('live'); ?>/includes/js/tabs/tabpane_mini.js" type="text/javascript"></script>
  1809. <?php echo $xajax->getScript(); ?>
  1810. <script type="text/javascript">
  1811. jax.loadingFunction = function(){jax.$('loadingDiv').style.display='block';};
  1812. jax.doneLoadingFunction = function(){jax.$('loadingDiv').style.display='none';};
  1813. </script>
  1814. <style type="text/css">
  1815. </style>
  1816. <table width="100%" border="0" cellspacing="4" cellpadding="6">
  1817. <tr>
  1818. <td width="10%" valign="top" align="center">
  1819. <?php showSidePanel() ?>
  1820. </td>
  1821. <td width="90%" align="left" valign="top"><?php showInstallError(); ?><div id="mainAdminContent">{CONTENT}</td>
  1822. </tr>
  1823. </table>
  1824. <?php } function getAdminMenuIcon($com){ global $database, $mainframe; $database->setQuery("SELECT admin_menu_img from #__components WHERE
  1825. menuid=0 AND
  1826. `parent`=0 AND
  1827. `option`='$com'");
  1828. $icon = $database->loadResult();
  1829. if ($icon == "js/ThemeOffice/component.png")
  1830. $icon = $mainframe->getCfg('live_site') . "/includes/js/ThemeOffice/component.png";
  1831. return $icon;
  1832. }
  1833. function getPatchLink($com, $status) {
  1834. $button = "";
  1835. if ($status == JCHACK_STATUS_READY)
  1836. $button = "<a onclick=\"jax.call('jomcomment', 'jcxDoPatch', '$com', 'apply');\" class=\"CommonTextButtonSmall\">Apply hacks</a>&nbsp;";
  1837. else
  1838. $button = "<a onclick=\"jax.call('jomcomment', 'jcxDoPatch', '$com', 'unapply');\" class=\"CommonTextButtonSmall\">Restore backup</a>";
  1839. return $button;
  1840. }
  1841. function showAvailableHacks() {
  1842. global $jcPatchClass;
  1843. $tpl = & new AzrulJXTemplate();
  1844. $status = array ();
  1845. $patches = array ();
  1846. foreach ($jcPatchClass as $patch) {
  1847. eval ("\$p = new $patch();");
  1848. $patches[] = array (
  1849. "name" => $p->name,
  1850. "com" => $p->com,
  1851. "files" => $p->files,
  1852. "icon" => getAdminMenuIcon('com_' . $p->com
  1853. ), "status" => $p->getStatus(), "action" => getPatchLink($p->com, $p->getStatus()));
  1854. }
  1855. sort($patches);
  1856. $tpl->set('patches', $patches);
  1857. $tpl->set('publish', true);
  1858. $html = $tpl->fetch(JC_ADMIN_COM_PATH . '/templates/hacks.tpl.html');
  1859. echo $html;
  1860. }
  1861. function showInstallError() {
  1862. global $database;
  1863. $cms =& cmsInstance('CMSCore');
  1864. $cms->db->query("SELECT * FROM #__templates_menu");
  1865. $template = $cms->db->get_value();
  1866. if ($template) {
  1867. $filename = $cms->get_path('root') . "/templates/$template/index.php";
  1868. if (file_exists($filename)) {
  1869. $handle = fopen($filename, "r");
  1870. $contents = fread($handle, filesize($filename));
  1871. fclose($handle);
  1872. if (!strstr($contents, "mosShowHead")) {
  1873. if(cmsVersion() == _CMS_JOOMLA10 || cmsVersion() == _CMS_MAMBO){
  1874. echo '<div align="center"><span style="color: #FF0000;font-weight: bold;font-size:16px;">Please add &quot; &lt;?php mosShowHead(); ?&gt; &quot; code within the &lt;head&gt; ... &lt;/head&gt; tag in your current joomla template!</span></div>';
  1875. }
  1876. else if(cmsVersion() == _CMS_JOOMLA15){
  1877. # Do something?
  1878. }
  1879. }
  1880. }
  1881. }
  1882. }
  1883. function jcConvertTitleToUtf8(& $str) {
  1884. if (function_exists('mb_convert_encoding')) {
  1885. $iso = explode('=', _ISO);
  1886. $source = mb_convert_encoding($str->text, "UTF-8", "$iso[1], auto");
  1887. $str->text = $source;
  1888. } else
  1889. $str->text = transformDbText($str->text);
  1890. }
  1891. function jcExportEmail(){
  1892. $db =& cmsInstance('CMSDb');
  1893. $cms =& cmsInstance('CMSCore');
  1894. include_once($cms->get_path('root') . "/components/com_jomcomment/includes/csv/csv.php");
  1895. $db->query("SELECT DISTINCT email, name FROM #__jomcomment");
  1896. $rows = $db->get_object_list();
  1897. //$csv = new CSVHandler('parish_only.csv', ',', 'pnumber');
  1898. //$result = $csv->ReadCSV();
  1899. if($rows){
  1900. @ob_clean();
  1901. header('Content-type: text/csv');
  1902. header('Content-Disposition: attachment; filename="visitors.csv"');
  1903. foreach($rows as $row){
  1904. echo "{$row->email},{$row->name}\n";
  1905. }
  1906. exit;
  1907. }
  1908. //$objResponse = new JAXResponse();
  1909. //$objResponse->addAlert($response);
  1910. //return $objResponse->sendResponse();
  1911. }
  1912. function showSidePanel() {
  1913. global $mainframe;
  1914. $cms =& cmsInstance('CMSCore');
  1915. ?>
  1916. <link rel="stylesheet" type="text/css" href="<?php echo $cms->get_path('live'); ?>/components/com_jomcomment/niftyCorners.css">
  1917. <script type="text/javascript" src="<?php echo $cms->get_path('live'); ?>/components/com_jomcomment/nifty.js"></script>
  1918. <script type="text/javascript">
  1919. window.onload=function(){
  1920. if(!NiftyCheck())
  1921. return;
  1922. Rounded("div#sideNav","all","#FFF","#F8F8F8","border #cccccc");
  1923. }
  1924. </script>
  1925. <div class="loading" id="loadingDiv" style="display:none;position: fixed;top: 0;z-index: 100;">
  1926. <img src="<?php echo $mainframe->getCfg('live_site');?>/components/com_jomcomment/busy.gif" width="16" height="16" align="absmiddle">&nbsp;Please Wait...
  1927. </div>
  1928. <div style="background-color:#F8F8F8" id="sideNav">
  1929. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  1930. <tr>
  1931. <td scope="col">
  1932. <div>
  1933. <h3 align="center">Control Panel </h3>
  1934. </div>
  1935. <div class="sideNavTitle"><img src="components/com_jomcomment/images/Options_16x16.gif" hspace="2" style="vertical-align:middle" >&nbsp;Configuration</div>
  1936. <div class="sideNavContent">
  1937. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=config">General Settings </a></div>
  1938. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=language">Language Settings</a></div>
  1939. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=maintd">Maintenance </a></div>
  1940. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=editLanguage">Edit Language File</a></div>
  1941. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=hacks">3rd Party Components Integration</a></div>
  1942. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=stats">View Statistics/Export Emails</a></div>
  1943. </div>
  1944. <div class="sideNavTitle"><img src="components/com_jomcomment/images/Documents_16x16.gif" hspace="2" style="vertical-align:middle" >&nbsp;View</div>
  1945. <div class="sideNavContent">
  1946. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=comments" >View Comment </a></div>
  1947. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=trackbacks" >View Trackbacks </a></div>
  1948. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=reports" >View Reports </a></div>
  1949. </div>
  1950. <div class="sideNavTitle" style="vertical-align:middle"><img src="components/com_jomcomment/images/Import_16x16.gif" hspace="2" style="vertical-align:middle" >&nbsp;Import</div>
  1951. <div class="sideNavContent">
  1952. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=import#ako">Import from Ako Comment </a></div>
  1953. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=import#combomax">Import from ComboMax </a></div>
  1954. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=import#moscom">Import from MosCom </a></div>
  1955. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=import#joomla">Import from !JoomlaComment</a></div>
  1956. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=import#mxcomment">Import from MXComments</a></div>
  1957. </div><div class="sideNavTitle"><img src="components/com_jomcomment/images/Information_16x16.gif" hspace="2" style="vertical-align:middle" >&nbsp;About / Support </div>
  1958. <div class="sideNavContent">
  1959. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=about">About Jom Comment </a></div>
  1960. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=latestnews">Check for latest news</a></div>
  1961. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=license">License Information </a></div>
  1962. <div class="sideNavItem"><a href="index2.php?option=com_jomcomment&task=support">Support</a></div>
  1963. </div></td>
  1964. </tr>
  1965. </table>
  1966. </div>
  1967. <?php }