Cheetah
ChWsbProfilesController.php
Go to the documentation of this file.
1 <?php
2 
8 require_once( CH_DIRECTORY_PATH_CLASSES . 'ChWsbProfileFields.php' );
9 require_once( CH_DIRECTORY_PATH_CLASSES . 'ChWsbEmailTemplates.php' );
10 
12 {
13  var $oPF;
14  var $aItems;
16 
17  function __construct()
18  {
19  $this -> oEmailTemplate = new ChWsbEmailTemplates();
20  }
21 
22  function createProfile( $aData, $bSendMails = true, $iMainMemberID = 0 )
23  {
24  if( !$aData or !is_array($aData) or empty($aData) )
25  return false;
26 
27  unset( $aData['Couple'] );
28  unset( $aData['Captcha'] );
29  unset( $aData['TermsOfUse'] );
30  unset( $aData['ProfilePhoto'] );
31 
32  /* @var $this->oPF ChWsbProfileFields */
33  $this -> oPF = new ChWsbProfileFields(100);
34 
35  if( !$this -> oPF -> aArea ) {
36  echo 'Profile Fields cache not loaded. Cannot continue.';
37  return false;
38  }
39 
40  $this -> aItems = $this -> oPF -> aArea[0]['Items'];
41 
42  if( $iMainMemberID )
43  $aMainMember = $this -> getProfileInfo( $iMainMemberID );
44  else
45  $aMainMember = false;
46 
47  // begin profile info collecting
48  $aNewProfile = array();
49 
50  foreach( $this -> aItems as $aItem ) {
51  $sItemName = $aItem['Name'];
52 
53  if( array_key_exists( $sItemName, $aData ) ) {
54  $aNewProfile[$sItemName] = $aData[$sItemName];
55  } elseif( $aMainMember and array_key_exists( $sItemName, $aMainMember ) and $aItem['Type'] != 'system' ) {
56  if( $aItem['Unique'] )
57  $aNewProfile[$sItemName] = $this -> genUniqueValue($sItemName, $aMainMember[$sItemName]);
58  else
59  $aNewProfile[$sItemName] = $aMainMember[$sItemName];
60  } else {
61  switch( $aItem['Type'] ) {
62  case 'pass':
63  $aNewProfile[$sItemName] = $this -> genRandomPassword();
64  break;
65 
66  case 'num':
67  $aNewProfile[$sItemName] = (int)$aItem['Default'];
68  break;
69 
70  case 'bool':
71  $aNewProfile[$sItemName] = (bool)$aItem['Default'];
72  break;
73 
74  case 'system':
75  switch( $sItemName ) {
76  case 'ID': //set automatically
77  case 'Captcha': //not been inserted
78  case 'Location': //not been inserted
79  case 'Keyword': //not been inserted
80  case 'TermsOfUse': //not been inserted
81  //pass
82  break;
83 
84  case 'DateReg':
85  $aNewProfile[$sItemName] = date( 'Y-m-d H:i:s' ); // set current date
86  break;
87 
88  case 'DateLastEdit':
89  case 'DateLastLogin':
90  $aNewProfile[$sItemName] = '0000-00-00';
91  break;
92 
93  case 'Couple':
94  $aNewProfile[$sItemName] = $aMainMember ? $iMainMemberID : 0; //if main member exists, set him as a couple link
95  break;
96 
97  case 'Featured':
98  $aNewProfile[$sItemName] = false;
99  break;
100 
101  case 'Status':
102  if (getParam('autoApproval_ifNoConfEmail') == 'on') {
103  if (getParam('autoApproval_ifJoin') == 'on' && !(getParam('sys_dnsbl_enable') && 'approval' == getParam('sys_dnsbl_behaviour') && ch_is_ip_dns_blacklisted('', 'join')))
104  $aNewProfile[$sItemName] = 'Active';
105  else
106  $aNewProfile[$sItemName] = 'Approval';
107  } else
108  $aNewProfile[$sItemName] = 'Unconfirmed';
109  break;
110  }
111  break;
112 
113  default:
114  $aNewProfile[$sItemName] = $aItem['Default'];
115  }
116  }
117  } //we completed collecting
118 
119  // set default language
120  $aNewProfile['LangID'] = getLangIdByName(getCurrentLangName());
121 
122  // set default privacy
123  ch_import('ChWsbPrivacyQuery');
124  $oPrivacy = new ChWsbPrivacyQuery();
125  $aNewProfile['allow_view_to'] = $oPrivacy->getDefaultValueModule('profile', 'view_block');
126 
127  $sSet = $this -> collectSetString( $aNewProfile );
128  $sQuery = "INSERT INTO `Profiles` SET \n$sSet";
129 
130  $rRes = db_res( $sQuery );
131 
132  if( $rRes ) {
133  $iNewID = db_last_id();
134 
135  $this -> createProfileCache( $iNewID );
136 
137  if( $aMainMember )
138  $this -> updateProfile( $iMainMemberID, array('Couple' => $iNewID ) ); //set main member's couple. they will be linked each other
139 
140  //collect status text
141  if( $bSendMails and !$aMainMember ) { //send mail only to main member, not to couple
142  $sStatusText = $aNewProfile['Status'];
143  if (getParam('autoApproval_ifNoConfEmail') == 'on') {
144  if ('Active' == $sStatusText)
145  $this -> sendActivationMail( $iNewID );
146  else
147  $this -> sendApprovalMail( $iNewID );
148  } else {
149  if (!$this -> sendConfMail($iNewID))
150  $sStatusText = 'NotSent';
151  }
152  } else
153  $sStatusText = 'OK';
154 
155  //set crypted password
156  $sSalt = genRndSalt();
157  $this -> updateProfile($iNewID, array(
158  'Password' => encryptUserPwd($aNewProfile['Password'], $sSalt),
159  'Salt' => $sSalt
160  ));
161 
162  ch_member_ip_store($iNewID);
163 
164  return array( $iNewID, $sStatusText );
165  } else
166  return array( false, 'Failed' );
167  }
168 
170  {
172  }
173 
174  function sendConfMail( $iMemID )
175  {
176  global $site;
177 
178  $iMemID = (int)$iMemID;
179  $aMember = $this -> getProfileInfo( $iMemID );
180  if( !$aMember )
181  return false;
182 
183  $sEmail = $aMember['Email'];
184 
185  $sConfCode = base64_encode( base64_encode( crypt( $sEmail, CRYPT_EXT_DES ? 'secret_ph' : 'se' ) ) );
186  $sConfLink = "{$site['url']}profile_activate.php?ConfID={$iMemID}&ConfCode=" . urlencode( $sConfCode );
187 
188  $aPlus = array( 'ConfCode' => $sConfCode, 'ConfirmationLink' => $sConfLink );
189 
190  $aTemplate = $this -> oEmailTemplate -> getTemplate( 't_Confirmation', $iMemID ) ;
191  return sendMail( $sEmail, $aTemplate['Subject'], $aTemplate['Body'], $iMemID, $aPlus, 'html', false, true );
192  }
193 
194  // sent when user status changed to active
196  {
197  $iMemID = (int)$iMemID;
198  $aMember = $this -> getProfileInfo( $iMemID );
199  if( !$aMember )
200  return false;
201 
202  $sEmail = $aMember['Email'];
203  $aTemplate = $this -> oEmailTemplate -> getTemplate( 't_Activation', $iMemID ) ;
204 
205  return sendMail( $sEmail, $aTemplate['Subject'], $aTemplate['Body'], $iMemID, array(), 'html', false, true);
206  }
207 
208  //sent if member in approval status
209  function sendApprovalMail( $iMemId )
210  {
211  }
212 
213  // sent to admin
215  {
216  $iMemID = (int)$iMemID;
217  $aMember = $this -> getProfileInfo( $iMemID );
218  if( !$aMember )
219  return false;
220 
221  $oEmailTemplates = new ChWsbEmailTemplates();
222  $aTemplate = $oEmailTemplates->getTemplate('t_UserJoined');
223 
224  return sendMail($GLOBALS['site']['email'], $aTemplate['Subject'], $aTemplate['Body'], $iMemID);
225  }
226 
227  function sendUnregisterUserNotify( $aMember )
228  {
229  if(empty($aMember) || !is_array($aMember))
230  return false;
231 
232  $oEmailTemplates = new ChWsbEmailTemplates();
233  $aTemplate = $oEmailTemplates->parseTemplate('t_UserUnregistered', array(
234  'NickName' => $aMember['NickName'],
235  'Email' => $aMember['Email'],
236  ));
237 
238  return sendMail($GLOBALS['site']['email'], $aTemplate['subject'], $aTemplate['body']);
239  }
240 
241  function updateProfile( $iMemberID, $aData )
242  {
243  if( !$aData or !is_array($aData) or empty($aData) )
244  return false;
245 
246  $this -> _checkUpdateMatchFields($aData);
247 
248  $sSet = $this -> collectSetString( $aData );
249  $sQuery = "UPDATE `Profiles` SET {$sSet} WHERE `ID` = " . (int)$iMemberID;
250  //echo $sQuery ;
251  $res = db_res($sQuery);
252  $this -> createProfileCache( $iMemberID );
253  return (bool)db_affected_rows($res);
254  }
255 
259  function _checkUpdateMatchFields(&$aData)
260  {
261  // list of all matchable fields
262  $aAllMatchFields = array();
263 
264  // temporary flag of member
265  $aData['UpdateMatch'] = false;
266 
267  // get array of matching fields
268  $oMatchFields = new ChWsbProfileFields(101);
269  $aMatchFields = $oMatchFields -> aArea[0]['Items'];
270 
271  // get array of all fields
272  $oAllFields = new ChWsbProfileFields(100);
273  $aAllFields = $oAllFields -> aArea[0]['Items'];
274 
275  // find all matchable fields
276  foreach ($aMatchFields as $iFieldID => $aField) {
277  // put it to the list
278  $aAllMatchFields[$iFieldID] = $aField['Name'];
279 
280  // get matched field too
281  $iNewFieldID = $aField['MatchField'];
282  $aNewField = $aAllFields[$iNewFieldID];
283 
284  // and put it to the list too
285  $aAllMatchFields[$iNewFieldID] = $aNewField['Name'];
286  }
287 
288  // also need to re-match if Status is changed
289  $aAllMatchFields[7] = 'Status';
290 
291  //echoDbg($aAllMatchFields);
292 
293  // check if one of updated fields is matchable
294  foreach ($aData as $sName => $sValue) {
295  //echo $sName . "\n";
296  if (in_array($sName, $aAllMatchFields)) {
297  $aData['UpdateMatch'] = true;
298  break; // if at least one of the fields is matchable then true
299  }
300  }
301 
302  //echoDbg($aData);
303  }
304 
305  function collectSetString( $aData )
306  {
307  $sRequestSet = '';
308 
309  foreach( $aData as $sField => $mValue ) {
310  if( is_string($mValue) )
311  $sValue = "{$GLOBALS['MySQL']->escape($mValue)}";
312  elseif( is_bool($mValue) )
313  $sValue = (int)$mValue;
314  elseif( is_array($mValue) ) {
315  $sValue = '';
316  foreach( $mValue as $sStr )
317  $sValue .= $GLOBALS['MySQL']->escape(str_replace( ',', '', $sStr ), false) . ',';
318 
319  $sValue = "'" . substr($sValue,0,-1) . "'";
320  } elseif( is_int($mValue) ) {
321  $sValue = $mValue;
322  } else
323  continue;
324 
325  $sRequestSet .= "`$sField` = $sValue,\n";
326  }
327 
328  $sRequestSet = substr( $sRequestSet,0, -2 );// remove ,\n
329 
330  return $sRequestSet;
331  }
332 
333  function deleteProfile( $iMemberID )
334  {
335  }
336 
337  function genRandomPassword()
338  {
339  return 'aaaaaa';
340  }
341 
342  function getProfileInfo( $iMemberID )
343  {
344  return db_assoc_arr( "SELECT * FROM `Profiles` WHERE `ID` = " . (int)$iMemberID );
345  }
346 
347  function genUniqueValue( $sFieldName, $sValue, $mixedRandMore = false )
348  {
349  if( $mixedRandMore === true )
350  $sRand = '(' . rand(1000, 9999) . ')';
351  else if(is_string($mixedRandMore) && !empty($mixedRandMore))
352  $sRand = $mixedRandMore;
353  else
354  $sRand = '(2)';
355 
356  $sNewValue = $sValue . $sRand;
357 
358  $iCount = (int)db_value( "SELECT COUNT(*) FROM `Profiles` WHERE `$sFieldName` = {$GLOBALS['MySQL']->escape($sNewValue)}" );
359  if( $iCount )
360  return genUniqueValue( $sFieldName, $sValue, true );
361  else
362  return $sNewValue;
363  }
364 }
ChWsbProfilesController\__construct
__construct()
Definition: ChWsbProfilesController.php:17
ChWsbProfilesController\$aItems
$aItems
Definition: ChWsbProfilesController.php:14
db_assoc_arr
db_assoc_arr($query, $bindings=[])
Definition: db.inc.php:86
ChWsbProfileFields
Definition: ChWsbProfileFields.php:13
ChWsbProfilesController\genRandomPassword
genRandomPassword()
Definition: ChWsbProfilesController.php:337
getCurrentLangName
if(!defined('CH_SKIP_INSTALL_CHECK')) getCurrentLangName($isSetCookie=true)
Definition: languages.inc.php:36
genRndSalt
genRndSalt()
Definition: utils.inc.php:1637
ChWsbProfilesController\sendConfMail
sendConfMail( $iMemID)
Definition: ChWsbProfilesController.php:174
ChWsbEmailTemplates
Definition: ChWsbEmailTemplates.php:11
ChWsbProfilesController\_checkUpdateMatchFields
_checkUpdateMatchFields(&$aData)
Definition: ChWsbProfilesController.php:259
ChWsbProfilesController\sendNewUserNotify
sendNewUserNotify( $iMemID)
Definition: ChWsbProfilesController.php:214
ch_import
ch_import($sClassName, $aModule=array())
Definition: utils.inc.php:1218
sendMail
sendMail( $sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID=0, $aPlus=array(), $sEmailFlag='html', $isDisableAlert=false, $bForceSend=false)
Definition: utils.inc.php:461
ChWsbProfilesController\createProfileCache
createProfileCache( $iMemID)
Definition: ChWsbProfilesController.php:169
ChWsbPrivacyQuery
Definition: ChWsbPrivacyQuery.php:11
ChWsbProfilesController\deleteProfile
deleteProfile( $iMemberID)
Definition: ChWsbProfilesController.php:333
php
ChWsbProfilesController\$oEmailTemplate
$oEmailTemplate
Definition: ChWsbProfilesController.php:15
ch_member_ip_store
ch_member_ip_store($iMemberId, $sIP=false)
Definition: utils.inc.php:1799
ChWsbProfilesController\createProfile
createProfile( $aData, $bSendMails=true, $iMainMemberID=0)
Definition: ChWsbProfilesController.php:22
createUserDataFile
createUserDataFile( $userID)
Definition: profiles.inc.php:192
and
and
Definition: license.txt:18
getParam
getParam($sParamName, $bUseCache=true)
Definition: db.inc.php:130
$site
$site['ver']
Definition: version.inc.php:8
db_last_id
db_last_id()
Definition: db.inc.php:47
ChWsbProfilesController\updateProfile
updateProfile( $iMemberID, $aData)
Definition: ChWsbProfilesController.php:241
ChWsbProfilesController\sendActivationMail
sendActivationMail( $iMemID)
Definition: ChWsbProfilesController.php:195
ChWsbProfilesController\collectSetString
collectSetString( $aData)
Definition: ChWsbProfilesController.php:305
global
if(!defined("GLOBAL_MODULE")) define("GLOBAL_MODULE" global
Definition: header.inc.php:25
db_affected_rows
db_affected_rows($oStmt=null)
Definition: db.inc.php:56
ChWsbProfilesController\genUniqueValue
genUniqueValue( $sFieldName, $sValue, $mixedRandMore=false)
Definition: ChWsbProfilesController.php:347
ChWsbProfilesController
Definition: ChWsbProfilesController.php:12
ChWsbProfilesController\getProfileInfo
getProfileInfo( $iMemberID)
Definition: ChWsbProfilesController.php:342
ChWsbProfilesController\sendApprovalMail
sendApprovalMail( $iMemId)
Definition: ChWsbProfilesController.php:209
db_res
db_res($query, $bindings=[])
Definition: db.inc.php:39
db_value
db_value($query, $bindings=[], $error_checking=true, $index=0)
Definition: db.inc.php:98
$sStatusText
$sStatusText
Definition: db.php:25
ChWsbProfilesController\$oPF
$oPF
Definition: ChWsbProfilesController.php:13
encryptUserPwd
encryptUserPwd($sPwd, $sSalt)
Definition: utils.inc.php:1643
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
$iMemID
$iMemID
Definition: get_rss_feed.php:45
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
$sName
$sName
Definition: ChWsbAdminTools.php:853
ch_is_ip_dns_blacklisted
ch_is_ip_dns_blacklisted($sCurIP='', $sType='')
Definition: utils.inc.php:995
ChWsbProfilesController\sendUnregisterUserNotify
sendUnregisterUserNotify( $aMember)
Definition: ChWsbProfilesController.php:227
$GLOBALS
$GLOBALS['iAdminPage']
Definition: advanced_settings.php:10
or
Voluntary License Schemes The Licensor waives the right to collect whether individually or
Definition: license.txt:37
getLangIdByName
getLangIdByName($sLangName)
Definition: languages.inc.php:136