Changeset 78 for trunk/www/Application/Model/User.php
- Timestamp:
- Sep 11, 2009, 8:18:38 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/www/Application/Model/User.php
r75 r78 1 1 <?php 2 3 include_once(dirname(__FILE__).'/../../Base/Model.php'); 4 include_once(dirname(__FILE__).'/../../Base/Mail.php'); 5 include_once(dirname(__FILE__).'/Log.php'); 2 6 3 7 class User extends Model … … 7 11 var $DefaultRole = 2; 8 12 var $OnlineStateTimeout = 600; // in seconds 9 10 var $Roles = array('Unknown', 'Anonymous', 'User', 'Administrator');11 13 12 14 function PasswordHash($Name, $Password) … … 31 33 $Query = $this->Database->select('UserOnline', '*', 'SessionId="'.$SID.'"'); 32 34 if($Query->num_rows == 0) 33 $this->Database->insert('UserOnline', array('SessionId' => $SID, 'User' => $this->Config['Web']['UserAnonymousId'], 'LoginTime' => 'NOW()', 'ActivityTime' => 'NOW()', 'IpAddress' => GetRemoteAddress(), 'HostName' => gethostbyaddr(GetRemoteAddress()), 'ScriptName' => $_SERVER['PHP_SELF']));35 $this->Database->insert('UserOnline', array('SessionId' => $SID, 'User' => $this->Config['Web']['UserAnonymousId'], 'LoginTime' => 'NOW()', 'ActivityTime' => 'NOW()', 'IpAddress' => $this->System->GetRemoteAddress(), 'HostName' => gethostbyaddr($this->System->GetRemoteAddress()), 'ScriptName' => $_SERVER['PHP_SELF'])); 34 36 //echo($this->Database->LastQuery); 35 37 … … 51 53 // Refresh time of last access 52 54 $this->Database->update('UserOnline', 'SessionId="'.$SID.'"', array('ActivityTime' => 'NOW()')); 53 54 //$this->LoadPermission($this->Data['Role']);55 56 // Role and permission57 //$this->LoadRoles();58 55 } 59 56 … … 79 76 else 80 77 { 81 $this->Database->insert('User', array('Name' => $Name, 'Login' => $Login, 'Password' => $this->PasswordHash($Login, $Password), 'Email' => $Email, 'RegistrationTime' => 'NOW()', 'Locked' => 1 , 'Role' => 2));78 $this->Database->insert('User', array('Name' => $Name, 'Login' => $Login, 'Password' => $this->PasswordHash($Login, $Password), 'Email' => $Email, 'RegistrationTime' => 'NOW()', 'Locked' => 1)); 82 79 $UserId = $this->Database->insert_id; 83 80 84 $Subject = FromUTF8('Registrace nového účtu', 'iso2'); 85 $Message = 'Provedli jste registraci nového účtu na serveru <a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder']."/</a>.<br>\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br><br>\n\nVáš účet je: ".$Login."\n<br>Pro dokončení registrace klikněte na tento odkaz: ".'<a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'</a>.'."\n<br> \n\n<br><br>Na tento email neodpovídejte."; 86 $AdditionalHeaders = "To: ".$Name." <".$Email.">\n"."From: ".FromUTF8($Config['Web']['Title'], 'iso2')." <noreplay@zdechov.net>\n"."MIME-Version: 1.0\n"."Content-type: text/html; charset=utf-8"; 87 mail($Email, $Subject, $Message, $AdditionalHeaders); 81 $Mail = new Mail(); 82 $Mail->Content = 'Provedli jste registraci nového účtu na serveru <a href="http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder'].'/">http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder']."/</a>.<br>\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br><br>\n\nVáš účet je: ".$Login."\n<br>Pro dokončení registrace klikněte na tento odkaz: ".'<a href="http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'">http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder'].'/?Action=UserRegisterConfirm&User='.$UserId.'&H='.$this->PasswordHash($Login, $Password).'</a>.'."\n<br> \n\n<br><br>Na tento email neodpovídejte."; 83 $Mail->Subject = 'Registrace nového účtu'; 84 $Mail->RecipientName = $Name; 85 $Mail->RecipientAddress = $Email; 86 $Mail->SenderName = $this->Config['Web']['Title']; 87 $Mail->SenderAddress = 'noreplay@zdechov.net'; 88 $Mail->Send(); 89 88 90 $Result = $this->System->Translate('UserRegistrated'); 89 91 $this->System->Modules['Log']->NewRecord('User', 'NewRegistration', $Login); … … 142 144 } 143 145 144 function LoadRoles()145 {146 $this->Roles = array();147 $DbResult = $this->Database->select('UserRole', '*');148 while($DbRow = $DbResult->fetch_array())149 $this->Roles[] = $DbRow;150 }151 152 function LoadPermission($Role)153 {154 $this->Data['Permission'] = array();155 $DbResult = $this->Database->query('SELECT `UserRolePermission`.*, `PermissionOperation`.`Description` FROM `UserRolePermission` JOIN `PermissionOperation` ON `PermissionOperation`.`Id` = `UserRolePermission`.`Operation` WHERE `UserRolePermission`.`Role` = '.$Role);156 if($DbResult->num_rows > 0)157 while($DbRow = $DbResult->fetch_array())158 $this->Data['Permission'][$DbRow['Operation']] = $DbRow;159 }160 161 function PermissionMatrix()162 {163 $Result = array();164 $DbResult = $this->Database->query('SELECT `UserRolePermission`.*, `PermissionOperation`.`Description`, `UserRole`.`Title` FROM `UserRolePermission` LEFT JOIN `PermissionOperation` ON `PermissionOperation`.`Id` = `UserRolePermission`.`Operation` LEFT JOIN `UserRole` ON `UserRole`.`Id` = `UserRolePermission`.`Role`');165 while($DbRow = $DbResult->fetch_array())166 {167 $Value = '';168 if($DbRow['Read']) $Value .= 'R';169 if($DbRow['Write']) $Value .= 'W';170 $Result[$DbRow['Description']][$DbRow['Title']] = $Value;171 }172 return($Result);173 }174 175 function CheckGroupPermission($GroupId, $OperationId)176 {177 // Check group-group relation178 $DbResult = $this->Database->select('PermissionGroupAssignment', '*', '`Group`="'.$GroupId.'" AND `Type`="Group"');179 while($DbRow = $DbResult->fetch_array())180 {181 if($this->CheckGroupPermission($DbRow['GroupOrOperation'], $OperationId) == true) return(true);182 }183 184 // Check group-operation relation185 $DbResult = $this->Database->select('PermissionGroupAssignment', '*', '`Group`="'.$GroupId.'" AND `GroupOrOperation`="'.$OperationId.'" AND `Type`="Operation"');186 if($DbResult->num_rows > 0) return(true);187 return(false);188 }189 190 function CheckPermission($Module, $Operation, $ItemType = '', $ItemIndex = 0)191 {192 $DbResult = $this->Database->select('PermissionOperation', 'Id', '`Module`="'.$Module.'" AND `Item`="'.$ItemType.'" AND `ItemId`='.$ItemIndex.' AND `Operation`="'.$Operation.'"');193 if($DbResult->num_rows > 0)194 {195 $DbRow = $DbResult->fetch_array();196 $OperationId = $DbRow['Id'];197 198 // Check user-operation relation199 $DbResult = $this->Database->select('PermissionUserAssignment', '*', '`User`="'.$this->Data['Id'].'" AND `GroupOrOperation`="'.$OperationId.'" AND `Type`="Operation"');200 if($DbResult->num_rows > 0) return(true);201 202 // Check user-group relation203 $DbResult = $this->Database->select('PermissionUserAssignment', 'GroupOrOperation', '`User`="'.$this->Data['Id'].'" AND `Type`="Group"');204 while($DbRow = $DbResult->fetch_array())205 {206 if($this->CheckGroupPermission($DbRow['GroupOrOperation'], $OperationId) == true) return(true);207 }208 return(false);209 } else return(false);210 }211 212 146 function PasswordRecoveryRequest($Login, $Email) 213 147 { 214 global $Config;215 216 148 $DbResult = $this->Database->select('User', 'Login, Name, Id, Email, Password', '`Login`="'.$Login.'" AND `Email`="'.$Email.'"'); 217 149 if($DbResult->num_rows > 0) … … 220 152 $NewPassword = substr(sha1(strtoupper($Row['Login'])), 0, 7); 221 153 222 $Subject = 'Obnova hesla'; 223 $Message = 'Požádali jste o zaslání nového hesla na serveru <a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder']."</a>.<br />\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br /><br />\n\nVaše nové heslo k účtu ".$Row['Login']." je: ".$NewPassword."\n<br>Pro aktivaci tohoto hesla klikněte na ".'<a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=PasswordRecoveryConfirm&User='.$Row['Id'].'&H='.$Row['Password'].'&P='.$NewPassword.'">tento odkaz</a>.'."\n<br /> Po přihlášení si prosím změňte heslo na nové.\n\n<br><br>Na tento email neodpovídejte."; 224 $AdditionalHeaders = "To: ".$Row['Name']." <".$Row['Email'].">\n"."From: ".FromUTF8($Config['Web']['Title'], 'iso2')." <noreplay@zdechov.net>\n"."MIME-Version: 1.0\n"."Content-type: text/html; charset=utf-8"; 225 mail($Row['Email'], $Subject, $Message, $AdditionalHeaders); 154 $Mail = new Mail(); 155 $Mail->Subject = 'Obnova hesla'; 156 $Mail->Content = 'Požádali jste o zaslání nového hesla na serveru <a href="http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder'].'">http://'.$this->Config['Web']['Host'].$this->Config['Web']['RootFolder']."</a>.<br />\nPokud jste tak neučinili, měli by jste tento email ignorovat.<br /><br />\n\nVaše nové heslo k účtu ".$Row['Login']." je: ".$NewPassword."\n<br>Pro aktivaci tohoto hesla klikněte na ".'<a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'/?Action=PasswordRecoveryConfirm&User='.$Row['Id'].'&H='.$Row['Password'].'&P='.$NewPassword.'">tento odkaz</a>.'."\n<br /> Po přihlášení si prosím změňte heslo na nové.\n\n<br><br>Na tento email neodpovídejte."; 157 $Mail->RecipientName = $Row['Name']; 158 $Mail->RecipientAddress = $Row['Email']; 159 $Mail->SenderName = $this->Config['Web']['Title']; 160 $Mail->SenderAddress = 'noreplay@zdechov.net'; 161 $Mail->Send(); 162 226 163 $Output = $this->System->Translate('UserPasswordRecoverySuccess'); 227 164 $this->System->Modules['Log']->NewRecord('User', 'PasswordRecoveryRequest', 'Login='.$Login.',Email='.$Email); … … 246 183 return($Output); 247 184 } 248 249 function ServerCount()250 {251 $DbResult = $this->Database->query('SELECT COUNT(*) FROM Server WHERE User='.$this->Data['Id']);252 $DbRow = $DbResult->fetch_row();253 return($DbRow[0]);254 }255 256 function RealmCount()257 {258 $Total = 0;259 $DbResult = $this->Database->query('SELECT Id FROM Server WHERE User='.$this->User['Id']);260 while($DbRow = $DbResult->fetch_assoc())261 {262 $Server = new Server($this->Database, $DbRow['Id']);263 $Total += $Server->RealmCount();264 }265 return($Total);266 }267 185 } 268 186
Note:
See TracChangeset
for help on using the changeset viewer.