source: trunk/inc/profiles.inc.php

Last change on this file was 2, checked in by george, 14 years ago
  • Přidáno: Trunk revize 13719.
File size: 16.4 KB
Line 
1<?php
2
3/***************************************************************************
4* Dolphin Smart Community Builder
5* -----------------
6* begin : Mon Mar 23 2006
7* copyright : (C) 2006 BoonEx Group
8* website : http://www.boonex.com/
9* This file is part of Dolphin - Smart Community Builder
10*
11* Dolphin is free software. This work is licensed under a Creative Commons Attribution 3.0 License.
12* http://creativecommons.org/licenses/by/3.0/
13*
14* Dolphin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16* See the Creative Commons Attribution 3.0 License for more details.
17* You should have received a copy of the Creative Commons Attribution 3.0 License along with Dolphin,
18* see license.txt file; if not, write to marketing@boonex.com
19***************************************************************************/
20
21require_once( 'header.inc.php' );
22require_once( BX_DIRECTORY_PATH_INC . 'design.inc.php' );
23require_once( BX_DIRECTORY_PATH_INC . 'images.inc.php' );
24require_once( BX_DIRECTORY_PATH_INC . 'params.inc.php' );
25require_once( BX_DIRECTORY_PATH_INC . 'tags.inc.php' );
26
27// user roles
28define('BX_DOL_ROLE_GUEST', 0);
29define('BX_DOL_ROLE_MEMBER', 1);
30define('BX_DOL_ROLE_ADMIN', 2);
31define('BX_DOL_ROLE_AFFILIATE', 4);
32define('BX_DOL_ROLE_MODERATOR', 8);
33
34/**
35 * The following functions are needed to check whether user is logged in or not, active or not and get his ID.
36 */
37function isLogged() {
38 return getLoggedId() != 0;
39}
40function isLoggedActive() {
41 return isProfileActive();
42}
43function getLoggedId() {
44 return isset($_COOKIE['memberID']) && ($GLOBALS['logged']['member'] || $GLOBALS['logged']['admin']) ? (int)$_COOKIE['memberID'] : 0;
45}
46function getLoggedPassword() {
47 return isset($_COOKIE['memberPassword']) && ($GLOBALS['logged']['member'] || $GLOBALS['logged']['admin']) ? $_COOKIE['memberPassword'] : '';
48}
49
50/**
51 * The following functions are needed to check the ROLE of user.
52 */
53function isMember($iId = 0) {
54 return isRole(BX_DOL_ROLE_MEMBER, $iId);
55}
56if(!function_exists("isAdmin")) {
57 function isAdmin($iId = 0) {
58 return isRole(BX_DOL_ROLE_ADMIN, $iId);
59 }
60}
61function isAffiliate($iId = 0) {
62 return isRole(BX_DOL_ROLE_AFFILIATE, $iId);
63}
64function isModerator($iId = 0) {
65 return isRole(BX_DOL_ROLE_MODERATOR, $iId);
66}
67function isRole($iRole, $iId = 0) {
68 $aProfile = getProfileInfo($iId);
69 if($aProfile === false)
70 return false;
71
72 if(!((int)$aProfile['Role'] & $iRole))
73 return false;
74
75 return true;
76}
77
78$aUser = array(); //global cache array
79
80function ShowZodiacSign( $date ) {
81 global $site;
82
83 if ( $date == "0000-00-00" )
84 return "";
85
86 if ( strlen($date) ) {
87 $m = substr( $date, -5, 2 );
88 $d = substr( $date, -2, 2 );
89
90 switch ( $m ) {
91 case '01': if ( $d <= 20 ) $sign = "capricorn"; else $sign = "aquarius";
92 break;
93 case '02': if ( $d <= 20 ) $sign = "aquarius"; else $sign = "pisces";
94 break;
95 case '03': if ( $d <= 20 ) $sign = "pisces"; else $sign = "aries";
96 break;
97 case '04': if ( $d <= 20 ) $sign = "aries"; else $sign = "taurus";
98 break;
99 case '05': if ( $d <= 20 ) $sign = "taurus"; else $sign = "gemini";
100 break;
101 case '06': if ( $d <= 21 ) $sign = "gemini"; else $sign = "cancer";
102 break;
103 case '07': if ( $d <= 22 ) $sign = "cancer"; else $sign = "leo";
104 break;
105 case '08': if ( $d <= 23 ) $sign = "leo"; else $sign = "virgo";
106 break;
107 case '09': if ( $d <= 23 ) $sign = "virgo"; else $sign = "libra";
108 break;
109 case '10': if ( $d <= 23 ) $sign = "libra"; else $sign = "scorpio";
110 break;
111 case '11': if ( $d <= 22 ) $sign = "scorpio"; else $sign = "sagittarius";
112 break;
113 case '12': if ( $d <= 21 ) $sign = "sagittarius"; else $sign = "capricorn";
114 }
115 $sIcon = $sign . '.png';
116 return '<img src="' . $site['zodiac'] . $sIcon . '" alt="' . $sign . '" title="' . $sign . '" />';
117 } else {
118 return "";
119 }
120}
121
122function age( $birth_date ) {
123 if ( $birth_date == "0000-00-00" )
124 return _t("_uknown");
125
126 $bd = explode( "-", $birth_date );
127 $age = date("Y") - $bd[0] - 1;
128
129 $arr[1] = "m";
130 $arr[2] = "d";
131
132 for ( $i = 1; $arr[$i]; $i++ ) {
133 $n = date( $arr[$i] );
134 if ( $n < $bd[$i] )
135 break;
136 if ( $n > $bd[$i] ) {
137 ++$age;
138 break;
139 }
140 }
141
142 return $age;
143}
144
145/**
146 * Print code for membership status
147 * $memberID - member ID
148 * $offer_upgrade - will this code be printed at [c]ontrol [p]anel
149 */
150function GetMembershipStatus($memberID, $offer_upgrade = true) {
151 $ret = '';
152
153 $membership_info = getMemberMembershipInfo($memberID);
154
155 $viewMembershipActions = "<br />(<a onclick=\"javascript:window.open('explanation.php?explain=membership&amp;type=".$membership_info['ID']."', '', 'width=660, height=500, menubar=no, status=no, resizable=no, scrollbars=yes, toolbar=no, location=no');\" href=\"javascript:void(0);\">"._t("_VIEW_MEMBERSHIP_ACTIONS")."</a>)<br />";
156
157 // Show colored membership name
158 if ( $membership_info['ID'] == MEMBERSHIP_ID_STANDARD ) {
159 $ret .= _t( "_MEMBERSHIP_STANDARD" ). $viewMembershipActions;
160 if ( $offer_upgrade )
161 $ret .= " ". _t( "_MEMBERSHIP_UPGRADE_FROM_STANDARD" );
162 } else {
163 $ret .= "<font color=\"red\">{$membership_info['Name']}</font>$viewMembershipActions";
164
165 $days_left = (int)( ($membership_info['DateExpires'] - time()) / (24 * 3600) );
166
167 if(!is_null($membership_info['DateExpires'])) {
168 $ret .= ( $days_left > 0 ) ? _t( "_MEMBERSHIP_EXPIRES_IN_DAYS", $days_left ) : _t( "_MEMBERSHIP_EXPIRES_TODAY", date( "H:i", $membership_info['DateExpires'] ), date( "H:i" ) );
169 } else {
170 $ret.= _t("_MEMBERSHIP_EXPIRES_NEVER");
171 }
172 }
173 return $ret;
174}
175
176function isAutoApproval( $sAction ) {
177 $autoApproval_ifPhoto = ( 'on' == getParam("autoApproval_ifPhoto") );
178 $autoApproval_ifSound = ( 'on' == getParam("autoApproval_ifSound") );
179 $autoApproval_ifVideo = ( 'on' == getParam("autoApproval_ifVideo") );
180 $autoApproval_ifProfile = ( 'on' == getParam("autoApproval_ifProfile") );
181 $autoApproval_ifJoin = ( 'on' == getParam("autoApproval_ifJoin") );
182
183 switch ( $sAction ) {
184 case 'photo':
185 return $autoApproval_ifPhoto;
186 case 'sound':
187 return $autoApproval_ifSound;
188 case 'video':
189 return $autoApproval_ifVideo;
190 case 'profile':
191 return $autoApproval_ifProfile;
192 case 'join':
193 return $autoApproval_ifJoin;
194 default:
195 return false;
196 }
197}
198
199function deleteUserDataFile( $userID ) {
200 global $aUser;
201
202 $bUseCacheSystem = ( getParam('enable_cache_system') == 'on' ) ? true : false;
203 if (!$bUseCacheSystem) return false;
204
205 $userID = (int)$userID;
206 $fileName = BX_DIRECTORY_PATH_CACHE . 'user' . $userID . '.php';
207 if( file_exists($fileName) ) {
208 unlink($fileName);
209 }
210}
211
212function createUserDataFile( $userID ) {
213 global $aUser;
214
215 $bUseCacheSystem = ( getParam('enable_cache_system') == 'on' ) ? true : false;
216 if (!$bUseCacheSystem) return false;
217
218 $userID = (int)$userID;
219 $fileName = BX_DIRECTORY_PATH_CACHE . 'user' . $userID . '.php';
220 if( $userID > 0 ) {
221
222 $aPreUser = getProfileInfoDirect ($userID);
223
224 if( isset( $aPreUser ) and is_array( $aPreUser ) and $aPreUser) {
225 $sUser = '<?';
226 $sUser .= "\n\n";
227 $sUser .= '$aUser[' . $userID . '] = array();';
228 $sUser .= "\n";
229 $sUser .= '$aUser[' . $userID . '][\'datafile\'] = true;';
230 $sUser .= "\n";
231
232 $replaceWhat = array( '\\', '\'' );
233 $replaceTo = array( '\\\\', '\\\'' );
234
235 foreach( $aPreUser as $key => $value )
236 $sUser .= '$aUser[' . $userID . '][\'' . $key . '\']' . ' = ' . '\'' . str_replace( $replaceWhat, $replaceTo, $value ) . '\'' . ";\n";
237
238 $sUser .= "\n" . '?>';
239
240 if( $file = fopen( $fileName, "w" ) ) {
241 fwrite( $file, $sUser );
242 fclose( $file );
243 @chmod ($fileName, 0666);
244
245 @include( $fileName );
246 return true;
247 } else
248 return false;
249 }
250 } else
251 return false;
252}
253
254/**
255 * Check whether the requested profile is active or not.
256 */
257function isProfileActive($iId = 0) {
258 $aProfile = getProfileInfo($iId);
259 if($aProfile === false || empty($aProfile))
260 return false;
261
262 return $aProfile['Status'] == 'Active';
263}
264function getProfileInfoDirect ($iProfileID) {
265 return $GLOBALS['MySQL']->getRow("SELECT * FROM `Profiles` WHERE `ID`='" . $iProfileID . "' LIMIT 1");
266}
267
268function getProfileInfo($iProfileID = 0, $checkActiveStatus = false, $forceCache = false) {
269 global $aUser;
270
271 $iProfileID = !empty($iProfileID) ? (int)$iProfileID : getLoggedId();
272 if(!$iProfileID)
273 return false;
274
275 if(!isset( $aUser[$iProfileID]) || !is_array($aUser[$iProfileID]) || $forceCache) {
276 $sCacheFile = BX_DIRECTORY_PATH_CACHE . 'user' . $iProfileID . '.php';
277 if( !file_exists( $sCacheFile ) || $forceCache ) {
278 if( !createUserDataFile( $iProfileID ) ) {
279 return getProfileInfoDirect ($iProfileID);
280 }
281 }
282
283 @include( $sCacheFile );
284 }
285
286 if( $checkActiveStatus and $aUser[$iProfileID]['Status'] != 'Active' )
287 return false;
288
289 return $aUser[$iProfileID];
290}
291
292/* osed only for xmlrpc */
293function getNewLettersNum( $iID ) {
294 $sqlQuery =
295 "
296 SELECT
297 COUNT(`Recipient`)
298 FROM
299 `sys_messages`
300 WHERE
301 `Recipient`='$iID'
302 AND
303 `New`='1'
304 AND
305 NOT FIND_IN_SET('Recipient', `Trash`)
306 ";
307 return (int)db_value($sqlQuery);
308}
309
310/*function for inner using only
311 $ID - profile ID
312 $iFrStatus - friend status (1 - approved, 0 - wait)
313 $iOnline - filter for last nav moment (in minutes)
314 $sqlWhere - add sql Conditions, should beginning from AND
315*/
316function getFriendNumber($iID, $iFrStatus = 1, $iOnline = 0, $sqlWhere = '') {
317 $sqlAdd = '';
318
319 if ($iOnline > 0)
320 $sqlAdd = " AND (p.`DateLastNav` > SUBDATE(NOW(), INTERVAL " . $iOnline . " MINUTE))";
321
322 if (strlen($sqlWhere) > 0)
323 $sqlAdd .= $sqlWhere;
324
325 $sqlQuery = "
326 SELECT COUNT(p.`ID`)
327 FROM `Profiles` AS p
328 LEFT JOIN `sys_friend_list` AS f1 ON (f1.`ID` = p.`ID` AND f1.`Profile` ='{$iID}' AND `f1`.`Check` = {$iFrStatus})
329 LEFT JOIN `sys_friend_list` AS f2 ON (f2.`Profile` = p.`ID` AND f2.`ID` ='{$iID}' AND `f2`.`Check` = {$iFrStatus})
330 WHERE 1
331 AND (f1.`ID` IS NOT NULL OR f2.`ID` IS NOT NULL)
332 {$sqlAdd}
333 ";
334
335 return (int)db_value($sqlQuery);
336}
337
338function getMyFriendsEx($iID, $sWhereParam = '', $sSortParam = '', $sqlLimit = '') {
339 $sJoin = $sOrderBy = '';
340
341 switch($sSortParam) {
342 case 'activity' : // DateLastLogin
343 $sOrderBy = 'ORDER BY p.`DateLastLogin`';
344 break;
345 case 'activity_desc' : // DateLastLogin
346 $sOrderBy = 'ORDER BY p.`DateLastLogin` DESC';
347 break;
348 case 'last_nav' : // DateLastNav
349 $sOrderBy = 'ORDER BY p.`DateLastNav`';
350 break;
351 case 'last_nav_desc' : // DateLastNav
352 $sOrderBy = 'ORDER BY p.`DateLastNav` DESC';
353 break;
354 case 'date_reg' : // DateReg
355 $sOrderBy = 'ORDER BY p.`DateReg`';
356 break;
357 case 'date_reg_desc' : // DateReg
358 $sOrderBy = 'ORDER BY p.`DateReg` DESC';
359 break;
360 case 'image' : // Avatar
361 $sOrderBy = 'ORDER BY p.`Avatar` DESC';
362 break;
363 case 'rate' : // `sys_profile_rating`.`pr_rating_sum
364 $sOrderBy = 'ORDER BY `sys_profile_rating`.`pr_rating_sum`';
365 $sJoin = 'LEFT JOIN `sys_profile_rating` ON p.`ID` = `sys_profile_rating`.`pr_id`';
366 break;
367 default : // DateLastLogin
368 $sOrderBy = 'ORDER BY p.`DateLastLogin`';
369 break;
370 }
371
372 $sLimit = ($sqlLimit == '') ? '' : /*"LIMIT 0, " .*/ $sqlLimit;
373 $iOnlineTime = (int)getParam( "member_online_time" );
374 $sqlQuery = "
375 SELECT p.*, if(`DateLastNav` > SUBDATE(NOW( ), INTERVAL $iOnlineTime MINUTE ), 1, 0) AS `is_online`, UNIX_TIMESTAMP(p.`DateLastLogin`) AS 'TS_DateLastLogin', UNIX_TIMESTAMP(p.`DateReg`) AS 'TS_DateReg'
376 FROM `Profiles` AS p
377 LEFT JOIN `sys_friend_list` AS f1 ON (f1.`ID` = p.`ID` AND f1.`Profile` ='{$iID}' AND `f1`.`Check` = 1)
378 LEFT JOIN `sys_friend_list` AS f2 ON (f2.`Profile` = p.`ID` AND f2.`ID` ='{$iID}' AND `f2`.`Check` = 1)
379 {$sJoin}
380 WHERE 1
381 AND (f1.`ID` IS NOT NULL OR f2.`ID` IS NOT NULL)
382 {$sWhereParam}
383 {$sOrderBy}
384 {$sLimit}
385 ";
386
387 $aFriends = array();
388
389 $vProfiles = db_res($sqlQuery);
390 while ($aProfiles = mysql_fetch_assoc($vProfiles)) {
391 $aFriends[$aProfiles['ID']] = array($aProfiles['ID'], $aProfiles['TS_DateLastLogin'], $aProfiles['TS_DateReg'], $aProfiles['Rate'], $aProfiles['DateLastNav'], $aProfiles['is_online']);
392 }
393
394 return $aFriends;
395}
396
397/*
398* The function returns NickName by given ID. If no ID specified, it tryes to get if from _COOKIE['memberID'];
399*/
400function getNickName( $ID = '' ) {
401 if ( !$ID && (int)$_COOKIE['memberID'] )
402 $ID = $_COOKIE['memberID'];
403
404 if ( !$ID )
405 return '';
406
407 $arr = getProfileInfo( $ID );
408 return $arr['NickName'];
409}
410
411/*
412 * The function returns Password by given ID.
413 */
414function getPassword( $ID = '' ) {
415 if ( !(int)$ID )
416 return '';
417
418 $arr = getProfileInfo( $ID );
419 return $arr['Password'];
420}
421
422function getProfileLink( $iID, $sLinkAdd = '' ) {
423 $aProfInfo = getProfileInfo( $iID );
424 $iID = ($aProfInfo['Couple'] > 0 && $aProfInfo['ID'] > $aProfInfo['Couple']) ? $aProfInfo['Couple'] : $iID;
425
426 return (getParam('enable_modrewrite') == 'on') ? BX_DOL_URL_ROOT . getNickName($iID) . ( $sLinkAdd ? "?{$sLinkAdd}" : '' ) : BX_DOL_URL_ROOT . 'profile.php?ID='.$iID . ( $sLinkAdd ? "&{$sLinkAdd}" : '' );
427}
428function periodic_check_ban() {
429 //Cleaning Ban table
430 $CheckSQL = "
431 SELECT `sys_admin_ban_list`.*
432 FROM `sys_admin_ban_list`
433 WHERE (
434 `DateTime` + INTERVAL `Time` SECOND < NOW()
435 )
436 ";
437 $vCheckBanRes = db_res($CheckSQL);
438 while ( $aCheckBanRes = mysql_fetch_assoc($vCheckBanRes) ) {
439 $sDeleteBanSQL = "DELETE FROM `sys_admin_ban_list` WHERE `ProfID`='{$aCheckBanRes['ProfID']}'";
440 db_res($sDeleteBanSQL);
441 }
442}
443
444function isLoggedBanned($iCurUserID = 0) {
445 $iCCurUserID = ($iCurUserID>0) ? $iCurUserID : (int)$_COOKIE['memberID'];
446 if ($iCCurUserID) {
447 $CheckSQL = "
448 SELECT *
449 FROM `sys_admin_ban_list`
450 WHERE `ProfID`='{$iCCurUserID}'
451 ";
452 db_res($CheckSQL);
453 if (db_affected_rows()>0) {
454 return true;
455 }
456 }
457 return false;
458}
459function bx_login($iId, $bRememberMe = false) {
460 bx_logout();
461
462 $sPassword = getPassword($iId);
463
464 $aUrl = parse_url($GLOBALS['site']['url']);
465 $sPath = isset($aUrl['path']) && !empty($aUrl['path']) ? $aUrl['path'] : '/';
466 $sHost = '';
467 $iCookieTime = $bRememberMe ? time() + 24*60*60*30 : 0;
468 setcookie("memberID", $iId, $iCookieTime, $sPath, $sHost);
469 $_COOKIE['memberID'] = $iId;
470 setcookie("memberPassword", $sPassword, $iCookieTime, $sPath, $sHost, false, true /* http only */);
471 $_COOKIE['memberPassword'] = $sPassword;
472
473 db_res("UPDATE `Profiles` SET `DateLastLogin`=NOW(), `DateLastNav`=NOW() WHERE `ID`='" . $iId . "'");
474 createUserDataFile($iId);
475
476 require_once(BX_DIRECTORY_PATH_CLASSES . 'BxDolAlerts.php');
477 $oZ = new BxDolAlerts('profile', 'login', $iId);
478 $oZ->alert();
479
480 return getProfileInfo($iId);
481}
482function bx_logout($bNotify = true) {
483 if($bNotify && isMember()) {
484 require_once(BX_DIRECTORY_PATH_CLASSES . 'BxDolAlerts.php');
485 $oZ = new BxDolAlerts('profile', 'logout', (int)$_COOKIE['memberID']);
486 $oZ->alert();
487 }
488
489 $aUrl = parse_url($GLOBALS['site']['url']);
490 $sPath = isset($aUrl['path']) && !empty($aUrl['path']) ? $aUrl['path'] : '/';
491
492 setcookie('memberID', '', time() - 96 * 3600, $sPath);
493 setcookie('memberPassword', '', time() - 96 * 3600, $sPath);
494
495 unset($_COOKIE['memberID']);
496 unset($_COOKIE['memberPassword']);
497}
498
499function setSearchStartAge($iMin) {
500 if ($iMin <= 0)
501 return false;
502
503 $GLOBALS['MySQL']->query("update `sys_profile_fields` set `Min` = $iMin where `Name` = 'DateOfBirth'");
504
505 require_once(BX_DIRECTORY_PATH_CLASSES . 'BxDolPFM.php');
506 $oCacher = new BxDolPFMCacher();
507 $oCacher -> createCache();
508
509 return true;
510}
511
512function setSearchEndAge($iMax) {
513 if ($iMax <= 0)
514 return false;
515
516 $GLOBALS['MySQL']->query("update `sys_profile_fields` set `Max` = $iMax where `Name` = 'DateOfBirth'");
517
518 require_once(BX_DIRECTORY_PATH_CLASSES . 'BxDolPFM.php');
519 $oCacher = new BxDolPFMCacher();
520 $oCacher -> createCache();
521
522 return true;
523}
524
525check_logged();
Note: See TracBrowser for help on using the repository browser.