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

网络

开发平台:

Unix_Linux

  1. $connectionDisplay[] = moscomprofilerHTML::makeOption( '1', _UE_PRIVATE );
  2. $noVersionCheck = array();
  3. $noVersionCheck[] = moscomprofilerHTML::makeOption( '0', _UE_AUTOMATIC );
  4. $noVersionCheck[] = moscomprofilerHTML::makeOption( '1', _UE_MANUAL );
  5. $userprofileEdits = array();
  6. $userprofileEdits[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  7. $userprofileEdits[] = moscomprofilerHTML::makeOption( '1', _UE_MODERATORS_AND_ABOVE );
  8. $userprofileEdits[] = moscomprofilerHTML::makeOption( '24', _UE_ADMINS_AND_SUPERADMINS_ONLY );
  9. $userprofileEdits[] = moscomprofilerHTML::makeOption( '25', _UE_SUPERADMINS_ONLY );
  10. $reg_show_icons_explain = array();
  11. $reg_show_icons_explain[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  12. $reg_show_icons_explain[] = moscomprofilerHTML::makeOption( '1', _UE_TOP );
  13. $reg_show_icons_explain[] = moscomprofilerHTML::makeOption( '2', _UE_BOTTOM );
  14. $reg_show_icons_explain[] = moscomprofilerHTML::makeOption( '3', _UE_TOP_AND_BOTTOM );
  15. $icons_display = array();
  16. $icons_display[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  17. $icons_display[] = moscomprofilerHTML::makeOption( '1', _UE_REQUIRED_ONLY );
  18. $icons_display[] = moscomprofilerHTML::makeOption( '2', _UE_PROFILE_ONLY );
  19. $icons_display[] = moscomprofilerHTML::makeOption( '3', _UE_REQUIRED_AND_PROFILE_ONLY );
  20. $icons_display[] = moscomprofilerHTML::makeOption( '4', _UE_INFO_ONLY );
  21. $icons_display[] = moscomprofilerHTML::makeOption( '5', _UE_REQUIRED_AND_INFO_ONLY );
  22. $icons_display[] = moscomprofilerHTML::makeOption( '6', _UE_PROFILE_AND_INFO_ONLY );
  23. $icons_display[] = moscomprofilerHTML::makeOption( '7', _UE_REQUIRED_PROFILE_AND_INFO );
  24. // NEXT 9 LINES: CB 1.2 RC 2 + CB 1.2 specific : remove after !
  25. if ( ! defined( '_UE_USERNAME_OR_EMAIL' ) ) {
  26. DEFINE('_UE_USERNAME_OR_EMAIL','Username or email');
  27. }
  28. if ( ! defined( '_UE_LOGIN_TYPE' ) ) {
  29. DEFINE('_UE_LOGIN_TYPE','Login field type');
  30. }
  31. if ( ! defined( '_UE_LOGIN_TYPE_DESC' ) ) {
  32. DEFINE('_UE_LOGIN_TYPE_DESC','Login can be by username + password, username or email + password, or email + password. The CB login module also adapts accordingly.');
  33. }
  34. $login_type = array();
  35. $login_type[] = moscomprofilerHTML::makeOption( '0', _UE_USERNAME );
  36. $login_type[] = moscomprofilerHTML::makeOption( '1', _UE_USERNAME_OR_EMAIL );
  37. $login_type[] = moscomprofilerHTML::makeOption( '2', _UE_EMAIL );
  38. // ensure user can't add group higher than themselves
  39. if ( checkJversion() <= 0 ) {
  40. $my_groups  = $_CB_framework->acl->get_object_groups( 'users', $_CB_framework->myId(), 'ARO' );
  41. } else {
  42. $aro_id = $_CB_framework->acl->get_object_id( 'users', $_CB_framework->myId(), 'ARO' );
  43. $my_groups  = $_CB_framework->acl->get_object_groups( $aro_id, 'ARO' );
  44. }
  45. //print_r($my_groups);
  46. if (is_array( $my_groups ) && count( $my_groups ) > 0) {
  47. $ex_groups = $_CB_framework->acl->get_group_children( $my_groups[0], 'ARO', 'RECURSE' );
  48. } else {
  49. $ex_groups = array();
  50. }
  51. //print_r($ex_groups);
  52. $gtree = $_CB_framework->acl->get_group_children_tree( null, 'USERS', false );
  53. // remove users 'above' me
  54. $i = 0;
  55. if (is_array($ex_groups)) {
  56. while ($i < count( $gtree )) {
  57. if (in_array( $gtree[$i]->value, $ex_groups )) {
  58. array_splice( $gtree, $i, 1 );
  59. } else {
  60. $i++;
  61. }
  62. }
  63. }
  64. $gtree2=array();
  65.         $gtree2[] = moscomprofilerHTML::makeOption( -2 , '- ' ._UE_GROUPS_EVERYBODY . ' -' ); // '- Everybody -'
  66.         $gtree2[] = moscomprofilerHTML::makeOption( -1, '- ' . _UE_GROUPS_ALL_REG_USERS . ' -' ); // '- All Registered Users -'
  67. $gtree2 = array_merge( $gtree2, $_CB_framework->acl->get_group_children_tree( null, 'USERS', false ));
  68.     $lists['imageApproverGid'] = moscomprofilerHTML::selectList( $gtree, 'cfg_imageApproverGid', 'size="4"', 'value', 'text', $ueConfig['imageApproverGid'], 2 );
  69. $lists['allow_profileviewbyGID']=moscomprofilerHTML::selectList( $gtree2, 'cfg_allow_profileviewbyGID', 'size="4"', 'value', 'text', $ueConfig['allow_profileviewbyGID'], 2 );
  70. //$lists['allow_listviewbyGID']=moscomprofilerHTML::selectList( $gtree2, 'cfg_allow_listviewbyGID', 'size="4"', 'value', 'text', $ueConfig['allow_listviewbyGID'], 2 );
  71.    // registered users only
  72.    $tempdir = array();
  73. $_CB_database->setQuery("SELECT `name`,`folder` FROM `#__comprofiler_plugin` WHERE `type`='templates' AND `published`=1 ORDER BY ordering");
  74. //echo $_CB_database->getQuery();
  75. $templates = $_CB_database->loadObjectList();
  76. foreach ( $templates AS $template ) {
  77. $tempdir[] = moscomprofilerHTML::makeOption( $template->folder , $template->name );
  78. }
  79. /*
  80. require($_CB_framework->getCfg('absolute_path').'/components/com_comprofiler/plugin/user/plug_yancintegration/yanc.php');
  81. $getNewslettersTab= new getNewslettersTab();
  82. $newslettersList = $getNewslettersTab->getNewslettersList();
  83. $newslettersRegList = array();
  84. if ($newslettersList !== false) {
  85. foreach ($newslettersList AS $nl) {
  86. $newslettersRegList[] = moscomprofilerHTML::makeOption( $nl->id, $nl->list_name);
  87. }
  88. }
  89. */
  90. $cbFielfs = & new cbFields();
  91. $badHtmlFilter = & $cbFielfs->getInputFilter( array (), array (), 1, 1 );
  92. $lists['_filteredbydefault'] = implode( ' ', $badHtmlFilter->tagBlacklist );
  93. if ( ! isset( $ueConfig['html_filter_allowed_tags'] ) ) {
  94. $ueConfig['html_filter_allowed_tags'] = '';
  95. }
  96. $lists['allow_email_display'] = moscomprofilerHTML::selectList( $emailhandling, 'cfg_allow_email_display', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allow_email_display'], 2 );
  97. $lists['allow_email_replyto'] = moscomprofilerHTML::selectList( $emailreplyto, 'cfg_allow_email_replyto', 'class="inputbox" size="1"', 'value', 'text', (isset($ueConfig['allow_email_replyto']) ? $ueConfig['allow_email_replyto'] : '1'), 2 );
  98. $lists['name_format'] = moscomprofilerHTML::selectList($nameformats, 'cfg_name_format','class="inputbox" size="1"', 'value', 'text', $ueConfig['name_format'], 2 );
  99. $lists['name_style'] = moscomprofilerHTML::selectList($namestyles, 'cfg_name_style','class="inputbox" size="1"', 'value', 'text', $ueConfig['name_style'], 2 );
  100. $lists['date_format'] = moscomprofilerHTML::selectList($dateformats, 'cfg_date_format','class="inputbox" size="1"', 'value', 'text', $ueConfig['date_format'], 2 );
  101. $lists['calendar_type'] = moscomprofilerHTML::selectList($calendartypes, 'cfg_calendar_type','class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['calendar_type'] ) ? $ueConfig['calendar_type'] : '2' ), 2 );
  102. $lists['usernameedit'] = moscomprofilerHTML::selectList( $yesno, 'cfg_usernameedit', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['usernameedit'], 2 );
  103. $lists['allow_profilelink'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allow_profilelink', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allow_profilelink'], 2 );
  104. $lists['allow_email'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allow_email', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allow_email'], 2 );
  105. $lists['allow_onlinestatus'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allow_onlinestatus', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allow_onlinestatus'], 2 );
  106. $lists['allow_website'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allow_website', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allow_website'], 2 );
  107. $lists['icons_display'] = moscomprofilerHTML::selectList( $icons_display, 'cfg_icons_display', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['icons_display'] ) ? $ueConfig['icons_display'] : '7' ), 2 );
  108. $lists['login_type'] = moscomprofilerHTML::selectList( $login_type, 'cfg_login_type', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['login_type'] ) ? $ueConfig['login_type'] : '0' ), 2 );
  109. $lists['reg_enable_toc'] = moscomprofilerHTML::selectList( $yesno, 'cfg_reg_enable_toc', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['reg_enable_toc'], 2 );
  110. $lists['admin_allowcbregistration'] = moscomprofilerHTML::selectList( $admin_allowcbregistration, 'cfg_reg_admin_allowcbregistration', 'class="inputbox" size="1"', 'value', 'text', (isset($ueConfig['reg_admin_allowcbregistration']) ? $ueConfig['reg_admin_allowcbregistration'] : '0' ), 2 );
  111. $lists['emailpass'] = moscomprofilerHTML::selectList( $yesno, 'cfg_emailpass', 'class="inputbox" size="1"', 'value', 'text', (isset($ueConfig['emailpass']) ? $ueConfig['emailpass'] : '0' ), 2 );
  112. $lists['admin_approval'] = moscomprofilerHTML::selectList( $yesno, 'cfg_reg_admin_approval', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['reg_admin_approval'], 2 );
  113. $lists['confirmation'] = moscomprofilerHTML::selectList( $yesno, 'cfg_reg_confirmation', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['reg_confirmation'], 2 );
  114. $lists['reg_username_checker'] = moscomprofilerHTML::selectList( $yesno, 'cfg_reg_username_checker', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['reg_username_checker'] ) ? $ueConfig['reg_username_checker'] : '0' ), 2 );
  115. $lists['reg_email_checker'] = moscomprofilerHTML::selectList( $email_checker, 'cfg_reg_email_checker', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['reg_email_checker'] ) ? $ueConfig['reg_email_checker'] : '0' ), 2 );
  116. $lists['reg_show_login_on_page'] = moscomprofilerHTML::selectList( $yesno, 'cfg_reg_show_login_on_page', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['reg_show_login_on_page'] ) ? $ueConfig['reg_show_login_on_page'] : '0' ), 2 );
  117. $lists['reg_show_icons_explain'] = moscomprofilerHTML::selectList( $reg_show_icons_explain, 'cfg_reg_show_icons_explain', 'class="inputbox" size="1"', 'value', 'text', ( isset( $ueConfig['reg_show_icons_explain'] ) ? $ueConfig['reg_show_icons_explain'] : '3' ), 2 );
  118. $lists['allowAvatar'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowAvatar', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowAvatar'], 2 );
  119. $lists['allowAvatarUpload'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowAvatarUpload', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowAvatarUpload'], 2 );
  120. $lists['avatarResizeAlways'] = moscomprofilerHTML::selectList( $yesno, 'cfg_avatarResizeAlways', 'class="inputbox" size="1"', 'value', 'text', isset( $ueConfig['avatarResizeAlways'] ) ? $ueConfig['avatarResizeAlways'] : '1', 2 );
  121. $lists['allowAvatarGallery'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowAvatarGallery', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowAvatarGallery'], 2 );
  122. $lists['avatarUploadApproval'] = moscomprofilerHTML::selectList( $yesno, 'cfg_avatarUploadApproval', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['avatarUploadApproval'], 2 );
  123. $lists['allowUserReports'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowUserReports', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowUserReports'], 2 );
  124. $lists['allowModeratorsUserEdit'] = moscomprofilerHTML::selectList( $userprofileEdits, 'cfg_allowModeratorsUserEdit', 'class="inputbox" size="1"', 'value', 'text', isset($ueConfig['allowModeratorsUserEdit']) ? $ueConfig['allowModeratorsUserEdit'] : '0', 2 );
  125. $lists['allowUserBanning'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowUserBanning', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowUserBanning'], 2 );
  126. $lists['adminrequiredfields'] = moscomprofilerHTML::selectList( $yesno, 'cfg_adminrequiredfields', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['adminrequiredfields'], 2 );
  127. $lists['moderatorEmail'] = moscomprofilerHTML::selectList( $yesno, 'cfg_moderatorEmail', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['moderatorEmail'], 2 );
  128. $lists['allowModUserApproval'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowModUserApproval', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowModUserApproval'], 2 );
  129. $lists['templatedir'] = moscomprofilerHTML::selectList( $tempdir, 'cfg_templatedir', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['templatedir'], 2 );
  130. $lists['showEmptyTabs'] = moscomprofilerHTML::selectList( $yesno, 'cfg_showEmptyTabs', 'class="inputbox" size="1"', 'value', 'text', isset( $ueConfig['showEmptyTabs'] ) ? $ueConfig['showEmptyTabs'] : 0, 2 );
  131. $lists['showEmptyFields'] = moscomprofilerHTML::selectList( $yesno, 'cfg_showEmptyFields', 'class="inputbox" size="1"', 'value', 'text', isset( $ueConfig['showEmptyFields'] ) ? $ueConfig['showEmptyFields'] : 0, 2 );
  132. $lists['nesttabs'] = moscomprofilerHTML::selectList( $yesno, 'cfg_nesttabs', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['nesttabs'], 2 );
  133. $lists['xhtmlComply'] = moscomprofilerHTML::selectList( $yesno, 'cfg_xhtmlComply', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['xhtmlComply'], 2 );
  134. $lists['frontend_userparams'] = moscomprofilerHTML::selectList( $yesno, 'cfg_frontend_userparams', 'class="inputbox" size="1"', 'value', 'text', isset( $ueConfig['frontend_userparams'] ) ? $ueConfig['frontend_userparams'] : ( in_array( $_CB_framework->getCfg( "frontend_userparams" ), array( '1', null) ) ? '1' : '0' ), 2 );
  135. $lists['conversiontype'] = moscomprofilerHTML::selectList( $conversiontype, 'cfg_conversiontype', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['conversiontype'], 2 );
  136. $lists['allowConnections'] = moscomprofilerHTML::selectList( $yesno, 'cfg_allowConnections', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['allowConnections'], 2 );
  137. $lists['useMutualConnections'] = moscomprofilerHTML::selectList( $yesno, 'cfg_useMutualConnections', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['useMutualConnections'], 2 );
  138. $lists['autoAddConnections'] = moscomprofilerHTML::selectList( $yesno, 'cfg_autoAddConnections', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['autoAddConnections'], 2 );
  139. $lists['conNotifyTypes'] = moscomprofilerHTML::selectList( $conNotifyTypes, 'cfg_conNotifyType', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['conNotifyType'], 2 );
  140. $lists['connectionDisplay'] = moscomprofilerHTML::selectList( $connectionDisplay, 'cfg_connectionDisplay', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['connectionDisplay'], 2 );
  141. $lists['connectionPath'] = moscomprofilerHTML::selectList( $yesno, 'cfg_connectionPath', 'class="inputbox" size="1"', 'value', 'text', $ueConfig['connectionPath'], 2 );
  142. $lists['noVersionCheck'] = moscomprofilerHTML::selectList( $noVersionCheck, 'cfg_noVersionCheck', 'class="inputbox" size="1"', 'value', 'text', isset($ueConfig['noVersionCheck']) ? $ueConfig['noVersionCheck'] : '0', 2 );
  143. HTML_comprofiler::showConfig( $ueConfig, $lists, $option );
  144. }
  145. function saveConfig ( $option ) {
  146. global $_CB_adminpath, $_POST;
  147. cbimport( 'cb.adminfilesystem' );
  148. $adminFS =& cbAdminFileSystem::getInstance();
  149. $configfile = $_CB_adminpath."/ue_config.php";
  150. //Add code to check if config file is writeable.
  151. if ( $adminFS->isUsingStandardPHP() && ! is_writable($configfile)) {
  152. @chmod ($configfile, 0766);
  153. if (!is_writable($configfile)) {
  154. cbRedirect("index2.php?option=$option", "FATAL ERROR: Config File Not writeable" );
  155. }
  156. }
  157. // safely evaluate post:
  158. $newConfig = array();
  159. foreach ( $_POST as $k => $v ) {
  160. $newVal = cbGetParam( $_POST, $k, '', _CB_ALLOWRAW | _CB_NOTRIM );
  161. //TBD later when moving to DB storage:
  162. // $newVal = stripslashes( $newVal );
  163. // then check for stripslashes all over the place incl. in configuration display and email of welcome messages
  164. if ( is_array( $newVal ) ) {
  165. $newVal = implode( '|*|', $newVal );
  166. }
  167. if ( strpos( $k, 'cfg_' ) === 0 ) {
  168. $newK = addslashes( substr( $k, 4 ) );
  169. $newConfig[$newK] = $newVal;
  170. }
  171. }
  172. // compose PHP ueconfig.php file:
  173. $txt = "<?phpn";
  174. foreach ( $newConfig as $k => $v ) {
  175. $txt .= "$ueConfig['" . $k . "']='$v';n";
  176. }
  177. $txt .= "?>";
  178. // write file:
  179. /*
  180. if (is_callable(array("JFile","write"))) {
  181. $result = JFile::write( $configfile, $txt );
  182. } else {
  183. $result = false;
  184. $fp = fopen( $configfile, "w");
  185. if ( $fp ) {
  186. $result = fwrite($fp, $txt, strlen($txt));
  187. fclose ($fp);
  188. }
  189. }
  190. */
  191. $result = $adminFS->file_put_contents( $configfile, $txt );
  192. if ( $result ) {
  193. if ( _cbAdmin_chmod( $configfile ) ) {
  194. $msg = "Configuration file saved";
  195. } else {
  196. $msg = 'Failed to change the permissions of the config file '.$configfile;
  197. }
  198. } else {
  199. $msg = 'Failed to create and write config file in '.$configfile;
  200. }
  201. if ( $result !== false ) {
  202. // adapt name fields to new name:
  203. _cbAdaptNameFieldsPublished( $newConfig );
  204. cbRedirect( "index2.php?option=$option&task=showconfig", $msg );
  205. } else {
  206. cbRedirect( "index2.php?option=$option", $msg . ': ' . "ERROR: Configuration file administrator/components/com_comprofiler/ue_config.php could not be written by webserver. Please change file permissions in your web-pannel." );
  207. }
  208. }
  209. function _cbAdaptNameFieldsPublished( &$newConfig ) {
  210. global $_CB_database;
  211. switch ( $newConfig['name_style'] ) {
  212. case 2:
  213. $sqlArray = array( 'name' => 0, 'firstname' => 1, 'middlename' => 0, 'lastname' => 1 );
  214. break;
  215. case 3:
  216. $sqlArray = array( 'name' => 0, 'firstname' => 1, 'middlename' => 1, 'lastname' => 1 );
  217. break;
  218. case 1:
  219. default:
  220. $sqlArray = array( 'name' => 1, 'firstname' => 0, 'middlename' => 0, 'lastname' => 0 );
  221. break;
  222. }
  223. foreach ( $sqlArray as $name => $published ) {
  224. $sql = 'UPDATE #__comprofiler_fields SET '
  225. . $_CB_database->NameQuote( 'published' )
  226. . ' = '
  227. . (int) $published
  228. . ' WHERE '
  229. . $_CB_database->NameQuote( 'name' )
  230. . ' = '
  231. . $_CB_database->Quote( $name )
  232. ;
  233. $_CB_database->setQuery( $sql );
  234. if ( ! $_CB_database->query() ) {
  235.     echo "<script type="text/javascript"> alert('_cbAdaptNameFieldsPublished: db error: " . addslashes( $_CB_database->getErrorMsg() ) . "'); window.history.go(-1);</script>n";
  236.     exit;
  237. }
  238. }
  239. }
  240. function requiredField( $cid=null, $flag=1, $option ) {
  241.     global $_CB_database;
  242.     
  243. if (count( $cid ) < 1) {
  244.         $action = $flag ? 'Make Required' : 'Make Non-required';
  245.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  246.     exit;
  247. }
  248. foreach ($cid AS $cids) {
  249. $_CB_database->setQuery( "UPDATE #__comprofiler_fields SET required = " . (int) $flag . " WHERE fieldid = " . (int) $cids);
  250.      $_CB_database->query();
  251. //print $_CB_database->getquery();
  252. }
  253.     cbRedirect( "index2.php?option=$option&task=showField" );
  254. }
  255. function publishField( $cid=null, $flag=1, $option ) {
  256.     global $_CB_database;
  257.     
  258. if (count( $cid ) < 1) {
  259.         $action = $flag ? 'Publish' : 'UnPublish';
  260.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  261.     exit;
  262. }
  263. foreach ($cid AS $cids) {
  264. $_CB_database->setQuery( "UPDATE #__comprofiler_fields SET published = " . (int) $flag . " WHERE fieldid = " . (int) $cids) . " AND sys = 0";
  265.      $_CB_database->query();
  266. //print $_CB_database->getquery();
  267. }
  268.     cbRedirect( "index2.php?option=$option&task=showField" );
  269. }
  270. function registrationField( $cid=null, $flag=1, $option ) {
  271.     global $_CB_database;
  272.     
  273. if (count( $cid ) < 1) {
  274.         $action = $flag ? 'Add to Registration' : 'Remove from Registration';
  275.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  276.     exit;
  277. }
  278. foreach ($cid AS $cids) {
  279. $_CB_database->setQuery( "UPDATE #__comprofiler_fields SET registration = " . (int) $flag . " WHERE fieldid = " . (int) $cids);
  280.      $_CB_database->query();
  281. //print $_CB_database->getquery();
  282. }
  283.     cbRedirect( "index2.php?option=$option&task=showField" );
  284. }
  285. function searchableField( $cid=null, $flag=1, $option ) {
  286.     global $_CB_database;
  287.     $flag = $flag ? 1 : 0;
  288. $action = $flag ? 'field searchable in users-lists' : 'field not searchable in users-lists';
  289. if (count( $cid ) < 1) {
  290.     echo "<script type="text/javascript"> alert('Select an item to make $action'); window.history.go(-1);</script>n";
  291.     exit;
  292. }
  293. foreach ($cid AS $cids) {
  294. $_CB_database->setQuery( "UPDATE #__comprofiler_fields SET searchable = " . (int) $flag . " WHERE fieldid = " . (int) $cids);
  295.      $_CB_database->query();
  296. //print $_CB_database->getquery();
  297. }
  298.     cbRedirect( "index2.php?option=$option&task=showField", "Made " . $action );
  299. }
  300. function listPublishedField( $cid=null, $flag=1, $option ) {
  301.     global $_CB_database;
  302.     
  303. if (count( $cid ) < 1) {
  304.         $action = $flag ? 'Publish' : 'UnPublish';
  305.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  306.     exit;
  307. }
  308. foreach ($cid AS $cids) {
  309. $_CB_database->setQuery( "UPDATE #__comprofiler_lists SET published = " . (int) $flag . " WHERE listid = " . (int) $cids);
  310.      $_CB_database->query();
  311. //print $_CB_database->getquery();
  312. }
  313.     cbRedirect( "index2.php?option=$option&task=showLists" );
  314. }
  315. function tabPublishedField( $cid=null, $flag=1, $option ) {
  316.     global $_CB_database;
  317.     
  318. if (count( $cid ) < 1) {
  319.         $action = $flag ? 'Publish' : 'UnPublish';
  320.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  321.     exit;
  322. }
  323. foreach ($cid AS $cids) {
  324. $_CB_database->setQuery( "UPDATE #__comprofiler_tabs SET enabled = " . (int) $flag . " WHERE tabid = " . (int) $cids);
  325.      $_CB_database->query();
  326. //print $_CB_database->getquery();
  327. }
  328.     cbRedirect( "index2.php?option=$option&task=showTab" );
  329. }
  330. function listDefaultField( $cid=null, $flag=1, $option ) {
  331.     global $_CB_database;
  332.     
  333. if (count( $cid ) < 1) {
  334.         $action = $flag ? 'Make Default' : 'Reset Default';
  335.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  336.     exit;
  337. }
  338.     $published = "";
  339. if($flag==1) {
  340. $published = ", published = 1";
  341. }
  342. foreach ($cid AS $cids) {
  343. $_CB_database->setQuery( "UPDATE #__comprofiler_lists SET `default` = 0");
  344.      $_CB_database->query();
  345. $_CB_database->setQuery( "UPDATE #__comprofiler_lists SET `default` = " . (int) $flag . " $published WHERE listid = " . (int) $cids);
  346.      $_CB_database->query();
  347. //print $_CB_database->getquery();
  348. }
  349.     cbRedirect( "index2.php?option=$option&task=showLists" );
  350. }
  351. function profileField( $cid=null, $flag=1, $option ) {
  352.     global $_CB_database;
  353.     
  354. if (count( $cid ) < 1) {
  355.         $action = $flag ? 'Add to Profile' : 'Remove from Profile';
  356.     echo "<script type="text/javascript"> alert('Select an item to $action'); window.history.go(-1);</script>n";
  357.     exit;
  358. }
  359. foreach ($cid AS $cids) {
  360. $_CB_database->setQuery( "UPDATE #__comprofiler_fields SET profile = " . (int) $flag . " WHERE fieldid = " . (int) $cids);
  361.      $_CB_database->query();
  362. //print $_CB_database->getquery();
  363. }
  364.     cbRedirect( "index2.php?option=$option&task=showField" );
  365. }
  366. function loadSampleData() {
  367.     global $_CB_database;
  368. $sql = "SELECT COUNT(*) FROM #__comprofiler_fields"
  369. . "n WHERE name IN ('website','location','occupation','interests','company','address','city','state','zipcode','country','phone','fax')";
  370. $_CB_database->setQuery($sql);
  371.      $fieldCount = $_CB_database->loadresult();
  372. IF($fieldCount < 1) {
  373. $sqlStatements = array();
  374. $sqlStatements[0]['query'] = "INSERT IGNORE INTO `#__comprofiler_tabs` (`tabid`, `title`, `position`, `ordering`, `sys`, `displaytype`) "
  375. ."n VALUES (2, '_UE_ADDITIONAL_INFO_HEADER', 'cb_tabmain', 1, 0, 'tab')";
  376. $sqlStatements[0]['message'] = '<font color="green">Tab Added Successfully!</font><br />';
  377. $sqlStatements[1]['query'] = "ALTER TABLE `#__comprofiler` ADD `website` varchar(255) default NULL,"
  378.   ."n ADD `location` varchar(255) default NULL,"
  379.   ."n ADD `occupation` varchar(255) default NULL,"
  380.   ."n ADD `interests` varchar(255) default NULL,"
  381.   ."n ADD `company` varchar(255) default NULL,"
  382.   ."n ADD `address` varchar(255) default NULL,"
  383.   ."n ADD `city` varchar(255) default NULL,"
  384.   ."n ADD `state` varchar(255) default NULL,"
  385.   ."n ADD `zipcode` varchar(255) default NULL,"
  386.   ."n ADD `country` varchar(255) default NULL,"
  387.   ."n ADD `phone` varchar(255) default NULL,"
  388.   ."n ADD `fax` varchar(255) default NULL";
  389. $sqlStatements[1]['message'] = '<font color="green">Schema Changes Added Successfully!</font><br />';
  390. $sqlStatements[2]['query'] = "INSERT IGNORE INTO `#__comprofiler_fields`  (`fieldid`, `name`, `tablecolumns`, `table`, `title`, `type`, `maxlength`, `size`, `required`, `tabid`, `ordering`, `cols`, `rows`, `value`, `default`, `published`, `registration`, `profile`, `calculated`, `sys`, `pluginid`) "
  391. ."n VALUES (30, 'website', 'website', '#__comprofiler', '_UE_Website', 'webaddress', 0, 0, 0, 2, 1, 0, 0, NULL, NULL, 1, 0, 1, 0, 0, 1),"
  392. ."n (31, 'location', 'location', '#__comprofiler', '_UE_Location', 'text', 50, 25, 0, 2, 2, 0, 0, NULL, NULL, 1, 0, 1, 0, 0, 1),"
  393. ."n (32, 'occupation', 'occupation', '#__comprofiler', '_UE_Occupation', 'text', 0, 0, 0, 2, 3, 0, 0, NULL, NULL, 1, 0, 1, 0, 0, 1),"
  394. ."n (33, 'interests', 'interests', '#__comprofiler', '_UE_Interests', 'text', 0, 0, 0, 2, 4, 0, 0, NULL, NULL, 1, 0, 1, 0, 0, 1),"
  395. ."n (34, 'company', 'company', '#__comprofiler', '_UE_Company', 'text', 0, 0, 0, 2, 5, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  396. ."n (35, 'city', 'city', '#__comprofiler', '_UE_City', 'text', 0, 0, 0, 2, 6, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  397. ."n (36, 'state', 'state', '#__comprofiler', '_UE_State', 'text', 10, 4, 0, 2, 7, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  398. ."n (37, 'zipcode', 'zipcode', '#__comprofiler', '_UE_ZipCode', 'text', 0, 0, 0, 2, 8, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  399. ."n (38, 'country', 'country', '#__comprofiler', '_UE_Country', 'text', 0, 0, 0, 2, 9, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  400. ."n (40, 'address', 'address', '#__comprofiler', '_UE_Address', 'text', 0, 0, 0, 2, 10, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  401. ."n (43, 'phone', 'phone', '#__comprofiler', '_UE_PHONE', 'text', 0, 0, 0, 2, 11, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1),"
  402. ."n (44, 'fax', 'fax', '#__comprofiler', '_UE_FAX', 'text', 0, 0, 0, 2, 12, 0, 0, NULL, NULL, 1, 1, 1, 0, 0, 1)";
  403. $sqlStatements[2]['message'] = '<font color="green">Fields Added Successfully!</font><br />';
  404. $sqlStatements[3]['query'] = "INSERT INTO `#__comprofiler_lists` (`listid`, `title`, `description`, `published`, `default`, `usergroupids`, `sortfields`, `col1title`, `col1enabled`, `col1fields`, `col2title`, `col2enabled`, `col1captions`, `col2fields`, `col2captions`, `col3title`, `col3enabled`, `col3fields`, `col3captions`, `col4title`, `col4enabled`, `col4fields`, `col4captions`) "
  405. ."n VALUES (2, 'Members List', 'my Description', 1, 1, '29, 18, 19, 20, 21, 30, 23, 24, 25', '`username` ASC', 'Image', 1, '29', 'Username', 1, 0, '42', 0, 'Other', 1, '26|*|28|*|27', 1, '', 0, '', 0)";
  406. $sqlStatements[3]['message'] = '<font color="green">List Added Successfully!</font><br />'; 
  407. foreach ($sqlStatements AS $sql) {
  408. $_CB_database->setQuery($sql['query']);
  409. if (!$_CB_database->query()) {
  410. print("<font color=red>SQL error" . $_CB_database->stderr(true)."</font><br />");
  411. return;
  412. } else {
  413. print $sql['message'];
  414. }
  415. //print $_CB_database->getquery();
  416. }
  417. } else {
  418. print "Sample Data is already loaded!";
  419. }
  420. }
  421. function syncUsers() {
  422.     global $_CB_database, $ueConfig, $_PLUGINS;
  423. // Try extending time, as unziping/ftping took already quite some... :
  424. @set_time_limit( 240 );
  425.     $_PLUGINS->loadPluginGroup('user');
  426. $messages = $_PLUGINS->trigger( 'onBeforeSyncUser', true );
  427. foreach ( $messages as $msg ) {
  428. if ( $msg ) {
  429. echo "<p>" . $msg . "</p>";
  430. }
  431. }
  432.     // 1. add missing comprofiler entries, guessing naming depending on CB's name style:
  433. switch ( $ueConfig['name_style'] ) {
  434. case 2:
  435. // firstname + lastname:
  436.   $sql = "INSERT IGNORE INTO #__comprofiler(id,user_id,lastname,firstname) "
  437.     ." SELECT id,id, SUBSTRING_INDEX(name,' ',-1), "
  438.    ."SUBSTRING( name, 1, length( name ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ) "
  439.     ." FROM #__users";    
  440. break;
  441. case 3:
  442. // firstname + middlename + lastname:
  443. $sql = "INSERT IGNORE INTO #__comprofiler(id,user_id,middlename,lastname,firstname) "
  444.  . " SELECT id,id,SUBSTRING( name, INSTR( name, ' ' ) +1,"
  445.     ." length( name ) - INSTR( name, ' ' ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ),"
  446.    ." SUBSTRING_INDEX(name,' ',-1),"
  447.    ." IF(INSTR(name,' '),SUBSTRING_INDEX( name, ' ', 1 ),'') "
  448.  . " FROM #__users";
  449.      break;
  450.      default:
  451.   // name only:
  452. $sql = "INSERT IGNORE INTO #__comprofiler(id,user_id) SELECT id,id FROM #__users";
  453.     break;
  454.     }
  455. $_CB_database->setQuery($sql);
  456. if (!$_CB_database->query()) {
  457. print("<font color=red>SQL error" . $_CB_database->stderr(true)."</font><br />");
  458. return;
  459. }
  460. $affected = $_CB_database->getAffectedRows();
  461. if ($affected) {
  462. print "<p><font color='orange'>Added ".$affected." new entries to Community Builder from users Table.</font></p>";
  463. }
  464. $sql = "UPDATE #__comprofiler SET `user_id`=`id`";
  465. $_CB_database->setQuery($sql);
  466. if (!$_CB_database->query()) {
  467. print("<font color=red>SQL error" . $_CB_database->stderr(true)."</font><br />");
  468. return;
  469. }
  470. $affected = $_CB_database->getAffectedRows();
  471. if ($affected) {
  472. print "<p><font color='orange'>Fixed ".$affected." existing entries in Community Builder: fixed wrong user_id.</font></p>";
  473. }
  474. // 2. remove excessive comprofiler entries (e.g. if admin used mambo/joomla delete user function:
  475. $sql = "SELECT c.id FROM #__comprofiler c LEFT JOIN #__users u ON u.id = c.id WHERE u.id IS NULL";
  476. $_CB_database->setQuery($sql);
  477. $users = $_CB_database->loadResultArray();
  478. if ($_CB_database->getErrorNum()) {
  479. print("<font color=red>SQL error" . $_CB_database->stderr(true)."</font><br />");
  480. return;
  481. }
  482. if (count($users)) {
  483. print "<p><font color='orange'>Removing ".count($users)." entries from Community Builder missing in users Table.</font></p>";
  484. $msg = deleteUsers($users, true);
  485. print "<p>".$msg."</p>";
  486. }
  487. print "<font color=green>Joomla/Mambo User Table and Joomla/Mambo Community Builder User Table now in sync!</font>";
  488. $messages = $_PLUGINS->trigger( 'onAfterSyncUser', true );
  489. foreach ( $messages as $msg ) {
  490. if ( $msg ) {
  491. echo "<p>" . $msg . "</p>";
  492. }
  493. }
  494. }
  495. function checkcbdb( $dbId = 0 ) {
  496. global $_CB_database, $_CB_framework, $ueConfig, $_PLUGINS;
  497. // Try extending time, as unziping/ftping took already quite some... :
  498. @set_time_limit( 240 );
  499. HTML_comprofiler::secureAboveForm('checkcbdb');
  500. outputCbTemplate( 2 );
  501. outputCbJs( 2 );
  502. global $_CB_Backend_Title;
  503. $_CB_Backend_Title = array( 0 => array( 'cbicon-48-tools', "CB Tools: Check database: Results" ) );
  504. $cbSpoofField = cbSpoofField();
  505. $cbSpoofString = cbSpoofString( null, 'cbtools' );
  506. if ( $dbId == 0 ) {
  507. echo "<div style='text-align:left;'><p>Checking Community Builder Datbase:</p>";
  508. // 1. check comprofiler_field_values table for bad rows
  509. $sql = "SELECT fieldvalueid,fieldid FROM #__comprofiler_field_values WHERE fieldid=0";
  510. $_CB_database->setQuery($sql);
  511. $bad_rows = $_CB_database->loadObjectList();
  512. if ( $bad_rows === null ) {
  513. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  514. } elseif (count($bad_rows)!=0) {
  515. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in Community Builder comprofiler_field_values have bad fieldid values.</font></p>";
  516.     foreach ($bad_rows as $bad_row) {
  517. if ( $bad_row->fieldvalueid == 0 ) {
  518. echo "<p><font color=red>ZERO fieldvalueid illegal: fieldvalueid=" . $bad_row->fieldvalueid . " fieldid=0</font></p>";
  519. } else {
  520. echo "<p><font color=red>fieldvalueid=" . $bad_row->fieldvalueid . " fieldid=0</font></p>";
  521. }
  522. }
  523. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  524. } else {
  525. echo "<p><font color=green>All Community Builder comprofiler_field_values table fieldid rows all match existing fields.</font></p>";
  526. }
  527. // 2. check if comprofiler_field_values table has entries where corresponding fieldtype value in comprofiler_fields table 
  528. // does not allow values
  529. $sql = "SELECT v.fieldvalueid, v.fieldid, f.name, f.type FROM #__comprofiler_field_values as v, #__comprofiler_fields as f WHERE v.fieldid = f.fieldid AND f.type NOT IN ('checkbox','multicheckbox','select','multiselect','radio')";
  530. $_CB_database->setQuery($sql);
  531. $bad_rows = $_CB_database->loadObjectList();
  532. if ( $bad_rows === null ) {
  533. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  534. } elseif (count($bad_rows)!=0) {
  535. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in Community Builder comprofiler_field_values link back to fields of wrong fieldtype.</font></p>";
  536. foreach ($bad_rows as $bad_row) {
  537. echo "<p><font color=red>fieldvalueid=" . $bad_row->fieldvalueid . " fieldtype=" . $bad_row->type ."</font></p>";
  538. }
  539. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  540. } else {
  541. echo "<p><font color=green>All Community Builder comprofiler_field_values table rows link to correct fieldtype fields in comprofiler_field table.</font></p>";
  542. }
  543. // 3. check if comprofiler table is in sync with users table
  544. $sql = "SELECT c.id FROM #__comprofiler c LEFT JOIN #__users u ON u.id = c.id WHERE u.id IS NULL";
  545. $_CB_database->setQuery($sql);
  546. $bad_rows = $_CB_database->loadObjectList();
  547. if ( $bad_rows === null ) {
  548. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  549. } elseif (count($bad_rows)!=0) {
  550. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in Community Builder comprofiler table without corresponding user table rows.</font></p>";
  551. $badids = array();
  552. foreach ($bad_rows as $bad_row) {
  553. $badids[(int) $bad_row->id] = $bad_row->id;
  554. }
  555. echo "<p><font color=red>Following comprofiler id: " . implode( ', ', $badids ) . " are missing in user table" . ( isset( $badids[0] ) ? " This comprofiler entry with id 0 should be removed, as it's not allowed." : "" ) . "</font></p>";
  556. echo "<p><font color=red>This one can be fixed using menu Components-&gt; Community Builder-&gt; tools and then click `Synchronize users`.</font></p>";
  557. } else {
  558. echo "<p><font color=green>All Community Builder comprofiler table rows have links to user table.</font></p>";
  559. }
  560. // 4. check if users table is in sync with comprofiler table
  561. $sql = "SELECT u.id FROM #__users u LEFT JOIN #__comprofiler c ON c.id = u.id WHERE c.id IS NULL";
  562. $_CB_database->setQuery($sql);
  563. $bad_rows = $_CB_database->loadObjectList();
  564. if ( $bad_rows === null ) {
  565. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  566. } elseif (count($bad_rows)!=0) {
  567. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in users table without corresponding comprofiler table rows.</font></p>";
  568. $badids = array();
  569. foreach ($bad_rows as $bad_row) {
  570. $badids[(int) $bad_row->id] = $bad_row->id;
  571. }
  572. echo "<p><font color=red>users id: " . implode( ', ', $badids ) . " are missing in comprofiler table</font></p>";
  573. echo "<p><font color=red>This one can be fixed using menu Components-&gt; Community Builder-&gt; tools and then click `Synchronize users`.</font></p>";
  574. } else {
  575. echo "<p><font color=green>All users table rows have links to comprofiler table.</font></p>";
  576. }
  577. // 5. check if all cb defined fields have corresponding comprofiler columns
  578. $sql = "SELECT * FROM #__comprofiler LIMIT 1";
  579. $_CB_database->setQuery($sql);
  580. $all_comprofiler_fields_and_values = $_CB_database->loadAssoc();
  581. $all_comprofiler_fields = array();
  582. while ( false != ( list( $_cbfield ) = each( $all_comprofiler_fields_and_values ) ) ) {
  583. array_push( $all_comprofiler_fields, $_cbfield );
  584. }
  585.  
  586. $sql = "SELECT * FROM #__comprofiler_fields WHERE `name` != 'NA' AND `table` = '#__comprofiler'";
  587. $_CB_database->setQuery( $sql );
  588. $field_rows = $_CB_database->loadObjectList( null, 'moscomprofilerFields', array( &$_CB_database ) );
  589. if ( $field_rows === null ) {
  590. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  591. } else {
  592. $html_output = array();
  593. $cb11 = true;
  594. foreach ( $field_rows as $field_row ) {
  595. if ( $field_row->tablecolumns !== null ) {
  596. // CB 1.2 way:
  597. if ( $field_row->tablecolumns != '' ) {
  598. $tableColumns = explode( ',', $field_row->tablecolumns );
  599. foreach ( $tableColumns as $col ) {
  600. if ( ! in_array( $col, $all_comprofiler_fields ) ) {
  601. $html_output[] = "<p><font color=red> - Field " . $field_row->name . " - Column " . $col . " is missing from comprofiler table.</font></p>";
  602. }
  603. }
  604. }
  605. $cb11 = false;
  606. } else {
  607. // cb 1.1 way
  608. if ( ! in_array( $field_row->name, $all_comprofiler_fields ) ) {
  609. $html_output[] = "<p><font color=red> - Column " . $field_row->name . " is missing from comprofiler table.</font></p>";
  610. }
  611. }
  612. }
  613. if ( count( $html_output ) > 0 ) {
  614. echo "<p><font color=red>There are " . count( $html_output ) . " column(s) missing in the comprofiler table, which are defined as fields (rows in comprofiler_fields):</font></p>";
  615. echo implode( '', $html_output );
  616. echo "<p><font color=red>This one can be fixed by deleting and recreating the field(s) using components -&gt; Community Builder -&gt; Field Management.<br />"
  617. . "Please additionally make sure that columns in comprofiler table <strong>are not also duplicated in users table</strong>.</font></p>";
  618. } elseif ( $cb11 ) {
  619. echo "<p><font color=red>All Community Builder fields from comprofiler_fields are present as columns in the comprofiler table, but comprofiler_fields table is not yet upgraded to CB 1.2 table structure. You can do this by clicking on the upgrade link below.</font></p>";
  620. } else {
  621. echo "<p><font color=green>All Community Builder fields from comprofiler_fields are present as columns in the comprofiler table.</font></p>";
  622. }
  623. }
  624. // 6. check if users table has id=0 in it
  625. $sql = "SELECT u.id FROM #__users u WHERE u.id = 0";
  626. $_CB_database->setQuery($sql);
  627. $bad_rows = $_CB_database->loadObjectList();
  628. if ( $bad_rows === null ) {
  629. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  630. } elseif (count($bad_rows)!=0) {
  631. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in users table with id=0.</font></p>";
  632. foreach ($bad_rows as $bad_row) {
  633. echo "<p><font color=red>users id=" . $bad_row->id . " is not allowed.</font></p>";
  634. }
  635. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin. <strong><u>You also need to check in SQL if id is autoincremented.<u><strong></font></p>";
  636. } else {
  637. echo "<p><font color=green>users table has no zero id row.</font></p>";
  638. }
  639. // 7. check if comprofiler table has id=0 in it
  640. $sql = "SELECT c.id FROM #__comprofiler c WHERE c.id = 0";
  641. $_CB_database->setQuery($sql);
  642. $bad_rows = $_CB_database->loadObjectList();
  643. if ( $bad_rows === null ) {
  644. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  645. } elseif (count($bad_rows)!=0) {
  646. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in comprofiler table with id=0.</font></p>";
  647. foreach ($bad_rows as $bad_row) {
  648. echo "<p><font color=red>comprofiler id=" . $bad_row->id . " is not allowed.</font></p>";
  649. }
  650. echo "<p><font color=red>This one can be fixed using menu Components-&gt; Community Builder-&gt; tools and then click `Synchronize users` if users table has no such entry with id=0, otherwise in SQL using a tool like phpMyAdmin.</font></p>";
  651. } else {
  652. echo "<p><font color=green>comprofiler table has no zero id row.</font></p>";
  653. }
  654. // 8. check if comprofiler table has user_id != id in it
  655. $sql = "SELECT c.id, c.user_id FROM #__comprofiler c WHERE c.id <> c.user_id";
  656. $_CB_database->setQuery($sql);
  657. $bad_rows = $_CB_database->loadObjectList();
  658. if ( $bad_rows === null ) {
  659. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  660. } elseif (count($bad_rows)!=0) {
  661. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in comprofiler table with user_id <> id.</font></p>";
  662. foreach ($bad_rows as $bad_row) {
  663. echo "<p><font color=red>comprofiler id=" . $bad_row->id . " is different from user_id=" . $bad_row->user_id . ".</font></p>";
  664. }
  665. echo "<p><font color=red>This one can be fixed using menu Components-&gt; Community Builder-&gt; tools and then click `Synchronize users`.</font></p>";
  666. } else {
  667. echo "<p><font color=green>All rows in comprofiler table have user_id columns identical to id columns.</font></p>";
  668. }
  669. // 9. Check if images/comprofiler is writable:
  670. $folder = 'images/comprofiler/';
  671. if ( $ueConfig['allowAvatarUpload'] == 1 ) {
  672. echo "<p>Checking Community Builder folders:</p>";
  673. if ( ! is_writable( $_CB_framework->getCfg('absolute_path'). '/' . $folder ) ) {
  674. echo '<font color="red">Avatars and thumbnails folder: ' . $_CB_framework->getCfg('absolute_path') . '/' . $folder . ' is NOT writeable by the webserver.</font>';
  675. } else {
  676. echo '<font color="green">Avatars and thumbnails folder is Writeable.</font>';
  677. }
  678. }
  679. // 10. check if #__core_acl_aro table is in sync with users table : A: user -> aro
  680. $sql = "SELECT u.id FROM #__users u LEFT JOIN #__core_acl_aro a ON a.section_value = 'users' AND a.value = CAST( u.id AS CHAR ) WHERE a.value IS NULL";
  681. $_CB_database->setQuery($sql);
  682. $bad_rows = $_CB_database->loadObjectList();
  683. if ( $bad_rows === null ) {
  684. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  685. } elseif ( count( $bad_rows ) != 0 ) {
  686. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in the users table without corresponding core_acl_aro table rows.</font></p>";
  687. $badids = array();
  688. foreach ($bad_rows as $bad_row) {
  689. $badids[(int) $bad_row->id] = $bad_row->id;
  690. }
  691. echo "<p><font color=red>user id: " . implode( ', ', $badids ) . " are missing in core_acl_aro table" . ( isset( $badids[0] ) ? " This user entry with id 0 should be removed, as it's not allowed." : "" ) . "</font></p>";
  692. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  693. } else {
  694. echo "<p><font color=green>All users table rows have ACL entries in core_acl_aro table.</font></p>";
  695. }
  696. // 11. check if #__core_acl_aro table is in sync with users table : B: aro -> user
  697. if ( checkJversion() == 1 ) {
  698. $sql = "SELECT a.value AS id, a.id AS aro_id FROM #__core_acl_aro a LEFT JOIN #__users u ON u.id = a.value WHERE a.section_value = 'users' AND u.id IS NULL";
  699. } else {
  700. $sql = "SELECT a.value AS id, a.aro_id FROM #__core_acl_aro a LEFT JOIN #__users u ON u.id = a.value WHERE a.section_value = 'users' AND u.id IS NULL";
  701. }
  702. $_CB_database->setQuery($sql);
  703. $bad_rows = $_CB_database->loadObjectList();
  704. if ( $bad_rows === null ) {
  705. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  706. } elseif (count($bad_rows)!=0) {
  707. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in the core_acl_aro table without corresponding users table rows.</font></p>";
  708. $badids = array();
  709. foreach ($bad_rows as $bad_row) {
  710. $badids[(int) $bad_row->id] = "user id=" . $bad_row->id . " (aro_id=" . $bad_row->aro_id . ")";
  711. }
  712. echo "<p><font color=red>Following entries of core_acl_aro table are missing in users table: " . implode( ', ', $badids ) . '.' . ( isset( $badids[0] ) ? "<br /> This core_acl_aro entry with (user) value 0 should be removed, as it's not allowed." : "" ) . ( ( $bad_row->aro_id == 0 ) ? " This core_acl_aro entry with aro_id 0 should be removed, as it's not allowed." : "" ) . "</font></p>";
  713. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  714. } else {
  715. echo "<p><font color=green>All users table rows have ACL entries in core_acl_aro table.</font></p>";
  716. }
  717. // 12. check if #__core_acl_groups_aro_map table is in sync with #__core_acl_aro table A: aro -> groups
  718. if ( checkJversion() == 1 ) {
  719. $sql = "SELECT a.value AS id, a.id AS aro_id FROM #__core_acl_aro a LEFT JOIN #__core_acl_groups_aro_map g ON g.aro_id = a.id WHERE g.aro_id IS NULL";
  720. } else {
  721. $sql = "SELECT a.value AS id, a.aro_id FROM #__core_acl_aro a LEFT JOIN #__core_acl_groups_aro_map g ON g.aro_id = a.aro_id WHERE g.aro_id IS NULL";
  722. }
  723. $_CB_database->setQuery($sql);
  724. $bad_rows = $_CB_database->loadObjectList();
  725. if ( $bad_rows === null ) {
  726. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  727. } elseif (count($bad_rows)!=0) {
  728. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in the core_acl_aro table without corresponding core_acl_groups_aro_map table rows.</font></p>";
  729. $badids = array();
  730. foreach ($bad_rows as $bad_row) {
  731. $badids[(int) $bad_row->id] = "user id=" . $bad_row->id . " (aro_id=" . $bad_row->aro_id . ")";
  732. }
  733. echo "<p><font color=red>Following entries of core_acl_aro table are missing in core_acl_groups_aro_map table: " . implode( ', ', $badids ) . '.' . ( isset( $badids[0] ) ? "<br /> This core_acl_aro entry with (user) value 0 should be removed, as it's not allowed." : "" ) . ( ( $bad_row->aro_id == 0 ) ? " This core_acl_aro entry with aro_id 0 should be removed, as it's not allowed." : "" ) . "</font></p>";
  734. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  735. } else {
  736. echo "<p><font color=green>All core_acl_aro table rows have ACL entries in core_acl_groups_aro_map table.</font></p>";
  737. }
  738. // 13. check if #__core_acl_groups_aro_map table is in sync with #__core_acl_aro table B: groups -> aro
  739. if ( checkJversion() == 1 ) {
  740. $sql = "SELECT g.aro_id AS id FROM #__core_acl_groups_aro_map g LEFT JOIN #__core_acl_aro a ON a.id = g.aro_id WHERE a.id IS NULL";
  741. } else {
  742. $sql = "SELECT g.aro_id AS id FROM #__core_acl_groups_aro_map g LEFT JOIN #__core_acl_aro a ON a.aro_id = g.aro_id WHERE a.aro_id IS NULL";
  743. }
  744. $_CB_database->setQuery($sql);
  745. $bad_rows = $_CB_database->loadObjectList();
  746. if ( $bad_rows === null ) {
  747. echo "<p><font color=red>ERROR: sql query: " . htmlspecialchars( $sql ) . " : returned error: " . stripslashes( $_CB_database->getErrorMsg() ) .  "</font></p>";
  748. } elseif (count($bad_rows)!=0) {
  749. echo "<p><font color=red>Warning: ".count($bad_rows)." entries in the core_acl_groups_aro_map without corresponding core_acl_aro table table rows.</font></p>";
  750. $badids = array();
  751. foreach ($bad_rows as $bad_row) {
  752. $badids[(int) $bad_row->id] = $bad_row->id;
  753. }
  754. echo "<p><font color=red>aro_id = " . implode( ', ', $badids ) . " are missing in core_acl_aro table table." . ( isset( $badids[0] ) ? " This entry with aro_id 0 should be removed, as it's not allowed." : "" ) . "</font></p>";
  755. echo "<p><font color=red>This one can be fixed in SQL using a tool like phpMyAdmin.</font></p>";
  756. } else {
  757. echo "<p><font color=green>All core_acl_aro table rows have ACL entries in core_acl_groups_aro_map table.</font></p>";
  758. }
  759. cbimport( 'cb.dbchecker' );
  760. $dbChecker = new CBdbChecker( $_CB_database );
  761. $result = $dbChecker->checkDatabase( false );
  762.     $_PLUGINS->loadPluginGroup('user');
  763. $messagesAfter = $_PLUGINS->trigger( 'onAfterCheckCbDb', true );
  764. $dbName = "Core CB";
  765. $messagesBefore = array();
  766. HTML_comprofiler::fixcbdbShowResults( $dbChecker, false, false, $result, $messagesBefore, $messagesAfter, $dbName, $dbId );
  767. echo '</div>';
  768. // adapt published fields to global CB config (regarding name type)
  769. _cbAdaptNameFieldsPublished( $ueConfig );
  770. } else {
  771. // Check plugins db:
  772. $dbName = "CB plugin";
  773. $messagesBefore = array();
  774. $messagesAfter = array();
  775. cbimport( 'cb.installer' );
  776. $sql = 'SELECT `id`, `name` FROM `#__comprofiler_plugin` ORDER BY `ordering`';
  777. $_CB_database->setQuery( $sql );
  778. $plugins = $_CB_database->loadObjectList();
  779. if ( is_array( $plugins ) ) {
  780. $cbInstaller = new cbInstallerPlugin();
  781. foreach ( $plugins as $plug ) {
  782. $result = $cbInstaller->checkDatabase( $plug->id, false );
  783. if ( is_bool( $result ) ) {
  784. HTML_comprofiler::fixcbdbShowResults( $cbInstaller, false, false, $result, $messagesBefore, $messagesAfter, $dbName . ' "' . $plug->name . '"', $dbId, false );
  785. } elseif ( is_string( $result ) ) {
  786. echo '<div style="color:orange;">' . $dbName . ' "' . $plug->name . '"' . ': ' . $result . '</div>';
  787. } else {
  788. echo '<div style="color:black;">' . $dbName . ' "' . $plug->name . '"' . ': no database or no database description.</div>';
  789. }
  790. }
  791. }
  792. $dbName = "CB plugins";
  793. $null = null;
  794. HTML_comprofiler::fixcbdbShowResults( $null, false, false, $result, array(), array(), $dbName, $dbId, true );
  795. }
  796. global $_CB_Backend_Title;
  797. $_CB_Backend_Title = array( 0 => array( 'cbicon-48-tools', "CB Tools: Check " . $dbName . " database: Results" ) );
  798. }
  799. function fixcbdb( $dryRun, $dbId = 0 ) {
  800. global $_CB_database, $_CB_framework, $ueConfig, $_PLUGINS;
  801. // Try extending time, as unziping/ftping took already quite some... :
  802. @set_time_limit( 240 );
  803. $dryRun = ( $dryRun == 1 );
  804. if ( $dbId == 0 ) {
  805. // Fix core CB:
  806. $dbName = "Core CB";
  807.     $_PLUGINS->loadPluginGroup('user');
  808. $messagesBefore = $_PLUGINS->trigger( 'onBeforeFixDb', array( $dryRun ) );
  809. cbimport( 'cb.dbchecker' );
  810. $dbChecker = new CBdbChecker( $_CB_database );
  811. $result = $dbChecker->checkDatabase( true, $dryRun );
  812. $messagesAfter = $_PLUGINS->trigger( 'onAfterFixDb', array( $dryRun ) );
  813. // adapt published fields to global CB config (regarding name type)
  814. _cbAdaptNameFieldsPublished( $ueConfig );
  815. } else {
  816. // Fix plugin $dbId:
  817. $dbName = "CB plugin";
  818. $messagesBefore = array();
  819. $messagesAfter = array();
  820. cbimport( 'cb.installer' );
  821. $sql = 'SELECT `id`, `name` FROM `#__comprofiler_plugin` ORDER BY `ordering`';
  822. $_CB_database->setQuery( $sql );
  823. $plugins = $_CB_database->loadObjectList();
  824. if ( is_array( $plugins ) ) {
  825. $cbInstaller = new cbInstallerPlugin();
  826. foreach ( $plugins as $plug ) {
  827. $result = $cbInstaller->checkDatabase( $plug->id, true, $dryRun );
  828. if ( is_bool( $result ) ) {
  829. HTML_comprofiler::fixcbdbShowResults( $cbInstaller, true, $dryRun, $result, $messagesBefore, $messagesAfter, $dbName . ' "' . $plug->name . '"', $dbId, false );
  830. } elseif ( is_string( $result ) ) {
  831. echo '<div style="color:orange;">' . $dbName . ' "' . $plug->name . '"' . ': ' . $result . '</div>';
  832. } else {
  833. echo '<div style="color:black;">' . $dbName . ' "' . $plug->name . '"' . ': no database or no database description.</div>';
  834. }
  835. }
  836. }
  837. $dbName = "CB plugins";
  838. $null = null;
  839. }
  840. HTML_comprofiler::secureAboveForm('fixcbdb');
  841. outputCbTemplate( 2 );
  842. outputCbJs( 2 );
  843. global $_CB_Backend_Title;
  844. $_CB_Backend_Title = array( 0 => array( 'cbicon-48-tools', "CB Tools: Fix " . $dbName . " database: " . ( $dryRun ? 'Dry-run:' : 'Fixed:' ) . " Results" ) );
  845. HTML_comprofiler::fixcbdbShowResults( $dbChecker, true, $dryRun, $result, $messagesBefore, $messagesAfter, $dbName, $dbId );
  846. }
  847. function loadTools() {
  848. HTML_comprofiler::showTools();
  849. }
  850. /**
  851. * Compacts the ordering sequence of the selected records
  852. * @param array of table key ids which need to get saved ($row[]->ordering contains old ordering and $_POST['order'] contains new ordering)
  853. * @param object derived from comprofilerDBTable of corresponding class
  854. * @param string Additional "WHERE" query to limit ordering to a particular subset of records
  855. */
  856. function saveOrder( $cid, &$row, $conditionStatement ) {
  857. global $_CB_database,$_POST;
  858. $total = count( $cid );
  859. $order  = cbGetParam( $_POST, 'order', array(0) );
  860. $conditions = array();
  861. $cidsChanged = array();
  862.     // update ordering values
  863. for( $i=0; $i < $total; $i++ ) {
  864. $row->load( (int) $cid[$i] );
  865. if ($row->ordering != $order[$i]) {
  866. $row->ordering = $order[$i];
  867.         if (!$row->store( (int) $cid[$i])) {
  868.             echo "<script type="text/javascript"> alert('saveOrder:".$_CB_database->getErrorMsg()."'); window.history.go(-1); </script>n";
  869.             exit();
  870.         } // if
  871.         $cidsChanged[] = $cid[$i];
  872.         // remember to updateOrder this group if multiple groups (conditionStatement gives the group)
  873.         if ($conditionStatement) {
  874.          $condition=null; // to make php checker happy: the next line defines $condition
  875.          eval($conditionStatement);
  876.          $found = false;
  877.          foreach ( $conditions as $cond )
  878.          if ($cond[1]==$condition) {
  879.          $found = true;
  880.          break;
  881.          } // if
  882.          if (!$found) $conditions[] = array($cid[$i], $condition);
  883.         }
  884. } // if
  885. } // for
  886. if ($conditionStatement) {
  887. // execute updateOrder for each group
  888. foreach ( $conditions as $cond ) {
  889. $row->load( (int) $cond[0] );
  890. $row->updateOrder( $cond[1], $cidsChanged );
  891. } // foreach
  892. } else if ($cidsChanged) {
  893. $row->load( (int) $cidsChanged[0] );
  894. $row->updateOrder( null, $cidsChanged );
  895. }
  896. return 'New ordering saved';
  897. } // saveOrder
  898. function saveFieldOrder( &$cid ) {
  899. global $_CB_database;
  900. $row = new moscomprofilerFields( $_CB_database );
  901. $msg = saveOrder( $cid, $row, "$condition = "tabid=$row->tabid";" );
  902. cbRedirect( 'index2.php?option=com_comprofiler&task=showField', $msg );
  903. } // saveFieldOrder
  904. function saveTabOrder( &$cid ) {
  905. global $_CB_database;
  906. $row  = new moscomprofilerTabs( $_CB_database );
  907. $msg = saveOrder( $cid, $row, "$condition = "position='$row->position' AND ordering > -10000 AND ordering < 10000 ";" );
  908. cbRedirect( 'index2.php?option=com_comprofiler&task=showTab', $msg );
  909. } // saveTabOrder saveOrder
  910. function saveListOrder( &$cid ) {
  911. global $_CB_database;
  912. $row  = new moscomprofilerLists( $_CB_database );
  913. $msg = saveOrder( $cid, $row, null );
  914. cbRedirect( 'index2.php?option=com_comprofiler&task=showLists', $msg );
  915. } // saveListOrder saveOrder
  916. //plugin
  917. function viewPlugins( $option ) {
  918. global $_CB_database, $_CB_framework, $_CB_joomla_adminpath;
  919. $limit = (int) $_CB_framework->getCfg( 'list_limit' );
  920. if ( $limit == 0 ) {
  921. $limit = 10;
  922. }
  923. $limit = $_CB_framework->getUserStateFromRequest( "viewlistlimit", 'limit', $limit );
  924. $lastCBlist = $_CB_framework->getUserState( "view{$option}lastCBlist", null );
  925. if ($lastCBlist == 'showplugins') {
  926. $limitstart  = $_CB_framework->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
  927. $lastSearch = $_CB_framework->getUserState( "search{$option}", null );
  928. $search = $_CB_framework->getUserStateFromRequest( "search{$option}", 'search', '' );
  929. if ($lastSearch != $search) {
  930. $limitstart = 0;
  931. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  932. }
  933. $search = trim( strtolower( $search ) );
  934. $filter_type = $_CB_framework->getUserStateFromRequest( "filter_type{$option}", 'filter_type', "0" );
  935. } else {
  936. clearSearchBox();
  937. $search="";
  938. $limitstart = 0;
  939. $_CB_framework->setUserState( "view{$option}limitstart", $limitstart );
  940. $_CB_framework->setUserState( "view{$option}lastCBlist", "showplugins" );
  941. $filter_type = "0";
  942. $_CB_framework->setUserState( "filter_type{$option}", $filter_type );
  943. }
  944. $where=array();
  945. // used by filter
  946. if ( $filter_type ) {
  947. $where[] = "m.type = '$filter_type'";
  948. }
  949. if ( $search ) {
  950. $search = cbEscapeSQLsearch( trim( strtolower( cbGetEscaped($search))));
  951. $where[] = "LOWER( m.name ) LIKE '%$search%'";
  952. }
  953. // get the total number of records
  954. $query = "SELECT COUNT(*) FROM #__comprofiler_plugin AS m ". ( count( $where ) ? "n WHERE " . implode( ' AND ', $where ) : '' );
  955. $_CB_database->setQuery( $query );
  956. $total = $_CB_database->loadResult();
  957. if ($total <= $limitstart) $limitstart = 0;
  958. cbimport( 'cb.pagination' );
  959. $pageNav = new cbPageNav( $total, $limitstart, $limit  );
  960. $query = "SELECT m.*, u.name AS editor, g.name AS groupname"
  961. . "n FROM #__comprofiler_plugin AS m"
  962. . "n LEFT JOIN #__users AS u ON u.id = m.checked_out"
  963. . "n LEFT JOIN #__groups AS g ON g.id = m.access"
  964. . ( count( $where ) ? "n WHERE " . implode( ' AND ', $where ) : '' )
  965. . "n GROUP BY m.id"
  966. . "n ORDER BY m.type ASC, m.ordering ASC, m.name ASC"
  967. . "n LIMIT " . (int) $pageNav->limitstart . ", " . (int) $pageNav->limit
  968. ;
  969. $_CB_database->setQuery( $query );
  970. $rows = $_CB_database->loadObjectList();
  971. if ($_CB_database->getErrorNum()) {
  972. echo $_CB_database->stderr();
  973. return false;
  974. }
  975. // get list of Positions for dropdown filter
  976. $query = "SELECT type AS value, type AS text"
  977. . "n FROM #__comprofiler_plugin"
  978. . "n GROUP BY type"
  979. . "n ORDER BY type"
  980. ;
  981. $types[] = moscomprofilerHTML::makeOption( '0', (!defined('_SEL_TYPE')) ? '- Select Type -' : _SEL_TYPE ); // Mambo 4.5.1 Compatibility
  982. $_CB_database->setQuery( $query );
  983. $types = array_merge( $types, $_CB_database->loadObjectList() );
  984. $lists['type'] = moscomprofilerHTML::selectList( $types, 'filter_type', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'value', 'text', $filter_type, 2 );
  985. HTML_comprofiler::showPlugins( $rows, $pageNav, $option, $lists, $search );
  986. return true;
  987. }
  988. /**
  989. * Saves the CB plugin after an edit form submit
  990. */
  991. function savePlugin( $option, $task ) {
  992. global $_CB_database, $_PLUGINS;
  993. if ( $task == 'showPlugins' ) {
  994. cbRedirect( 'index2.php?option=' . $option . '&task=showPlugins');
  995. return;
  996. }
  997. $action = cbGetParam( $_REQUEST, 'action' );
  998. if ( ! $action ) {
  999. savePluginParams( $option, $task );
  1000. } else {
  1001. $uid = cbGetParam( $_REQUEST, 'cid' );
  1002. $row  = new moscomprofilerPlugin($_CB_database);
  1003. if ( $uid ) {
  1004. $row->load( (int) $uid );
  1005. }
  1006. // get params values
  1007. if ($row->type !== "language") {
  1008. $_PLUGINS->loadPluginGroup($row->type,array($row->id), 0);
  1009. }
  1010. // xml file for plugin
  1011. $element =& $_PLUGINS->loadPluginXML( 'action', $action, $row->id );
  1012. $_REQUEST['task'] = 'editPlugin'; // so that the actionPath matches
  1013. $params =& new cbParamsBase( $row->params );
  1014. editPluginView( $row, $option, 'editPlugin', $uid, $action, $element, $task, $params );
  1015. }
  1016. }
  1017. /**
  1018. * Saves the CB plugin params after an edit form submit
  1019. */
  1020. function savePluginParams( $option, $task ) {
  1021. global $_CB_database, $_POST;
  1022. if ( isset( $_POST['params'] ) ) {
  1023.   $_POST['params'] = cbParamsEditorController::getRawParams( $_POST['params'] );
  1024. } else {
  1025. $_POST['params'] = null;
  1026. }
  1027. $row = new moscomprofilerPlugin( $_CB_database );
  1028. if (!$row->bind( $_POST )) {
  1029. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-1); </script>n";
  1030. exit();
  1031. }
  1032. if (!$row->check()) {
  1033. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-1); </script>n";
  1034. exit();
  1035. }
  1036. if (!$row->store()) {
  1037. echo "<script type="text/javascript"> alert('".$row->getError()."'); window.history.go(-1); </script>n";
  1038. exit();
  1039. }
  1040. $row->checkin();
  1041. $row->updateOrder( "type='".$_CB_database->getEscaped($row->type)."' AND ordering > -10000 AND ordering < 10000 " );
  1042. switch ( $task ) {
  1043. case 'applyPlugin':
  1044. $msg = 'Successfully Saved changes to Plugin: '. $row->name;
  1045. cbRedirect( 'index2.php?option='. $option .'&task=editPlugin&cid='. $row->id, $msg );
  1046. case 'savePlugin':
  1047. default:
  1048. $msg = 'Successfully Saved Plugin: '. $row->name;
  1049. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins' , $msg );
  1050. break;
  1051. }
  1052. }
  1053. /**
  1054. * Compiles information to add or edit a plugin
  1055. * @param string The current GET/POST option
  1056. * @param integer The unique id of the record to edit
  1057. */
  1058. function editPlugin( $option, $task, $uid) {
  1059. global $_CB_database, $_CB_framework, $_PLUGINS, $_POST;
  1060. $action = cbGetParam( $_REQUEST, 'action', null );
  1061. if ( ! $uid ) {
  1062. $uid = cbGetParam( $_POST, 'id' );
  1063. }
  1064. $row  = new moscomprofilerPlugin($_CB_database);
  1065. if ( $uid ) {
  1066. // load the row from the db table
  1067. $row->load( (int) $uid );
  1068. }
  1069. // fail if checked out not by 'me'
  1070. if ($row->checked_out && $row->checked_out <> $_CB_framework->myId() ) {
  1071. echo "<script type="text/javascript">alert('The plugin $row->name is currently being edited by another administrator'); document.location.href='index2.php?option=$option'</script>n";
  1072. exit(0);
  1073. }
  1074. // get params values
  1075. if ( $row->type !== "language" && $row->id ) {
  1076. $_PLUGINS->loadPluginGroup($row->type,array($row->id), 0);
  1077. }
  1078. // xml file for plugin
  1079. $element = null;
  1080. if ($uid) {
  1081. $element =& $_PLUGINS->loadPluginXML( 'action', $action, $row->id );
  1082. }
  1083. if ( $element && ( $action === null ) ) {
  1084. $adminActionsModel =& $element->getChildByNameAttr( 'actions', 'ui', 'admin' );
  1085. if ( $adminActionsModel ) {
  1086. $defaultAction =& $adminActionsModel->getChildByNameAttr( 'action', 'name', 'default' );
  1087. $actionRequest = $defaultAction->attributes( 'request' );
  1088. $actionAction = $defaultAction->attributes( 'action' );
  1089. if ( ( $actionRequest === '' ) && ( $actionRequest === '' ) ) {
  1090. $action = $actionAction;
  1091. }
  1092. }
  1093. }
  1094. if ( $element ) {
  1095. $description =& $element->getChildByNameAttributes( 'description' );
  1096. } else {
  1097. $description = null;
  1098. }
  1099. if ( $description ) {
  1100. $row->description = $description->data();
  1101. } else {
  1102. $row->description = '-';
  1103. }
  1104. if ( $action === null ) {
  1105. $params =& new cbParamsEditorController( $row->params, $element, $element, $row );
  1106. $options = array( 'option' => $option, 'task' => $task, 'pluginid' => $uid, 'tabid' => null );
  1107. $params->setOptions( $options );
  1108. editPluginSettingsParams( $row, $option, $task, $uid, $element, $params, $options );
  1109. } else {
  1110. $params =& new cbParamsBase( $row->params );
  1111. editPluginView( $row, $option, $task, $uid, $action, $element, 'editPlugin', $params );
  1112. }
  1113. }
  1114. function editPluginSettingsParams( &$row, $option, $task, $uid, &$element, &$params, &$options ) {
  1115. global $_CB_database, $_CB_framework;
  1116. $lists  = array();
  1117. // get list of groups
  1118. if ($row->access == 99 || $row->client_id == 1) {
  1119. $lists['access'] = 'Administrator<input type="hidden" name="access" value="99" />';
  1120. } else {
  1121. // build the html select list for the group access
  1122. $_CB_database->setQuery( 'SELECT id AS value, name AS text FROM #__groups ORDER BY id' );
  1123. $lists['access'] = moscomprofilerHTML::selectList( $_CB_database->loadObjectList(), 'access', 'class="inputbox" size="3"', 'value', 'text', intval( $row->access ), 2 );
  1124. }
  1125. if ($uid) {
  1126. $row->checkout( $_CB_framework->myId() );
  1127. if ( $row->ordering > -10000 && $row->ordering < 10000 ) {
  1128. // build the html select list for ordering
  1129. $query = "SELECT ordering AS value, name AS text"
  1130. . "n FROM #__comprofiler_plugin"
  1131. . "n WHERE type='" . $_CB_database->getEscaped( $row->type ) . "'"
  1132. . "n AND published > 0"
  1133. . "n AND ordering > -10000"
  1134. . "n AND ordering < 10000"
  1135. . "n ORDER BY ordering"
  1136. ;
  1137. $order = _cbGetOrderingList( $query );
  1138. $lists['ordering'] = moscomprofilerHTML::selectList( $order, 'ordering', 'class="inputbox" size="1"', 'value', 'text', intval( $row->ordering ), 2 );
  1139. } else {
  1140. $lists['ordering'] = '<input type="hidden" name="ordering" value="'. $row->ordering .'" />This plugin cannot be reordered';
  1141. }
  1142. $lists['type'] = '<input type="hidden" name="type" value="'. $row->type .'" />'. $row->type;
  1143. if ($element && $element->name() == 'cbinstall' && $element->attributes( 'type' ) == 'plugin' ) {
  1144. $description =& $element->getElementByPath( 'description' );
  1145. $row->description = ( $description ) ? trim( $description->data() ) : '';
  1146. }
  1147. } else {
  1148. $row->folder  = '';
  1149. $row->ordering  = 999;
  1150. $row->published  = 1;
  1151. $row->description  = '';
  1152. $folders = cbReadDirectory( $_CB_framework->getCfg('absolute_path') . '/components/com_comprofiler/plugin/' );
  1153. $folders2 = array();
  1154. foreach ($folders as $folder) {
  1155.     if (is_dir( $_CB_framework->getCfg('absolute_path') . '/components/com_comprofiler/plugin/' . $folder ) && ( $folder <> 'CVS' ) ) {
  1156.         $folders2[] = moscomprofilerHTML::makeOption( $folder );
  1157. }
  1158. }
  1159. $lists['type'] = moscomprofilerHTML::selectList( $folders2, 'type', 'class="inputbox" size="1"', 'value', 'text', null, 2 );
  1160. $lists['ordering'] = '<input type="hidden" name="ordering" value="'. $row->ordering .'" />New items default to the last place. Ordering can be changed after this item is saved.';
  1161. }
  1162. $Yesoptions = array();
  1163. $Yesoptions[] = moscomprofilerHTML::makeOption( '1', _UE_YES );
  1164. if ( ( $row->type == 'language' ) || ( $row->id == 1 ) ) {
  1165. $row->published = 1;
  1166. } else {
  1167. $Yesoptions[] = moscomprofilerHTML::makeOption( '0', _UE_NO );
  1168. }
  1169. $lists['published'] = moscomprofilerHTML::radioList( $Yesoptions, 'published', 'class="inputbox"', 'value', 'text', $row->published, 2 );
  1170. HTML_comprofiler::editPlugin( $row, $lists, $params, $options );
  1171. }
  1172. function editPluginView( &$row, $option, $task, $uid, $action, &$element, $mode, &$pluginParams ) {
  1173. global $_CB_database;
  1174. if ( ! $row->id ) {
  1175. echo 'Plugin id not found.';
  1176. return null;;
  1177. }
  1178. if ( ! $element ) {
  1179. echo 'No plugin XML found.';
  1180. return null;
  1181. }
  1182. $adminHandlerModel =& $element->getChildByNameAttr( 'handler', 'ui', 'admin' );
  1183. if ( ! $adminHandlerModel ) {
  1184. echo 'No admin handler defined in XML';
  1185. return null;
  1186. }
  1187. $class = $adminHandlerModel->attributes( 'class' );
  1188. if ( ! class_exists( $class ) ) {
  1189. echo 'Admin handler class ' . $class . ' does not exist.';
  1190. return null;
  1191. }
  1192. $handler =& new $class( $_CB_database );
  1193. return $handler->editPluginView( $row, $option, $task, $uid, $action, $element, $mode, $pluginParams );
  1194. }
  1195. /**
  1196. * Compiles information to add or edit a plugin
  1197. * @param string The current GET/POST option
  1198. * @param integer The unique id of the record to edit
  1199. */
  1200. function pluginMenu( $option, $uid) {
  1201. global $_CB_database, $_CB_framework, $_PLUGINS;
  1202. if ( ! $uid ) {
  1203. echo "<script type="text/javascript">alert('No plugin selected'); document.location.href='index2.php?option=$option'</script>n";
  1204. exit(0);
  1205. }
  1206. $row  = new moscomprofilerPlugin($_CB_database);
  1207. // load the row from the db table
  1208. $row->load( (int) $uid );
  1209. // fail if checked out not by 'me'
  1210. if ($row->checked_out && $row->checked_out <> $_CB_framework->myId() ) {
  1211. echo "<script type="text/javascript">alert('The plugin $row->name is currently being edited by another administrator'); document.location.href='index2.php?option=$option'</script>n";
  1212. exit(0);
  1213. }
  1214. $basepath = $_CB_framework->getCfg('absolute_path') . '/components/com_comprofiler/plugin/' . $row->type . '/'.$row->folder.'/';
  1215. $phpfile = $basepath . "admin." . $row->element . '.php';
  1216. // see if there is an xml install file, must be same name as element
  1217. if (file_exists( $phpfile )) {
  1218. // get params values
  1219. if ( $row->type !== "language" ) {
  1220. $_PLUGINS->loadPluginGroup($row->type,array($row->id), 0);
  1221. }
  1222. $menu = cbGetParam( $_REQUEST, 'menu' );
  1223. $element =& $_PLUGINS->loadPluginXML( 'menu', $menu, $row->id ); // xml file for plugin
  1224. $params =& new cbParamsEditorController( $row->params, $element, $element, $row );
  1225. outputCbTemplate( 2 );
  1226. outputCbJs( 2 );
  1227.     echo initToolTip( 2 );
  1228. require_once( $phpfile );
  1229. $classname = $row->element . "Admin";
  1230. $adminClass = new $classname();
  1231. echo $adminClass->menu( $row, $menu, $params );
  1232. } else {
  1233. echo "<script type="text/javascript">alert('The plugin $row->name has no administrator file $phpfile'); document.location.href='index2.php?option=$option'</script>n";
  1234. exit(0);
  1235. }
  1236. }
  1237. /**
  1238. * Deletes one or more plugins
  1239. *
  1240. * Also deletes associated entries in the #__comprofiler_plugin table.
  1241. * @param array An array of unique category id numbers
  1242. */
  1243. function removePlugin( &$cid, $option ) {
  1244. if (count( $cid ) < 1) {
  1245. echo "<script type="text/javascript"> alert('Select a plugin to delete'); window.history.go(-1);</script>n";
  1246. exit;
  1247. }
  1248. $installer = new cbInstallerPlugin();
  1249. foreach($cid AS $id) {
  1250. $ret = $installer->uninstall($id,$option);
  1251. if ( ! $ret ) {
  1252. break;
  1253. }
  1254. }
  1255. if ( $ret ) {
  1256. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Uninstall Plugin - '.($ret ? 'Success' : 'Failed'),
  1257. $installer->returnTo( $option, 'showPlugins' ) );
  1258. }
  1259. }
  1260. /**
  1261. * Publishes or Unpublishes one or more plugins
  1262. * @param array An array of unique category id numbers
  1263. * @param integer 0 if unpublishing, 1 if publishing
  1264. */
  1265. function publishPlugin( $cid=null, $publish=1, $option ) {
  1266. global $_CB_database, $_CB_framework;
  1267. if (count( $cid ) < 1) {
  1268. $action = $publish ? 'publish' : 'unpublish';
  1269. echo "<script type="text/javascript"> alert('Select a plugin to $action'); window.history.go(-1);</script>n";
  1270. exit;
  1271. }
  1272. cbArrayToInts($cid);
  1273. if ( $publish == 0 ) {
  1274. foreach ( $cid as $k => $id ) {
  1275. $row = new moscomprofilerPlugin( $_CB_database );
  1276. if ( $row->load( (int) $id ) ) {
  1277. if ( ( $row->type == "language" ) && $row->published ) {
  1278. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins', 'Language plugins cannot be unpublished, only uninstalled', 'error' );
  1279. } elseif ( ( $row->id == 1 ) && $row->published ) {
  1280. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins', 'Core plugin cannot be unpublished', 'error' );
  1281. }
  1282. } else {
  1283. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins', 'Plugin can not be found', 'error' );
  1284. }
  1285. }
  1286. }
  1287. $cids = implode( ',', $cid );
  1288. $query = "UPDATE #__comprofiler_plugin SET published = " . (int) $publish
  1289. . "n WHERE id IN ($cids)"
  1290. . "n AND ((checked_out = 0) OR (checked_out = " . (int) $_CB_framework->myId() . "))"
  1291. ;
  1292. $_CB_database->setQuery( $query );
  1293. if (!$_CB_database->query()) {
  1294. echo "<script type="text/javascript"> alert('".$_CB_database->getErrorMsg()."'); window.history.go(-1); </script>n";
  1295. exit();
  1296. }
  1297. if (count( $cid ) == 1) {
  1298. $row = new moscomprofilerPlugin( $_CB_database );
  1299. $row->checkin( $cid[0] );
  1300. }
  1301. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins'  );
  1302. }
  1303. /**
  1304. * Cancels an edit operation
  1305. */
  1306. function cancelPlugin( $option) {
  1307. global $_CB_database, $_POST;
  1308. $row = new moscomprofilerPlugin( $_CB_database );
  1309. $row->bind( $_POST );
  1310. $row->checkin();
  1311. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins' );
  1312. }
  1313. function cancelPluginAction( $option) {
  1314. global $_POST;
  1315. $pluginId = (int) cbGetParam( $_POST, 'cid' );
  1316. if ( $pluginId ) {
  1317. cbRedirect( 'index2.php?option='. $option .'&task=editPlugin&cid=' . $pluginId );
  1318. } else {
  1319. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins' );
  1320. }
  1321. }
  1322. /**
  1323. * Moves the order of a record
  1324. * @param integer The unique id of record
  1325. * @param integer The increment to reorder by
  1326. */
  1327. function orderPlugin( $uid, $inc, $option ) {
  1328. global $_CB_database;
  1329. $row = new moscomprofilerPlugin( $_CB_database );
  1330. $row->load( (int) $uid );
  1331. $row->move( $inc, "type='$row->type' AND ordering > -10000 AND ordering < 10000 "  );
  1332. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins' );
  1333. }
  1334. /**
  1335. * changes the access level of a record
  1336. * @param integer The increment to reorder by
  1337. */
  1338. function accessMenu( $uid, $access, $option ) {
  1339. global $_CB_database;
  1340. switch ( $access ) {
  1341. case 'accesspublic':
  1342. $access = 0;
  1343. break;
  1344. case 'accessregistered':
  1345. $access = 1;
  1346. break;
  1347. case 'accessspecial':
  1348. $access = 2;
  1349. break;
  1350. }
  1351. $row = new moscomprofilerPlugin( $_CB_database );
  1352. $row->load( (int) $uid );
  1353. $row->access = $access;
  1354. if ( !$row->check() ) {
  1355. return $row->getError();
  1356. }
  1357. if ( !$row->store() ) {
  1358. return $row->getError();
  1359. }
  1360. cbRedirect( 'index2.php?option='. $option .'&task=showPlugins' );
  1361. return null;
  1362. }
  1363. function savePluginOrder( &$cid ) {
  1364. global $_CB_database;
  1365. $row = new moscomprofilerPlugin( $_CB_database );
  1366. $msg = saveOrder( $cid, $row, "$condition = "type='$row->type' AND ordering > -10000 AND ordering < 10000 ";" );
  1367. cbRedirect( 'index2.php?option=com_comprofiler&task=showPlugins', $msg );
  1368. } // savePluginOrder
  1369. function installPluginUpload() {
  1370. global $_FILES;
  1371. // Try extending time, as unziping/ftping took already quite some... :
  1372. @set_time_limit( 240 );
  1373. HTML_comprofiler::secureAboveForm('showPlugins');
  1374. outputCbTemplate( 2 );
  1375. outputCbJs( 2 );
  1376.     echo initToolTip( 2 );
  1377. $option = "com_comprofiler";
  1378. $task = "showPlugins";
  1379. $client = 0;
  1380. //echo "installPluginUpload";
  1381. $installer = new cbInstallerPlugin();
  1382. // Check if file uploads are enabled
  1383. if ( ! (bool) ini_get( 'file_uploads' ) ) {
  1384. HTML_comprofiler::showInstallMessage( "The installer can't continue before file uploads are enabled. Please use the install from directory method.",
  1385. 'Installer - Error', $installer->returnTo( $option, $task, $client ) );
  1386. exit();
  1387. }
  1388. // Check that the zlib is available
  1389. if( ! extension_loaded( 'zlib' ) ) {
  1390. HTML_comprofiler::showInstallMessage( "The installer can't continue before zlib is installed",
  1391. 'Installer - Error', $installer->returnTo( $option, $task, $client ) );
  1392. exit();
  1393. }
  1394. $userfile = cbGetParam( $_FILES, 'userfile', null );
  1395. if ( ! $userfile || ( $userfile == null ) ) {
  1396. HTML_comprofiler::showInstallMessage( 'No file selected', 'Upload new plugin - error',
  1397. $installer->returnTo( $option, $task, $client ));
  1398. exit();
  1399. }
  1400. // $userfile['tmp_name'] = stripslashes( $userfile['tmp_name'] );
  1401. // $userfile['name'] = stripslashes( $userfile['name'] );
  1402. $msg = '';
  1403. $localName = $_FILES['userfile']['name'];
  1404. $resultdir = uploadFile( $_FILES['userfile']['tmp_name'], $localName , $msg ); // $localName is updated here
  1405. if ( $resultdir !== false ) {
  1406. if ( ! $installer->upload( $localName ) ) {
  1407. if ( $installer->unpackDir() ) {
  1408. cleanupInstall( $localName, $installer->unpackDir() );
  1409. }
  1410. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Upload '.$task.' - Upload Failed',
  1411. $installer->returnTo( $option, $task, $client ) );
  1412. }
  1413. $ret = $installer->install();
  1414. cleanupInstall( $localName, null );
  1415. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Upload '.$task.' - ' . ( $ret ? 'Success' : 'Failed' ),
  1416. $installer->returnTo( $option, $task, $client ) );
  1417. cleanupInstall( $localName, $installer->unpackDir() );
  1418. } else {
  1419. HTML_comprofiler::showInstallMessage( $msg, 'Upload '.$task.' -  Upload Error',
  1420. $installer->returnTo( $option, $task, $client ) );
  1421. }
  1422. }
  1423. function _cbAdmin_chmod( $filename ) {
  1424. global $_CB_framework;
  1425. cbimport( 'cb.adminfilesystem' );
  1426. $adminFS =& cbAdminFileSystem::getInstance();
  1427. $origmask = null;
  1428. if ( $_CB_framework->getCfg( 'dirperms' ) == '' ) {
  1429. // rely on umask
  1430. // $mode = 0777;
  1431. return true;
  1432. } else {
  1433. $origmask = @umask( 0 );
  1434. $mode = octdec( $_CB_framework->getCfg( 'dirperms' ) );
  1435. }
  1436. $ret = $adminFS->chmod( $filename, $mode );
  1437. if ( isset( $origmask ) ) {
  1438. @umask( $origmask );
  1439. }
  1440. return $ret;
  1441. }
  1442. function uploadFile( $filename, &$userfile_name, &$msg ) {
  1443. global $_CB_framework;
  1444. cbimport( 'cb.adminfilesystem' );
  1445. $adminFS =& cbAdminFileSystem::getInstance();
  1446. $baseDir = _cbPathName( $_CB_framework->getCfg('tmp_path') );
  1447. $userfile_name = $baseDir . $userfile_name; // WARNING: this parameter is returned !
  1448. if ( $adminFS->file_exists( $baseDir ) ) {
  1449. if ( $adminFS->is_writable( $baseDir ) ) {
  1450. if ( move_uploaded_file( $filename, $userfile_name ) ) {
  1451. //     if ( _cbAdmin_chmod( $userfile_name ) ) {
  1452.         return true;
  1453. // } else {
  1454. // $msg = 'Failed to change the permissions of the uploaded file.';
  1455. // }
  1456. } else {
  1457. $msg = sprintf( 'Failed to move uploaded file to %s directory.', '<code>' . htmlspecialchars( $baseDir ) . '</code>' );
  1458. }
  1459. } else {
  1460.     $msg = sprintf( 'Upload failed as %s directory is not writable.', '<code>' . htmlspecialchars( $baseDir ) . '</code>' );
  1461. }
  1462. } else {
  1463.     $msg = sprintf( 'Upload failed as %s directory does not exist.', '<code>' . htmlspecialchars( $baseDir ) . '</code>' );
  1464. }
  1465. return false;
  1466. }
  1467. function installPluginDir() {
  1468. // Try extending time, as unziping/ftping took already quite some... :
  1469. @set_time_limit( 240 );
  1470. HTML_comprofiler::secureAboveForm('showPlugins');
  1471. outputCbTemplate( 2 );
  1472. outputCbJs( 2 );
  1473.     echo initToolTip( 2 );
  1474. $option="com_comprofiler";
  1475. $task="showPlugins";
  1476. $client=0;
  1477. // echo "installPluginDir";
  1478. $installer = new cbInstallerPlugin();
  1479. $userfile = cbGetParam( $_REQUEST, 'userfile', null );
  1480. // Check if file name exists
  1481. if (!$userfile) {
  1482. HTML_comprofiler::showInstallMessage( 'No file selected', 'Install new plugin from directory - error',
  1483. $installer->returnTo( $option, $task, $client ) );
  1484. exit();
  1485. }
  1486. $path = _cbPathName( $userfile );
  1487. if (!is_dir( $path )) {
  1488. $path = dirname( $path );
  1489. }
  1490. $ret = $installer->install( $path);
  1491. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Install new plugin from directory '.$userfile.' - '.($ret ? 'Success' : 'Failed'),
  1492. $installer->returnTo( $option, $task, $client ) );
  1493. }
  1494. function installPluginURL() {
  1495. global $_CB_framework;
  1496. // Try extending time, as unziping/ftping took already quite some... :
  1497. @set_time_limit( 240 );
  1498. HTML_comprofiler::secureAboveForm('showPlugins');
  1499. outputCbTemplate( 2 );
  1500. outputCbJs( 2 );
  1501.     echo initToolTip( 2 );
  1502. $option="com_comprofiler";
  1503. $task="showPlugins";
  1504. $client=0;
  1505. // echo "installPluginURL";
  1506. $installer = new cbInstallerPlugin();
  1507. // Check that the zlib is available
  1508. if(!extension_loaded('zlib')) {
  1509. HTML_comprofiler::showInstallMessage( "The installer can't continue before zlib is installed",
  1510. 'Installer - Error', $installer->returnTo( $option, $task, $client ) );
  1511. exit();
  1512. }
  1513. $userfileURL = cbGetParam( $_REQUEST, 'userfile', null );
  1514. if (!$userfileURL) {
  1515. HTML_comprofiler::showInstallMessage( 'No URL selected', 'Upload new plugin - error',
  1516. $installer->returnTo( $option, $task, $client ));
  1517. exit();
  1518. }
  1519. cbimport( 'cb.adminfilesystem' );
  1520. $adminFS =& cbAdminFileSystem::getInstance();
  1521. if ( $adminFS->isUsingStandardPHP() ) {
  1522. $baseDir = _cbPathName( $_CB_framework->getCfg('tmp_path') );
  1523. } else {
  1524. $baseDir = $_CB_framework->getCfg( 'absolute_path' ) . '/tmp/';
  1525. }
  1526. $userfileName = $baseDir . 'comprofiler_temp.zip';
  1527. $msg = '';
  1528. //echo "step-uploadfile<br />";
  1529. $resultdir = uploadFileURL( $userfileURL, $userfileName, $msg );
  1530. if ($resultdir !== false) {
  1531. //echo "step-upload<br />";
  1532. if (!$installer->upload( $userfileName )) {
  1533. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Download '.$userfileURL.' - Upload Failed',
  1534. $installer->returnTo( $option, $task, $client ) );
  1535. }
  1536. //echo "step-install<br />";
  1537. $ret = $installer->install();
  1538. if ( $ret ) {
  1539. HTML_comprofiler::showInstallMessage( $installer->getError(), 'Download '.$userfileURL.' - '.($ret ? 'Success' : 'Failed'),
  1540. $installer->returnTo( $option, $task, $client ) );
  1541. }
  1542. cleanupInstall( $userfileName, $installer->unpackDir() );
  1543. } else {
  1544. HTML_comprofiler::showInstallMessage( $msg, 'Download '.$userfileURL.' -  Download Error',
  1545. $installer->returnTo( $option, $task, $client ) );
  1546. }
  1547. }
  1548. function uploadFileURL( $userfileURL, $userfile_name, &$msg ) {
  1549. global $_CB_framework;
  1550. include_once( $_CB_framework->getCfg('absolute_path') . '/administrator/components/com_comprofiler/Snoopy.class.php' );
  1551. cbimport( 'cb.adminfilesystem' );
  1552. $adminFS =& cbAdminFileSystem::getInstance();
  1553. if ( $adminFS->isUsingStandardPHP() ) {
  1554. $baseDir = _cbPathName( $_CB_framework->getCfg('tmp_path') );
  1555. } else {
  1556. $baseDir = $_CB_framework->getCfg( 'absolute_path' ) . '/tmp';
  1557. }
  1558. if ( file_exists( $baseDir ) ) {
  1559. if ( $adminFS->is_writable( $baseDir ) || ! $adminFS->isUsingStandardPHP() ) {
  1560. $s = new Snoopy();
  1561. $fetchResult = @$s->fetch( $userfileURL );
  1562.   
  1563. if ( $fetchResult && ! $s->error && ( $s->status == 200 ) ) {
  1564. cbimport( 'cb.adminfilesystem' );
  1565. $adminFS =& cbAdminFileSystem::getInstance();
  1566. if ( $adminFS->file_put_contents( $baseDir . $userfile_name, $s->results ) ) {
  1567. if ( _cbAdmin_chmod( $baseDir . $userfile_name ) ) {
  1568. return true;
  1569. } else {
  1570. $msg = 'Failed to change the permissions of the uploaded file '.$baseDir.$userfile_name;
  1571. }
  1572. } else {
  1573. $msg = 'Failed to create and write uploaded file in '.$baseDir.$userfile_name;
  1574. }
  1575. } else {
  1576. $msg = 'Failed to download package file from <code>'.$userfileURL
  1577. .'</code> to <code>/media</code> directory due to following' . ' ' . ( $s->error ? 'error' . ': ' . $s->error : 'status' . ': ' . $s->status . ': ' . $s->response_code );
  1578. }
  1579. } else {
  1580.     $msg = sprintf( 'Upload failed as %s directory is not writable.', '<code>' . htmlspecialchars( $baseDir ) . '</code>' );
  1581. }
  1582. } else {
  1583.     $msg = sprintf( 'Upload failed as %s directory does not exist.', '<code>' . htmlspecialchars( $baseDir ) . '</code>' );
  1584. }
  1585. return false;
  1586. }
  1587. function clearSearchBox(){
  1588. global $_CB_framework;
  1589. $_CB_framework->setUserState('searchcom_comprofiler','');
  1590. }
  1591. // Ajax: administrator/index3.php?option=com_comprofiler&task=latestVersion&no_html=1&format=raw :
  1592. function latestVersion(){
  1593. global $_CB_framework, $ueConfig;
  1594. include_once( $_CB_framework->getCfg('absolute_path') . '/administrator/components/com_comprofiler/Snoopy.class.php' );
  1595. $s = new Snoopy();
  1596. $s->read_timeout = 90;
  1597. $s->referer = $_CB_framework->getCfg( 'live_site' );
  1598. @$s->fetch('http://www.joomlapolis.com/versions/comprofilerversion.php?currentversion='.urlencode($ueConfig['version']));
  1599. $version_info = $s->results;
  1600. $version_info_pos = strpos($version_info, ":");
  1601. if ($version_info_pos === false) {
  1602. $version = $version_info;
  1603. $info = null;
  1604. } else {
  1605. $version = substr( $version_info, 0, $version_info_pos );
  1606. $info = substr( $version_info, $version_info_pos + 1 );
  1607. }
  1608. if($s->error || $s->status != 200){
  1609.      echo '<font color="red">Connection to update server failed: ERROR: ' . $s->error . ($s->status == -100 ? 'Timeout' : $s->status).'</font>';
  1610.     } else if($version == $ueConfig['version']){
  1611.      echo '<font color="green">' . $version . '</font>' . $info;
  1612.     } else {
  1613.      echo '<font color="red">' . $version . '</font>' . $info;
  1614.     }
  1615. }
  1616. // NB for now duplicated in frontend an admin backend:
  1617. function tabClass( $option, $task, $uid ) {
  1618. global $_CB_framework, $_CB_database, $_PLUGINS, $_REQUEST, $_POST;
  1619. $user = new moscomprofilerUser( $_CB_database );
  1620. if ( ! $user->load( (int) $uid ) ) {
  1621. $user = null;
  1622. }
  1623. $unsecureChars = array( '/', '\', ':', ';', '{', '}', '(', ')', """, "'", '.', ',', "", ' ', "t", "n", "r", "x0B" );
  1624. if ( $task == 'fieldclass' ) {
  1625. if ( $user && $user->id ) {
  1626. $uid = $user->id;
  1627. } else {
  1628. $uid = 0;
  1629. }
  1630. /* this is not needed in admin side:
  1631. $msg = cbCheckIfUserCanPerformUserTask( $user->id, 'allowModeratorsUserEdit' );
  1632. * instead this is needed: */
  1633. $msg = checkCBpermissions( array($uid), "edit", true );
  1634. if ( $msg ) {
  1635. echo $msg;
  1636. return;
  1637. }
  1638. $fieldName = trim( substr( str_replace( $unsecureChars, '', urldecode( stripslashes( cbGetParam( $_REQUEST, "field" ) ) ) ), 0, 50 ) );
  1639. if ( ! $fieldName ) {
  1640. echo 'no field';
  1641. return;
  1642. }
  1643. } elseif ( $task == 'tabclass' ) {
  1644. $tabClassName = urldecode( stripslashes( cbGetParam( $_REQUEST, "tab" ) ) );
  1645. if ( ! $tabClassName ) {
  1646. return;
  1647. }
  1648. $pluginName = null;
  1649. $tabClassName = substr( str_replace( $unsecureChars, '', $tabClassName ), 0, 32 );
  1650. $method = 'getTabComponent';
  1651. } elseif ( $task == 'pluginclass' ) {
  1652. $pluginName = urldecode( stripslashes( cbGetParam( $_REQUEST, "plugin" ) ) );
  1653. if ( ! $pluginName ) {
  1654. return;
  1655. }
  1656. $tabClassName = 'CBplug_' . strtolower( substr( str_replace( $unsecureChars, '', $pluginName ), 0, 32 ) );
  1657. $method = 'getCBpluginComponent';
  1658. }
  1659. $tabs = new cbTabs( 0, 1, null, false ); // function cbTabs($useCookies, $ui, $calendars=null, $outputTabpaneScript=true) {
  1660. if ( $task == 'fieldclass' ) {
  1661. $result = $tabs->fieldCall( $fieldName, $user, $_POST );
  1662. } else {
  1663. $result = $tabs->tabClassPluginTabs( $user, $_POST, $pluginName, $tabClassName, $method );
  1664. }
  1665. if ( $result === false ) {
  1666.   if( $_PLUGINS->is_errors() ) {
  1667. echo "<script type="text/javascript">alert("" . $_PLUGINS->getErrorMSG() . ""); </script>n";
  1668.   }
  1669. } elseif ( $result !== null ) {
  1670. echo $result;
  1671. }
  1672. }
  1673. function finishInstallation( $option ) {
  1674. global $_CB_framework, $ueConfig;
  1675. // Try extending time, as unziping/ftping took already quite some... :
  1676. @set_time_limit( 240 );
  1677. HTML_comprofiler::secureAboveForm('finishInstallation');
  1678. $tgzFile = $_CB_framework->getCfg( 'absolute_path' ) . '/administrator/components/com_comprofiler/pluginsfiles.tgz';
  1679. $installerFile = $_CB_framework->getCfg( 'absolute_path' ) . '/administrator/components/com_comprofiler/';
  1680. if ( file_exists( $installerFile . 'comprofiler.xml' ) ) {
  1681. $installerFile .= 'comprofiler.xml';
  1682. } elseif ( file_exists( $installerFile . 'comprofilej.xml' ) ) {
  1683. $installerFile .= 'comprofilej.xml';
  1684. }
  1685. if ( ! file_exists( $tgzFile ) ) {
  1686. echo _UE_NOT_AUTHORIZED;
  1687. return;
  1688. }
  1689. $installer = new cbInstallerPlugin();
  1690. // Check that the zlib is available
  1691. if(!extension_loaded('zlib')) {
  1692. HTML_comprofiler::showInstallMessage( "The installer can't continue before zlib is installed",
  1693. 'Installer - Error', $installer->returnTo( $option, $task, $client ) );
  1694. exit();
  1695. }
  1696. if ( ! $installer->upload( $tgzFile, true, false ) ) {
  1697. HTML_comprofiler::showInstallMessage( "Uncompressing " . $tgzFile . " failed.",
  1698. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1699. exit();
  1700. }
  1701. $installFrom = $installer->installDir();
  1702. $installTo = $_CB_framework->getCfg( 'absolute_path' ) . '/components/com_comprofiler/plugin';
  1703. $filesList = cbReadDirectory( $installFrom, '.', true );
  1704. // create directories and remove them from file list:
  1705. if ( ! $installer->mosMakePath( dirname( $installTo ) . '/', 'plugin' ) ) {
  1706. HTML_comprofiler::showInstallMessage( 'Failed to create directory "' . $installTo . '/' . $newdir . '"',
  1707. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1708. exit();
  1709. }
  1710. foreach ( $filesList as $k => $file ) {
  1711. if ( basename( $file ) != $file ) {
  1712. $newdir = dirname( $file );
  1713. if ( ! $installer->mosMakePath( $installTo . '/', $newdir ) ) {
  1714. HTML_comprofiler::showInstallMessage( 'Failed to create directory "' . $installTo . '/' . $newdir . '"',
  1715. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1716. exit();
  1717. }
  1718. }
  1719. if ( ! is_file( $installFrom . '/' . $file ) ) {
  1720. unset( $filesList[$k] );
  1721. }
  1722. }
  1723. $result = $installer->copyFiles( $installFrom, $installTo, $filesList, true );
  1724. if ( $result === false ) {
  1725. HTML_comprofiler::showInstallMessage( "Copying plugin files failed with error: " . $installer->getError(),
  1726. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1727. exit();
  1728. }
  1729. $adminFS =& cbAdminFileSystem::getInstance();
  1730. $result = $adminFS->deldir( _cbPathName( $installFrom . '/' ) );
  1731. if ( $result === false ) {
  1732. HTML_comprofiler::showInstallMessage( "Deleting expanded tgz file directory failed with an error.",
  1733. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1734. }
  1735. $tgzFileOS = _cbPathName( $tgzFile, false );
  1736. $result = $adminFS->unlink( $tgzFileOS );
  1737. if ( $result === false ) {
  1738. HTML_comprofiler::showInstallMessage( "Deleting file " . $tgzFileOS . " failed with an error.",
  1739. 'Installer - Error', $installer->returnTo( $option, '', 2 ) );
  1740. }
  1741. // adapt published fields to global CB config (regarding name type)
  1742. _cbAdaptNameFieldsPublished( $ueConfig );
  1743. $htmlToDisplay = cbUnHtmlspecialchars( cbUnHtmlspecialchars( $_CB_framework->getUserState( "com_comprofiler_install", null ) ) );
  1744. cbimport( 'cb.xml.simplexml' );
  1745. $installerXml = new CBSimpleXMLElement( file_get_contents( $installerFile ) );
  1746. if ( is_object( $installerXml ) ) {
  1747. $description = $installerXml->getElementByPath( 'description' );
  1748. if ( $description !== false ) {
  1749. echo '<h2>' . $description->data() . '</h2>';
  1750. }
  1751. }
  1752. echo $htmlToDisplay;
  1753. ?>
  1754. <div style="font-weight:bold;font-size:110%;background:#ffffe4;border:2px green solid;padding:5px;margin-bottom:20px;"><font color="green">Second and last installation step of Community Builder Component (comprofiler) done successfully.</font></div><br />
  1755. <div style="font-weight:bold;font-size:125%;background:#ffffe4;border:2px green solid;padding:5px;">
  1756. <font color="green"><b>Installation finished. Important: Please read README.TXT and installation manual for further settings. <br /><br />We also have a PDF installation guide as well as a complete documentation available on <a href="http://www.joomlapolis.com">www.joomlapolis.com</a> which will help you making the most out of your Community Builder installation, while supporting this project.</b></font>
  1757. </div>
  1758. <?php
  1759. $_CB_framework->setUserState( "com_comprofiler_install", '' );
  1760. }
  1761. ?>