| Server IP : 195.130.67.5 / Your IP : 216.73.216.231 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/includes/ |
Upload File : |
<?
////////////////////////////////////////////////////////////////////////////////////////
// Class: UserSession
// Purpose: Control user access to pages
///////////////////////////////////////////////////////////////////////////////////////
class UserSession
{
private $connector;
public function __construct($connector)
{
$this->connector = $connector;
if (!isset($_SESSION["usergroup"]))
{
$this->setAnonymous();
}
}
public function encryptedPassword($password)
{
return md5($password);
}
// Συνδέει το χρήστη
public function login($username, $password, $backend=false)
{
if ($this->checkUser($username, $password))
{
$myrow = $this->getUserInfo($username);
if ($backend==true and $myrow["perm_backend_enter"]==0)
return false;
$this->setUserSessionInfo($myrow, $backend);
$this->connector->query("UPDATE users SET lastvisit=NOW() WHERE id=".$myrow["id"]);
return true;
}
else
{
return false;
}
}
// Ελέγχει για την ύπαρξη ενεργού χρήστη με το συγκεκριμένο username και password
public function checkUser($username, $password)
{
$result = $this->connector->query("SELECT * FROM users WHERE username='$username' and password='".$this->encryptedPassword($password)."' and state=1");
return (mysqli_num_rows($result )>0?true:false);
}
// Επιστρέφει τα στοιχεία του χρήστη με το δεδομένο id
public function getUserById($id)
{
$result = $this->connector->query("SELECT * FROM users WHERE id=".$id);
return $this->connector->fetchArray($result);
}
// Τραβάει τα δεδομένα του χρήστη με το δεδομένο username από τη βάση μαζί με τα στοιχεία της ομάδας του
public function getUserInfo($username)
{
$result = $this->connector->query("SELECT *, users.id as id FROM users, user_groups WHERE users.username='$username' and users.usergroup=user_groups.id");
if ($this->connector->getNumRows($result)>0)
return $this->connector->fetchArray($result);
else
return NULL;
}
// Ενημερώνει τις μεταβλητές SESSION για τον χρήστη
public function setUserSessionInfo($info_array, $backend=false)
{
if ($backend==true)
$prefix = "cms_";
else
$prefix = "";
$_SESSION[$prefix."userid"] = $info_array["id"];
$_SESSION[$prefix."username"] = $info_array["username"];
$_SESSION[$prefix."fullname"] = $info_array["fullname"];
$_SESSION[$prefix."email"] = $info_array["email"];
$_SESSION[$prefix."created"] = $info_array["created"];
$_SESSION[$prefix."usergroup"] = $info_array["usergroup"];
$_SESSION[$prefix."website"] = $info_array["website"];
$_SESSION[$prefix."address"] = $info_array["address"];
$_SESSION[$prefix."telephone"] = $info_array["telephone"];
$_SESSION[$prefix."signature"] = $info_array["signature"];
foreach ($info_array as $key=>$value) // αποθήκευση των permissions
{
if (strstr($key,"perm_"))
$_SESSION[$prefix.$key] = $value;
}
}
// Αποσύνδεση χρήστη
public function logout($backend=false)
{
if ($backend==false)
{
$_SESSION["usergroup"] = 5; // Anonymous
unset($_SESSION["userid"]);
unset($_SESSION["username"]);
unset($_SESSION["fullname"]);
$this->setAnonymous();
}
else
{
foreach ($_SESSION as $key=>$value)
{
if (strpos($key, "cms_")===0)
unset($_SESSION[$key]);
}
}
}
// Θέτει το επίπεδο χρήστη στο Anonymous (not logged in)
public function setAnonymous()
{
$_SESSION["usergroup"] = 5; // Anonymous
$result = $this->connector->query("SELECT * FROM user_groups WHERE id=5");
if ($myrow=$this->connector->fetchArray($result))
{
foreach ($myrow as $key=>$value) // αποθήκευση των permissions
{
if (strstr($key,"perm_"))
$_SESSION[$key] = $value;
}
}
}
// Ελέγχει για την ύπαρξη χρήστη με το συγκεκριμένο username
public function usernameExists($username)
{
$result = $this->connector->query("SELECT * FROM users WHERE username='$username'");
return (mysqli_num_rows($result )>0?true:false);
}
// Ελέγχει για την ύπαρξη χρήστη με το συγκεκριμένο username και email
public function usernameEmailExists($username, $email)
{
$result = $this->connector->query("SELECT * FROM users WHERE username='$username' and email='$email'");
return ($this->connector->getNumRows($result)>0?true:false);
}
// Ελέγχει αν υπάρχει χρήστης με το δεδομένο email και επιστρέφει το id του χρήστη κατόχου
public function userEmailExists($email)
{
$result = $this->connector->query("SELECT * FROM users WHERE email='$email'");
if ($myrow=$this->connector->fetchArray($result))
return $myrow["id"];
else
return false;
}
// Επιστρέφει όλα τα emails των Administrators σε ένα string χωρισμένα με κόμματα
public function getAdminEmails()
{
$result = $this->connector->query("SELECT email FROM users WHERE usergroup=1");
while ($myrow = $this->connector->fetchArray($result))
$emails_array[] = $myrow["email"];
if (count($emails_array)>0)
{
$admin_emails = implode(",",$emails_array);
return $admin_emails;
}
else
return false;
}
// Επιστρέφει πίνακα με όλα τα usernames που υπάρχουν στη βάση
public function getAllUsernames()
{
$usernames_array = array();
$result = $this->connector->query("SELECT username FROM users");
while ($myrow = $this->connector->fetchArray($result))
{
$usernames_array[] = $myrow["username"];
}
return $usernames_array;
}
// Επιστρέφει πίνακα με όλους τους ενεργούς εγγεγραμμένους χρήστες
public function getAllActiveUsers()
{
$users_array = array();
$result = $this->connector->query("SELECT id, fullname as name, email FROM users WHERE state=1");
while ($myrow = $this->connector->fetchAssoc($result))
{
if ($myrow["email"]!="")
$users_array[] = $myrow;
}
return $users_array;
}
// Επιστρέφει πίνακα με όλα τα email των εγγεγραμμένων
public function getAllEmails()
{
$emails_array = array();
$result = $this->connector->query("SELECT DISTINCT email FROM users");
while ($myrow = $this->connector->fetchArray($result))
{
if ($myrow["email"]!="")
$emails_array[] = $myrow["email"];
}
return $emails_array;
}
// Ελέγχει αν θα επιτραπεί η πρόσβαση του χρήστη στη ζητούμενη κατηγορία
public function allowUserAccessToCategory($category_settings)
{
if ($category_settings["menu_type"]!=8 and ($_SESSION["perm_frontend_view_public_content"]==0 or ($category_settings["access"]==1 and $_SESSION["perm_frontend_view_registered_content"]==0)))
return false;
else
return true;
}
// Καταχωρεί το συγκεκριμένο χρήστη (front-end)
public function insertUser($fullname, $username, $password, $email, $usergroup, $state, $activation, $general_settings)
{
if ($general_settings["user_new_account_activation"]==0) // Λογαριασμός ενεργοποιημένος από την αρχή
{
$user_activated = 1;
$activation_code = "";
}
else if ($general_settings["user_new_account_activation"]==1) // Ενεργοποίηση λογαριασμού μέσω e-mail
{
$user_activated = 0;
$activation_code = $activation;
}
else if ($general_settings["user_new_account_activation"]==2) // Ενεργοποίηση λογαριασμού απο Διαχειριστή
{
$user_activated = 0;
$activation_code = "";
}
$result = $this->connector->query("INSERT INTO users (fullname, username, password, email, usergroup, state, activation) VALUES ('$fullname','$username','$password','$email',4,'$user_activated','$activation_code')");
return $result;
}
// Ενεργοποιεί το συγκεκριμένο χρήστη
public function activateUser($activation_code)
{
$result = $this->connector->query("UPDATE users SET activation=NULL, state=1 WHERE activation='$activation_code'");
if (mysqli_affected_rows($this->connector->link)>0)
return true;
else
return false;
}
// Καταχωρεί το συγκεκριμένο χρήστη (back-end)
public function insertNewUser($fullname, $username, $password, $email, $usergroup, $state, $website, $address, $telephone, $signature)
{
$result = $this->connector->query("INSERT INTO users (fullname, username, password, email, usergroup, state, created, website, address, telephone, signature) VALUES ('$fullname','$username','".$this->encryptedPassword($password)."','$email','$usergroup','$state', NOW(),'$website','$address','$telephone','$signature')");
return $result;
}
// Ενημερώνει τα στοιχεία του συγκεκριμένου χρήστη
public function updateUser($id, $fullname, $password, $email, $website, $address, $telephone, $signature)
{
if ($password!="")
$result = $this->connector->query("UPDATE users SET fullname='$fullname', password='".$this->encryptedPassword($password)."', email='$email', website='$website', address='$address', telephone='$telephone', signature='$signature' WHERE id=".$id);
else
$result = $this->connector->query("UPDATE users SET fullname='$fullname', email='$email', website='$website', address='$address', telephone='$telephone', signature='$signature' WHERE id=".$id);
return $result;
}
// Ενημερώνει τα στοιχεία βασικά στοιχεία (username, usergroup και state) του συγκεκριμένου χρήστη (xρησιμοποιείται στο back-end)
public function updateUserCore($id, $username, $usergroup, $state)
{
$result = $this->connector->query("UPDATE users SET username='$username', usergroup='$usergroup', state='$state' WHERE id=".$id);
return $result;
}
// Διαγραφή του χρήστη με το συγκεκριμένο id
public function deleteUser($id)
{
$result = $this->connector->query("DELETE FROM users WHERE id=".$id);
return $result;
}
// Αλλάζει το password του συγκεκριμένου χρήστη
public function updateUserPassword($username, $new_password)
{
$result = $this->connector->query("UPDATE users SET password='".$this->encryptedPassword($new_password)."' WHERE username='$username'");
if ($this->connector->getAffectedRows()>0)
return true;
else
return false;
}
// Εναλλάσει τη κατάσταση (ενεργός/ανενεργός) του χρήστη με το συγκεκριμένο id
public function toggleUserState($id)
{
$myrow = $this->getUserById($id);
if ($myrow["state"]==1)
$new_state = 0;
else
$new_state = 1;
$result = $this->connector->query("UPDATE users SET state='$new_state' WHERE id=".$id);
return $result;
}
// Επιστρέφει πίνακα με τις υπάρχουσες ομάδες (user groups) των χρηστών ταξινομημένες από τις ομάδες υψηλότερων δικαιωμάτων προς τις κατώτερες
public function getUserGroups()
{
$user_groups = array();
$result = $this->connector->query("SELECT * FROM user_groups WHERE sort_order>0 ORDER BY sort_order");
while ($myrow = $this->connector->fetchArray($result))
{
$user_groups[] = $myrow;
}
return $user_groups;
}
public function insertLog($action)
{
if($action == '')
return false;
$action = mysqli_real_escape_string($this->connector->link, $action);
if( ($remote_addr = $_SERVER['REMOTE_ADDR']) == '')
$remote_addr = "REMOTE_ADDR_UNKNOWN";
if (isset($_SESSION["cms_userid"]))
$cms_userid = $_SESSION["cms_userid"];
else
$cms_userid = 0;
$result = $this->connector->query("INSERT INTO log (user_id, remote_addr, action) VALUES(".$cms_userid.",'$remote_addr', '$action')");
return $result;
}
}
?>