admin.comprofiler.controller.php
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:164k
源码类别:

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Joomla/Mambo Community Builder
  4. * @version $Id: admin.comprofiler.php 610 2006-12-13 17:33:44Z beat $
  5. * @package Community Builder
  6. * @subpackage admin.comprofiler.php
  7. * @author JoomlaJoe and Beat, database check function by Nick
  8. * @copyright (C) JoomlaJoe and Beat, www.joomlapolis.com
  9. * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
  10. */
  11. // ensure this file is being included by a parent file
  12. if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
  13. $memMax = trim( @ini_get( 'memory_limit' ) );
  14. if ( $memMax ) {
  15. $last = strtolower( $memMax{strlen( $memMax ) - 1} );
  16. switch( $last ) {
  17. case 'g':
  18. $memMax *= 1024;
  19. case 'm':
  20. $memMax *= 1024;
  21. case 'k':
  22. $memMax *= 1024;
  23. }
  24. if ( $memMax < 16000000 ) {
  25. @ini_set( 'memory_limit', '16M' );
  26. }
  27. if ( $memMax < 32000000 ) {
  28. @ini_set( 'memory_limit', '32M' );
  29. }
  30. if ( $memMax < 48000000 ) {
  31. @ini_set( 'memory_limit', '48M' ); // DOMIT XML parser can be very memory-hungry on PHP < 5.1.3
  32. }
  33. }
  34. /**
  35.  * CB framework
  36.  * @global CBframework $_CB_framework
  37.  */
  38. global $_CB_framework;
  39. global $mainframe, $option, $_CB_Admin_Done;
  40. require_once( $mainframe->getPath( 'admin_html' ) );
  41. /** @global string $_CB_adminpath
  42.  *  @global string $_CB_joomla_adminpath
  43.  *  @global array $ueConfig
  44.  */
  45. global $_CB_joomla_adminpath, $_CB_adminpath, $ueConfig;
  46. if ( defined( 'JPATH_ADMINISTRATOR' ) ) {
  47. $_CB_joomla_adminpath = JPATH_ADMINISTRATOR;
  48. $option = JRequest::getString( 'option' );
  49. $task = JRequest::getString( 'task' );
  50. } else {
  51. $_CB_joomla_adminpath = $mainframe->getCfg( 'absolute_path' ) . '/administrator';
  52. global $option, $task;
  53. }
  54. $_CB_adminpath = $_CB_joomla_adminpath . '/components/com_comprofiler';
  55. include_once( $_CB_adminpath . '/ue_config.php' );
  56. include_once( $_CB_adminpath . '/plugin.class.php' );
  57. $_CB_framework->cbset( '_ui', 2 ); // : we're in 1: frontend, 2: admin back-end
  58. if($_CB_framework->getCfg( 'debug' )) {
  59. ini_set( 'display_errors', true );
  60. error_reporting( E_ALL );
  61. }
  62. $UElanguagePath = $_CB_framework->getCfg( 'absolute_path' ) . '/components/com_comprofiler/plugin/language';
  63. $UElanguage = $_CB_framework->getCfg( 'lang' );
  64. if ( ! file_exists( $UElanguagePath . '/' . $UElanguage . '/' . $UElanguage . '.php' ) ) {
  65. $UElanguage = 'default_language';
  66. }
  67. @include_once( $UElanguagePath . '/' . $UElanguage . '/' . $UElanguage . '.php' );
  68. if ( class_exists( 'JFactory' ) ) { // Joomla 1.5 : for string WARNREG_EMAIL_INUSE used in error js popup.
  69. $lang =& JFactory::getLanguage();
  70. $lang->load( "com_users" );
  71. }
  72. include_once( $_CB_adminpath . '/comprofiler.class.php' );
  73. cbimport( 'cb.adminfilesystem' );
  74. cbimport( 'cb.installer' );
  75. cbimport( 'cb.params' );
  76. cbimport( 'cb.pagination' );
  77. include_once( $_CB_adminpath . '/imgToolbox.class.php' );
  78. if ( ! $_CB_framework->check_acl( 'canManageUsers', $_CB_framework->myUserType() ) ) {
  79. cbRedirect( 'index2.php', _UE_NOT_AUTHORIZED, 'error' );
  80. }
  81. /** Backend menu: 'show' : only displays close button, 'edit' : special close button
  82.  *  @global stdClass $_CB_Backend_Menu */
  83. global $_CB_Backend_Menu;
  84. $_CB_Backend_Menu = new stdClass();
  85. global $_CB_Backend_Title, $_CB_Backend_task;
  86. $_CB_Backend_Title = array();
  87. $_CB_Backend_task = $task;
  88. //$task = trim( cbGetParam( $_REQUEST, 'task', null ) );
  89. $cid = cbGetParam( $_REQUEST, 'cid', array( 0 ) );
  90. $uid = cbGetParam( $_REQUEST, 'uid', array( 0 ) );
  91. if ( ! is_array( $cid )) {
  92. $cid = array ( (int) $cid );
  93. }
  94. $oldignoreuserabort = ignore_user_abort( true );
  95. $taskPart1 = strtok( $task, '.' );
  96. ob_start();
  97. // remind step 2 if forgotten/failed:
  98. $tgzFile = $_CB_framework->getCfg( 'absolute_path' ) . '/administrator/components/com_comprofiler/pluginsfiles.tgz';
  99. if ( file_exists( $tgzFile ) ) {
  100. if ( in_array( $taskPart1, array( 'showusers', 'showconfig', 'showTab', 'showField', 'showLists', 'tools', 'showPlugins', '' ) ) ) {
  101. echo '<div class="cbWarning">Warning: file ' . $tgzFile . ' still exists. This is probably due to the fact that first installation step did not complete, or second installation step did not take place. If you are sure that first step has been performed, you need to execute second installation step before using CB. You can do this now by clicking here: '
  102. . '<a href="index2.php?option=com_comprofiler&task=finishinstallation">please click here to continue next and last installation step</a>.</div>';
  103. }
  104. }
  105. switch ( $taskPart1 ) {
  106. case "new":
  107. editUser( 0, $option );
  108. break;
  109. case "edit":
  110. editUser( intval( $cid[0] ), $option );
  111. break;
  112. case "save":
  113. cbSpoofCheck( 'user' );
  114. saveUser( $option );
  115. break;
  116. case "remove":
  117. cbSpoofCheck( 'user' );
  118. removeUsers( $cid, $option );
  119. break;
  120. case "block":
  121. cbSpoofCheck( 'user' );
  122. changeUserBlock( $cid, 1, $option );
  123. break;
  124. case "unblock":
  125. cbSpoofCheck( 'user' );
  126. changeUserBlock( $cid, 0, $option );
  127. break;
  128. case "approve":
  129. cbSpoofCheck( 'user' );
  130.         approveUser( $cid, 1, $option );
  131.         break;
  132. case "reject":
  133. cbSpoofCheck( 'user' );
  134.         approveUser( $cid, 0, $option );
  135.         break;
  136.     case "showconfig":
  137.    showConfig( $option );
  138.    break;
  139.     case "showinstruction":
  140.    showInstructions($_CB_database, $option, $_CB_framework->getCfg( 'lang' ));
  141.    break;
  142.     case "saveconfig":
  143. cbSpoofCheck( 'config' );
  144.    saveConfig( $option );
  145.        break;
  146. case "newTab":
  147. editTab( 0, $option);
  148. break;
  149. case "editTab":
  150. editTab( intval( $cid[0] ), $option );
  151. break;
  152. case "saveTab":
  153. cbSpoofCheck( 'tab' );
  154. saveTab( $option );
  155. break;
  156. case "removeTab":
  157. cbSpoofCheck( 'tab' );
  158. removeTabs( $cid, $option );
  159. break;
  160. case "showTab":
  161. showTab( $option );
  162. break;
  163. case "orderupTab":
  164. case "orderdownTab":
  165. cbSpoofCheck( 'tab' );
  166. orderTabs( $cid[0], ($task == 'orderupTab' ? -1 : 1), $option);
  167. break;
  168. case "newField":
  169. editField( 0, $option, $task );
  170. break;
  171. case "editField":
  172. editField( intval( $cid[0] ), $option, $task );
  173. break;
  174. case "reloadField":
  175. cbSpoofCheck( 'field' );
  176. editField( (int) cbGetParam( $_POST, 'fieldid', 0 ), $option, $task );
  177. break;
  178. case "saveField":
  179. case "applyField":
  180. cbSpoofCheck( 'field' );
  181. saveField( $option, $task );
  182. break;
  183. case "removeField":
  184. cbSpoofCheck( 'field' );
  185. removeField( $cid, $option );
  186. break;
  187. case "showField":
  188. showField( $option );
  189. break;
  190. case "orderupField":
  191. cbSpoofCheck( 'field' );
  192. orderFields( $cid[0], -1, $option );
  193. break;
  194. case "orderdownField":
  195. cbSpoofCheck( 'field' );
  196. orderFields( $cid[0], 1, $option );
  197. break;
  198. case "saveList":
  199. cbSpoofCheck( 'list' );
  200. saveList($option );
  201. break;
  202. case "editList":
  203. editList( $cid[0], 1, $option );
  204. break;
  205. case "newList":
  206. editList( 0, $option);
  207. break;
  208. case "showLists":
  209. showLists( $option );
  210. break;
  211. case "removeList":
  212. cbSpoofCheck( 'list' );
  213. removeList( $cid, $option );
  214. break;
  215. case "orderupList":
  216. cbSpoofCheck( 'list' );
  217. orderLists( $cid[0], -1, $option );
  218. break;
  219. case "orderdownList":
  220. cbSpoofCheck( 'list' );
  221. orderLists( $cid[0], 1, $option );
  222. break;
  223. case "fieldPublishedYes":
  224. cbSpoofCheck( 'field' );
  225.         publishField( $cid, 1, $option );
  226.         break;
  227. case "fieldPublishedNo":
  228. cbSpoofCheck( 'field' );
  229.         publishField( $cid, 0, $option );
  230.         break;
  231. case "fieldRequiredYes":
  232. cbSpoofCheck( 'field' );
  233.         requiredField( $cid, 1, $option );
  234.         break;
  235. case "fieldRequiredNo":
  236. cbSpoofCheck( 'field' );
  237.         requiredField( $cid, 0, $option );
  238.         break;
  239. case "fieldProfileYes1":
  240. cbSpoofCheck( 'field' );
  241.         profileField( $cid, 1, $option );
  242.         break;
  243. case "fieldProfileYes2":
  244. cbSpoofCheck( 'field' );
  245.         profileField( $cid, 2, $option );
  246.         break;
  247. case "fieldProfileNo":
  248. cbSpoofCheck( 'field' );
  249.         profileField( $cid, 0, $option );
  250.         break;
  251. case "fieldRegistrationYes":
  252. cbSpoofCheck( 'field' );
  253.         registrationField( $cid, 1, $option );
  254.         break;
  255. case "fieldRegistrationNo":
  256. cbSpoofCheck( 'field' );
  257.         registrationField( $cid, 0, $option );
  258.         break;
  259. case "fieldSearchableYes":
  260. cbSpoofCheck( 'field' );
  261.         searchableField( $cid, 1, $option );
  262.         break;
  263. case "fieldSearchableNo":
  264. cbSpoofCheck( 'field' );
  265.         searchableField( $cid, 0, $option );
  266.         break;
  267. case "listPublishedYes":
  268. cbSpoofCheck( 'list' );
  269.         listPublishedField( $cid, 1, $option );
  270.         break;
  271. case "listPublishedNo":
  272. cbSpoofCheck( 'list' );
  273.         listPublishedField( $cid, 0, $option );
  274.         break;
  275. case "listDefaultYes":
  276. cbSpoofCheck( 'list' );
  277.         listDefaultField( $cid, 1, $option );
  278.         break;
  279. case "listDefaultNo":
  280. cbSpoofCheck( 'list' );
  281.         listDefaultField( $cid, 0, $option );
  282.         break;
  283. case "tabPublishedYes":
  284. cbSpoofCheck( 'tab' );
  285.         tabPublishedField( $cid, 1, $option );
  286.         break;
  287. case "tabPublishedNo":
  288. cbSpoofCheck( 'tab' );
  289.         tabPublishedField( $cid, 0, $option );
  290.         break;
  291. case "tools":
  292. loadTools();
  293. break;
  294. case "loadSampleData":
  295. cbSpoofCheck( 'cbtools', 'GET' );
  296.         loadSampleData();
  297.         break;
  298. case "syncUsers":
  299. cbSpoofCheck( 'cbtools', 'GET' );
  300.         syncUsers();
  301.         break;
  302. case "checkcbdb":
  303. cbSpoofCheck( 'cbtools', 'GET' );
  304. checkcbdb( (int) cbGetParam( $_GET, 'databaseid', 0 ) );
  305. break;
  306. case "fixcbdb":
  307. cbSpoofCheck( 'cbtools', 'GET' );
  308. fixcbdb( (int) cbGetParam( $_GET, 'dryrun', 1 ), (int) cbGetParam( $_GET, 'databaseid', 0 ) );
  309. break;
  310. case "showusers":
  311. showUsers( $option );
  312. break;
  313. case 'savetaborder':
  314. cbSpoofCheck( 'tab' );
  315. saveTabOrder( $cid );
  316. break;
  317. case 'savefieldorder':
  318. cbSpoofCheck( 'field' );
  319. saveFieldOrder( $cid );
  320. break;
  321. case 'savelistorder':
  322. cbSpoofCheck( 'list' );
  323. saveListOrder( $cid );
  324. break;
  325. case 'newPlugin':
  326. case 'editPlugin':
  327. editPlugin( $option, $task,  $cid[0] );
  328. break;
  329. case 'savePlugin':
  330. case 'applyPlugin':
  331. cbSpoofCheck( 'plugin' );
  332. savePlugin( $option, $task );
  333. break;
  334. case 'deletePlugin':
  335. cbSpoofCheck( 'plugin' );
  336. removePlugin( $cid, $option );
  337. break;
  338. case 'cancelPlugin':
  339. cancelPlugin( $option );
  340. break;
  341. case 'cancelPluginAction':
  342. cancelPluginAction( $option );
  343. break;
  344. case 'publishPlugin':
  345. case 'unpublishPlugin':
  346. cbSpoofCheck( 'plugin' );
  347. publishPlugin( $cid, ($task == 'publishPlugin'), $option );
  348. break;
  349. case 'orderupPlugin':
  350. case 'orderdownPlugin':
  351. cbSpoofCheck( 'plugin' );
  352. orderPlugin( $cid[0], ($task == 'orderupPlugin' ? -1 : 1), $option);
  353. break;
  354. case 'accesspublic':
  355. case 'accessregistered':
  356. case 'accessspecial':
  357. cbSpoofCheck( 'plugin' );
  358. accessMenu( $cid[0], $task, $option );
  359. break;
  360. case 'savepluginorder':
  361. cbSpoofCheck( 'plugin' );
  362. savePluginOrder( $cid );
  363. break;
  364. case 'showPlugins':
  365. viewPlugins( $option);
  366. break;
  367. case 'installPluginUpload':
  368. cbSpoofCheck( 'plugin' );
  369. installPluginUpload();
  370. break;
  371. case 'installPluginDir':
  372. cbSpoofCheck( 'plugin' );
  373. installPluginDir();
  374. break;
  375. case 'installPluginURL':
  376. cbSpoofCheck( 'plugin' );
  377. installPluginURL();
  378. break;
  379. case 'pluginmenu':
  380. pluginMenu( $option, cbGetParam( $_REQUEST, 'pluginid', 0 ) );
  381. break;
  382. case 'latestVersion':
  383. latestVersion();
  384. break;
  385. case "fieldclass":
  386. case "tabclass":
  387. case "pluginclass":
  388. tabClass( $option, $task, cbGetParam( $_REQUEST, 'user', 0 ) );
  389. break;
  390. case "finishinstallation":
  391. finishInstallation( $option );
  392. break;
  393. default:
  394. // var_export( $ _POST ); //DEBUG!
  395. teamCredits(2);
  396. break;
  397. }
  398. echo $_CB_framework->getAllJsPageCodes();
  399. $html = ob_get_contents();
  400. ob_end_clean();
  401. if ( in_array( $taskPart1, array( 'fieldclass', 'tabclass', 'pluginclass' ) ) ) {
  402. echo $html;
  403. } else {
  404. // fix the backend toolbar icons taking full width in joomla 1.5:
  405. ?>
  406. <!--[if lte IE 7]>
  407. <style type="text/css">
  408. .cbtoolbarbar .cbtoolbar {
  409. width: 48px;
  410. }
  411. </style>
  412. <![endif]-->
  413. <div style="margin:0px;border-width:0px;padding:0px;float:left;width:100%;text-align:left;"><div id="cbAdminMainWrapper" style="margin:0px;border-width:0px;padding:0px;float:none;width:auto;">
  414. <?php
  415. echo '<div style="float:right;">';
  416. include( $_CB_adminpath . '/comprofiler.toolbar.php' );
  417. echo '</div>';
  418. if ( count( $_CB_Backend_Title ) > 0 ) {
  419. echo '<div class="header' . ( isset( $_CB_Backend_Title[0][0] ) ? ' ' . $_CB_Backend_Title[0][0] : '' ) . '">';
  420. echo $_CB_Backend_Title[0][1];
  421. echo '</div>';
  422. echo '<div style="clear:both;">';
  423. echo '</div>';
  424. }
  425. echo '<div style="float:left;width:100%;">';
  426. echo $html;
  427. echo '</div>';
  428. echo '<div style="clear:both;">';
  429. echo '</div>';
  430. echo '</div></div>';
  431. }
  432. if (!is_null($oldignoreuserabort)) ignore_user_abort($oldignoreuserabort);
  433. // END OF MAIN.
  434. function saveList( $option ) {
  435. global $_CB_database, $_POST;
  436. $row = new moscomprofilerLists( $_CB_database );
  437. if (!$row->bind( $_POST )) {
  438. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-1); </script>n";
  439. exit();
  440. }
  441.   $row->params = cbParamsEditorController::getRawParams( $_POST['params'] );
  442. if(isset($_POST['col1'])) { $row->col1fields = implode("|*|",$_POST['col1']); } else { $row->col1fields = null; } ;
  443. if(isset($_POST['col2'])) { $row->col2fields = implode("|*|",$_POST['col2']); } else { $row->col2fields = null; } ;
  444. if(isset($_POST['col3'])) { $row->col3fields = implode("|*|",$_POST['col3']); } else { $row->col3fields = null; } ;
  445. if(isset($_POST['col4'])) { $row->col4fields = implode("|*|",$_POST['col4']); } else { $row->col4fields = null; } ;
  446. if ($row->col1enabled != 1) $row->col1enabled=0;
  447. if ($row->col2enabled != 1) $row->col2enabled=0;
  448. if ($row->col3enabled != 1) $row->col3enabled=0;
  449. if ($row->col4enabled != 1) $row->col4enabled=0;
  450. if ($row->col1captions != 1) $row->col1captions=0;
  451. if ($row->col2captions != 1) $row->col2captions=0;
  452. if ($row->col3captions != 1) $row->col3captions=0;
  453. if ($row->col4captions != 1) $row->col4captions=0;
  454. if (!$row->store( (int) $_POST['listid'],true)) {
  455. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-2); </script>n";
  456. exit();
  457. }
  458. cbRedirect( "index2.php?option=$option&task=showLists", "Successfully Saved List: ". $row->title );
  459. }
  460. function showLists( $option ) {
  461. global $_CB_database, $_CB_framework, $_CB_joomla_adminpath;
  462. $limit = (int) $_CB_framework->getCfg( 'list_limit' );
  463. if ( $limit == 0 ) {
  464. $limit = 10;
  465. }
  466. $limit = $_CB_framework->getUserStateFromRequest( "viewlistlimit", 'limit', $limit );
  467. $lastCBlist = $_CB_framework->getUserState( "view{$option}lastCBlist", null );
  468. if($lastCBlist=='showlists') {
  469. $limitstart = $_CB_framework->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
  470. $lastSearch = $_CB_framework->getUserState( "search{$option}", null );
  471. $search = $_CB_framework->getUserStateFromRequest( "search{$option}", 'search', '' );
  472. if ($lastSearch != $search) {
  473. $limitstart = 0;
  474. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  475. }
  476. $search = trim( strtolower( $search ) );
  477. } else {
  478. clearSearchBox();
  479. $search="";
  480. $limitstart = 0;
  481. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  482. $_CB_framework->setUserState( "view{$option}lastCBlist", "showlists" );
  483. }
  484. $where = array();
  485. if (isset( $search ) && $search!= "") {
  486. $search = cbEscapeSQLsearch( trim( strtolower( cbGetEscaped($search))));
  487. $where[] = "(a.title LIKE '%$search%' OR a.description LIKE '%$search%')";
  488. }
  489. $_CB_database->setQuery( "SELECT COUNT(*)"
  490. . "n FROM #__comprofiler_lists AS a"
  491. . (count( $where ) ? "nWHERE " . implode( ' AND ', $where ) : "")
  492. );
  493. $total = $_CB_database->loadResult();
  494. echo $_CB_database->getErrorMsg();
  495. if ($total <= $limitstart) $limitstart = 0;
  496. cbimport( 'cb.pagination' );
  497. $pageNav = new cbPageNav( $total, $limitstart, $limit  );
  498. $_CB_database->setQuery( "SELECT listid, title, description, published,`default`,ordering,useraccessgroupid"
  499. . "nFROM #__comprofiler_lists a"
  500. . (count( $where ) ? "nWHERE " . implode( ' AND ', $where ) : "")
  501. . "n ORDER BY ordering"
  502. . "nLIMIT ". (int) $pageNav->limitstart . ", " . (int) $pageNav->limit
  503. );
  504. $rows = $_CB_database->loadObjectList();
  505. if ($_CB_database->getErrorNum()) {
  506. echo $_CB_database->stderr();
  507. return false;
  508. }
  509. HTML_comprofiler::showLists( $rows, $pageNav, $search, $option );
  510. return true;
  511. }
  512. function editList( $fid='0', $option='com_comprofiler', $task = 'editList') {
  513. global $_CB_database, $_CB_framework;
  514. $row = new moscomprofilerLists( $_CB_database );
  515. if ( $fid ) {
  516. // load the row from the db table
  517. $row->load( (int) $fid );
  518. } else {
  519. $row->col1enabled = '1';
  520. }
  521. $lists['published'] = moscomprofilerHTML::yesnoSelectList( 'published', 'class="inputbox" size="1"', $row->published );
  522. $lists['default'] = moscomprofilerHTML::yesnoSelectList( 'default', 'class="inputbox" size="1"', $row->default );
  523. /*
  524. if ( checkJversion() <= 0 ) {
  525. $my_groups  = $_CB_framework->acl->get_object_groups( 'users', $_CB_framework->myId(), 'ARO' );
  526. } else {
  527. $aro_id = $_CB_framework->acl->get_object_id( 'users', $_CB_framework->myId(), 'ARO' );
  528. $my_groups  = $_CB_framework->acl->get_object_groups( $aro_id, 'ARO' );
  529. }
  530. */
  531. $gtree2 = array();
  532. $gtree2 = array_merge( $gtree2, $_CB_framework->acl->get_group_children_tree( null, 'USERS', false ));
  533. $usergids = explode( ', ', $row->usergroupids );
  534. $ugids = array();
  535. foreach($usergids as $usergid) {
  536. $ugids[]->value = $usergid;
  537. }
  538. $lists['usergroups'] = moscomprofilerHTML::selectList( $gtree2, 'usergroups', 'size="4" MULTIPLE onblur="loadUGIDs(this);" mosReq=1 mosLabel="User Groups"', 'value', 'text', $ugids,1 );
  539. $gtree3 = array();
  540.     $gtree3[] = moscomprofilerHTML::makeOption( -2 , '- Everybody -' );
  541.     $gtree3[] = moscomprofilerHTML::makeOption( -1, '- All Registered Users -' );
  542. $gtree3 = array_merge( $gtree3, $_CB_framework->acl->get_group_children_tree( null, 'USERS', false ));
  543. $lists['useraccessgroup'] = moscomprofilerHTML::selectList( $gtree3, 'useraccessgroupid', 'size="4"', 'value', 'text', $row->useraccessgroupid, 2 );
  544. $_CB_database->setQuery( "SELECT f.fieldid, f.title"
  545. . "n FROM #__comprofiler_fields AS f"
  546. . "n INNER JOIN #__comprofiler_plugin AS p ON (f.pluginid = p.id)"
  547. . "n WHERE f.published = 1"
  548. . "n  AND f.profile > 0"
  549. . "n  AND p.published = 1"
  550. . "n ORDER BY f.ordering"
  551. );
  552. $field = $_CB_database->loadObjectList();
  553. $fields = array();
  554. for ( $i = 0, $n = count( $field ) ; $i < $n ; $i++ ) {
  555. $fieldvalue =& $field[$i];
  556. $fields[$fieldvalue->title] = $fieldvalue->fieldid;
  557. }
  558. //print_r(array_values($fields));
  559. // params:
  560. $paramsEditorHtml = array();
  561. $options = array( 'option' => $option, 'task' => $task, 'cid' => $row->listid );
  562. // list-specific own parameters:
  563. cbimport( 'cb.xml.simplexml' );
  564. $listXml = new CBSimpleXMLElement( file_get_contents( $_CB_framework->getCfg( 'absolute_path' ) . '/administrator/components/com_comprofiler/xmlcb/cb.lists.xml' ) );
  565. $null = null;
  566. $params =& new cbParamsEditorController( $row->params, $listXml, $listXml, $null, null, 'cbxml', $attrname='version', $attrvalue='1' );
  567. $params->setOptions( $options );
  568. $listParamsEditHtml = $params->draw( null, 'views', 'view', 'name', 'editlist' );
  569. $paramsEditorHtml[] = array( 'title' => "List parameters", 'content' => $listParamsEditHtml );
  570. /*
  571. // params:
  572. $paramsEditorHtml = array();
  573. $options = array( 'option' => $option, 'task' => $task, 'cid' => $row->fieldid );
  574. // field-specific own parameters:
  575. $fieldHandler = new cbFieldHandler();
  576. $fieldOwnParamsEditHtml = $fieldHandler->drawParamsEditor( $row, $options );
  577. if ( $fieldOwnParamsEditHtml ) {
  578. $paramsEditorHtml[] = array( 'title' => "Field-specific Parameters", 'content' => $fieldOwnParamsEditHtml );
  579. }
  580. // additional non-specific other parameters:
  581. $fieldsParamsPlugins = $_PLUGINS->getUserFieldParamsPluginIds();
  582. foreach ($fieldsParamsPlugins as $pluginId => $fieldParamHandlerClassName ) {
  583. $fieldParamHandler = new $fieldParamHandlerClassName( $pluginId, $row ); // cbFieldParamsHandler();
  584. $addParamsHtml = $fieldParamHandler->drawParamsEditor( $options );
  585. if ( $addParamsHtml ) {
  586. $addParamsTitle = $fieldParamHandler->getFieldsParamsLabel();
  587. $paramsEditorHtml[] = array( 'title' => $addParamsTitle, 'content' => $addParamsHtml );
  588. }
  589. }
  590. */
  591. HTML_comprofiler::editList( $row, $lists,$fields, $option, $fid, $paramsEditorHtml );
  592. }
  593. function removeList( $cid, $option ) {
  594. global $_CB_database;
  595. if (!is_array( $cid ) || count( $cid ) < 1) {
  596. echo "<script type="text/javascript"> alert('Select an item to delete'); window.history.go(-1);</script>n";
  597. exit;
  598. }
  599. $msg = '';
  600. if (count( $cid )) {
  601. $obj = new moscomprofilerLists( $_CB_database );
  602. foreach ($cid as $id) {
  603. $obj->delete( $id );
  604. }
  605. }
  606. //if($msg!='') echo "<script type="text/javascript"> alert('".$msg."'); window.history.go(-1);</script>n";
  607. cbRedirect( "index2.php?option=$option&task=showLists", $msg );
  608. }
  609. function orderLists( $lid, $inc, $option ) {
  610. global $_CB_database;
  611. $row = new moscomprofilerLists( $_CB_database );
  612. $row->load( (int) $lid );
  613. $row->move( $inc );
  614. cbRedirect( "index2.php?option=$option&task=showLists" );
  615. }
  616. function showField( $option ) {
  617. global $_CB_database, $_CB_framework, $_CB_joomla_adminpath;
  618. $limit = (int) $_CB_framework->getCfg( 'list_limit' );
  619. if ( $limit == 0 ) {
  620. $limit = 10;
  621. }
  622. $limit = $_CB_framework->getUserStateFromRequest( "viewlistlimit", 'limit', $limit );
  623. $lastCBlist = $_CB_framework->getUserState( "view{$option}lastCBlist", null );
  624. if($lastCBlist=='showfields') {
  625. $limitstart = $_CB_framework->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
  626. $lastSearch = $_CB_framework->getUserState( "search{$option}", null );
  627. $search = $_CB_framework->getUserStateFromRequest( "search{$option}", 'search', '' );
  628. if ($lastSearch != $search) {
  629. $limitstart = 0;
  630. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  631. }
  632. $search = trim( strtolower( $search ) );
  633. } else {
  634. clearSearchBox();
  635. $search="";
  636. $limitstart = 0;
  637. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  638. $_CB_framework->setUserState( "view{$option}lastCBlist", "showfields" );
  639. }
  640. $where = array();
  641. // $where[] = "(f.sys = 0)";
  642. if (isset( $search ) && $search!= "") {
  643. $search = cbEscapeSQLsearch( trim( strtolower( cbGetEscaped($search))));
  644. $where[] = "(f.name LIKE '%$search%' OR f.type LIKE '%$search%')";
  645. }
  646. $where[]  = "t.useraccessgroupid IN (".implode(',',getChildGIDS(userGID( $_CB_framework->myId() ))).")";
  647. $_CB_database->setQuery( "SELECT COUNT(*)"
  648. . "n FROM #__comprofiler_fields AS f, #__comprofiler_tabs AS t"
  649. . "n WHERE (f.tabid = t.tabid) AND (t.fields = 1)" . ( count( $where ) ? ( " AND " . implode( ' AND ', $where ) ) : "" )
  650. );
  651. $total = $_CB_database->loadResult();
  652. echo $_CB_database->getErrorMsg();
  653. if ($total <= $limitstart) $limitstart = 0;
  654. cbimport( 'cb.pagination' );
  655. $pageNav = new cbPageNav( $total, $limitstart, $limit );
  656. $_CB_database->setQuery( "SELECT f.fieldid, f.title, f.name, f.description, f.type, f.required, f.published, "
  657. . "f.profile, f.ordering, f.registration, f.searchable, f.pluginid, f.sys, f.tablecolumns, "
  658. . "t.title AS 'tab', t.enabled AS 'tabenabled', t.pluginid AS 'tabpluginid', "
  659. . "p.name AS pluginname, p.published AS pluginpublished, "
  660. . "pf.name AS fieldpluginname, pf.published AS fieldpluginpublished "
  661. . "n FROM #__comprofiler_fields AS f"
  662. . "n INNER JOIN #__comprofiler_tabs AS t ON ( (f.tabid = t.tabid) AND (t.fields = 1) ) "
  663. . "n LEFT JOIN #__comprofiler_plugin AS p ON p.id = t.pluginid"
  664. . "n LEFT JOIN #__comprofiler_plugin AS pf ON pf.id = f.pluginid"
  665. . (count( $where ) ? "n WHERE " . implode( ' AND ', $where ) : "")
  666. . "n ORDER BY t.ordering, f.ordering"
  667. . "n LIMIT " . (int) $pageNav->limitstart . ", " . (int) $pageNav->limit
  668. );
  669. $rows = $_CB_database->loadObjectList();
  670. if ($_CB_database->getErrorNum()) {
  671. echo $_CB_database->stderr();
  672. return false;
  673. }
  674. HTML_comprofiler::showFields( $rows, $pageNav, $search, $option );
  675. return true;
  676. }
  677. function editField( $fid = 0, $option = 'com_comprofiler', $task = 'editField' ) {
  678. global $_CB_database, $_CB_framework, $_PLUGINS;
  679. $row = new moscomprofilerFields( $_CB_database );
  680. $paramsEditorHtml = null;
  681. if ( $fid == 0 ) {
  682. // default values for new types:
  683. $row->type = 'text';
  684. $row->tabid = 11; // contact info by default
  685. $row->profile = 1;
  686. $row->registration = 1;
  687. $row->displaytitle = 1;
  688. $row->published = 1;
  689. $paramsEditorHtml = array( array( 'title' => "Parameters", 'content' => "<strong>To see Parameters, first save new field</strong>" ) );
  690. } else {
  691. // load the row from the db table
  692. $row->load( (int) $fid );
  693. $fieldTab = new moscomprofilerTabs( $_CB_database );
  694. // load the row from the db table
  695. $fieldTab->load( (int) $row->tabid );
  696. if ( ! in_array( $fieldTab->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  697. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  698. exit;
  699. }
  700. }
  701. $_PLUGINS->loadPluginGroup( 'user' );
  702. if ( $task == 'reloadField' ) {
  703. if ( ! _prov_bind_CB_field( $row, $fid ) ) {
  704. echo "<script type="text/javascript"> alert('" . $row->getError() . "'); window.history.go(-1); </script>n";
  705. exit();
  706. }
  707. }
  708. // params:
  709. $paramsEditorHtml = array();
  710. $options = array( 'option' => $option, 'task' => $task, 'cid' => $row->fieldid );
  711. // field-specific own parameters:
  712. $fieldHandler = new cbFieldHandler();
  713. $fieldOwnParamsEditHtml = $fieldHandler->drawParamsEditor( $row, $options );
  714. if ( $fieldOwnParamsEditHtml ) {
  715. $paramsEditorHtml[] = array( 'title' => "Field-specific Parameters", 'content' => $fieldOwnParamsEditHtml );
  716. }
  717. // additional non-specific other parameters:
  718. $fieldsParamsPlugins = $_PLUGINS->getUserFieldParamsPluginIds();
  719. foreach ($fieldsParamsPlugins as $pluginId => $fieldParamHandlerClassName ) {
  720. $fieldParamHandler = new $fieldParamHandlerClassName( $pluginId, $row ); // cbFieldParamsHandler();
  721. $addParamsHtml = $fieldParamHandler->drawParamsEditor( $options );
  722. if ( $addParamsHtml ) {
  723. $addParamsTitle = $fieldParamHandler->getFieldsParamsLabel();
  724. $paramsEditorHtml[] = array( 'title' => $addParamsTitle, 'content' => $addParamsHtml );
  725. }
  726. }
  727. $where = array();
  728. $where[] = "`fields` = 1";
  729. $where[]   = "useraccessgroupid IN (".implode(',',getChildGIDS(userGID( $_CB_framework->myId() ))).")";
  730. $_CB_database->setQuery("SELECT tabid, title FROM #__comprofiler_tabs WHERE " . implode( ' AND ', $where ) . " ORDER BY ordering");
  731. $tabs = $_CB_database->loadObjectList();
  732. $lists = array();
  733. $tablist = array();
  734. for ($i=0, $n=count( $tabs ); $i < $n; $i++) {
  735. $tab =& $tabs[$i];
  736.     $tablist[] = moscomprofilerHTML::makeOption( $tab->tabid, getLangDefinition($tab->title) );
  737. }
  738. $lists['tabs'] = moscomprofilerHTML::selectList( $tablist, 'tabid', 'class="inputbox" size="1" mosReq=1 mosLabel="Tab"', 'value', 'text', $row->tabid, 2 );
  739. $types = array();
  740. if ( $fid == 0 ) {
  741. $typeHandlers = array();
  742. $registeredTypes = $_PLUGINS->getUserFieldTypes();
  743. foreach ( $registeredTypes as $typ ) {
  744. $typeHandlers[$typ] = new cbFieldHandler();
  745. $tmpField = new moscomprofilerFields( $_CB_database );
  746. $tmpField->type = $typ;
  747. $typLabel = $typeHandlers[$typ]->getFieldTypeLabel( $tmpField );
  748. if ( $typLabel ) {
  749. $types[] = moscomprofilerHTML::makeOption( $typ, $typLabel );
  750. }
  751. }
  752. } else {
  753. $types[] = moscomprofilerHTML::makeOption( $row->type, $fieldHandler->getFieldTypeLabel( $row, false ) );
  754. }
  755. $webaddrtypes = array();
  756. $webaddrtypes[] = moscomprofilerHTML::makeOption( '0', 'URL only' );
  757. $webaddrtypes[] = moscomprofilerHTML::makeOption( '2', 'Hypertext and URL' );
  758. $profiles = array();
  759. $profiles[] = moscomprofilerHTML::makeOption( '0', 'No' );
  760. $profiles[] = moscomprofilerHTML::makeOption( '1', 'Yes: on 1 Line' );
  761. $profiles[] = moscomprofilerHTML::makeOption( '2', 'Yes: on 2 Lines' );
  762. $fvalues = $_CB_database->setQuery( "SELECT fieldtitle "
  763. . "n FROM #__comprofiler_field_values"
  764. . "n WHERE fieldid=" . (int) $fid
  765. . "n ORDER BY ordering" );
  766. $fvalues = $_CB_database->loadObjectList();
  767. $lists['webaddresstypes'] = moscomprofilerHTML::selectList( $webaddrtypes, 'webaddresstypes', 'class="inputbox" size="1"', 'value', 'text', $row->rows, 2 );
  768. $lists['type'] = moscomprofilerHTML::selectList( $types, 'type', 'class="inputbox" size="1"', 'value', 'text', $row->type, 2 );
  769. $lists['required'] = moscomprofilerHTML::yesnoSelectList( 'required', 'class="inputbox" size="1"', $row->required );
  770. $lists['published'] = moscomprofilerHTML::yesnoSelectList( 'published', 'class="inputbox" size="1"', $row->published );
  771. $lists['readonly'] = moscomprofilerHTML::yesnoSelectList( 'readonly', 'class="inputbox" size="1"', $row->readonly );
  772. $lists['profile'] = moscomprofilerHTML::selectList( $profiles, 'profile', 'class="inputbox" size="1"', 'value', 'text', $row->profile, 2 );
  773. $lists['displaytitle'] = moscomprofilerHTML::yesnoSelectList( 'displaytitle', 'class="inputbox" size="1"', $row->displaytitle );
  774. if ( $row->tablecolumns != '' && ! in_array( $row->type, array( 'password', 'userparams' ) ) ) {
  775. $lists['searchable'] = moscomprofilerHTML::yesnoSelectList( 'searchable', 'class="inputbox" size="1"', $row->searchable );
  776. } else {
  777. $lists['searchable'] = _UE_NO . '<input type="hidden" name="searchable" value="0" />';
  778. }
  779. $lists['registration'] = moscomprofilerHTML::yesnoSelectList( 'registration', 'class="inputbox" size="1"', $row->registration );
  780. HTML_comprofiler::editfield( $row, $lists, $fvalues, $option, $paramsEditorHtml );
  781. }
  782. /**
  783.  * A more extensive bind method for fields (  //TBD: should got to the moscomprofilerFields class).
  784.  *
  785.  * @param  moscomprofilerFields  $row
  786.  * @param  int                   $fid
  787.  * @return boolean
  788.  */
  789. function _prov_bind_CB_field( &$row, $fid ) {
  790. global $_PLUGINS, $_POST;
  791. $bindSuccess = $row->bind( $_POST );
  792. if ( $bindSuccess ) {
  793. $pluginid = $_PLUGINS->getUserFieldPluginId( $row->type );
  794. if ( $pluginid != 1 ) {
  795. $row->pluginid = $pluginid; // not core plugin for now as we don't allow changing field types
  796. }
  797. if ( ! isset( $_POST['params'] ) ) {
  798. $_POST['params'] = null;
  799. }
  800. if ( $fid && $row->pluginid ) {
  801. // handles field-specific parameters:
  802. $fieldHandler = new cbFieldHandler();
  803. $row->params = $fieldHandler->getRawParams( $row, $_POST['params'] );
  804. } else {
  805. // if not a plugin-specific field, handle parameters in standard way:
  806.   $row->params = cbParamsEditorController::getRawParams( $_POST['params'] );
  807. }
  808. }
  809. return $bindSuccess;
  810. }
  811. function saveField( $option, $task ) {
  812. global $_CB_database, $_CB_framework, $_POST, $_PLUGINS;
  813. if ( ( $task == 'showField' ) || ! ( isset( $_POST['oldtabid'] ) && isset( $_POST['tabid'] ) && isset( $_POST['fieldid'] ) ) ) {
  814. cbRedirect( 'index2.php?option=' . $option . '&task=' . $task );
  815. return;
  816. }
  817. $fid = (int) $_POST['fieldid'];
  818. $row = new moscomprofilerFields( $_CB_database );
  819. $fieldHandler = null;
  820. if ( $fid ) {
  821. // load the row from the db table
  822. if ( ! $row->load( (int) $fid ) ) {
  823. echo "<script type="text/javascript"> alert('Innexistant field'); window.history.go(-1);</script>n";
  824. exit;
  825. }
  826. $fieldTab = new moscomprofilerTabs( $_CB_database );
  827. // load the row from the db table
  828. $fieldTab->load( (int) $row->tabid );
  829. if ( ! in_array( $fieldTab->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  830. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  831. exit;
  832. }
  833. }
  834. $_PLUGINS->loadPluginGroup( 'user' );
  835. if ( ! _prov_bind_CB_field( $row, $fid ) ) {
  836. echo "<script type="text/javascript"> alert('" . $row->getError() . "'); window.history.go(-1); </script>n";
  837. exit();
  838. }
  839. // in case the above changed perms.... really ?
  840. $fieldTab = new moscomprofilerTabs( $_CB_database );
  841. $fieldTab->load( (int) $row->tabid );
  842. if ( ! in_array( $fieldTab->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  843. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  844. exit;
  845. }
  846. if ($row->type == 'webaddress') {
  847. $row->rows = $_POST['webaddresstypes'];
  848. if ( !(($row->rows == 0) || ($row->rows == 2)) ) {
  849. $row->rows = 0;
  850. }
  851. }
  852. if ( $_POST['oldtabid'] != $_POST['tabid'] ) {
  853. if ( $_POST['oldtabid'] !== '' ) {
  854. //Re-order old tab
  855. $sql = "UPDATE #__comprofiler_fields SET ordering = ordering-1 WHERE ordering > ".(int) $_POST['ordering']." AND tabid = ".(int) $_POST['oldtabid'];
  856. $_CB_database->setQuery($sql);
  857. $_CB_database->query();
  858. }
  859. //Select Last Order in New Tab
  860. $sql = "SELECT MAX(ordering) FROM #__comprofiler_fields WHERE tabid=".(int) $_POST['tabid'];
  861. $_CB_database->SetQuery($sql);
  862. $max = $_CB_database->LoadResult();
  863. $row->ordering = max( $max + 1, 1 );
  864. }
  865. if ( cbStartOfStringMatch( $row->name, 'cb_' ) ) {
  866. $row->name = str_replace(" ", "", strtolower($row->name));
  867. }
  868. if ( ! $row->check() ) {
  869. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-2); </script>n";
  870. exit();
  871. }
  872. if ( ! $row->store( (int) $fid ) ) {
  873. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-2); </script>n";
  874. exit();
  875. }
  876. $fieldNames = array();
  877. $fieldNames = $_POST['vNames'];
  878. $j = 1;
  879. if( $row->fieldid > 0 ) {
  880. $_CB_database->setQuery( "DELETE FROM #__comprofiler_field_values"
  881. . " WHERE fieldid = " . (int) $row->fieldid );
  882. if( $_CB_database->query() === false ) {
  883. echo $_CB_database->getErrorMsg();
  884. }
  885. } else {
  886. $_CB_database->setQuery( "SELECT MAX(fieldid) FROM #__comprofiler_fields");
  887. $maxID = $_CB_database->loadResult();
  888. $row->fieldid = $maxID;
  889. echo $_CB_database->getErrorMsg();
  890. }
  891. //for($i=0, $n=count( $fieldNames ); $i < $n; $i++) {
  892. foreach ($fieldNames as $fieldName) {
  893. if(trim($fieldName)!=null || trim($fieldName)!='') {
  894. $_CB_database->setQuery( "INSERT INTO #__comprofiler_field_values (fieldid,fieldtitle,ordering)"
  895. . " VALUES( " . (int) $row->fieldid . ",'".cbGetEscaped($fieldName)."', " . (int) $j . ")"
  896. );
  897. if ( $_CB_database->query() === false ) {
  898. echo $_CB_database->getErrorMsg();
  899. }
  900. $j++;
  901. }
  902. }
  903. switch ( $task ) {
  904. case 'applyField':
  905. $msg = 'Successfully Saved changes to Field: '. $row->name;
  906. cbRedirect( 'index2.php?option='. $option .'&task=editField&cid='. $row->fieldid, $msg );
  907. break;
  908. case 'saveField':
  909. default:
  910. $msg = 'Successfully Saved Field: '. $row->name;
  911. cbRedirect( 'index2.php?option='. $option .'&task=showField' , $msg );
  912. break;
  913. }
  914. }
  915. function removeField( $cid, $option ) {
  916. global $_CB_database, $_CB_framework;
  917. if (!is_array( $cid ) || count( $cid ) < 1) {
  918. echo "<script type="text/javascript"> alert('Select an item to delete'); window.history.go(-1);</script>n";
  919. exit;
  920. }
  921. $msg = '';
  922. if (count( $cid )) {
  923. $obj = new moscomprofilerFields( $_CB_database );
  924. $deletedOkNames = array();
  925. foreach ($cid as $id) {
  926. $id = (int) $id;
  927. $obj->load( $id );
  928. $fieldTab = new moscomprofilerTabs( $_CB_database );
  929. $fieldTab->load( (int) $obj->tabid );
  930. if ( ! in_array( $fieldTab->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  931. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  932. exit;
  933. }
  934. $noDelete = 0;
  935. $_CB_database->setQuery("SELECT COUNT(*) FROM #__comprofiler_lists".
  936. " WHERE col1fields like '%|*|$id' OR col1fields like '$id|*|%' OR col1fields like '%|*|$id|*|%' OR col1fields='$id'".
  937. " OR col2fields like '%|*|$id' OR col2fields like '$id|*|%' OR col2fields like '%|*|$id|*|%' OR col2fields='$id'".
  938. " OR col3fields like '%|*|$id' OR col3fields like '$id|*|%' OR col3fields like '%|*|$id|*|%' OR col3fields='$id'".
  939. " OR col4fields like '%|*|$id' OR col4fields like '$id|*|%' OR col4fields like '%|*|$id|*|%' OR col4fields='$id'");
  940. $onList = $_CB_database->loadResult();
  941. if ($onList > 0) {
  942. $msg .= getLangDefinition($obj->title) . " cannot be deleted because it is on a List. n";
  943. $noDelete = 1;
  944. }
  945. if ($obj->sys==1) {
  946. $msg .= getLangDefinition($obj->title) ." cannot be deleted because it is a system field. n";
  947. $noDelete = 1;
  948. if ($noDelete != 1) {
  949. if ( $obj->deleteDataDescr( $id ) ) {
  950. $sql="UPDATE #__comprofiler_fields SET ordering = ordering-1 WHERE ordering > ".(int) $obj->ordering." AND tabid = ".(int) $obj->tabid;
  951. $_CB_database->setQuery($sql);
  952. $_CB_database->query();
  953. $deletedOkNames[] = $obj->title;
  954. }
  955. }
  956. }
  957. }
  958. if ( ! $msg ) {
  959. $msg = 'Successfully Deleted Fields: '. implode( ', ', $deletedOkNames );
  960. }
  961. cbRedirect( "index2.php?option=$option&task=showField", $msg );
  962. }
  963. function orderFields( $fid, $inc, $option ) {
  964. global $_CB_database, $_CB_framework;
  965. $row = new moscomprofilerFields( $_CB_database );
  966. $row->load( (int) $fid );
  967. $fieldTab = new moscomprofilerTabs( $_CB_database );
  968. $fieldTab->load( (int) $row->tabid );
  969. if ( ! in_array( $fieldTab->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  970. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  971. exit;
  972. }
  973. $row->move( $inc , "tabid='$row->tabid'");
  974. cbRedirect( "index2.php?option=$option&task=showField" );
  975. }
  976. function showTab( $option ) {
  977. global $_CB_database, $_CB_framework, $_CB_joomla_adminpath;
  978. $limit = (int) $_CB_framework->getCfg( 'list_limit' );
  979. if ( $limit == 0 ) {
  980. $limit = 10;
  981. }
  982. $limit = $_CB_framework->getUserStateFromRequest( "viewlistlimit", 'limit', $limit );
  983. $lastCBlist = $_CB_framework->getUserState( "view{$option}lastCBlist", null );
  984. if($lastCBlist=='showtab') {
  985. $limitstart = $_CB_framework->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
  986. $lastSearch = $_CB_framework->getUserState( "search{$option}", null );
  987. $search = $_CB_framework->getUserStateFromRequest( "search{$option}", 'search', '' );
  988. if ($lastSearch != $search) {
  989. $limitstart = 0;
  990. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  991. }
  992. $search = trim( strtolower( $search ) );
  993. } else {
  994. clearSearchBox();
  995. $search="";
  996. $limitstart = 0;
  997. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  998. $_CB_framework->setUserState( "view{$option}lastCBlist", "showtab" );
  999. }
  1000. $where = array();
  1001. if (isset( $search ) && $search!= "") {
  1002. $search  = cbEscapeSQLsearch( trim( strtolower( cbGetEscaped($search))));
  1003. $where[] = "(a.title LIKE '%$search%')";
  1004. }
  1005. $where[]  = "a.useraccessgroupid IN (".implode(',',getChildGIDS(userGID( $_CB_framework->myId() ))).")";
  1006. $_CB_database->setQuery( "SELECT COUNT(*)"
  1007. . "nFROM #__comprofiler_tabs AS a"
  1008. . (count( $where ) ? "nWHERE " . implode( ' AND ', $where ) : "")
  1009. );
  1010. $total = $_CB_database->loadResult();
  1011. echo $_CB_database->getErrorMsg();
  1012. if ($total <= $limitstart) $limitstart = 0;
  1013. cbimport( 'cb.pagination' );
  1014. $pageNav = new cbPageNav( $total, $limitstart, $limit  );
  1015. $_CB_database->setQuery( "SELECT a.*, p.name AS pluginname, p.published AS pluginpublished "
  1016. . "nFROM #__comprofiler_tabs AS a"
  1017. . "n LEFT JOIN #__comprofiler_plugin AS p ON p.id = a.pluginid"
  1018. . (count( $where ) ? "nWHERE " . implode( ' AND ', $where ) : "")
  1019. . "n ORDER BY position, ordering"
  1020. . "nLIMIT " . (int) $pageNav->limitstart . ", " . (int) $pageNav->limit
  1021. );
  1022. $rows = $_CB_database->loadObjectList();
  1023. if ($_CB_database->getErrorNum()) {
  1024. echo $_CB_database->stderr();
  1025. return false;
  1026. }
  1027. HTML_comprofiler::showTabs( $rows, $pageNav, $search, $option );
  1028. return true;
  1029. }
  1030. /**
  1031. * @param  string   $sql        SQL with ordering As value and 'name field' AS text
  1032. * @param  int      $chop       The length of the truncated headline
  1033. * @param  boolean  $translate  translate to CB language
  1034. * @return array                of makeOption
  1035. * @access private
  1036. */
  1037. function _cbGetOrderingList( $sql, $chop = 30, $translate = true ) {
  1038. global $_CB_database;
  1039. $order = array();
  1040. $_CB_database->setQuery( $sql );
  1041. if ( false === ( $orders = $_CB_database->loadObjectList() ) ) {
  1042. if ( $_CB_database->getErrorNum() ) {
  1043. echo $_CB_database->stderr();
  1044. return false;
  1045. } else {
  1046. $order[] = moscomprofilerHTML::makeOption( 1, 'first' );
  1047. return $order;
  1048. }
  1049. }
  1050. $order[] = moscomprofilerHTML::makeOption( 0, '0 ' . 'first' );
  1051. for ( $i=0, $n = count( $orders ); $i < $n; $i++ ) {
  1052. if ( $translate ) {
  1053. $text = getLangDefinition( $orders[$i]->text );
  1054. } else {
  1055. $text = $orders[$i]->text;
  1056. }
  1057.         if ( strlen( $text ) > $chop ) {
  1058.          $text = substr( $text, 0, $chop ) . '...';
  1059.         }
  1060. $order[] = moscomprofilerHTML::makeOption( $orders[$i]->value, $orders[$i]->value . ' (' . $text . ')' );
  1061. }
  1062. if ( isset( $orders[$i - 1] ) ) {
  1063. $order[] = moscomprofilerHTML::makeOption( $orders[$i - 1]->value + 1, ( $orders[$i - 1]->value + 1 ) . ' ' . 'last' );
  1064. }
  1065. return $order;
  1066. }
  1067. function editTab( $tid='0', $option='com_comprofiler' ) {
  1068. global $_CB_database, $_CB_framework;
  1069. $row = new moscomprofilerTabs( $_CB_database );
  1070. // load the row from the db table
  1071. $row->load( (int) $tid );
  1072. if ( $tid && ! in_array( $row->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  1073. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  1074. exit;
  1075. }
  1076.   $lists = array();
  1077. if($row->sys=='2') $lists['enabled'] = "Yes";
  1078. else $lists['enabled'] = moscomprofilerHTML::yesnoSelectList( 'enabled', 'class="inputbox" size="1"', $row->enabled );
  1079. /*
  1080. -------------------------
  1081. !          head         !
  1082. !-----------------------!
  1083. !      !        !       !
  1084. ! left ! middle ! right !
  1085. !      !        !       !
  1086. !-----------------------!
  1087. !                       !
  1088. !        tabmain        !
  1089. !                       !
  1090. !-----------------------!
  1091. !        underall       !
  1092. -------------------------
  1093. !      !        !       !
  1094. ! L1C1 ! L1C2   ! L1C3  !
  1095. !      !        !       !
  1096. !-----------------------!
  1097. !      !        !       !
  1098. ! L2C1 ! L2C4   ! L2C8  !
  1099. !      !        !       !
  1100. !-----------------------!
  1101. !                       !
  1102. !        L4C7           !
  1103. !                       !
  1104. !-----------------------!
  1105. !          !            !
  1106. !   L8C3   !    L8C4    !
  1107. !          !            !
  1108. !-----------------------!
  1109. */
  1110. $position = array();
  1111. $position[] = moscomprofilerHTML::makeOption( 'cb_head', _UE_POS_CB_HEAD );
  1112. $position[] = moscomprofilerHTML::makeOption( 'cb_left', _UE_POS_CB_LEFT );
  1113. $position[] = moscomprofilerHTML::makeOption( 'cb_middle', _UE_POS_CB_MIDDLE );
  1114. $position[] = moscomprofilerHTML::makeOption( 'cb_right', _UE_POS_CB_RIGHT );
  1115. $position[] = moscomprofilerHTML::makeOption( 'cb_tabmain', _UE_POS_CB_MAIN );
  1116. $position[] = moscomprofilerHTML::makeOption( 'cb_underall', _UE_POS_CB_BOTTOM );
  1117. for ( $i = 1 ; $i <= 9; $i++ ) {
  1118. for ( $j = 1 ; $j <= 9; $j++ ) {
  1119. $position[] = moscomprofilerHTML::makeOption( 'L'.$i.'C'.$j, 'Line ' . $i . ' Column ' . $j );
  1120. }
  1121. }
  1122. if ( ! $row->position ) {
  1123. $row->position = 'cb_tabmain';
  1124. }
  1125. $lists['position'] = moscomprofilerHTML::selectList( $position, 'position', 'class="inputbox" size="1"', 'value', 'text', $row->position, 2 );
  1126. $displaytype = array();
  1127. $displaytype[] = moscomprofilerHTML::makeOption( 'tab', _UE_DISPLAY_TAB );
  1128. $displaytype[] = moscomprofilerHTML::makeOption( 'div', _UE_DISPLAY_DIV );
  1129. $displaytype[] = moscomprofilerHTML::makeOption( 'html', _UE_DISPLAY_HTML );
  1130. $displaytype[] = moscomprofilerHTML::makeOption( 'overlib', _UE_DISPLAY_OVERLIB );
  1131. $displaytype[] = moscomprofilerHTML::makeOption( 'overlibfix', _UE_DISPLAY_OVERLIBFIX );
  1132. $displaytype[] = moscomprofilerHTML::makeOption( 'overlibsticky', _UE_DISPLAY_OVERLIBSTICKY );
  1133. $lists['displaytype'] = moscomprofilerHTML::selectList( $displaytype, 'displaytype', 'class="inputbox" size="1"', 'value', 'text', $row->displaytype, 2 );
  1134. if ($tid) {
  1135. if ( $row->ordering > -10000 && $row->ordering < 10000 ) {
  1136. // build the html select list for ordering
  1137. $query = "SELECT ordering AS value, title AS text"
  1138. . "n FROM #__comprofiler_tabs"
  1139. . "n WHERE position='" . $_CB_database->getEscaped( $row->position ) . "'"
  1140. . "n AND enabled > 0"
  1141. . "n AND ordering > -10000"
  1142. . "n AND ordering < 10000"
  1143. . "n ORDER BY ordering"
  1144. ;
  1145. $order = _cbGetOrderingList( $query );
  1146. $lists['ordering'] = moscomprofilerHTML::selectList( $order, 'ordering', 'class="inputbox" size="1"', 'value', 'text', intval( $row->ordering ), 2 );
  1147. } else {
  1148. $lists['ordering'] = '<input type="hidden" name="ordering" value="'. $row->ordering .'" />This plugin cannot be reordered';
  1149. }
  1150. } else {
  1151. $row->ordering  = 999;
  1152. $row->ordering_register = 10;
  1153. $row->published  = 1;
  1154. $row->description  = '';
  1155. $row->useraccessgroupid = -2;
  1156. $lists['ordering'] = '<input type="hidden" name="ordering" value="'. $row->ordering
  1157. .'" />New items default to the last place. Ordering can be changed after this item is saved.';
  1158. }
  1159. $gtree3=array();
  1160.     $gtree3[] = moscomprofilerHTML::makeOption( -2 , '- Everybody -' );
  1161.     $gtree3[] = moscomprofilerHTML::makeOption( -1, '- All Registered Users -' );
  1162. $gtree3 = array_merge( $gtree3, $_CB_framework->acl->get_group_children_tree( null, 'USERS', false ));
  1163. $lists['useraccessgroup']=moscomprofilerHTML::selectList( $gtree3, 'useraccessgroupid', 'size="4"', 'value', 'text', $row->useraccessgroupid, 2 );
  1164. HTML_comprofiler::edittab( $row, $option, $lists, $tid );
  1165. }
  1166. function saveTab( $option ) {
  1167. global $_CB_database, $_CB_framework, $_POST;
  1168. if ( isset( $_POST['params'] ) ) {
  1169.   $_POST['params'] = cbParamsEditorController::getRawParams( $_POST['params'] );
  1170. } else {
  1171. $_POST['params'] = '';
  1172. }
  1173. if ( ! isset( $_POST['tabid'] ) || ( count( $_POST ) == 0 ) ) {
  1174. echo "<script type="text/javascript"> alert('Missing post values'); window.history.go(-2); </script>n";
  1175. exit();
  1176. }
  1177. if ( $_POST['tabid'] ) {
  1178. $oldrow = new moscomprofilerTabs( $_CB_database );
  1179. if ( $oldrow->load( (int) $_POST['tabid'] )
  1180. &&  ( ! in_array( $oldrow->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) ) {
  1181. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  1182. exit;
  1183. }
  1184. }
  1185. $row = new moscomprofilerTabs( $_CB_database );
  1186. if (!$row->bind( $_POST )) {
  1187. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-1); </script>n";
  1188. exit();
  1189. }
  1190. if ( ! $row->ordering_register ) {
  1191. $row->ordering_register = 10;
  1192. }
  1193. if (!$row->check()) {
  1194. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-2); </script>n";
  1195. exit();
  1196. }
  1197. if ( ! $row->store( (int) $_POST['tabid'] ) ) {
  1198. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-2); </script>n";
  1199. exit();
  1200. }
  1201. $row->checkin();
  1202. cbRedirect( "index2.php?option=$option&task=showTab", "Successfully Saved Tab: ". $row->title );
  1203. }
  1204. function removeTabs( $cid, $option ) {
  1205. global $_CB_database, $_CB_framework;
  1206. if (!is_array( $cid ) || count( $cid ) < 1) {
  1207. echo "<script type="text/javascript"> alert('Select an item to delete'); window.history.go(-1);</script>n";
  1208. exit;
  1209. }
  1210. $msg = '';
  1211. if (count( $cid )) {
  1212. $obj = new moscomprofilerTabs( $_CB_database );
  1213. foreach ($cid as $id) {
  1214. $noDelete = 0;
  1215. $obj->load( (int) $id );
  1216. if ( ! in_array( $obj->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  1217. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  1218. exit;
  1219. }
  1220. $_CB_database->setQuery( "SELECT COUNT(*) FROM #__comprofiler_fields WHERE tabid=" . (int) $id );
  1221. $onField = $_CB_database->loadResult();
  1222. if( $obj->sys > 0 ) {
  1223. $msg .= getLangDefinition($obj->title) ." cannot be deleted because it is a system tab. n";
  1224. $noDelete = 1;
  1225. if( $obj->pluginid ) {
  1226. $plugin = new moscomprofilerPlugin( $_CB_database );
  1227. if ( $plugin->load( $obj->pluginid ) ) {
  1228. $msg .= getLangDefinition($obj->title) ." cannot be deleted because it is a tab belonging to an installed plugin. n";
  1229. $noDelete = 1;
  1230. }
  1231. if( $onField > 0 ) {
  1232. $msg .= getLangDefinition($obj->title) ." is being referenced by an existing field and cannot be deleted!";
  1233. $noDelete = 1;
  1234. if( $noDelete == 0 ) {
  1235. $obj->delete( $id );
  1236. $msg .= $obj->getError();
  1237. }
  1238. }
  1239. }
  1240. if ( $msg ) {
  1241. echo "<script type="text/javascript"> alert('" . str_replace( "n", '\n', addslashes( $msg ) ) . "'); window.history.go(-1);</script>n";
  1242. exit;
  1243. }
  1244. cbRedirect( "index2.php?option=$option&task=showTab" );
  1245. }
  1246. function orderTabs( $tid, $inc, $option ) {
  1247. global $_CB_database, $_CB_framework;
  1248. $row = new moscomprofilerTabs( $_CB_database );
  1249. $row->load( (int) $tid );
  1250. if ( ! in_array( $row->useraccessgroupid, getChildGIDS( userGID( $_CB_framework->myId() ) ) ) ) {
  1251. echo "<script type="text/javascript"> alert('Unauthorized Access'); window.history.go(-1);</script>n";
  1252. exit;
  1253. }
  1254. $row->move( $inc, "position='$row->position' AND ordering > -10000 AND ordering < 10000 "  );
  1255. cbRedirect( "index2.php?option=$option&task=showTab" );
  1256. }
  1257. function showUsers( $option ) {
  1258. global $_CB_database, $_CB_framework,$_POST, $_CB_joomla_adminpath, $_PLUGINS;
  1259. $limit = (int) $_CB_framework->getCfg( 'list_limit' );
  1260. if ( $limit == 0 ) {
  1261. $limit = 10;
  1262. }
  1263. $limit = $_CB_framework->getUserStateFromRequest( "viewlistlimit", 'limit', $limit );
  1264. $filter_type = $_CB_framework->getUserStateFromRequest( "filter_type{$option}", 'filter_type', 0 );
  1265. $filter_status = $_CB_framework->getUserStateFromRequest( "filter_status{$option}", 'filter_status', 0 );
  1266. $filter_logged = intval( $_CB_framework->getUserStateFromRequest( "filter_logged{$option}", 'filter_logged', 0 ) );
  1267. $lastCBlist = $_CB_framework->getUserState( "view{$option}lastCBlist", null );
  1268. if( $lastCBlist == 'showusers' ) {
  1269. $limitstart = $_CB_framework->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
  1270. $lastSearch  = $_CB_framework->getUserState( "search{$option}", null );
  1271. $search = $_CB_framework->getUserStateFromRequest( "search{$option}", 'search', '' );
  1272. if ( $lastSearch != $search ) {
  1273. $limitstart = 0;
  1274. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  1275. }
  1276. $search = trim( strtolower( $search ) );
  1277. } else {
  1278. $filter_type = 0;
  1279. $filter_status = 0;
  1280. $filter_logged = 0;
  1281. clearSearchBox();
  1282. $search = '';
  1283. $limitstart = 0;
  1284. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  1285. $_CB_framework->setUserState( "view{$option}lastCBlist", "showusers" );
  1286. }
  1287. $tablesSQL = array();
  1288. $joinsSQL = array();
  1289. $tablesWhereSQL = array();
  1290. if ( isset( $search ) && ( $search != "") ) {
  1291. $tablesWhereSQL[] = "(u.username LIKE '%" . cbEscapeSQLsearch( $_CB_database->getEscaped( $search ) ) . "%' OR u.email LIKE '%" . cbEscapeSQLsearch( $_CB_database->getEscaped( $search ) ) . "%' OR u.name LIKE '%" . cbEscapeSQLsearch( $_CB_database->getEscaped( $search ) ) . "%')";
  1292. }
  1293. if ( $filter_type ) {
  1294. if ( $filter_type == 'Public Frontend' ) {
  1295. $tablesWhereSQL[] = "(u.usertype = 'Registered' OR u.usertype = 'Author' OR u.usertype = 'Editor'OR u.usertype = 'Publisher')";
  1296. } else if ( $filter_type == 'Public Backend' ) {
  1297. $tablesWhereSQL[] = "(u.usertype = 'Manager' OR u.usertype = 'Administrator' OR u.usertype = 'Super Administrator')";
  1298. } else {
  1299. $tablesWhereSQL[] = "u.usertype = " . $_CB_database->Quote( $filter_type );
  1300. }
  1301. }
  1302. $userstates = array( 'Blocked' => 'u.block = 1',
  1303. 'Enabled' => 'u.block = 0',
  1304. 'Unconfirmed' => 'ue.confirmed = 0',
  1305. 'Confirmed' => 'ue.confirmed = 1',
  1306. 'Unapproved' => 'ue.approved = 0',
  1307. 'Disapproved' => 'ue.approved = 2',
  1308. 'Approved' => 'ue.approved = 1',
  1309. 'Banned' => 'ue.banned <> 0',
  1310. 'Blocked + Unconfirmed + Unapproved' => '(u.block = 1 AND ue.confirmed = 0 AND ue.approved = 0)',
  1311. 'Enabled + Unconfirmed + Unapproved' => '(u.block = 0 AND ue.confirmed = 0 AND ue.approved = 0)',
  1312. 'Blocked + Confirmed + Unapproved' => '(u.block = 1 AND ue.confirmed = 1 AND ue.approved = 0)',
  1313. 'Enabled + Confirmed + Unapproved' => '(u.block = 0 AND ue.confirmed = 1 AND ue.approved = 0)',
  1314. 'Blocked + Unconfirmed + Disapproved' => '(u.block = 1 AND ue.confirmed = 0 AND ue.approved = 2)',
  1315. 'Enabled + Unconfirmed + Disapproved' => '(u.block = 0 AND ue.confirmed = 0 AND ue.approved = 2)',
  1316. 'Blocked + Confirmed + Disapproved' => '(u.block = 1 AND ue.confirmed = 1 AND ue.approved = 2)',
  1317. 'Enabled + Confirmed + Disapproved' => '(u.block = 0 AND ue.confirmed = 1 AND ue.approved = 2)',
  1318. 'Blocked + Unconfirmed + Approved' => '(u.block = 1 AND ue.confirmed = 0 AND ue.approved = 1)',
  1319. 'Enabled + Unconfirmed + Approved' => '(u.block = 0 AND ue.confirmed = 0 AND ue.approved = 1)',
  1320. 'Blocked + Confirmed + Approved' => '(u.block = 1 AND ue.confirmed = 1 AND ue.approved = 1)',
  1321. 'Enabled + Confirmed + Approved' => '(u.block = 0 AND ue.confirmed = 1 AND ue.approved = 1)' );
  1322. if ( $filter_status ) {
  1323. $tablesWhereSQL[] = $userstates[$filter_status];
  1324. }
  1325. if ( $filter_logged == 1 ) {
  1326. $tablesWhereSQL[] = "s.userid = u.id";
  1327. } else if ($filter_logged == 2) {
  1328. $tablesWhereSQL[] = "s.userid IS NULL";
  1329. }
  1330. // exclude any child group id's for this user
  1331. //$_CB_framework->acl->_debug = true;
  1332. $pgids = $_CB_framework->acl->get_group_children( userGID( $_CB_framework->myId() ), 'ARO', 'RECURSE' );
  1333. if ( is_array( $pgids ) && (count( $pgids ) > 0 ) ) {
  1334. $tablesWhereSQL[] = "(u.gid NOT IN (" . implode( ',', $pgids ) . "))";
  1335. }
  1336. if ($filter_logged == 1 || $filter_logged == 2) {
  1337. $joinsSQL[] .= "n INNER JOIN #__session AS s ON s.userid = u.id";
  1338. // } else { done later, to avoid blocking site:
  1339. // $joinsSQL[] .= "n LEFT JOIN #__session AS s ON s.userid = u.id";
  1340. }
  1341.     $_PLUGINS->loadPluginGroup('user');
  1342. $_PLUGINS->trigger( 'onBeforeBackendUsersListBuildQuery', array( &$tablesSQL, &$joinsSQL, &$tablesWhereSQL, $option ) ); //TBD: $tablesSQL still not used
  1343. $queryFrom = "FROM " . implode( ', ', $tablesSQL ) . " " . implode( "n ", $joinsSQL ) . "n WHERE " . implode( "n AND ", $tablesWhereSQL );
  1344. $query = "SELECT COUNT(u.id)"
  1345. . "n FROM #__users AS u"
  1346. . "n LEFT JOIN #__comprofiler AS ue ON u.id = ue.id"
  1347. . ( count( $joinsSQL ) ? "n " . implode( "n ", $joinsSQL ) : '' )
  1348. . ( count( $tablesWhereSQL ) ? "n WHERE " . implode( ' AND ', $tablesWhereSQL ) : '' )
  1349. ;
  1350. $_CB_database->setQuery( $query );
  1351. $total = $_CB_database->loadResult();
  1352. if ( $total === null ) {
  1353. echo $_CB_database->getErrorMsg();
  1354. }
  1355. if ( $total <= $limitstart ) {
  1356. $limitstart = 0;
  1357. }
  1358. cbimport( 'cb.pagination' );
  1359. $pageNav = new cbPageNav( $total, $limitstart, $limit  );
  1360. if ( checkJversion() <= 0 ) {
  1361. $query = "SELECT DISTINCT u.*, g.name AS groupname, ue.approved,ue.confirmed"
  1362. . "n FROM #__users AS u"
  1363. . "n LEFT JOIN #__comprofiler AS ue ON u.id = ue.id"
  1364. . "n INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id" // map user to aro
  1365. . "n INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.aro_id" // map aro to group
  1366. . "n INNER JOIN #__core_acl_aro_groups AS g ON g.group_id = gm.group_id"
  1367. . ( count( $joinsSQL ) ? "n " . implode( "n ", $joinsSQL ) : '' )
  1368. ;
  1369. } else {
  1370. $query = "SELECT DISTINCT u.*, g.name AS groupname, ue.approved, ue.confirmed"
  1371. . "n FROM #__users AS u"
  1372. . "n LEFT JOIN #__comprofiler AS ue ON u.id = ue.id"
  1373. . "n INNER JOIN #__core_acl_aro AS aro ON aro.value = u.id" // map user to aro
  1374. . "n INNER JOIN #__core_acl_groups_aro_map AS gm ON gm.aro_id = aro.id" // map aro to group
  1375. . "n INNER JOIN #__core_acl_aro_groups AS g ON g.id = gm.group_id"
  1376. . ( count( $joinsSQL ) ? "n " . implode( "n ", $joinsSQL ) : '' )
  1377. ;
  1378. }
  1379. $query .= "n WHERE aro.section_value = 'users' "
  1380. . (count( $tablesWhereSQL ) ? "n AND " . implode( ' AND ', $tablesWhereSQL ) : "")
  1381. . "n LIMIT " . (int) $pageNav->limitstart . ", " . (int) $pageNav->limit
  1382. ;
  1383. $_CB_database->setQuery( $query );
  1384. $rows = $_CB_database->loadObjectList();
  1385. if ($_CB_database->getErrorNum()) {
  1386. echo $_CB_database->stderr();
  1387. return false;
  1388. }
  1389. $template = 'SELECT COUNT(s.userid) FROM #__session AS s WHERE s.userid = ';
  1390. $n = count( $rows );
  1391. for ( $i = 0; $i < $n; $i++ ) {
  1392. $row = &$rows[$i];
  1393. $query = $template . (int) $row->id;
  1394. $_CB_database->setQuery( $query );
  1395. $row->loggedin = $_CB_database->loadResult();
  1396. }
  1397. // get list of Log Status for dropdown filter
  1398. $logged[] = moscomprofilerHTML::makeOption( 0, '- Select Login State - ');
  1399. $logged[] = moscomprofilerHTML::makeOption( 1, 'Logged In');
  1400. $lists['logged'] = moscomprofilerHTML::selectList( $logged, 'filter_logged', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', "$filter_logged", 2 );
  1401. // get list of Groups for dropdown filter
  1402. $query = "SELECT name AS value, name AS text"
  1403. . "n FROM #__core_acl_aro_groups"
  1404. . "n WHERE name != 'ROOT'"
  1405. . "n AND name != 'USERS'"
  1406. ;
  1407. $types[] = moscomprofilerHTML::makeOption( '0', '- Select Group -' );
  1408. $_CB_database->setQuery( $query );
  1409. $types = array_merge( $types, $_CB_database->loadObjectList() );
  1410. $lists['type'] = moscomprofilerHTML::selectList( $types, 'filter_type', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', "$filter_type", 2 );
  1411. $status[] = moscomprofilerHTML::makeOption( 0, '- Select User Status - ');
  1412. foreach ( array_keys( $userstates ) as $k ) {
  1413. $status[] = moscomprofilerHTML::makeOption( $k, $k );
  1414. }
  1415. $lists['status'] = moscomprofilerHTML::selectList( $status, 'filter_status', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', "$filter_status", 2 );
  1416. $pluginAdditions = $_PLUGINS->trigger( 'onAfterBackendUsersList', array( 1, &$rows, &$pageNav, &$search, &$lists, $option ) );
  1417. $pluginColumns = array();
  1418. foreach ( $pluginAdditions as $addition ) {
  1419. if ( is_array( $addition ) ) {
  1420. $pluginColumns = array_merge( $pluginColumns, $addition );
  1421. }
  1422. }
  1423. HTML_comprofiler::showUsers( $rows, $pageNav, stripslashes($search), $option, $lists, $pluginColumns );
  1424. return true;
  1425. }
  1426. function editUser( $uid = '0', $option = 'users' ) {
  1427. global $_CB_framework, $_CB_database, $_PLUGINS;
  1428. $msg = checkCBpermissions( array($uid), "edit", true );
  1429. if ($msg) {
  1430. echo "<script type="text/javascript"> alert('".$msg."'); window.history.go(-1);</script>n";
  1431. exit;
  1432. }
  1433. $_PLUGINS->loadPluginGroup('user');
  1434. $user = new moscomprofilerUser( $_CB_database );
  1435. $cmsUserExists = $user->load( (int) $uid );
  1436. $comprofilerExists = ( $user->user_id != null );
  1437. if ( $cmsUserExists && $comprofilerExists ) {
  1438. // Edit existing CB user:
  1439. $newCBuser = '0';
  1440. } else {
  1441. $newCBuser = '1';
  1442. if ( $cmsUserExists ) {
  1443. // Edit existing CMS (but new CB) user:
  1444. $user->approved = '1';
  1445. $user->confirmed = '1';
  1446. } else {
  1447. // New user:
  1448. $user->block = '0';
  1449. $user->approved = '1';
  1450. $user->confirmed = '1';
  1451. $user->sendEmail = '0';
  1452. $user->gid = $_CB_framework->acl->get_group_id( $_CB_framework->getCfg( 'new_usertype' ), 'ARO' );
  1453. }
  1454. }
  1455. $null = null;
  1456. HTML_comprofiler::edituser( $user, $option, $newCBuser, $null );
  1457. }
  1458. function saveUser( $option ) {
  1459. global $_CB_framework, $_CB_database, $ueConfig, $_POST, $_PLUGINS, $task;
  1460. if ( ! ( isset( $_POST['approved'] ) && isset( $_POST['confirmed'] ) && isset( $_POST['username'] ) ) ) {
  1461. echo "<script type="text/javascript"> alert('Not Authorized'); window.history.go(-1);</script>n";
  1462. exit;
  1463. }
  1464. // Check rights to access:
  1465. $myGid = userGID( $_CB_framework->myId() );
  1466. $userIdPosted = (int) cbGetParam($_POST, "id", 0 );
  1467. if ( $userIdPosted != 0 ) {
  1468. $msg = checkCBpermissions( array( $userIdPosted ), 'save', in_array( $myGid, array( 24, 25 ) ) );
  1469. } else {
  1470. $msg = checkCBpermissions( null, 'save', in_array( $myGid, array( 24, 25 ) ) );
  1471. }
  1472. if ($msg) {
  1473. echo "<script type="text/javascript"> alert('" . addslashes( $msg ) . "'); window.history.go(-1);</script>n";
  1474. exit;
  1475. }
  1476. $_PLUGINS->loadPluginGroup('user');
  1477. // Get current user state:
  1478. $userComplete = new moscomprofilerUser( $_CB_database );
  1479. if ( $userIdPosted != 0 ) {
  1480. if ( ! $userComplete->load( (int) $userIdPosted ) ) {
  1481. echo "<script type="text/javascript"> alert('" . addslashes( _UE_USER_PROFILE_NOT ) . "'); window.history.go(-1);</script>n";
  1482. return;
  1483. }
  1484. }
  1485. // Store new user state:
  1486. $saveResult = $userComplete->saveSafely( $_POST, $_CB_framework->getUi(), 'profile' );
  1487. if ( ! $saveResult ) {
  1488. $regErrorMSG = $userComplete->getError();
  1489. $msg = checkCBpermissions( array( $userComplete->id ), "edit", true );
  1490. if ($msg) {
  1491. echo "<script type="text/javascript"> alert('".$msg."'); window.history.go(-1);</script>n";
  1492. exit;
  1493. }
  1494. echo "<script type="text/javascript">alert('" . str_replace( '\\n', '\n', addslashes( strip_tags( str_replace( '<br />', 'n', $regErrorMSG ) ) ) ) . "'); </script>n";
  1495. global $_CB_Backend_task;
  1496. $_CB_Backend_task = 'edit'; // so the toolbar comes up...
  1497. HTML_comprofiler::edituser( $userComplete, $option, ( $userComplete->user_id != null ? '0' : '1' ), $_POST );
  1498. // echo "<script type="text/javascript">alert('" . addslashes( str_replace( '<br />', 'n', $userComplete->getError() ) ) . "'); window.history.go(-1);</script>n";
  1499. return;
  1500. }
  1501. // Checks-in the row:
  1502. $userComplete->checkin();
  1503. cbRedirect( "index2.php?option=$option&task=showusers", "Successfully Saved User: ". $userComplete->username );
  1504. }
  1505. function deleteUsers( $cid, $inComprofilerOnly = false ) {
  1506. global $_CB_framework, $_CB_database;
  1507. $msg = checkCBpermissions( $cid, "delete" );
  1508. if (!$msg && is_array( $cid ) && count( $cid )) {
  1509. $tabs = new cbTabs( 0, 2, null, false ); // loads plugins
  1510. foreach ($cid as $id) {
  1511. $obj =& $_CB_framework->_getCmsUserObject( (int) $id );
  1512. if ( ( $obj !== null ) || $inComprofilerOnly ) {
  1513. $count = 2;
  1514. if ( ( $obj !== null ) && ( $obj->gid == 25 ) ) {
  1515. // count number of active super admins
  1516. $query = "SELECT COUNT( id )"
  1517. . "n FROM #__users"
  1518. . "n WHERE gid = 25"
  1519. . "n AND block = 0"
  1520. ;
  1521. $_CB_database->setQuery( $query );
  1522. $count = $_CB_database->loadResult();
  1523. }
  1524. if ( $count <= 1 && $obj->gid == 25 ) {
  1525. // cannot delete Super Admin where it is the only one that exists
  1526. $msg .= "You cannot delete this Super Administrator as it is the only active Super Administrator for your site";
  1527. } else {
  1528. // delete user
  1529. $result = cbDeleteUser( $id, null, $inComprofilerOnly );
  1530. if ( $result === null ) {
  1531. $msg .= "User not found";
  1532. } elseif (is_string( $result ) && ( $result != "" ) ) {
  1533. $msg .= $result;
  1534. }
  1535. }
  1536. } else {
  1537. $msg .= "User not found";
  1538. }
  1539. }
  1540. }
  1541. return $msg;
  1542. }
  1543. function removeUsers( $cid, $option ) {
  1544. if (!is_array( $cid ) || count( $cid ) < 1) {
  1545. echo "<script type="text/javascript"> alert('Select an item to delete'); window.history.go(-1);</script>n";
  1546. exit;
  1547. }
  1548. $msg = deleteUsers($cid);
  1549. if ($msg) {
  1550. echo "<script type="text/javascript"> alert('".$msg."'); window.history.go(-1);</script>n";
  1551. exit;
  1552. }
  1553. cbRedirect( "index2.php?option=$option&task=showusers", $msg );
  1554. }
  1555. /**
  1556. * Blocks or Unblocks one or more user records
  1557. * @param array An array of unique category id numbers
  1558. * @param integer 0 if unblock, 1 if blocking
  1559. * @param string The current url option
  1560. */
  1561. function changeUserBlock( $cid=null, $block=1, $option ) {
  1562. $action = $block ? 'block' : 'unblock';
  1563. changeUsersStatus( $cid, $action, $block, $option );
  1564. }
  1565. /**
  1566. * Approves or Rejects one or more user records
  1567. * @param array An array of unique category id numbers
  1568. * @param integer 0 if reject, 1 if approve
  1569. * @param string The current url option
  1570. */
  1571. function approveUser( $cid=null, $approved=1, $option ) {
  1572. $action = $approved ? 'Approve' : 'Reject';
  1573. changeUsersStatus( $cid, $action, $approved, $option );
  1574. }
  1575. /**
  1576.  * Change users status
  1577.  *
  1578.  * @param array of int $cid
  1579.  * @param string       $action   ( Approve, Reject, block, unblock )
  1580.  * @param int          $actionValue
  1581.  * @param string       $option
  1582.  */
  1583. function changeUsersStatus( $cid=null, $action, $actionValue, $option ) {
  1584.     global $_CB_database, $ueConfig, $_PLUGINS;
  1585.     
  1586.     if (count( $cid ) < 1) {
  1587.      echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  1588.      exit;
  1589.     }
  1590. $msg = checkCBpermissions( $cid, $action );
  1591. if ($msg) {
  1592. echo "<script type="text/javascript"> alert('".$msg."'); window.history.go(-1);</script>n";
  1593. exit;
  1594. }
  1595. cbArrayToInts($cid);
  1596. $cids = implode( ',', $cid );
  1597.     $_PLUGINS->loadPluginGroup('user');
  1598. $query = "SELECT * FROM #__comprofiler c, #__users u WHERE c.id=u.id AND c.id IN ( " . $cids . " )";
  1599. $_CB_database->setQuery($query);
  1600. $users = $_CB_database->loadObjectList();
  1601. foreach ( $users as $row ) {
  1602. switch ( $action ) {
  1603. case 'Approve':
  1604. case 'Reject':
  1605. if ($actionValue == 0) {
  1606. $approved = 2; // "rejected"
  1607. } else {
  1608. $approved = $actionValue;
  1609. }
  1610. $_PLUGINS->trigger( 'onBeforeUserApproval', array( $row, $approved ) );
  1611. $_CB_database->setQuery( "UPDATE #__comprofiler SET approved=" . (int) $approved . " WHERE id = " . (int) $row->id );
  1612. if ($_CB_database->query()) {
  1613. if($approved==1) {
  1614. if( isset( $ueConfig['emailpass'] ) && ( $ueConfig['emailpass'] == "1" ) ) {
  1615. $pwd = cbMakeRandomString( 8, true );
  1616. $row->password = $pwd;
  1617. $pwd = cbHashPassword( $pwd );
  1618. $_CB_database->setQuery( "UPDATE #__users SET password='" . $_CB_database->getEscaped($pwd) . "' WHERE id = " . (int) $row->id );
  1619.      $_CB_database->query();
  1620. //createEmail($row, 'welcome', $ueConfig,null,1);
  1621. $_PLUGINS->trigger('onAfterUserApproval',array($row,$approved,true));
  1622. if ($row->approved == 0 && $approved == 1 && $row->confirmed == 1 ) {
  1623. $row->approved = 1;
  1624. activateUser($row, 2, "UserApproval", false);
  1625. }
  1626. //$tabs = new cbTabs( 0, 2);
  1627. //$tabs->confirmRegistrationPluginTabs($row);
  1628. }
  1629. }
  1630. break;
  1631. case 'block':
  1632. case 'unblock':
  1633. $_PLUGINS->trigger( 'onBeforeUserBlocking', array( $row, $actionValue ) );
  1634. $_CB_database->setQuery( "UPDATE #__users SET block = " . (int) $actionValue . " WHERE id = " . (int) $row->id );
  1635. if ($_CB_database->query()) {
  1636. // if action is to block a user, delete user acounts active sessions
  1637. if ( $actionValue == 1 ) {
  1638. $query = "DELETE FROM #__session"
  1639.   . "n WHERE userid = " . (int) $row->id;
  1640. $_CB_database->setQuery( $query );
  1641. $_CB_database->query();
  1642. }
  1643. }
  1644. break;
  1645. default:
  1646. echo "<script type="text/javascript"> alert('unknown action ".$action."'); window.history.go(-1);</script>n";
  1647. exit;
  1648. break;
  1649. }
  1650. }
  1651.     cbRedirect( "index2.php?option=$option&task=showusers" );
  1652. }
  1653. function cbIsEmail($email){
  1654. $rBool=false;
  1655. if(preg_match("/[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}/", $email)){
  1656. $rBool=true;
  1657. }
  1658. return $rBool;
  1659. }
  1660. function showConfig( $option ) {
  1661. global $_CB_framework, $_CB_database,$ueConfig;
  1662. global $_CB_adminpath;
  1663. cbimport( 'cb.adminfilesystem' );
  1664. $adminFS =& cbAdminFileSystem::getInstance();
  1665. $configfile = $_CB_adminpath."/ue_config.php";
  1666. //Add code to check if config file is writeable.
  1667. if ( $adminFS->isUsingStandardPHP() && ! is_writable($configfile)) {
  1668. @chmod ($configfile, 0766);
  1669. $permission = is_writable($configfile);
  1670. if (!$permission) {
  1671. echo "<center><h1><font color=red>" . _UE_WARNING . "...</font></h1><BR>";
  1672. echo "<b>" . _UE_YOUR_CONFIG_FILE . ": $configfile <font color=red>" . _UE_IS_NOT_WRITABLE . "</font></b><br />";
  1673. echo "<b>" . _UE_NEED_TO_CHMOD_CONFIG . "</b></center><br /><br />";
  1674. }
  1675. }
  1676. $lists = array();
  1677. // make a standard yes/no list
  1678. $yesno = array();
  1679. $yesno[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  1680. $yesno[] = moscomprofilerHTML::makeOption( '1', _UE_YES );
  1681. $admin_allowcbregistration = array();
  1682. $admin_allowcbregistration[] = moscomprofilerHTML::makeOption( '0', _UE_REG_ALLOWREG_SAME_AS_GLOBAL );
  1683. $admin_allowcbregistration[] = moscomprofilerHTML::makeOption( '1', _UE_REG_ALLOWREG_YES );
  1684. $conNotifyTypes=array();
  1685. $conNotifyTypes[] = moscomprofilerHTML::makeOption( '0', _UE_NONE );
  1686. $conNotifyTypes[] = moscomprofilerHTML::makeOption( '1', 'Email' );
  1687. $conNotifyTypes[] = moscomprofilerHTML::makeOption( '2', 'PMS' );
  1688. $conNotifyTypes[] = moscomprofilerHTML::makeOption( '3', 'PMS+Email' );
  1689. $dateformats = array();
  1690. $dateformats[] = moscomprofilerHTML::makeOption('Y/m/d','yyyy/mm/dd');
  1691. $dateformats[] = moscomprofilerHTML::makeOption('d/m/y','dd/mm/yy');
  1692. $dateformats[] = moscomprofilerHTML::makeOption('y/m/d','yy/mm/dd');
  1693. $dateformats[] = moscomprofilerHTML::makeOption('d/m/Y','dd/mm/yyyy');
  1694. $dateformats[] = moscomprofilerHTML::makeOption('m/d/y','mm/dd/yy');
  1695. $dateformats[] = moscomprofilerHTML::makeOption('m/d/Y','mm/dd/yyyy');
  1696. $dateformats[] = moscomprofilerHTML::makeOption('Y-m-d','yyyy-mm-dd');
  1697. $dateformats[] = moscomprofilerHTML::makeOption('d-m-y','dd-mm-yy');
  1698. $dateformats[] = moscomprofilerHTML::makeOption('y-m-d','yy-mm-dd');
  1699. $dateformats[] = moscomprofilerHTML::makeOption('d-m-Y','dd-mm-yyyy');
  1700. $dateformats[] = moscomprofilerHTML::makeOption('m-d-y','mm-dd-yy');
  1701. $dateformats[] = moscomprofilerHTML::makeOption('m-d-Y','mm-dd-yyyy');
  1702. $dateformats[] = moscomprofilerHTML::makeOption('Y.m.d','yyyy.mm.dd');
  1703. $dateformats[] = moscomprofilerHTML::makeOption('d.m.y','dd.mm.yy');
  1704. $dateformats[] = moscomprofilerHTML::makeOption('y.m.d','yy.mm.dd');
  1705. $dateformats[] = moscomprofilerHTML::makeOption('d.m.Y','dd.mm.yyyy');
  1706. $dateformats[] = moscomprofilerHTML::makeOption('m.d.y','mm.dd.yy');
  1707. $dateformats[] = moscomprofilerHTML::makeOption('m.d.Y','mm.dd.yyyy');
  1708. $calendartypes = array();
  1709. $calendartypes[] = moscomprofilerHTML::makeOption('2', _UE_CALENDAR_TYPE_DROPDOWN_POPUP );
  1710. $calendartypes[] = moscomprofilerHTML::makeOption('1', _UE_CALENDAR_TYPE_POPUP );
  1711. $nameformats = array();
  1712. $nameformats[] = moscomprofilerHTML::makeOption('1', _UE_REG_NAMEFORMAT_NAME_ONLY );
  1713. $nameformats[] = moscomprofilerHTML::makeOption('2', _UE_REG_NAMEFORMAT_NAME_USERNAME );
  1714. $nameformats[] = moscomprofilerHTML::makeOption('3', _UE_REG_NAMEFORMAT_USERNAME_ONLY );
  1715. $nameformats[] = moscomprofilerHTML::makeOption('4', _UE_REG_NAMEFORMAT_USERNAME_NAME );
  1716. $imgToolBox  = new imgToolBox();
  1717. $imgToolBox->_IM_path = $ueConfig['im_path'];
  1718. $imgToolBox->_NETPBM_path = $ueConfig['netpbm_path'];
  1719. $imageLibs = $imgToolBox->getImageLibs();
  1720. $conversiontype = array();
  1721. if(array_key_exists('imagemagick',$imageLibs)|| ($ueConfig['conversiontype']=='1')) $conversiontype[] = moscomprofilerHTML::makeOption('1','ImageMagick');
  1722. if(array_key_exists('netpbm',$imageLibs)  || ($ueConfig['conversiontype']=='2')) $conversiontype[] = moscomprofilerHTML::makeOption('2','NetPBM');
  1723. if(array_key_exists('gd1',$imageLibs['gd'])  || ($ueConfig['conversiontype']=='3')) $conversiontype[] = moscomprofilerHTML::makeOption('3','GD1 library');
  1724. if(array_key_exists('gd2',$imageLibs['gd'])  || ($ueConfig['conversiontype']=='4')) $conversiontype[] = moscomprofilerHTML::makeOption('4','GD2 library');
  1725. $namestyles = array();
  1726. $namestyles[] = moscomprofilerHTML::makeOption('1', _UE_REG_NAMEFORMAT_SINGLE_FIELD );
  1727. $namestyles[] = moscomprofilerHTML::makeOption('2', _UE_REG_NAMEFORMAT_TWO_FIELDS );
  1728. $namestyles[] = moscomprofilerHTML::makeOption('3', _UE_REG_NAMEFORMAT_THREE_FIELDS );
  1729. $emailhandling = array();
  1730. $emailhandling[] = moscomprofilerHTML::makeOption('1', _UE_REG_EMAILDISPLAY_EMAIL_ONLY );
  1731. $emailhandling[] = moscomprofilerHTML::makeOption('2', _UE_REG_EMAILDISPLAY_EMAIL_W_MAILTO );
  1732. $emailhandling[] = moscomprofilerHTML::makeOption('3', _UE_REG_EMAILDISPLAY_EMAIL_W_FORM );
  1733. $emailhandling[] = moscomprofilerHTML::makeOption('4', _UE_REG_EMAILDISPLAY_EMAIL_NO );
  1734. $emailreplyto = array();
  1735. $emailreplyto[] = moscomprofilerHTML::makeOption('1',_UE_A_FROM_USER );
  1736. $emailreplyto[] = moscomprofilerHTML::makeOption('2',_UE_A_FROM_ADMIN );
  1737. $email_checker = array();
  1738. $email_checker[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  1739. $email_checker[] = moscomprofilerHTML::makeOption( '1', _UE_REG_EMAILCHECKER_VALID_EMAIL_ONLY );
  1740. $email_checker[] = moscomprofilerHTML::makeOption( '2', _UE_REG_EMAILCHECKER_NOT_REGISTERED_AND_VALID_EMAIL );
  1741. $connectionDisplay = array();
  1742. $connectionDisplay[] = moscomprofilerHTML::makeOption( '0', _UE_PUBLIC );