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

网络

开发平台:

Unix_Linux

  1. <?php
  2. /**
  3. * Joomla/Mambo Community Builder
  4. * @version $Id: comprofiler.php 609 2006-12-13 17:30:15Z beat $
  5. * @package Community Builder
  6. * @subpackage comprofiler.php
  7. * @author JoomlaJoe and Beat
  8. * @copyright (C) JoomlaJoe and Beat, www.joomlapolis.com
  9. * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
  10. */
  11. if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
  12. $memMax = trim( @ini_get( 'memory_limit' ) );
  13. if ( $memMax ) {
  14. $last = strtolower( $memMax{strlen( $memMax ) - 1} );
  15. switch( $last ) {
  16. case 'g':
  17. $memMax *= 1024;
  18. case 'm':
  19. $memMax *= 1024;
  20. case 'k':
  21. $memMax *= 1024;
  22. }
  23. if ( $memMax < 16000000 ) {
  24. @ini_set( 'memory_limit', '16M' );
  25. }
  26. }
  27. /**
  28.  * CB framework
  29.  * @global CBframework $_CB_framework
  30.  */
  31. global $_CB_framework;
  32. /** @global mosMainFrame $mainframe
  33.  *  @global stdClass $access
  34.  */
  35. global $mainframe;
  36. require_once ( $mainframe->getPath( 'front_html' ) );
  37. /** @global string $_CB_adminpath
  38.  *  @global string $_CB_joomla_adminpath
  39.  *  @global array $ueConfig
  40.  */
  41. global $_CB_joomla_adminpath, $_CB_adminpath, $ueConfig;
  42. if ( defined( 'JPATH_ADMINISTRATOR' ) ) {
  43. $_CB_joomla_adminpath = JPATH_ADMINISTRATOR;
  44. $option = JRequest::getString('option');
  45. $task = JRequest::getString('task');
  46. } else {
  47. $_CB_joomla_adminpath = $mainframe->getCfg( 'absolute_path' ). "/administrator";
  48. global $option, $task;
  49. }
  50. $_CB_adminpath = $_CB_joomla_adminpath. "/components/com_comprofiler";
  51. include_once($_CB_adminpath."/ue_config.php" );
  52. include_once($_CB_adminpath."/plugin.class.php");
  53. $_CB_framework->cbset( '_ui', 1 ); // we're in 1: frontend, 2: admin back-end
  54. if($_CB_framework->getCfg( 'debug' )) {
  55. ini_set('display_errors',true);
  56. error_reporting(E_ALL);
  57. }
  58. $UElanguagePath = $_CB_framework->getCfg( 'absolute_path' ) . '/components/com_comprofiler/plugin/language';
  59. $UElanguage = $_CB_framework->getCfg( 'lang' );
  60. if ( ! file_exists( $UElanguagePath . '/' . $UElanguage . '/' . $UElanguage . '.php' ) ) {
  61. $UElanguage = 'default_language';
  62. }
  63. include_once( $UElanguagePath . '/' . $UElanguage . '/' . $UElanguage . '.php' );
  64. if ( class_exists( 'JFactory' ) ) { // Joomla 1.5 : for string WARNREG_EMAIL_INUSE used in error js popup.
  65. $lang =& JFactory::getLanguage();
  66. $lang->load( "com_user" );
  67. }
  68. include_once($_CB_adminpath."/comprofiler.class.php");
  69. include_once($_CB_adminpath."/imgToolbox.class.php");
  70. $form = cbGetParam( $_REQUEST, 'reportform', 1 );
  71. $uid = cbGetParam( $_REQUEST, 'uid', 0 );
  72. $act = cbGetParam( $_REQUEST, 'act', 1 );
  73. $oldignoreuserabort = null;
  74. switch( $task ) {
  75. case "userDetails":
  76. case "userdetails":
  77. userEdit( $option, $uid, _UE_UPDATE );
  78. break;
  79. case "saveUserEdit":
  80. case "saveuseredit":
  81. $oldignoreuserabort = ignore_user_abort(true);
  82. userSave( $option, (int) cbGetParam( $_POST, 'id', 0 ) );
  83. break;
  84. case "userProfile":
  85. case "userprofile":
  86. userProfile($option, $_CB_framework->myId(), _UE_UPDATE);
  87. break;
  88. case "usersList":
  89. case "userslist":
  90. usersList( $_CB_framework->myId() );
  91. break;
  92. case "userAvatar":
  93. case "useravatar":
  94. userAvatar($option, $uid, _UE_UPDATE);
  95. break;
  96. case "lostPassword":
  97. case "lostpassword":
  98. lostPassForm( $option );
  99. break;
  100. case "sendNewPass":
  101. case "sendnewpass":
  102. $oldignoreuserabort = ignore_user_abort(true);
  103. sendNewPass( $option );
  104. break;
  105. case "registers":
  106. registerForm( $option, isset( $ueConfig['emailpass'] ) ? $ueConfig['emailpass'] : '0' );
  107. break;
  108. case "saveregisters":
  109. $oldignoreuserabort = ignore_user_abort(true);
  110. saveRegistration( $option );
  111. break;
  112. case "login":
  113. $oldignoreuserabort = ignore_user_abort(true);
  114. login();
  115. break;
  116. case "logout":
  117. $oldignoreuserabort = ignore_user_abort(true);
  118. logout();
  119. break;
  120. case "confirm":
  121. $oldignoreuserabort = ignore_user_abort(true);
  122. confirm( cbGetParam( $_GET, 'confirmcode', '1' ) ); // mambo 4.5.3h braindead: does intval of octal from hex in cbGetParam...
  123. break;
  124. case "moderateImages":
  125. case "moderateimages":
  126. $oldignoreuserabort = ignore_user_abort(true);
  127. moderateImages($option);
  128. break;
  129. case "moderateReports":
  130. case "moderatereports":
  131. $oldignoreuserabort = ignore_user_abort(true);
  132. moderateReports($option);
  133. break;
  134. case "moderateBans":
  135. case "moderatebans":
  136. $oldignoreuserabort = ignore_user_abort(true);
  137. moderateBans($option,$act,$uid);
  138. break;
  139. case "approveImage":
  140. case "approveimage":
  141. $oldignoreuserabort = ignore_user_abort(true);
  142. approveImage();
  143. break;
  144. case "reportUser":
  145. case "reportuser":
  146. $oldignoreuserabort = ignore_user_abort(true);
  147. reportUser($option,$form,$uid);
  148. break;
  149. case "processReports":
  150. case "processreports":
  151. $oldignoreuserabort = ignore_user_abort(true);
  152. processReports();
  153. break;
  154. case "banProfile":
  155. case "banprofile":
  156. $oldignoreuserabort = ignore_user_abort(true);
  157. banUser($option,$uid,$form,$act);
  158. break;
  159. case "viewReports":
  160. case "viewreports":
  161. viewReports($option,$uid,$act);
  162. break;
  163. case "emailUser":
  164. case "emailuser":
  165. emailUser($option,$uid);
  166. break;
  167. case "pendingApprovalUser":
  168. case "pendingapprovaluser":
  169. pendingApprovalUsers($option);
  170. break;
  171. case "approveUser":
  172. case "approveuser":
  173. $oldignoreuserabort = ignore_user_abort(true);
  174. approveUser(cbGetParam($_POST,'uids'));
  175. break;
  176. case "rejectUser":
  177. case "rejectuser":
  178. $oldignoreuserabort = ignore_user_abort(true);
  179. rejectUser(cbGetParam($_POST,'uids'));
  180. break;
  181. case "sendUserEmail":
  182. case "senduseremail":
  183. $oldignoreuserabort = ignore_user_abort(true);
  184. sendUserEmail( $option, (int) cbGetParam( $_POST, 'toID', 0 ), (int) cbGetParam( $_POST, 'fromID', 0 ), cbGetParam( $_POST, 'emailSubject', '' ), cbGetParam( $_POST, 'emailBody', '' ) );
  185. break;
  186. case "addConnection":
  187. case "addconnection":
  188. $oldignoreuserabort = ignore_user_abort(true);
  189. addConnection( $_CB_framework->myId(), (int) cbGetParam($_REQUEST,'connectionid'), ((isset($_POST['message'])) ? cbGetParam($_POST,'message') : ""));
  190. break;
  191. case "removeConnection":
  192. case "removeconnection":
  193. $oldignoreuserabort = ignore_user_abort(true);
  194. removeConnection( $_CB_framework->myId(), (int) cbGetParam($_REQUEST, 'connectionid') );
  195. break;
  196. case "denyConnection":
  197. case "denyconnection":
  198. $oldignoreuserabort = ignore_user_abort(true);
  199. denyConnection( $_CB_framework->myId(), (int) cbGetParam($_REQUEST,'connectionid'));
  200. break;
  201. case "acceptConnection":
  202. case "acceptconnection":
  203. $oldignoreuserabort = ignore_user_abort(true);
  204. acceptConnection( $_CB_framework->myId(), (int) cbGetParam($_REQUEST,'connectionid'));
  205. break;
  206. case "manageConnections":
  207. case "manageconnections":
  208. manageConnections( $_CB_framework->myId() );
  209. break;
  210. case "saveConnections":
  211. case "saveconnections":
  212. $oldignoreuserabort = ignore_user_abort(true);
  213. saveConnections(cbGetParam($_POST,'uid'));
  214. break;
  215. case "processConnectionActions":
  216. case "processconnectionactions":
  217. $oldignoreuserabort = ignore_user_abort(true);
  218. processConnectionActions(cbGetParam($_POST,'uid'));
  219. break;
  220. case "teamCredits":
  221. case "teamcredits":
  222. teamCredits(1);
  223. break;
  224. case "fieldclass":
  225. case "tabclass":
  226. case "pluginclass":
  227. tabClass( $option, $task, $_CB_framework->myId() );
  228. break;
  229. case "done":
  230. break;
  231. case "performcheckusername":
  232. performCheckUsername( cbGetParam( $_POST, 'value' ), cbGetParam( $_GET, 'function' ) );
  233. break;
  234. case "performcheckemail":
  235. performCheckEmail( cbGetParam( $_POST, 'value' ), cbGetParam( $_GET, 'function' ) );
  236. break;
  237. default:
  238. userProfile($option, $_CB_framework->myId(), _UE_UPDATE);
  239. break;
  240. }
  241. echo $_CB_framework->getAllJsPageCodes();
  242. if (!is_null($oldignoreuserabort)) ignore_user_abort($oldignoreuserabort);
  243. // END OF MAIN.
  244. function sendUserEmail( $option, $toid, $fromid, $subject, $message ) {
  245. global $ueConfig, $_CB_framework, $_CB_database, $_POST, $_PLUGINS;
  246. // simple spoof check security
  247. cbSpoofCheck( 'emailUser' );
  248. $errorMsg = cbAntiSpamCheck( false );
  249. if (($_CB_framework->myId() == 0) || ($_CB_framework->myId() != $fromid) || ( ! $toid ) || ($ueConfig['allow_email_display']!=1 && $ueConfig['allow_email_display']!=3)) {
  250. cbNotAuth();
  251. return;
  252. }
  253. $rowFrom = new moscomprofilerUser( $_CB_database );
  254. $rowFrom->load( (int) $fromid );
  255. $rowTo = new moscomprofilerUser( $_CB_database );
  256. $rowTo->load( (int) $toid );
  257. $subject = stripslashes( $subject ); // cbGetParam() adds slashes...remove'em...
  258. $message = stripslashes( $message );
  259. if ( ! $errorMsg ) {
  260. $errorMsg = _UE_SESSIONTIMEOUT . " " . _UE_SENTEMAILFAILED;
  261. if ( isset( $_POST["protect"] ) ) {
  262. $parts = explode( '_', cbGetParam( $_POST, 'protect', '' ) );
  263. if ( ( count( $parts ) == 3 ) && ( $parts[0] == 'cbmv1' ) && ( strlen( $parts[2] ) == 16 ) && ( $parts[1] == md5($parts[2].$rowTo->id.$rowTo->password.$rowTo->lastvisitDate.$rowFrom->password.$rowFrom->lastvisitDate) ) ) {
  264. $errorMsg = null;
  265. $_PLUGINS->loadPluginGroup('user');
  266. $pluginResults = $_PLUGINS->trigger( 'onBeforeEmailUser', array( &$rowFrom, &$rowTo, 1 )); //$ui=1
  267. if ($_PLUGINS->is_errors()) {
  268. $errorMsg = $_PLUGINS->getErrorMSG( '<br />') . "n";
  269. } else {
  270. $spamCheck = cbSpamProtect( $_CB_framework->myId(), true );
  271. if ( $spamCheck ) {
  272. $errorMsg = $spamCheck;
  273. } else {
  274. $cbNotification = new cbNotification();
  275. $res = $cbNotification->sendUserEmail($toid,$fromid,$subject,$message, true);
  276. if ($res) {
  277. echo _UE_SENTEMAILSUCCESS;
  278. if (is_array($pluginResults)) {
  279. echo implode( "<br />", $pluginResults );
  280. }
  281. return;
  282. }
  283. else {
  284. $errorMsg = _UE_SENTEMAILFAILED;
  285. }
  286. }
  287. }
  288. }
  289. }
  290. }
  291. echo '<div class="error">' . $errorMsg . '</div>';
  292. HTML_comprofiler::emailUser( $option, $rowFrom, $rowTo, $subject, $message );
  293. }
  294. function emailUser($option,$uid) {
  295. global $_CB_framework, $_CB_database, $ueConfig;
  296. if (($_CB_framework->myId() == 0) || ($ueConfig['allow_email_display']!=1 && $ueConfig['allow_email_display']!=3)) {
  297. cbNotAuth();
  298. return;
  299. }
  300. $spamCheck = cbSpamProtect( $_CB_framework->myId(), false );
  301. if ( $spamCheck ) {
  302. echo $spamCheck;
  303. return;
  304. }
  305. $rowFrom = new moscomprofilerUser( $_CB_database );
  306. $rowFrom->load( $_CB_framework->myId() );
  307. $rowTo = new moscomprofilerUser( $_CB_database );
  308. $rowTo->load( (int) $uid );
  309. HTML_comprofiler::emailUser($option,$rowFrom,$rowTo);
  310. }
  311. function userEdit( $option, $uid, $submitvalue, $regErrorMSG = null ) {
  312. global $_CB_framework, $_CB_database, $_POST, $_PLUGINS;
  313. $msg = cbCheckIfUserCanPerformUserTask( $uid, 'allowModeratorsUserEdit');
  314. if ( ( $uid != $_CB_framework->myId() ) && ( $msg === null ) ) {
  315. // safeguard against missconfiguration of the above: also avoids lower-level users editing higher level ones:
  316. $msg = checkCBpermissions( array( (int) $uid ), 'profile', true );
  317. }
  318. if ( $msg ) {
  319. echo $msg;
  320. return;
  321. }
  322. $_PLUGINS->loadPluginGroup('user');
  323. $user = new moscomprofilerUser( $_CB_database );
  324. if ( $user->load( (int) $uid ) ) {
  325. HTML_comprofiler::userEdit( $user, $option, $submitvalue, $regErrorMSG );
  326. } else {
  327. echo '<div class="error">' . _UE_ERROR_USER_NOT_SYNCHRONIZED . '</div>';
  328. }
  329. }
  330. function userSave( $option, $uid ) {
  331. global $_CB_framework, $_CB_database, $ueConfig, $_POST, $_PLUGINS;
  332. // simple spoof check security
  333. cbSpoofCheck( 'userEdit' );
  334. // check rights to access:
  335. if ( $uid == null ) {
  336. echo _UE_USER_PROFILE_NOT;
  337. return;
  338. }
  339. $msg = cbCheckIfUserCanPerformUserTask( $uid, 'allowModeratorsUserEdit' );
  340. if ( $msg ) {
  341. echo $msg;
  342. return;
  343. }
  344. $_PLUGINS->loadPluginGroup('user');
  345. // Get current user state:
  346. $userComplete = new moscomprofilerUser( $_CB_database );
  347. if ( ! $userComplete->load( (int) $uid ) ) {
  348. echo _UE_USER_PROFILE_NOT;
  349. return;
  350. }
  351. // Update lastupdatedate of profile by user:
  352. if ( $_CB_framework->myId() == $uid ) {
  353. $userComplete->lastupdatedate = date( 'Y-m-d H:i:s' );
  354. }
  355. // Store new user state:
  356. $saveResult = $userComplete->saveSafely( $_POST, $_CB_framework->getUi(), 'profile' );
  357. if ( ! $saveResult ) {
  358. $regErrorMSG = $userComplete->getError();
  359. echo "<script type="text/javascript">alert('" . str_replace( '\\n', '\n', addslashes( strip_tags( str_replace( '<br />', 'n', $regErrorMSG ) ) ) ) . "'); </script>n";
  360. // userEdit( $option, $uid, _UE_UPDATE, $userComplete->getError() );
  361. HTML_comprofiler::userEdit( $userComplete, $option, _UE_UPDATE, $regErrorMSG );
  362. return;
  363. }
  364. cbRedirectToProfile( $uid, _USER_DETAILS_SAVE );
  365. }
  366. function userAvatar( $option, $uid, $submitvalue) {
  367. global $_CB_database, $_CB_framework, $_REQUEST, $ueConfig, $_PLUGINS, $_FILES;
  368. if ( ! $uid ) {
  369. $uid = $_CB_framework->myId();
  370. }
  371. if ( ! $uid ) {
  372. echo _UE_NOT_AUTHORIZED;
  373. return;
  374. }
  375. $msg = cbCheckIfUserCanPerformUserTask( $uid, 'allowModeratorsUserEdit');
  376. if ( $msg ) {
  377. echo $msg;
  378. return;
  379. }
  380. $row = new moscomprofilerUser( $_CB_database );
  381. if ( ! $row->load( (int) $uid ) ) {
  382. echo _UE_NOSUCHPROFILE; 
  383. return; 
  384. }
  385. $do = cbGetParam( $_REQUEST, 'do', 'init' );
  386. if ( $do == 'init' ) {
  387. HTML_comprofiler::userAvatar( $row, $option, $submitvalue);
  388. } elseif ( $do == 'validate' ) {
  389. // simple spoof check security
  390. cbSpoofCheck( 'userAvatar' );
  391. if ( ! $ueConfig['allowAvatarUpload'] ) {
  392. cbNotAuth();
  393. return;
  394. }
  395. $isModerator=isModerator( $_CB_framework->myId() );
  396. if ( ( ! isset( $_FILES['avatar']['tmp_name'] ) )
  397. || empty( $_FILES['avatar']['tmp_name'] )
  398. || ( $_FILES['avatar']['error'] != 0 )
  399. || ( ! is_uploaded_file( $_FILES['avatar']['tmp_name'] ) )
  400. ) {
  401. cbRedirectToProfile( $row->id, _UE_UPLOAD_ERROR_EMPTY, 'userAvatar' );
  402. }
  403. $_PLUGINS->loadPluginGroup( 'user' );
  404. $_PLUGINS->trigger( 'onBeforeUserAvatarUpdate', array( &$row, &$row, $isModerator, &$_FILES['avatar']['tmp_name'] ) );
  405. if ($_PLUGINS->is_errors()) {
  406. cbRedirectToProfile( $row->id, $_PLUGINS->getErrorMSG(), 'userAvatar' );
  407. }
  408. $imgToolBox = new imgToolBox();
  409. $imgToolBox->_conversiontype = $ueConfig['conversiontype'];
  410. $imgToolBox->_IM_path = $ueConfig['im_path'];
  411. $imgToolBox->_NETPBM_path = $ueConfig['netpbm_path'];
  412. $imgToolBox->_maxsize = $ueConfig['avatarSize'];
  413. $imgToolBox->_maxwidth = $ueConfig['avatarWidth'];
  414. $imgToolBox->_maxheight = $ueConfig['avatarHeight'];
  415. $imgToolBox->_thumbwidth = $ueConfig['thumbWidth'];
  416. $imgToolBox->_thumbheight = $ueConfig['thumbHeight'];
  417. $imgToolBox->_debug = 0;
  418. $allwaysResize = ( isset( $ueConfig['avatarResizeAlways'] ) ? $ueConfig['avatarResizeAlways'] : 1 );
  419. $newFileName = $imgToolBox->processImage( $_FILES['avatar'], uniqid($row->id."_"), $_CB_framework->getCfg('absolute_path') . '/images/comprofiler/', 0, 0, 1, $allwaysResize );
  420. if ( ! $newFileName ) {
  421. cbRedirectToProfile( $row->id, $imgToolBox->_errMSG, 'userAvatar' );
  422. }
  423. if ($row->avatar != null && $row->avatar!="") {
  424. deleteAvatar($row->avatar);
  425. }
  426. if ($ueConfig['avatarUploadApproval']==1 && $isModerator==0) {
  427. $cbNotification = new cbNotification();
  428. $cbNotification->sendToModerators(_UE_IMAGE_ADMIN_SUB,_UE_IMAGE_ADMIN_MSG);
  429. $_CB_database->setQuery("UPDATE #__comprofiler SET avatar='" . $_CB_database->getEscaped($newFileName) . "', avatarapproved=0 WHERE id=" . (int) $row->id);
  430. $redMsg = _UE_UPLOAD_PEND_APPROVAL;
  431. } else {
  432. $_CB_database->setQuery("UPDATE #__comprofiler SET avatar='" . $_CB_database->getEscaped($newFileName) . "', avatarapproved=1, lastupdatedate='".date('Y-m-dTH:i:s')."' WHERE id=" . (int) $row->id);
  433. $redMsg = _UE_UPLOAD_SUCCESSFUL;
  434. }
  435. $_CB_database->query();
  436. $_PLUGINS->trigger( 'onAfterUserAvatarUpdate', array(&$row,&$row,$isModerator,$newFileName) );
  437. cbRedirectToProfile( $row->id, $redMsg );
  438. } elseif ( $do == 'fromgallery' ) {
  439. // simple spoof check security
  440. cbSpoofCheck( 'userAvatar' );
  441. if( ! $ueConfig['allowAvatarGallery'] ) {
  442. cbNotAuth();
  443. return;
  444. }
  445. $newAvatar = cbGetParam( $_POST, 'newavatar', null );
  446. if ( ( $newAvatar == '' ) || preg_match( '/[^-_a-zA-Z0-9.]/', $newAvatar ) || ( strpos( $newAvatar, '..' ) !== false ) ) {
  447. cbRedirectToProfile( $row->id, _UE_UPLOAD_ERROR_CHOOSE, 'userAvatar' );
  448. }
  449. $_CB_database->setQuery( "UPDATE #__comprofiler SET avatar = " . $_CB_database->Quote( 'gallery/' . $newAvatar )
  450. . ", avatarapproved=1, lastupdatedate = " . $_CB_database->Quote( date('Y-m-d H:i:s') )
  451. . " WHERE id = " . (int) $row->id);
  452. if( ! $_CB_database->query() ) {
  453. $msg = _UE_USER_PROFILE_NOT;
  454. }else {
  455. // delete old avatar:
  456. deleteAvatar( $row->avatar );
  457. $msg = _UE_USER_PROFILE_UPDATED;
  458. }
  459. cbRedirectToProfile( $row->id, $msg );
  460. } elseif ( $do == 'deleteavatar' ) {
  461. if ( $row->avatar != null && $row->avatar != "" ) {
  462. deleteAvatar( $row->avatar );
  463. $_CB_database->setQuery("UPDATE  #__comprofiler SET avatar=null, avatarapproved=1, lastupdatedate='" . date('Y-m-d H:i:s') . "' WHERE id=" . (int) $row->id);
  464. $_CB_database->query();
  465. }
  466. cbRedirectToProfile( $row->id, _USER_DETAILS_SAVE );
  467. }
  468. }
  469. function & loadComprofilerUser( $uid ) {
  470. global $_CB_framework, $_CB_database, $_REQUEST;
  471. if ( ! isset( $_REQUEST['user'] ) ) {
  472. if ( ! $uid ) {
  473. $null = null;
  474. return $null;
  475. }
  476. } else {
  477. $userReq = urldecode( stripslashes( cbGetParam( $_REQUEST, 'user' ) ) );
  478. $len = strlen( $userReq );
  479. if ( ( $len > 2 ) && ( $userReq[0] == "'" ) && ( $userReq[$len-1] == "'" ) ) {
  480. $userReq = substr($userReq, 1, $len-2);
  481. $uid = $_CB_framework->getUserIdFrom( 'username', utf8ToISO( $userReq ) );
  482. } else {
  483. $uid = (int) $userReq;
  484. }
  485. }
  486. if ( $uid ) {
  487. $user = new moscomprofilerUser( $_CB_database );
  488. if ( $user->load( (int) $uid ) ) {
  489. return $user;
  490. }
  491. }
  492. $null = null;
  493. return $null;
  494. }
  495. function userProfile( $option, $uid, $submitvalue) {
  496. global $_CB_database, $_REQUEST, $ueConfig, $_CB_framework;
  497. if ( isset( $_REQUEST['user'] ) ) {
  498. if ( ! allowAccess( $ueConfig['allow_profileviewbyGID'], 'RECURSE', userGID( $_CB_framework->myId() ) ) ) {
  499. if ( ( $_CB_framework->myId() < 1 )
  500. && ( ! ( ( ( $_CB_framework->getCfg( 'allowUserRegistration' ) == '0' )
  501.         && ( ( ! isset($ueConfig['reg_admin_allowcbregistration']) ) || $ueConfig['reg_admin_allowcbregistration'] != '1' ) )
  502. )
  503. )
  504. &&
  505. allowAccess( $ueConfig['allow_profileviewbyGID'], 'RECURSE', $_CB_framework->acl->get_group_id('Registered','ARO') )
  506. ) {
  507. echo _UE_REGISTERFORPROFILEVIEW;
  508. } else {
  509. echo _UE_NOT_AUTHORIZED;
  510. }
  511. return;
  512. }
  513. } else {
  514. if ($uid==0) {
  515. echo _UE_REGISTERFORPROFILE;
  516. return;
  517. }
  518. }
  519. $user = loadComprofilerUser( $uid );
  520. if ( $user === null ) { 
  521. echo _UE_NOSUCHPROFILE; 
  522. return; 
  523. }
  524. HTML_comprofiler::userProfile( $user, $option, $submitvalue);
  525. }
  526. // NB for now duplicated in frontend an admin backend:
  527. function tabClass( $option, $task, $uid ) {
  528. global $_CB_framework, $_PLUGINS, $_REQUEST, $_POST;
  529. $user = loadComprofilerUser( $uid );
  530. $unsecureChars = array( '/', '\', ':', ';', '{', '}', '(', ')', """, "'", '.', ',', "", ' ', "t", "n", "r", "x0B" );
  531. if ( $task == 'fieldclass' ) {
  532. if ( $user && $user->id ) {
  533. $msg = cbCheckIfUserCanPerformUserTask( $user->id, 'allowModeratorsUserEdit' );
  534. if ( $msg ) {
  535. echo $msg;
  536. return;
  537. }
  538. }
  539. $fieldName = trim( substr( str_replace( $unsecureChars, '', urldecode( stripslashes( cbGetParam( $_REQUEST, "field" ) ) ) ), 0, 50 ) );
  540. if ( ! $fieldName ) {
  541. echo 'no field';
  542. return;
  543. }
  544. } elseif ( $task == 'tabclass' ) {
  545. $tabClassName = urldecode( stripslashes( cbGetParam( $_REQUEST, "tab" ) ) );
  546. if ( ! $tabClassName ) {
  547. return;
  548. }
  549. $pluginName = null;
  550. $tabClassName = substr( str_replace( $unsecureChars, '', $tabClassName ), 0, 32 );
  551. $method = 'getTabComponent';
  552. } elseif ( $task == 'pluginclass' ) {
  553. $pluginName = urldecode( stripslashes( cbGetParam( $_REQUEST, "plugin" ) ) );
  554. if ( ! $pluginName ) {
  555. return;
  556. }
  557. $tabClassName = 'CBplug_' . strtolower( substr( str_replace( $unsecureChars, '', $pluginName ), 0, 32 ) );
  558. $method = 'getCBpluginComponent';
  559. }
  560. $tabs = new cbTabs( 0, 1, null, false ); // function cbTabs($useCookies, $ui, $calendars=null, $outputTabpaneScript=true) {
  561. if ( $task == 'fieldclass' ) {
  562. $result = $tabs->fieldCall( $fieldName, $user, $_POST );
  563. } else {
  564. $result = $tabs->tabClassPluginTabs( $user, $_POST, $pluginName, $tabClassName, $method );
  565. }
  566. if ( $result === false ) {
  567.   if( $_PLUGINS->is_errors() ) {
  568. echo "<script type="text/javascript">alert("" . $_PLUGINS->getErrorMSG() . ""); </script>n";
  569.   }
  570. } elseif ( $result !== null ) {
  571. echo $result;
  572. }
  573. }
  574. function usersList( $uid ) {
  575. global $_CB_database, $_CB_framework, $ueConfig, $Itemid, $_PLUGINS, $_POST, $_REQUEST;
  576. $search = null;
  577. // $searchPOST = stripslashes( cbGetParam( $_POST, 'search' ) );
  578. $searchGET = cbGetParam( $_GET, 'search' );
  579. $limitstart = (int) cbGetParam( $_REQUEST, 'limitstart', 0 );
  580. $searchmode = (int) cbGetParam( $_REQUEST, 'searchmode', 0 );
  581. // old search on formated name:
  582. /* if ( $searchPOST || count( $_POST ) ) {
  583. // simple spoof check security
  584. cbSpoofCheck( 'usersList' );
  585. if ( cbGetParam( $_GET, "action" ) == "search" ) {
  586. $search = $searchPOST;
  587. }
  588. } else
  589. */
  590. if ( ( $searchGET !== null ) || $limitstart ) {
  591. cbSpoofCheck( 'usersList', 'GET' );
  592. if ( isset( $_GET['limitstart'] ) ) {
  593. $search = stripslashes( $searchGET );
  594. }
  595. }
  596. // get my user and gets the list of user lists he is allowed to see (ACL):
  597. $myUser = new moscomprofilerUser( $_CB_database );
  598. if ( $uid ) {
  599. $myUser->load( (int) $uid );
  600. }
  601. $useraccessgroupSQL = " AND useraccessgroupid IN (".implode(',',getChildGIDS(userGID($uid))).")";
  602. $_CB_database->setQuery( "SELECT listid, title FROM #__comprofiler_lists WHERE published=1" . $useraccessgroupSQL . " ORDER BY ordering" );
  603. $plists = $_CB_database->loadObjectList();
  604. $lists = array();
  605. $publishedlists = array();
  606. for ( $i=0, $n=count( $plists ); $i < $n; $i++ ) {
  607. $plist =& $plists[$i];
  608.     $publishedlists[] = moscomprofilerHTML::makeOption( $plist->listid, cbReplaceVars( $plist->title, $myUser ) );
  609. }
  610. // select either list selected or default list to which he has access (ACL):
  611. if ( isset( $_POST['listid'] ) ) {
  612. $listid = (int) cbGetParam( $_POST, 'listid', 0 );
  613. } else {
  614. $listid = (int) cbGetParam( $_GET, 'listid', 0 );
  615. }
  616. if ( $listid == 0 ) {
  617. $_CB_database->setQuery( "SELECT listid FROM #__comprofiler_lists "
  618. . "n WHERE `default`=1 AND published=1" . $useraccessgroupSQL );
  619. $listid = (int) $_CB_database->loadresult();
  620. if ( $listid == 0 && ( count( $plists ) > 0 ) ) {
  621. $listid = (int) $plists[0]->listid;
  622. }
  623. }
  624. if ( ! ( $listid > 0 ) ) {
  625. echo _UE_NOLISTFOUND;
  626. return;
  627. }
  628. // generates the drop-down list of lists:
  629. if ( count( $plists ) > 1 ) {
  630. $lists['plists'] = moscomprofilerHTML::selectList( $publishedlists, 'listid', 'class="inputbox" size="1" onchange="this.form.submit();"', 'value', 'text', $listid, 1 );
  631. } else {
  632. $lists['plists'] = null;
  633. }
  634. // loads the list record:
  635. $row = new moscomprofilerLists( $_CB_database );
  636. if ( ( ! $row->load( (int) $listid ) ) || ( $row->published != 1 ) ) {
  637. echo _UE_LIST_DOES_NOT_EXIST;
  638. return;
  639. }
  640. if ( ! allowAccess( $row->useraccessgroupid,'RECURSE', userGID($uid) ) ) {
  641. echo _UE_NOT_AUTHORIZED;
  642. return;
  643. }
  644. $params = new cbParamsBase( $row->params );
  645. $limit = (int) $params->get( 'list_limit' );
  646. if ( $limit == 0 ) {
  647. $limit = (int) $ueConfig['num_per_page'];
  648. }
  649. $showPaging = $params->get( 'list_paging', 1 );
  650. if ( $showPaging != 1 ) {
  651. $limitstart = 0;
  652. }
  653. $isModerator = isModerator( $_CB_framework->myId() );
  654. $_PLUGINS->loadPluginGroup( 'user' );
  655. $plugSearchFieldsArray = $_PLUGINS->trigger( 'onStartUsersList', array( &$listid, &$row, &$search, &$limitstart, &$limit ) );
  656. // handles the users allowed to be listed in the list by ACL:
  657. $allusergids = array();
  658. $usergids = explode( ',', $row->usergroupids );
  659. /* This was a bug tending to list admins when "public backend" was checked, and all frontend users when "public backend was checked. Now just ignore them:
  660. foreach( $usergids AS $usergid ) {
  661. $allusergids[] = $usergid;
  662. if ($usergid==29 || $usergid==30) {
  663. $groupchildren = array();
  664. $groupchildren = $_CB_framework->acl->get_group_children( $usergid, 'ARO','RECURSE' );
  665. $allusergids = array_merge($allusergids,$groupchildren);
  666. }
  667. }
  668. */
  669. $allusergids = array_diff( $usergids, array( 29, 30 ) );
  670. $usergids = implode( ",", $allusergids );
  671. // build SQL Select query:
  672. if( $row->sortfields != '' ) {
  673. $orderby = "n ORDER BY " . $row->sortfields;
  674. }
  675. $filterby = '';
  676. if ( $row->filterfields != '' ) {
  677. $filterRules = utf8RawUrlDecode( substr( $row->filterfields, 1 ) );
  678. if ( $_CB_framework->myId() ) {
  679. $user = new moscomprofilerUser( $_CB_database );
  680. if ( $user->load( (int) $_CB_framework->myId() ) ) {
  681. $filterRules = cbReplaceVars( $filterRules, $user, array( $_CB_database, 'getEscaped' ), false, array() );
  682. }
  683. }
  684. $filterby = " AND ". $filterRules;
  685. }
  686. // Prepare part after SELECT .... " and before "FROM" :
  687. $tableReferences = array( '#__comprofiler' => 'ue', '#__users' => 'u' );
  688. // Fetch all fields:
  689. $tabs = new cbTabs( 0, 1 );
  690. $allFields = $tabs->_getTabFieldsDb( null, $myUser, 'view' );
  691. // $_CB_database->setQuery( "SELECT * FROM #__comprofiler_fields WHERE published = 1" );
  692. // $allFields = $_CB_database->loadObjectList( 'fieldid', 'moscomprofilerFields', array( &$_CB_database ) );
  693. //Make columns array. This array will later be constructed from the tabs table:
  694. $columns = array();
  695. for ( $i = 1; $i < 50; ++$i ) {
  696. $enabledVar = "col".$i."enabled";
  697. if ( ! isset( $row->$enabledVar ) ) {
  698. break;
  699. }
  700. $titleVar = "col".$i."title";
  701. $fieldsVar = "col".$i."fields";
  702. $captionsVar = "col".$i."captions";
  703. if ( $row->$enabledVar == 1 ) {
  704. $col = new stdClass();
  705. $col->fields = ( $row->$fieldsVar ? explode( '|*|', $row->$fieldsVar ) : array() );
  706. $col->title = $row->$titleVar;
  707. $col->captions = $row->$captionsVar;
  708. // $col->sort = 1; //All columns can be sorted
  709. $columns[$i] = $col;
  710. }
  711. }
  712. // build fields and tables accesses, also check for searchable fields:
  713. $searchableFields = array();
  714. $fieldsSQL = getFieldsSQL( $columns, $allFields, $tableReferences, $searchableFields, $params );
  715. $_PLUGINS->trigger( 'onAfterUsersListFieldsSql', array( &$columns, &$allFields, &$tableReferences ) );
  716. $tablesSQL = array();
  717. $joinsSQL = array();
  718. $tablesWhereSQL = array( 'block' => 'u.block = 0',
  719. 'approved' => 'ue.approved = 1',
  720. 'confirmed' => 'ue.confirmed = 1'
  721.  );
  722. if ( ! $isModerator ) {
  723. $tablesWhereSQL['banned'] = 'ue.banned = 0';
  724. }
  725. if ( $usergids ) {
  726. $tablesWhereSQL['gid'] = 'u.gid IN (' . $usergids . ')';
  727. }
  728. foreach ( $tableReferences as $table => $name ) {
  729. $tablesSQL[] = $table . ' ' . $name;
  730. if ( $name != 'u' ) {
  731. $tablesWhereSQL[] = "u.`id` = " . $name . ".`id`";
  732. }
  733. }
  734. // handles search criterias:
  735. $searchType = $params->get( 'list_compare_types', 0 );
  736. $searchVals = new stdClass();
  737. $searchesFromFields = $tabs->applySearchableContents( $searchableFields, $searchVals, $_GET /*, $searchType */ );
  738. $whereFields = $searchesFromFields->reduceSqlFormula( $tableReferences, TRUE );
  739. if ( $whereFields ) {
  740. $tablesWhereSQL[] = '(' . $whereFields . ')';
  741. /*
  742. if ( $search === null ) {
  743. $search = '';
  744. }
  745. */
  746. }
  747. $_PLUGINS->trigger( 'onBeforeUsersListBuildQuery', array( &$tablesSQL, &$joinsSQL, &$tablesWhereSQL ) );
  748. $queryFrom = "FROM " . implode( ', ', $tablesSQL )
  749. . ( count( $joinsSQL ) ? "n " . implode( "n ", $joinsSQL ) : '' )
  750. . "n WHERE " . implode( "n AND ", $tablesWhereSQL );
  751. // handles old formatted names search:
  752. /*
  753. if ( $search != '' ) {
  754. $searchSQL = cbEscapeSQLsearch( strtolower( $_CB_database->getEscaped( $search ) ) );
  755. $queryFrom  .= " AND (";
  756. $searchFields = array();
  757. if ( $ueConfig['name_format']!='3' ) {
  758. $searchFields[] = "u.name LIKE '%%s%'";
  759. }
  760. if ( $ueConfig['name_format']!='1' ) {
  761. $searchFields[] = "u.username LIKE '%%s%'";
  762. }
  763. if ( is_array( $plugSearchFieldsArray ) ) {
  764. foreach ( $plugSearchFieldsArray as $v ) {
  765. if ( is_array( $v ) ) {
  766. $searchFields = array_merge( $searchFields, $v );
  767. }
  768. }
  769. }
  770. $queryFrom .= str_replace( '%s', $searchSQL, implode( " OR ", $searchFields ) );
  771. $queryFrom .= ")";
  772. }
  773. */
  774. $queryFrom .= " " . $filterby;
  775. $_PLUGINS->trigger( 'onBeforeUsersListQuery', array( &$queryFrom, 1 ) ); // $uid = 1
  776. // counts number of users and loads the listed fields of the users if not in search-form-only mode:
  777. if ( $searchmode == 0 ) {
  778. $_CB_database->setQuery( "SELECT COUNT(*) " . $queryFrom );
  779. $total = $_CB_database->loadResult();
  780. if ( ( $limit > $total ) || ( $limitstart >= $total ) ) {
  781. $limitstart = 0;
  782. }
  783. $query = "SELECT u.id, ue.banned, '' AS 'NA' " . ( $fieldsSQL ? ", " . $fieldsSQL . " " : '' ) . $queryFrom . " " . $orderby
  784. . "n LIMIT " . (int) $limitstart . ", " . (int) $limit;
  785. $_CB_database->setQuery($query);
  786. $users = $_CB_database->loadObjectList( null, 'moscomprofilerUser', array( &$_CB_database ) );
  787. if ( count( get_object_vars( $searchVals ) ) > 0 ) {
  788. $search = '';
  789. } else {
  790. $search = null;
  791. }
  792. } else {
  793. $total = null;
  794. $users = array();
  795. if ( $search === null ) {
  796. $search = '';
  797. }
  798. }
  799. // Compute itemId of users in users-list:
  800. if ( $Itemid ) {
  801. $option_itemid = (int) $Itemid;
  802. } else {
  803. $option_itemid = getCBprofileItemid( 0 );
  804. }
  805. HTML_comprofiler::usersList( $row, $users, $columns, $allFields, $lists, $listid, $search, $searchmode, $option_itemid, $limitstart, $limit, $total, $myUser, $searchableFields, $searchVals, $tabs, $searchType, $showPaging );
  806. }
  807. /**
  808.  * Creates the column references for the userlist query
  809.  *
  810.  * @param  array         $columns
  811.  * @param  array         $allFields
  812.  * @param  array         $tables
  813.  * @param  array         $searchableFields
  814.  * @param  cbParamsBase  $params
  815.  * @return string
  816.  */
  817. function getFieldsSQL( &$columns, &$allFields, &$tables, &$searchableFields, &$params ){
  818. $colRefs = array();
  819. $newtableindex = 0;
  820. $list_search = (int) $params->get( 'list_search', 1 );
  821. foreach ( $columns as $i => $column ) {
  822. foreach ( $column->fields as $k => $fieldid ) {
  823. if ( isset( $allFields[$fieldid] ) ) {
  824. // now done in field fetching:
  825. // if ( ! is_object( $allFields[$fieldid]->params ) ) {
  826. // $allFields[$fieldid]->params = new cbParamsBase( $allFields[$fieldid]->params );
  827. // }
  828. $field = $allFields[$fieldid];
  829. if ( ! array_key_exists( $field->table, $tables ) ) {
  830. $newtableindex++;
  831. $tables[$field->table] =  't'.$newtableindex;
  832. }
  833. if ( $field->name == 'avatar' ) {
  834. $colRefs['avatarapproved'] = 'ue.`avatarapproved`';
  835. $colRefs['name'] = 'u.`name`';
  836. $colRefs['username'] = 'u.`username`';
  837. }
  838. if ( $field->type == 'formatname' ) {
  839. $colRefs['name'] = 'u.`name`';
  840. $colRefs['username'] = 'u.`username`';
  841. }
  842. if ( $field->name != 'NA' ) { // CB 1.1 table compatibility : TBD: remove after CB 1.2
  843. foreach ( $field->getTableColumns() as $col ) {
  844. $colRefs[$col] = $tables[$field->table] . '.' . $field->_db->NameQuote( $col );
  845. }
  846. }
  847. if ( $field->searchable && ( $list_search == 1 ) ) {
  848. $searchableFields[] =& $allFields[$fieldid];
  849. }
  850. $allFields[$fieldid]->_listed = true;
  851. } else {
  852. // field unpublished or deleted but still in list: remove field from columns, so that we don't handle it:
  853. unset( $columns[$i]->fields[$k] );
  854. }
  855. }
  856. }
  857. if ( $list_search == 2 ) {
  858. foreach ( $allFields as $fieldid => $field ) {
  859. if ( $field->searchable ) {
  860. $searchableFields[] =& $allFields[$fieldid];
  861. }
  862. }
  863. }
  864. return implode( ', ', $colRefs );
  865. }
  866. function lostPassForm( $option ) {
  867. global $_CB_framework;
  868. $_CB_framework->setPageTitle( _PROMPT_PASSWORD );
  869. HTML_comprofiler::lostPassForm( $option );
  870. }
  871. function sendNewPass( $option ) {
  872. global $_CB_framework, $_CB_database, $Itemid, $_PLUGINS, $_POST;
  873. // simple spoof check security
  874. cbSpoofCheck( 'lostPassForm' );
  875. cbRegAntiSpamCheck();
  876. // ensure no malicous sql gets past
  877. $checkusername = trim( cbGetParam( $_POST, 'checkusername', '' ) );
  878. $confirmEmail = trim( cbGetParam( $_POST, 'checkemail', ''    ) );
  879. $_PLUGINS->loadPluginGroup('user');
  880. $_PLUGINS->trigger( 'onStartNewPassword', array( &$checkusername, &$confirmEmail ));
  881. if ($_PLUGINS->is_errors()) {
  882. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); window.history.go(-1); </script>n";
  883. exit();
  884. }
  885. // these two are used by _NEWPASS_SUB message below:
  886. $_live_site = $_CB_framework->getCfg( 'live_site' );
  887. $_sitename = ""; // NEEDED BY _NEWPASS_SUB for  sitename already added in subject by cbNotification class. was = $_CB_framework->getCfg( 'sitename' );
  888. if ( $confirmEmail && ! $checkusername ) {
  889. $_CB_database->setQuery( "SELECT id, username FROM #__users"
  890. . "n WHERE email = '" . $confirmEmail . "'"
  891. );
  892. $userIdUsername = null;
  893. $result = $_CB_database->loadObjectList( $userIdUsername );
  894. if ( ( ! is_array( $result ) ) || ( count( $result ) == 0 ) ) {
  895. cbRedirect( cbSef( 'index.php?option=' . $option . '&amp;task=lostPassword' . ( $Itemid ? '&amp;Itemid=' . (int) $Itemid : '' ), false ), sprintf( _UE_EMAIL_DOES_NOT_EXISTS_ON_SITE, htmlspecialchars( $confirmEmail ) ) );
  896. }
  897. foreach ( $result as $userIdUsername ) {
  898. $message = str_replace( 'n', "n", sprintf( _UE_USERNAMEREMINDER_MSG, $_CB_framework->getCfg( 'sitename' ), $userIdUsername->username, $_live_site ) );
  899. $subject = sprintf( _UE_USERNAMEREMINDER_SUB, $userIdUsername->username );
  900. $_PLUGINS->trigger( 'onBeforeUsernameReminder', array( $userIdUsername->id, &$subject, &$message ));
  901. if ($_PLUGINS->is_errors()) {
  902. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); window.history.go(-1); </script>n";
  903. exit();
  904. }
  905. $cbNotification = new cbNotification();
  906. $res = $cbNotification->sendFromSystem( $userIdUsername->id, $subject, $message );
  907. if ( ! $res ) {
  908. break;
  909. }
  910. }
  911. $_PLUGINS->trigger( 'onAfterUsernameReminder', array( &$result, &$res ) );
  912. if ( $res ) {
  913. cbRedirect( cbSef("index.php?option=$option&amp;task=done".($Itemid ? "&amp;Itemid=". (int) $Itemid : ""), false ), sprintf( _UE_USERNAME_REMINDER_SENT, htmlspecialchars( $confirmEmail ) ) );
  914. } else {
  915. cbRedirect( cbSef("index.php?option=$option&amp;task=done".($Itemid ? "&amp;Itemid=". (int) $Itemid : ""), false ),_UE_EMAIL_SENDING_ERROR );
  916. }
  917. } else {
  918. $_CB_database->setQuery( "SELECT id FROM #__users"
  919. . "n WHERE username = '" . $checkusername . "' AND email = '" . $confirmEmail . "'"
  920. );
  921. $user_id = $_CB_database->loadResult();
  922. if ( ( ! $user_id ) || ( ! $checkusername ) || ( ! $confirmEmail ) ) {
  923. cbRedirect( cbSef( 'index.php?option=' . $option . '&amp;task=lostPassword' . ( $Itemid ? '&amp;Itemid=' . (int) $Itemid : '' ), false ), _ERROR_PASS );
  924. }
  925. $newpass = cbMakeRandomString( 8, true );
  926. $message = str_replace( 'n', "n", sprintf( _UE_NEWPASS_MSG, $checkusername, $_live_site, $newpass ) );
  927. $subject = sprintf( _UE_NEWPASS_SUB, $checkusername );
  928. $_PLUGINS->trigger( 'onBeforeNewPassword', array( $user_id, &$newpass, &$subject, &$message ));
  929. if ($_PLUGINS->is_errors()) {
  930. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); window.history.go(-1); </script>n";
  931. exit();
  932. }
  933. $cbNotification = new cbNotification();
  934. $res = $cbNotification->sendFromSystem($user_id,$subject,$message);
  935. if ($res) {
  936. $_PLUGINS->trigger( 'onNewPassword', array($user_id,$newpass));
  937. $newpass = cbHashPassword( $newpass );
  938. $sql = "UPDATE #__users SET password = '" . $_CB_database->getEscaped( $newpass ) . "' WHERE id = " . (int) $user_id;
  939. $_CB_database->setQuery( $sql );
  940. if (!$_CB_database->query()) {
  941. die("SQL error" . $_CB_database->stderr(true));
  942. }
  943. cbRedirect( cbSef("index.php?option=$option&amp;task=done".($Itemid ? "&amp;Itemid=". (int) $Itemid : ""), false ), sprintf( _UE_NEWPASS_SENT, htmlspecialchars( $confirmEmail ) ) );
  944. } else {
  945. cbRedirect( cbSef("index.php?option=$option&amp;task=done".($Itemid ? "&amp;Itemid=". (int) $Itemid : ""), false ),_UE_NEWPASS_FAILED );
  946. }
  947. }
  948. }
  949. function registerForm( $option, $emailpass, $regErrorMSG = null ) {
  950. global $_CB_framework, $_CB_database, $ueConfig, $_PLUGINS, $_POST;
  951. if ( ( ( $_CB_framework->getCfg( 'allowUserRegistration' ) == '0' )
  952.    && ( ( ! isset($ueConfig['reg_admin_allowcbregistration']) ) || $ueConfig['reg_admin_allowcbregistration'] != '1' ) ) )
  953. {
  954. cbNotAuth();
  955. return;
  956. }
  957. if ( $_CB_framework->myId() ) {
  958. echo '<div class="error">' . _UE_ALREADY_LOGGED_IN . '</div>';
  959. return;
  960. }
  961. $fieldsQuery = null;
  962. $_PLUGINS->loadPluginGroup('user');
  963. $results = $_PLUGINS->trigger( 'onBeforeRegisterForm', array( $option, $emailpass, &$regErrorMSG, &$fieldsQuery ) );
  964. if($_PLUGINS->is_errors()) {
  965. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG(" ; "))."'); </script>n";
  966. echo $_PLUGINS->getErrorMSG("<br />");
  967. return;
  968. }
  969. if ( implode( '', $results ) != "" ) {
  970. $allResults = implode( "</div><div>", $results );
  971. echo "<div>" . $allResults . "</div>";
  972. return;
  973. }
  974. $userComplete = new moscomprofilerUser( $_CB_database );
  975. HTML_comprofiler::registerForm( $option, $emailpass, $userComplete, $regErrorMSG );
  976. }
  977. function saveRegistration( $option ) {
  978. global $_CB_framework, $_CB_database, $ueConfig, $_POST, $_PLUGINS;
  979. // simple spoof check security
  980. cbSpoofCheck( 'registerForm' );
  981. cbRegAntiSpamCheck();
  982. // Check rights to access:
  983. if ( ( ( $_CB_framework->getCfg( 'allowUserRegistration' ) == '0' )
  984.    && ( ( ! isset($ueConfig['reg_admin_allowcbregistration']) ) || $ueConfig['reg_admin_allowcbregistration'] != '1' ) )
  985.  || $_CB_framework->myId() ) {
  986. cbNotAuth();
  987. return;
  988. }
  989. if ( ! isset( $ueConfig['emailpass'] ) ) {
  990. $ueConfig['emailpass'] = '0';
  991. }
  992. $userComplete = new moscomprofilerUser( $_CB_database );
  993. // Pre-registration trigger:
  994. $_PLUGINS->loadPluginGroup('user');
  995. $_PLUGINS->trigger( 'onStartSaveUserRegistration', array() );
  996. if( $_PLUGINS->is_errors() ) {
  997. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); </script>n";
  998. $oldUserComplete = new moscomprofilerUser( $_CB_database );
  999. $userComplete->bindSafely( $_POST, $_CB_framework->getUi(), 'register', $oldUserComplete );
  1000. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, $_PLUGINS->getErrorMSG("<br />") );
  1001. return;
  1002. }
  1003. // Check if this user already registered with exactly this username and password:
  1004. $username = cbGetParam( $_POST, 'username', '' );
  1005. $usernameExists = $userComplete->loadByUsername( $username );
  1006. if ( $usernameExists ) {
  1007. $password = cbGetParam( $_POST, 'password', '', _CB_ALLOWRAW );
  1008. $passwordMatches = cbHashPassword( $password, $userComplete );
  1009. if ( $passwordMatches ) {
  1010. $pwd_md5 = $userComplete->password;
  1011. $userComplete->password = $password;
  1012. $messagesToUser = activateUser( $userComplete, 1, 'SameUserRegistrationAgain' );
  1013. $userComplete->password = $pwd_md5;
  1014. echo "n<div>" . implode( "</div>n<div>", $messagesToUser ) . "</div>n";
  1015. return;
  1016. } else {
  1017. $msg = sprintf( _UE_USERNAME_ALREADY_EXISTS, $username );
  1018. echo "<script type="text/javascript">alert('" . addslashes( $msg ) . "'); </script>n";
  1019. $oldUserComplete = new moscomprofilerUser( $_CB_database );
  1020. $userComplete->bindSafely( $_POST, $_CB_framework->getUi(), 'register', $oldUserComplete );
  1021. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, htmlspecialchars( $msg ) );
  1022. return;
  1023. }
  1024. }
  1025. // Store and check terms and conditions accepted (not a field yet !!!!):
  1026. if ( isset( $_POST['acceptedterms'] ) ) {
  1027. $userComplete->acceptedterms = ( (int) cbGetParam( $_POST, 'acceptedterms', 0 ) == 1 ? 1 : 0 );
  1028. } else {
  1029. $userComplete->acceptedterms = null;
  1030. }
  1031. if($ueConfig['reg_enable_toc']) {
  1032. if ( $userComplete->acceptedterms != 1 ) {
  1033. echo "<script type="text/javascript">alert('" . addslashes( unHtmlspecialchars( _UE_TOC_REQUIRED ) ) ."'); </script>n";
  1034. $oldUserComplete = new moscomprofilerUser( $_CB_database );
  1035. $userComplete->bindSafely( $_POST, $_CB_framework->getUi(), 'register', $oldUserComplete );
  1036. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, _UE_TOC_REQUIRED . '<br />' );
  1037. return;
  1038. }
  1039. }
  1040. // Set id to 0 for autoincrement and store IP address used for registration:
  1041. $userComplete->id   = 0;
  1042. $userComplete->registeripaddr = cbGetIPlist();
  1043. // Store new user state:
  1044. $saveResult = $userComplete->saveSafely( $_POST, $_CB_framework->getUi(), 'register' );
  1045. if ( $saveResult === false ) {
  1046. echo "<script type="text/javascript">alert('" . str_replace( '\\n', '\n', addslashes( strip_tags( str_replace( '<br />', 'n', $userComplete->getError() ) ) ) ) ."'); </script>n";
  1047. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, $userComplete->getError() );
  1048. return;
  1049. }
  1050. if ( $saveResult['ok'] === true ) {
  1051. $messagesToUser = activateUser( $userComplete, 1, "UserRegistration" );
  1052. }
  1053. foreach ( $saveResult['tabs'] as $res ) {
  1054. if ($res) {
  1055. $messagesToUser[] = $res;
  1056. }
  1057. }
  1058. if ( $saveResult['ok'] === false ) {
  1059. echo "<script type="text/javascript">alert('" . str_replace( '\\n', '\n', addslashes( strip_tags( str_replace( '<br />', 'n', $userComplete->getError() ) ) ) ) . "'); </script>n";
  1060. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, $userComplete->getError() );
  1061. return;
  1062. }
  1063. $_PLUGINS->trigger( 'onAfterUserRegistrationMailsSent', array( &$userComplete, &$userComplete, &$messagesToUser, $ueConfig['reg_confirmation'], $ueConfig['reg_admin_approval'], true));
  1064. foreach ( $saveResult['after'] as $res ) {
  1065. if ( $res ) {
  1066. echo "n<div>" . $res . "</div>n";
  1067. }
  1068. }
  1069. if ( $_PLUGINS->is_errors() ) {
  1070. echo $_PLUGINS->getErrorMSG();
  1071. HTML_comprofiler::registerForm( $option, $ueConfig['emailpass'], $userComplete, $_PLUGINS->getErrorMSG() );
  1072. return;
  1073. }
  1074. echo "n<div>" . implode( "</div>n<div>", $messagesToUser ) . "</div>n";
  1075. }
  1076. /**
  1077.  * Ajax function: Checks the availability of a username for registration and echoes a text containing the result of username search.
  1078.  *
  1079.  * @param string $username
  1080.  */
  1081. function performCheckUsername( $username, $function ) {
  1082. global $_CB_database, $ueConfig;
  1083. if ( ( ! isset( $ueConfig['reg_username_checker'] ) ) || ( ! $ueConfig['reg_username_checker'] ) ) {
  1084. echo _UE_NOT_AUTHORIZED;
  1085. exit();
  1086. }
  1087. // simple spoof check security
  1088. cbSpoofCheck( 'registerForm' );
  1089. cbRegAntiSpamCheck();
  1090. $username = stripslashes( $username );
  1091. $usernameISO = utf8ToISO( $username ); // ajax sends in utf8, we need to convert back to the site's encoding.
  1092. if ( $_CB_database->isDbCollationCaseInsensitive() ) {
  1093. $query = "SELECT COUNT(*) AS result FROM #__users WHERE username = " . $_CB_database->Quote( ( trim( $usernameISO ) ) );
  1094. } else {
  1095. $query = "SELECT COUNT(*) AS result FROM #__users WHERE LOWER(username) = " . $_CB_database->Quote( ( strtolower( trim( $usernameISO ) ) ) );
  1096. }
  1097. $_CB_database->setQuery($query);
  1098. $dataObj = null;
  1099. if ( $_CB_database->loadObject( $dataObj ) ) {
  1100. if ( $dataObj->result ) {
  1101. // funily, the output does not need to be UTF8 again:
  1102. if ( $function == 'testexists' ) {
  1103. echo ( '<span class="cb_result_ok">' . sprintf( _UE_USERNAME_EXISTS_ON_SITE, htmlspecialchars( $username ) ) . '</span>' );
  1104. } else {
  1105. echo ( '<span class="cb_result_error">' . sprintf( _UE_USERNAME_ALREADY_EXISTS, htmlspecialchars( $username ) ) . '</span>' );
  1106. }
  1107. } else {
  1108. if ( $function == 'testexists' ) {
  1109. echo ( '<span class="cb_result_error">' . sprintf( _UE_USERNAME_DOES_NOT_EXISTS_ON_SITE, htmlspecialchars( $username ) ) . '</span>' );
  1110. } else {
  1111. echo ( '<span class="cb_result_ok">' . sprintf( _UE_USERNAME_DOESNT_EXISTS, htmlspecialchars( $username ) ) . '</span>' );
  1112. }
  1113. }
  1114. } else {
  1115. echo ( '<span class="cb_result_error">' . _UE_SEARCH_ERROR . ' !' . '</span>' );
  1116. }
  1117. }
  1118. /**
  1119.  * Ajax function: Checks the availability of a username for registration and echoes a text containing the result of username search.
  1120.  *
  1121.  * @param string $username
  1122.  */
  1123. function performCheckEmail( $email, $function ) {
  1124. global $_CB_framework, $_CB_database, $ueConfig;
  1125. if ( ( ! isset( $ueConfig['reg_email_checker'] ) ) || ( ! $ueConfig['reg_email_checker'] ) ) {
  1126. echo _UE_NOT_AUTHORIZED;
  1127. exit();
  1128. }
  1129. // simple spoof check security
  1130. if ( ( ! cbSpoofCheck( 'registerForm', 'POST', 2 ) ) || ( ! cbRegAntiSpamCheck( 2 ) ) ) {
  1131. echo '<span class="cb_result_error">' . _UE_SESSION_EXPIRED . "</span>";
  1132. exit;
  1133. }
  1134. $email = stripslashes( $email );
  1135. $emailISO  = utf8ToISO( $email ); // ajax sends in utf8, we need to convert back to the site's encoding.
  1136. if ( $ueConfig['reg_email_checker'] > 1 ) {
  1137. if ( $_CB_database->isDbCollationCaseInsensitive() ) {
  1138. $query = "SELECT COUNT(*) AS result FROM #__users WHERE email = " . $_CB_database->Quote( ( trim( $emailISO ) ) );
  1139. } else {
  1140. $query = "SELECT COUNT(*) AS result FROM #__users WHERE LOWER(email) = " . $_CB_database->Quote( ( strtolower( trim( $emailISO ) ) ) );
  1141. }
  1142. $_CB_database->setQuery($query);
  1143. $dataObj = null;
  1144. if ( $_CB_database->loadObject( $dataObj ) ) {
  1145. if ( $function == 'testexists' ) {
  1146. if ( $dataObj->result ) {
  1147. echo '<span class="cb_result_ok">' . sprintf( _UE_EMAIL_EXISTS_ON_SITE, htmlspecialchars( $email ) ) . "</span>";
  1148. return;
  1149. } else {
  1150. echo '<span class="cb_result_error">' . sprintf( _UE_EMAIL_DOES_NOT_EXISTS_ON_SITE, htmlspecialchars( $email ) ) . "</span>";
  1151. return;
  1152. }
  1153. } else {
  1154. if ( $dataObj->result ) {
  1155. echo '<span class="cb_result_error">' . sprintf( _UE_EMAIL_ALREADY_REGISTERED, htmlspecialchars( $email ) ) . "</span>";
  1156. return;
  1157. }
  1158. }
  1159. }
  1160. }
  1161. if ( $function == 'testexists' ) {
  1162. echo _UE_NOT_AUTHORIZED;
  1163. return;
  1164. } else {
  1165. $checkResult = cbCheckMail( $_CB_framework->getCfg( 'mailfrom' ), $email );
  1166. }
  1167. switch ( $checkResult ) {
  1168. case -2:
  1169. echo '<span class="cb_result_error">' . sprintf( _UE_EMAIL_NOVALID, htmlspecialchars( $email ) ) . "</span>";
  1170. break;
  1171. case -1:
  1172. echo '<span class="cb_result_warning">' . sprintf( _UE_EMAIL_COULD_NOT_CHECK, htmlspecialchars( $email ) ) . "</span>";
  1173. break;
  1174. case 0:
  1175. if ( $ueConfig['reg_confirmation'] == 0 ) {
  1176. echo '<span class="cb_result_error">' . sprintf( _UE_EMAIL_INCORRECT_CHECK, htmlspecialchars( $email ) ) . "</span>";
  1177. } else {
  1178. echo '<span class="cb_result_error">' . sprintf( _UE_EMAIL_INCORRECT_CHECK_NEEDED, htmlspecialchars( $email ) ) . "</span>";
  1179. }
  1180. break;
  1181. case 1:
  1182. echo '<span class="cb_result_ok">' . sprintf( _UE_EMAIL_VERIFIED, htmlspecialchars( $email ) ) . "</span>";
  1183. break;
  1184. default:
  1185. echo '<span class="cb_result_error">performCheckEmail:: Unexpected cbCheckMail result.</span>';
  1186. break;
  1187. }
  1188. }
  1189. function login( $username=null, $passwd2=null ) {
  1190.     global $_CB_database, $_COOKIE, $_GET, $_POST, $_CB_framework, $ueConfig, $_PLUGINS;
  1191.     $spoofCheckOk = false;
  1192.     if ( cbSpoofCheck( 'login', 'POST', 2 ) ) {
  1193.      $spoofCheckOk = true;
  1194.     } else {
  1195. if ( is_callable("josSpoofCheck") && is_callable("josSpoofValue") ) {
  1196. $validate = josSpoofValue();
  1197.      if ( cbGetParam( $_POST, $validate ) ) {
  1198. josSpoofCheck(1);
  1199.      $spoofCheckOk = true;
  1200.      }
  1201. }
  1202.     }
  1203.     if ( ! $spoofCheckOk ) {
  1204.      echo  _UE_SESSION_EXPIRED . ' ' . _UE_PLEASE_REFRESH;
  1205.      return;
  1206.     }
  1207. $messagesToUser = array();
  1208.     $resultError = null;
  1209.     // $usercookie = cbGetParam( $_COOKIE, 'usercookie', '' );
  1210.     // $sessioncookie = cbGetParam( $_COOKIE, 'sessioncookie', '' );
  1211.     if ( !$username || !$passwd2 ) {
  1212. $username = trim( cbGetParam( $_POST, 'username', '' ) );
  1213. $passwd2 = trim( cbGetParam( $_POST, 'passwd', '', _CB_ALLOWRAW ) );
  1214.     }
  1215. $return = trim( cbGetParam( $_POST, 'return', null ) );
  1216. $message = trim( cbGetParam( $_POST, 'message', 0 ) );
  1217. //print "message:".$message;
  1218.     // $remember = trim( cbGetParam( $_POST, 'remember', '' ) );
  1219. // $lang = trim( cbGetParam( $_POST, 'lang', '' ) );
  1220. if ( !$username || !$passwd2 ) {
  1221. $resultError = _LOGIN_INCOMPLETE;
  1222. } else {
  1223. $_PLUGINS->loadPluginGroup('user');
  1224. $_PLUGINS->trigger( 'onBeforeLogin', array( &$username, &$passwd2 ) );
  1225. $alertmessages = array();
  1226. $showSysMessage = true;
  1227. $stopLogin = false;
  1228. $returnURL = null;
  1229. if($_PLUGINS->is_errors()) {
  1230. $resultError = $_PLUGINS->getErrorMSG();
  1231. } else {
  1232. /*
  1233. $_CB_database->setQuery( "SELECT * "
  1234. . "n FROM #__users u, "
  1235. . "n #__comprofiler ue "
  1236. . "n WHERE u.username='".$username."' AND u.id = ue.id"
  1237. );
  1238. $row = null;
  1239. if ( $_CB_database->loadObject( $row ) && cbHashPassword( $passwd2, $row ) ) {
  1240. */
  1241. $loginType = ( isset( $ueConfig['login_type'] ) ? $ueConfig['login_type'] : 0 );
  1242. // NEXT 3 LINES: CB 1.2 RC 2 + CB 1.2 specific : remove after !
  1243. if ( ! defined( '_UE_INCORRECT_EMAIL_OR_PASSWORD' ) ) {
  1244. DEFINE('_UE_INCORRECT_EMAIL_OR_PASSWORD','Incorrect email or password. Please try again.');
  1245. }
  1246. $row = new moscomprofilerUser( $_CB_database );
  1247. $foundUser = false;
  1248. if ( $loginType <= 1 ) {
  1249. $foundUser = $row->loadByUsername( stripslashes( $username ) ) && cbHashPassword( $passwd2, $row );
  1250. }
  1251. if ( ( ! $foundUser ) && ( $loginType >= 1 ) ) {
  1252. $foundUser = $row->loadByEmail( stripslashes( $username ) ) && cbHashPassword( $passwd2, $row );
  1253. if ( $foundUser ) {
  1254. $username = $row->username;
  1255. }
  1256. }
  1257. if ( $foundUser ) {
  1258. $pluginResults = $_PLUGINS->trigger( 'onDuringLogin', array( &$row, 1, &$return ) );
  1259. if ( is_array( $pluginResults ) && count( $pluginResults ) ) {
  1260. foreach ( $pluginResults as $res ) {
  1261. if ( is_array( $res ) ) {
  1262. if ( isset( $res['messagesToUser'] ) ) {
  1263. $messagesToUser[] = $res['messagesToUser'];
  1264. }
  1265. if ( isset( $res['alertMessage'] ) ) {
  1266. $alertmessages[] = $res['alertMessage'];
  1267. }
  1268. if ( isset( $res['showSysMessage'] ) ) {
  1269. $showSysMessage = $showSysMessage && $res['showSysMessage'];
  1270. }
  1271. if ( isset( $res['stopLogin'] ) ) {
  1272. $stopLogin = $stopLogin || $res['stopLogin'];
  1273. }
  1274. }
  1275. }
  1276. }
  1277. if($_PLUGINS->is_errors()) {
  1278. $resultError = $_PLUGINS->getErrorMSG();
  1279. }
  1280. elseif ( $stopLogin ) {
  1281. // login stopped: don't even check for errors...
  1282. }
  1283. elseif ($row->approved == 2){
  1284. $resultError = _LOGIN_REJECTED;
  1285. }
  1286. elseif ($row->confirmed != 1){
  1287. if ( $row->cbactivation == '' ) {
  1288. $row->store(); // just in case the activation code was missing
  1289. }
  1290. $cbNotification = new cbNotification();
  1291. $cbNotification->sendFromSystem($row->id,getLangDefinition(stripslashes($ueConfig['reg_pend_appr_sub'])),getLangDefinition(stripslashes($ueConfig['reg_pend_appr_msg'])));
  1292. $resultError = _LOGIN_NOT_CONFIRMED;
  1293. }
  1294. elseif ($row->approved == 0){
  1295. $resultError = _LOGIN_NOT_APPROVED;
  1296. }
  1297. elseif ($row->block == 1) {
  1298. $resultError = _UE_LOGIN_BLOCKED;
  1299. }
  1300. elseif ($row->lastvisitDate == '0000-00-00 00:00:00') {
  1301. if (isset($ueConfig['reg_first_visit_url']) and ($ueConfig['reg_first_visit_url'] != "")) {
  1302. $return = cbSef($ueConfig['reg_first_visit_url']);
  1303. }
  1304. $_PLUGINS->trigger( 'onBeforeFirstLogin', array( &$row, $username, $passwd2, &$return ));
  1305. if ($_PLUGINS->is_errors()) {
  1306. $resultError = $_PLUGINS->getErrorMSG( "<br />" );
  1307. }
  1308. }
  1309. } else {
  1310. if ( $loginType < 2 ) {
  1311. $resultError = _LOGIN_INCORRECT;
  1312. } else {
  1313. $resultError = _UE_INCORRECT_EMAIL_OR_PASSWORD;
  1314. }
  1315. }
  1316. }
  1317. if ( $resultError ) {
  1318. if ( $showSysMessage ) {
  1319. $alertmessages[] = $resultError;
  1320. }
  1321. } elseif ( ! $stopLogin ) {
  1322. $rememberMe = cbGetParam( $_POST, 'remember' );
  1323. $_CB_framework->login( $username, $passwd2, $rememberMe );
  1324. $_PLUGINS->trigger( 'onAfterLogin', array( &$row, true ) );
  1325. if ( $message && $showSysMessage ) {
  1326. $alertmessages[] = _LOGIN_SUCCESS;
  1327. }
  1328. if ( $return && !( strpos( $return, 'com_comprofiler') && ( strpos( $return, 'login') || strpos( $return, 'registers' ) || strpos( strtolower( $return ), 'lostpassword' ) ) ) ) {
  1329. // checks for the presence of a return url
  1330. // and ensures that this url is not the registration or login pages
  1331. $returnURL = (strncasecmp($return, "http:", 5)||strncasecmp($return, "https:", 6)) ? $return : cbSef($return);
  1332. } elseif ( ! $returnURL ) {
  1333. $returnURL = cbSef('index.php');
  1334. }
  1335. }
  1336. // JS Popup message
  1337. if ( count( $alertmessages ) > 0 ) {
  1338. echo '<script type="text/javascript"><!--//'."n";
  1339. echo 'alert( "' . str_replace( '<br />', 'n', implode( 'n', $alertmessages ) ) . '" );';
  1340. if ( $returnURL ) {
  1341. echo "window.location = '" . $returnURL . "';";
  1342. }
  1343. echo "n//-->n</script>n";
  1344. /*
  1345. **not sure if this is the best case but the 
  1346. **reason why we weren't seeing the login message was
  1347. **because we are immediately redirecting to another page
  1348. **so if we flush out the contents to the browser then we get the alert.
  1349. */
  1350. if (!$resultError && ( ! ( count( $messagesToUser ) > 0 ) ) && function_exists("ob_flush")) {
  1351. ob_flush(); // warning: this makes cbRedirect fail in IE6, as headers are already sent...JS redirect will work.
  1352. }
  1353. }
  1354. }
  1355. if ( count( $messagesToUser ) > 0 ) {
  1356. if ( $resultError ) {
  1357. echo "<div class="message">".$resultError."</div>";
  1358. }
  1359. echo "n<div>" . implode( "</div>n<div>", $messagesToUser ) . "</div>n";
  1360. } elseif ($resultError) {
  1361. echo "<div class="message">".$resultError."</div>";
  1362. } else {
  1363. cbRedirect( $returnURL );
  1364. }
  1365. }
  1366. function logout() {
  1367. global $_POST, $_CB_framework, $_CB_database, $_PLUGINS;
  1368. $return = trim( cbGetParam( $_POST, 'return', null ) );
  1369. $message = trim( cbGetParam( $_POST, 'message', 0 ) );
  1370. if ($return || $message) {
  1371.     $spoofCheckOk = false;
  1372.     if ( cbSpoofCheck( 'logout', 'POST', 2 ) ) {
  1373.      $spoofCheckOk = true;
  1374.     } else {
  1375. if ( is_callable("josSpoofCheck") && is_callable("josSpoofValue") ) {
  1376. $validate = josSpoofValue();
  1377.      if ( cbGetParam( $_POST, $validate ) ) {
  1378. josSpoofCheck(1);
  1379.      $spoofCheckOk = true;
  1380.      }
  1381. }
  1382.     }
  1383.     if ( ! $spoofCheckOk ) {
  1384.      echo  _UE_SESSION_EXPIRED . ' ' . _UE_PLEASE_REFRESH;
  1385.      return;
  1386.     }
  1387. }
  1388. $_CB_database->setQuery( "SELECT * "
  1389. . "nFROM #__users u, "
  1390. . "n#__comprofiler ue"
  1391. . "nWHERE u.id=" . (int) $_CB_framework->myId() . " AND u.id = ue.id"
  1392. );
  1393. $row = null;
  1394. $_CB_database->loadObject( $row );
  1395. $_PLUGINS->loadPluginGroup('user');
  1396. $_PLUGINS->trigger( 'onBeforeLogout', array($row));
  1397. if($_PLUGINS->is_errors()) {
  1398. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."');</script>n";
  1399. echo "<div class="message">".$_PLUGINS->getErrorMSG()."</div>";;
  1400. return;
  1401. }
  1402. $_CB_framework->logout();
  1403. $_PLUGINS->trigger( 'onAfterLogout', array($row, true));
  1404. // JS Popup message
  1405. if ( $message ) {
  1406. ?>
  1407. <script type="text/javascript"> 
  1408. <!--//
  1409. alert( "<?php echo _LOGOUT_SUCCESS; ?>" ); 
  1410. //-->
  1411. </script>
  1412. <?php
  1413. /*
  1414. **not sure if this is the best case but the 
  1415. **reason why we weren't seeing the logout message was
  1416. **because we are immediately redirecting to another page
  1417. **so if we flush out the contents to the browser then we get the alert.
  1418. */
  1419. if (function_exists("ob_flush")) {
  1420. ob_flush();
  1421. }
  1422. }
  1423. if ( $return ) {
  1424. cbRedirect( strncasecmp( $return, "index.php", 9 ) ? cbSef( $return, false ) : $return );
  1425. } else {
  1426. cbRedirect( cbSef( 'index.php', false ) );
  1427. }
  1428. }
  1429. function confirm($confirmcode){
  1430. global $_CB_database, $_CB_framework, $_PLUGINS;
  1431. if( $_CB_framework->myId() < 1) {
  1432. $lengthConfirmcode = strlen($confirmcode);
  1433. if ($lengthConfirmcode == ( 3+32+8 ) ) {
  1434. $scrambleSeed = (int) hexdec(substr( md5 ( $_CB_framework->getCfg( 'secret' ) . $_CB_framework->getCfg( 'db' ) ), 0, 7));
  1435. $unscrambledId = $scrambleSeed ^ ( (int) hexdec(substr( $confirmcode, 3+32 ) ) );
  1436. $query = "SELECT * FROM #__comprofiler c, #__users u "
  1437. . " WHERE c.id = " . (int) $unscrambledId . " AND c.cbactivation = '" . cbGetEscaped($confirmcode) . "' AND c.id=u.id";
  1438. // } elseif ($lengthConfirmcode == 32) { //BBTODO: this is for confirmation links previous to CB 1.0.2: remove after CB 1.0.2:
  1439. // $query = "SELECT * FROM #__comprofiler c, #__users u WHERE c.id=u.id AND md5(c.id) = '" . cbGetEscaped($confirmcode) . "'";
  1440. } else {
  1441. cbNotAuth();
  1442. return;
  1443. }
  1444. $_CB_database->setQuery($query);
  1445. $user = $_CB_database->loadObjectList();
  1446. if ( ( $user === null ) || ( count( $user ) == 0 ) /* || ( ($lengthConfirmcode == 32) && isset($user[0]->cbactivation ) && $user[0]->cbactivation ) */ ) {
  1447. $query = "SELECT * FROM #__comprofiler c, #__users u "
  1448. . " WHERE c.id = " . (int) $unscrambledId . " AND c.id=u.id";
  1449. $_CB_database->setQuery($query);
  1450. $user = $_CB_database->loadObjectList();
  1451. if ( ( $user === null ) || ( count( $user ) == 0 ) || ($user[0]->confirmed == 0) ) {
  1452. cbNotAuth();
  1453. } else {
  1454. $messagesToUser = getActivationMessage($user[0], "UserConfirmation");
  1455. echo "n<div>" . implode( "</div>n<div>", $messagesToUser ) . "</div>n";
  1456. }
  1457. return;
  1458. }
  1459. $_PLUGINS->loadPluginGroup('user');
  1460. $_PLUGINS->trigger( 'onBeforeUserConfirm', array($user[0]));
  1461. if($_PLUGINS->is_errors()) {
  1462. echo $_PLUGINS->getErrorMSG("<br />");
  1463. exit();
  1464. }
  1465. $query = "UPDATE #__comprofiler SET confirmed = 1 WHERE id=" . (int) $user[0]->id;
  1466. $_CB_database->setQuery($query);
  1467. $_CB_database->query();
  1468. if ( $user[0]->confirmed == 1 ) {
  1469. $messagesToUser = getActivationMessage($user[0], "UserConfirmation");
  1470. } else {
  1471. $user[0]->confirmed = 1;
  1472. $messagesToUser = activateUser($user[0], 1, "UserConfirmation");
  1473. }
  1474. $_PLUGINS->trigger( 'onAfterUserConfirm', array($user[0],true));
  1475. echo "n<div>" . implode( "</div>n<div>", $messagesToUser ) . "</div>n";
  1476. } else {
  1477. // cbRedirect( cbSef( 'index.php?option=com_comprofiler'.getCBprofileItemid(), false ) );
  1478. // cbNotAuth(); :
  1479. echo _UE_NOT_AUTHORIZED." :<br /><br />"._UE_DO_LOGOUT." !<br />";
  1480. return;
  1481. }
  1482. }
  1483. function approveImage() {
  1484. global $_CB_database, $_POST, $_REQUEST, $_SERVER, $_CB_framework;
  1485. $andItemid = getCBprofileItemid();
  1486. // simple spoof check security for posts (menus do gets):
  1487. if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
  1488. cbSpoofCheck( 'moderateImages' );
  1489. }
  1490. $isModerator=isModerator( $_CB_framework->myId() );
  1491. if (!$isModerator) {
  1492. cbNotAuth();
  1493. return;
  1494. }
  1495. $avatars=array();
  1496. if(isset($_POST['avatar'])) $avatars=$_POST['avatar'];
  1497. else $avatars[] = $_REQUEST['avatars'];
  1498. if(isset($_POST['act'])) $act=$_POST['act'];
  1499. else $act = $_REQUEST['flag'];
  1500. $cbNotification = new cbNotification();
  1501. if($act=='1') {
  1502. foreach ($avatars AS $avatar) {
  1503. $query = "UPDATE #__comprofiler SET avatarapproved = 1, lastupdatedate='".date('Y-m-d H:i:s')."' WHERE id = " . (int) $avatar;
  1504. $_CB_database->setQuery($query);
  1505. $_CB_database->query();
  1506. $cbNotification->sendFromSystem( (int) $avatar, _UE_IMAGEAPPROVED_SUB, _UE_IMAGEAPPROVED_MSG );
  1507. }
  1508. } else {
  1509. foreach ($avatars AS $avatar) {
  1510. $query = "SELECT avatar FROM #__comprofiler WHERE id = " . (int) $avatar;
  1511. $_CB_database->setQuery($query);
  1512. $file = $_CB_database->loadResult();
  1513.     if(eregi("gallery/",$file)==false && is_file($_CB_framework->getCfg('absolute_path')."/images/comprofiler/".$file)) {
  1514. unlink($_CB_framework->getCfg('absolute_path')."/images/comprofiler/".$file);
  1515. if(is_file($_CB_framework->getCfg('absolute_path')."/images/comprofiler/tn".$file)) unlink($_CB_framework->getCfg('absolute_path')."/images/comprofiler/tn".$file);
  1516. }
  1517. $query = "UPDATE #__comprofiler SET avatarapproved = 1, avatar=null WHERE id = " . (int) $avatar;
  1518. $_CB_database->setQuery($query);
  1519. $_CB_database->query();
  1520. $cbNotification->sendFromSystem( (int) $avatar, _UE_IMAGEREJECTED_SUB, _UE_IMAGEREJECTED_MSG );
  1521. }
  1522. }
  1523. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=moderateImages' . $andItemid, false ), _UE_USERIMAGEMODERATED_SUCCESSFUL);
  1524. }
  1525. function reportUser($option,$form=1,$uid=0) {
  1526. global $_CB_framework, $_CB_database,$ueConfig,$_POST;
  1527. if($ueConfig['allowUserReports']==0) {
  1528. echo _UE_FUNCTIONALITY_DISABLED;
  1529. exit();
  1530. }
  1531. if (!allowAccess( $ueConfig['allow_profileviewbyGID'],'RECURSE', userGID( $_CB_framework->myId() ))) {
  1532. echo _UE_NOT_AUTHORIZED;
  1533. return;
  1534. }
  1535. if($form==1) {
  1536. HTML_comprofiler::reportUserForm($option,$uid);
  1537. } else {
  1538. // simple spoof check security
  1539. cbSpoofCheck( 'reportUserForm' );
  1540. $row = new moscomprofilerUserReport( $_CB_database );
  1541. if (!$row->bind( $_POST )) {
  1542. echo "<script type="text/javascript"> alert('".addslashes($row->getError())."'); window.history.go(-1); </script>n";
  1543. exit();
  1544. }
  1545. _cbMakeHtmlSafe($row); //TBD: remove this: not urgent but isn't right
  1546. $row->reportedondate = date("Y-m-d H:i:s");
  1547. if (!$row->check()) {
  1548. echo "<script type="text/javascript"> alert('".addslashes($row->getError())."'); window.history.go(-1); </script>n";
  1549. exit();
  1550. }
  1551. if (!$row->store()) {
  1552. echo "<script type="text/javascript"> alert('".addslashes($row->getError())."'); window.history.go(-1); </script>n";
  1553. exit();
  1554. }
  1555. if($ueConfig['moderatorEmail']==1) {
  1556. $cbNotification = new cbNotification();
  1557. $cbNotification->sendToModerators(_UE_USERREPORT_SUB,_UE_USERREPORT_MSG);
  1558. }
  1559. echo _UE_USERREPORT_SUCCESSFUL;
  1560. }
  1561. }
  1562. function banUser( $option, $uid, $form=1, $act=1 ) {
  1563. global $_CB_framework, $_CB_database, $ueConfig, $_POST;
  1564. $isModerator=isModerator( $_CB_framework->myId() );
  1565. if ( ( $_CB_framework->myId() < 1 ) || ( $uid < 1 ) )  {
  1566. cbNotAuth();
  1567. exit();
  1568. }
  1569. if ( $ueConfig['allowUserBanning'] == 0 ) {
  1570. echo _UE_FUNCTIONALITY_DISABLED;
  1571. exit();
  1572. }
  1573. if ( $form == 1 ) {
  1574. $_CB_database->setQuery( "SELECT bannedreason FROM #__comprofiler WHERE id = " . (int) $uid );
  1575. $orgbannedreason = $_CB_database->loadresult();
  1576. HTML_comprofiler::banUserForm( $option, $uid, $act, $orgbannedreason);
  1577. } else {
  1578. $now = time();
  1579. $dateStr = cbFormatDate( $now );
  1580. $cbNotification = new cbNotification();
  1581. if ( $act == 1 ) {
  1582. // Ban by moderator:
  1583. if ( ( ! $isModerator ) || ( $_CB_framework->myId() != cbGetParam( $_POST, 'bannedby', 0 ) ) ) {
  1584. cbNotAuth();
  1585. return;
  1586. }
  1587. // simple spoof check security
  1588. cbSpoofCheck( 'banUserForm' );
  1589. $bannedreason = '<b>' . htmlspecialchars("["._UE_MODERATORBANRESPONSE.", " . $dateStr . "]") . "</b>n" . htmlspecialchars( stripslashes( cbGetParam( $_POST, 'bannedreason') ) ) ."n";
  1590. $sql="UPDATE #__comprofiler SET banned=1, bannedby=" . (int) $_CB_framework->myId() . ", banneddate='".date('Y-m-dTH:i:s')."', bannedreason = CONCAT_WS('','" . $_CB_database->getEscaped( $bannedreason ) . "', bannedreason) WHERE id=". (int) $uid;
  1591. $_CB_database->SetQuery($sql);
  1592. $_CB_database->query();
  1593. $cbNotification->sendFromSystem($uid,_UE_BANUSER_SUB,_UE_BANUSER_MSG);
  1594. echo _UE_USERBAN_SUCCESSFUL;
  1595. } elseif ( $act == 0 ) {
  1596. // Unban by moderator:
  1597. if (!$isModerator){
  1598. cbNotAuth();
  1599. return;
  1600. }
  1601. // $mineName = getNameFormat($_CB_framework->myName(), $_CB_framework->myUsername,$ueConfig['name_format']);
  1602. // DEFINE('_UE_UNBANUSER_BY_ON','User profile unbanned by %s on %s');
  1603. // $unbannedBy = "<b>" . addslashes( htmlspecialchars("[".sprintf( _UE_UNBANUSER_BY_ON, $mineName, $dateStr ) ) ) . "]</b>n";
  1604. $unbannedBy = "<b>" . htmlspecialchars("[". _UE_UNBANUSER . ", " . $dateStr ) . "]</b>n";
  1605. $sql="UPDATE #__comprofiler SET banned=0, unbannedby=" . (int) $_CB_framework->myId() . ", bannedreason = CONCAT_WS('','" . $_CB_database->getEscaped( $unbannedBy ) . "', bannedreason), unbanneddate='".date('Y-m-dTH:i:s')."'  WHERE id=".(int) $uid; // , bannedreason=null, bannedby=null, banneddate=null
  1606. $_CB_database->SetQuery($sql);
  1607. $_CB_database->query();
  1608. $cbNotification->sendFromSystem($uid,_UE_UNBANUSER_SUB,_UE_UNBANUSER_MSG);
  1609. echo _UE_USERUNBAN_SUCCESSFUL;
  1610. } elseif ( $act == 2 ) {
  1611. // Unban request from user:
  1612. if ( $_CB_framework->myId() != $uid ) {
  1613. cbNotAuth();
  1614. return;
  1615. }
  1616. $bannedreason = "<b>".htmlspecialchars("["._UE_USERBANRESPONSE.", " . $dateStr . "]")."</b>n" . htmlspecialchars( stripslashes( cbGetParam( $_POST, 'bannedreason' ) ) ) ."n";
  1617. $sql="UPDATE #__comprofiler SET banned=2, bannedreason = CONCAT_WS('','" . $_CB_database->getEscaped( $bannedreason) . "', bannedreason) WHERE id=" . (int) $uid;
  1618. $_CB_database->SetQuery($sql);
  1619. $_CB_database->query();
  1620. if($ueConfig['moderatorEmail']==1) {
  1621. $cbNotification->sendToModerators(_UE_UNBANUSERREQUEST_SUB,_UE_UNBANUSERREQUEST_MSG);
  1622. }
  1623. echo _UE_USERUNBANREQUEST_SUCCESSFUL;
  1624. }
  1625. }
  1626. }
  1627. function processReports(){
  1628. global $_CB_framework, $_CB_database, $_POST;
  1629. // simple spoof check security
  1630. cbSpoofCheck( 'moderateReports' );
  1631. $isModerator=isModerator( $_CB_framework->myId() );
  1632. if (!$isModerator) {
  1633. cbNotAuth();
  1634. return;
  1635. }
  1636. $reports = cbGetParam( $_POST, 'reports', array() );
  1637. foreach ($reports AS $report) {
  1638. $query = "UPDATE #__comprofiler_userreports SET reportedstatus = 1 WHERE reportid = " . (int) $report;
  1639. $_CB_database->setQuery($query);
  1640. $_CB_database->query();
  1641. }
  1642. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=moderateReports' . getCBprofileItemid(), false ), _UE_USERREPORTMODERATED_SUCCESSFUL );
  1643. }
  1644. function moderator(){
  1645.   global $_CB_framework, $_CB_database;
  1646. $isModerator=isModerator( $_CB_framework->myId() );
  1647. if (!$isModerator) {
  1648. cbNotAuth();
  1649. return;
  1650. }
  1651. $query = "SELECT count(*) FROM #__comprofiler  WHERE avatarapproved=0 AND approved=1 AND confirmed=1 AND banned=0";
  1652. if(!$_CB_database->setQuery($query)) print $_CB_database->getErrorMsg();
  1653. $totalimages = $_CB_database->loadResult();
  1654. $query = "SELECT count(*) FROM #__comprofiler_userreports  WHERE reportedstatus=0 ";
  1655. if(!$_CB_database->setQuery($query)) print $_CB_database->getErrorMsg();
  1656. $totaluserreports = $_CB_database->loadResult();
  1657. $query = "SELECT count(*) FROM #__comprofiler WHERE banned=2 AND approved=1 AND confirmed=1";
  1658. if(!$_CB_database->setQuery($query)) print $_CB_database->getErrorMsg();
  1659. $totalunban = $_CB_database->loadResult();
  1660. if($totalunban > 0 || $totaluserreports > 0 || $totalimages > 0) {
  1661. if($totalunban > 0) echo "<div>".$totalunban._UE_UNBANREQUIREACTION."</div>";
  1662. if($totaluserreports > 0) echo "<div>".$totaluserreports._UE_USERREPORTSREQUIREACTION."</div>";
  1663. if($totalimages > 0) echo "<div>".$totalimages._UE_IMAGESREQUIREACTION."</div>";
  1664. } else {
  1665. echo _UE_NOACTIONREQUIRED;
  1666. }
  1667. }
  1668. function approveUser($uids) {
  1669. global $_CB_framework, $_CB_database, $ueConfig, $_PLUGINS;
  1670. $andItemid = getCBprofileItemid();
  1671. // simple spoof check security
  1672. cbSpoofCheck( 'pendingApprovalUsers' );
  1673. if($ueConfig['allowModUserApproval']==0) {
  1674. echo _UE_FUNCTIONALITY_DISABLED;
  1675. exit();
  1676. }
  1677. $isModerator=isModerator( $_CB_framework->myId() );
  1678. if (!$isModerator){
  1679. cbNotAuth();
  1680. return;
  1681. }
  1682. //$tabs = new cbTabs( 0, 1);
  1683. $_PLUGINS->loadPluginGroup('user');
  1684. if ( ! isset( $ueConfig['emailpass'] ) ) {
  1685. $ueConfig['emailpass'] = '0';
  1686. }
  1687. foreach($uids AS $uid) {
  1688. $query = "SELECT * FROM #__comprofiler c, #__users u WHERE c.id=u.id AND c.id = " . (int) $uid;
  1689. $_CB_database->setQuery($query);
  1690. $user = $_CB_database->loadObjectList();
  1691. $row = $user[0];
  1692. if ( $ueConfig['emailpass'] == "1" ) {
  1693. $pwd = cbMakeRandomString( 8, true );
  1694. $pwd_md5 = cbHashPassword( $pwd );
  1695. $row->password = $pwd;
  1696. $pwd = ", password = " . $_CB_database->Quote( $pwd_md5 ) . " ";
  1697. } else {
  1698. $pwd = '';
  1699. }
  1700. $_PLUGINS->trigger( 'onBeforeUserApproval', array($row,true));
  1701. if($_PLUGINS->is_errors()) {
  1702. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); window.history.go(-1); </script>n";
  1703. exit();
  1704. }
  1705. $sql = "UPDATE #__comprofiler SET approved= 1 " . $pwd . " WHERE id=" . (int) $uid;
  1706. $_CB_database->SetQuery( $sql );
  1707. $_CB_database->query();
  1708. $row->approved = 1;
  1709. if ( $ueConfig['emailpass'] == "1" ) {
  1710. $row->password = $pwd_md5;
  1711. }
  1712. $_PLUGINS->trigger( 'onAfterUserApproval', array($row,true,true));
  1713. // $messagesToUser =
  1714. activateUser($row, 1, "UserApproval", false);
  1715. }
  1716. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=pendingApprovalUser' . $andItemid, false ), ( count( $uids ) ) ? count( $uids ) . ' ' . _UE_USERAPPROVAL_SUCCESSFUL : '' );
  1717. }
  1718. function rejectUser($uids) {
  1719. global $_CB_framework, $_CB_database, $ueConfig, $_POST, $_PLUGINS;
  1720. $andItemid = getCBprofileItemid();
  1721. // simple spoof check security
  1722. cbSpoofCheck( 'pendingApprovalUsers' );
  1723. if($ueConfig['allowModUserApproval']==0) {
  1724. echo _UE_FUNCTIONALITY_DISABLED;
  1725. exit();
  1726. }
  1727. $isModerator=isModerator( $_CB_framework->myId() );
  1728. if (!$isModerator){
  1729. cbNotAuth();
  1730. return;
  1731. }
  1732. $cbNotification= new cbNotification();
  1733. foreach($uids AS $uid) {
  1734. $query = "SELECT * FROM #__comprofiler c, #__users u WHERE c.id=u.id AND c.id = " . (int) $uid;
  1735. $_CB_database->setQuery($query);
  1736. $user = $_CB_database->loadObjectList();
  1737. $row = $user[0];
  1738. $_PLUGINS->loadPluginGroup('user');
  1739. $_PLUGINS->trigger( 'onBeforeUserApproval', array($row,false));
  1740. if($_PLUGINS->is_errors()) {
  1741. echo "<script type="text/javascript">alert('".addslashes($_PLUGINS->getErrorMSG())."'); window.history.go(-1); </script>n";
  1742. exit();
  1743. }
  1744. $sql="UPDATE #__comprofiler SET approved=2 WHERE id=" . (int) $uid;
  1745. $_CB_database->SetQuery($sql);
  1746. $_CB_database->query();
  1747. $_PLUGINS->trigger( 'onAfterUserApproval', array($row,false,true));
  1748. $cbNotification->sendFromSystem(cbGetEscaped($uid),_UE_REG_REJECT_SUB,sprintf(_UE_USERREJECT_MSG,$_CB_framework->getCfg( 'sitename' ), stripslashes( cbGetParam( $_POST, 'comment' . $uid, '' ) ) ) );
  1749. }
  1750. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=pendingApprovalUser' . $andItemid, false ),(count($uids))?count($uids)." "._UE_USERREJECT_SUCCESSFUL:"");
  1751. }
  1752. function pendingApprovalUsers($option) {
  1753. global $_CB_framework, $_CB_database, $ueConfig;
  1754. $isModerator = isModerator( $_CB_framework->myId() );
  1755. if($ueConfig['allowModUserApproval']==0) {
  1756. echo _UE_FUNCTIONALITY_DISABLED;
  1757. exit();
  1758. }
  1759. if (!$isModerator){
  1760. cbNotAuth();
  1761. return;
  1762. }
  1763. $_CB_database->setQuery( "SELECT u.id, u.name, u.username, u.email, u.registerDate "
  1764. ."n FROM #__users u, #__comprofiler c "
  1765. ."n WHERE u.id=c.id AND c.approved=0 AND c.confirmed=1" );
  1766. $rows = $_CB_database->loadObjectList();
  1767. HTML_comprofiler::pendingApprovalUsers($option, $rows);
  1768. }
  1769. //Connections
  1770. function addConnection($userid,$connectionid,$umsg=null) {
  1771. global $_CB_framework, $ueConfig;
  1772. $andItemid = getCBprofileItemid(true);
  1773. if(!$ueConfig['allowConnections']) {
  1774. echo _UE_FUNCTIONALITY_DISABLED;
  1775. return;
  1776. }
  1777. if (! ($_CB_framework->myId() > 0 ) ) {
  1778. cbNotAuth();
  1779. return;
  1780. }
  1781. $cbCon=new cbConnection($userid);
  1782. $cbCon->addConnection($connectionid,stripcslashes($umsg));
  1783. $url=cbSef( "index.php?option=com_comprofiler&amp;task=userProfile&amp;user=" . $connectionid . $andItemid );
  1784. echo "<script type="text/javascript"> alert('".addslashes(htmlspecialchars($cbCon->getUserMSG()))."'); document.location.href='".unHtmlspecialchars($url)."'; </script>n";
  1785. }
  1786. function removeConnection($userid,$connectionid) {
  1787. global $_CB_framework, $ueConfig;
  1788. $andItemid = getCBprofileItemid(true);
  1789. if(!$ueConfig['allowConnections']) {
  1790. echo _UE_FUNCTIONALITY_DISABLED;
  1791. return;
  1792. }
  1793. if (! ( $_CB_framework->myId() > 0 ) ) {
  1794. cbNotAuth();
  1795. return;
  1796. }
  1797. $cbCon=new cbConnection($userid);
  1798. if(!$cbCon->removeConnection($userid,$connectionid)) $msg=$cbCon->getErrorMSG(); 
  1799. else $msg = $cbCon->getUserMSG();
  1800. // $url=cbSef("index.php?option=com_comprofiler&task=manageConnections");
  1801. $url=cbSef( "index.php?option=com_comprofiler&amp;tab=getConnectionTab" . $andItemid );
  1802. echo "<script type="text/javascript"> alert('".addslashes($msg)."'); document.location.href='".unHtmlspecialchars($url)."'; </script>n";
  1803. }
  1804. function denyConnection($userid,$connectionid) {
  1805. global $_CB_framework, $ueConfig;
  1806. if(!$ueConfig['allowConnections']) {
  1807. echo _UE_FUNCTIONALITY_DISABLED;
  1808. return;
  1809. }
  1810. if (! ( $_CB_framework->myId() > 0 ) ) {
  1811. cbNotAuth();
  1812. return;
  1813. }
  1814. $cbCon=new cbConnection($userid);
  1815. $cbCon->denyConnection($userid,$connectionid);
  1816. echo "<script type="text/javascript"> alert('".addslashes($cbCon->getUserMSG())."'); window.history.go(-1); </script>n";
  1817. }
  1818. function acceptConnection($userid,$connectionid) {
  1819. global $_CB_framework, $ueConfig;
  1820. if(!$ueConfig['allowConnections']) { // do not test, needed if rules changed! || !$ueConfig['useMutualConnections']
  1821. echo _UE_FUNCTIONALITY_DISABLED;
  1822. return;
  1823. }
  1824. if (! ( $_CB_framework->myId() > 0 ) ) {
  1825. cbNotAuth();
  1826. return;
  1827. }
  1828. $cbCon=new cbConnection($userid);
  1829. $cbCon->acceptConnection($userid,$connectionid);
  1830. echo "<script type="text/javascript"> alert('".addslashes($cbCon->getUserMSG())."'); window.history.go(-1); </script>n";
  1831. }
  1832. function manageConnections($userid) {
  1833. global $_CB_framework, $ueConfig;
  1834. if(!$ueConfig['allowConnections']) {
  1835. echo _UE_FUNCTIONALITY_DISABLED;
  1836. return;
  1837. }
  1838. if ( $_CB_framework->myId() != $userid || $_CB_framework->myId() == 0) {
  1839. cbNotAuth();
  1840. return;
  1841. }
  1842. $cbCon=new cbConnection($userid);
  1843. $connections=$cbCon->getActiveConnections($userid);
  1844. $actions = $cbCon->getPendingConnections($userid);
  1845. $connecteds = $cbCon->getConnectedToMe($userid);
  1846. HTML_comprofiler::manageConnections($connections,$actions,$connecteds);
  1847. }
  1848. function saveConnections($connectionids) {
  1849. global $_CB_framework, $ueConfig, $_POST;
  1850. $andItemid = getCBprofileItemid();
  1851. // simple spoof check security
  1852. cbSpoofCheck( 'manageConnections' );
  1853. if(!$ueConfig['allowConnections']) {
  1854. echo _UE_FUNCTIONALITY_DISABLED;
  1855. return;
  1856. }
  1857. if ( ! ( $_CB_framework->myId() > 0 ) ) {
  1858. cbNotAuth();
  1859. return;
  1860. }
  1861. $cbCon = new cbConnection( $_CB_framework->myId() );
  1862. if (is_array($connectionids)) {
  1863. foreach($connectionids AS $cid) {
  1864. $connectionTypes = cbGetParam( $_POST, $cid.'connectiontype', array() );
  1865. $cbCon->saveConnection( $cid, stripslashes( cbGetParam( $_POST, $cid . 'description', '' ) ), implode( '|*|', $connectionTypes ) );
  1866. }
  1867. }
  1868. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=manageConnections&tab=1' . $andItemid, false ),
  1869. (is_array($connectionids)) ? _UE_CONNECTIONSUPDATEDSUCCESSFULL : null);
  1870. }
  1871. function processConnectionActions($connectionids) {
  1872. global $_CB_framework, $ueConfig, $_POST;
  1873. // simple spoof check security
  1874. cbSpoofCheck( 'manageConnections' );
  1875. if(!$ueConfig['allowConnections']) {
  1876. echo _UE_FUNCTIONALITY_DISABLED;
  1877. return;
  1878. }
  1879. if ( ! ( $_CB_framework->myId() > 0 ) ) {
  1880. cbNotAuth();
  1881. return;
  1882. }
  1883. $cbCon = new cbConnection( $_CB_framework->myId() );
  1884. if (is_array($connectionids)) {
  1885. foreach($connectionids AS $cid) {
  1886. $action = cbGetParam( $_POST, $cid . 'action' );
  1887. if ( $action== 'd' ) {
  1888. $cbCon->denyConnection( $_CB_framework->myId(), $cid );
  1889. } elseif ( $action == 'a' ) {
  1890. $cbCon->acceptConnection( $_CB_framework->myId(), $cid );
  1891. }
  1892. }
  1893. }
  1894. cbRedirect( cbSef( 'index.php?option=com_comprofiler&amp;task=manageConnections' . getCBprofileItemid(), false ),
  1895. (is_array($connectionids)) ? _UE_CONNECTIONACTIONSSUCCESSFULL : null);
  1896. return;
  1897. }
  1898. function getConnectionTypes( $types ) {
  1899. $typelist = null;
  1900. $types = explode( "|*|", $types );
  1901. foreach( $types AS $type ) {
  1902. if( $typelist == null ) {
  1903. $typelist = getLangDefinition( $type );
  1904. } else {
  1905. $typelist .= ", " . getLangDefinition( $type );
  1906. }
  1907. }
  1908. return $typelist;
  1909. }
  1910. ?>