QuartzMap/admin/class/user.php

204 lines
5.8 KiB
PHP

<?php
class user_Class
{
private $table_name = 'user';
private $dbconn = null;
private $owner_id = null;
function __construct($dbconn, $owner_id) {
$this->dbconn = $dbconn;
$this->owner_id = $owner_id;
}
function create($data, $isHashed = false)
{
if(!$isHashed){
$data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);
}
$sql = "INSERT INTO PUBLIC." .$this->table_name."
(name,email,password,ftp_user,accesslevel,owner_id) "."VALUES('".
$this->cleanData($data['name'])."','".
$this->cleanData($data['email'])."','".
$data['password']."','".
$this->cleanData($data['ftp_user'])."','".
$this->cleanData($data['accesslevel'])."',".
$this->owner_id.") RETURNING id";
$row = pg_fetch_object(pg_query($this->dbconn, $sql));
if($row) {
# insert user groups
$values = array();
foreach($data['groups'] as $group_id){
array_push($values, "(".$row->id.",".$group_id.")");
}
$sql = "insert into public.user_access (user_id,access_group_id) values ".implode(',', $values);
$ret = pg_query($this->dbconn, $sql);
return $row->id;
}
return 0;
//return pg_affected_rows(pg_query($this->dbconn, $sql));
}
function getRows()
{
$sql ="select * from public." .$this->table_name;
if($this->owner_id != SUPER_ADMIN_ID){
$sql .= " WHERE owner_id = ".$this->owner_id;
}
$sql .= " ORDER BY id DESC";
return pg_query($this->dbconn, $sql);
}
function getRowsArr(){
$rv = array();
$result = $this->getRows();
while ($row = pg_fetch_assoc($result)) {
$rv[$row['id']] = $row['name'];
}
return $rv;
}
function getById($id){
$sql ="select * from public." .$this->table_name . "
where id='".intval($id)."'";
return pg_query($this->dbconn, $sql);
}
function loginCheck($pwd, $email){
$sql ="select * from public.user where email = '".$this->cleanData($email)."'";
$result = pg_query($this->dbconn,$sql);
$row = pg_fetch_object($result);
pg_free_result($result);
if (password_verify($pwd, $row->password)) {
return $row;
}
return null;
}
function getByEmail($email){
$sql ="select * from public.".$this->table_name." where email='".$email."'";
$result = pg_query($this->dbconn, $sql);
if(!$result){
return false;
}
$row = pg_fetch_object($result);
pg_free_result($result);
return $row;
}
function delete($id)
{
$sql ="delete from public.user_access where user_id='".intval($id)."'";
$result = pg_query($this->dbconn, $sql);
if(!$result){
return false;
}
pg_free_result($result);
$sql ="delete from public." .$this->table_name . " where id='".intval($id)."'";
$result = pg_query($this->dbconn, $sql);
if(!$result){
return false;
}
pg_free_result($result);
return true;
}
function update($data=array())
{
$id = intval($data['id']);
$row = pg_fetch_object($this->getById($id));
$sql = "update public.user set name='".
$this->cleanData($data['name'])."'";
if($row->password != $data['password']){ # if password is changed
$hashpassword = password_hash($data['password'], PASSWORD_DEFAULT);
$sql .= ", password='".$hashpassword."'";
}
if(isset($data['ftp_user'])){
$sql .= ", ftp_user = '".$this->cleanData($data['ftp_user'])."'";
}
$sql .= ", accesslevel='".$this->cleanData($data['accesslevel']).
"' where id = '".$id."'";
$rv = pg_affected_rows(pg_query($this->dbconn, $sql));
if($rv > 0){
# drop old groups
$sql = "delete from public.user_access where user_id=".$data['id'];
$ret = pg_query($this->dbconn, $sql);
# insert user groups
$values = array();
foreach($data['groups'] as $group_id){
array_push($values, "(".$data['id'].",".$group_id.")");
}
$sql = "insert into public.user_access (user_id,access_group_id) values ".implode(',', $values);
$ret = pg_query($this->dbconn, $sql);
}
return $rv;
}
function isOwnedByUs($id){
if($this->owner_id == SUPER_ADMIN_ID){ // if Super Admin
return true;
}
$sql = "select * from public.".$this->table_name." where id=".$id." and owner_id=".$this->owner_id;
$result = pg_query($this->dbconn, $sql);
if(!$result){
return false;
}
$rv = (pg_num_rows($result) > 0);
pg_free_result($result);
return $rv;
}
function cleanData($val)
{
return pg_escape_string($this->dbconn, $val);
}
static public function create_ftp_user($ftp_user, $email, $hashed_pwd){
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open('sudo /usr/local/bin/create_ftp_user.sh', $descriptorspec, $pipes, null, null);
if (is_resource($process)) {
fwrite($pipes[0], $ftp_user."\n".$hashed_pwd."\n");
fclose($pipes[0]);
//echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
// It is important that you close any pipes before calling proc_close in order to avoid a deadlock
$return_value = proc_close($process);
}
}
}