larray = array();
$this->larray[] = "l_name";
$this->larray[] = "f_name";
$this->larray[] = "m_name";
$this->larray[] = "login";
$this->larray[] = "pw";
$this->login = "";
$this->pw = " ";
$this->uid = -1;
$this->admin = 0;
$this->last_seen = new DateTime(0);
$this->last_host = "unknown";
$this->prefteam = 1;
$this->theme = $tutos[themes][0];
$this->ly = $tutos[layouts][0];
$this->lang = "auto";
$this->tz = $tutos[defaultTZ];
$this->offset = 0;
$this->disabled = 0;
$this->updatepw = 0;
$this->acldefault= array();
# see same checks in login.pinc
if ( defined('useldap') && ! function_exists('ldap_connect')) {
$tutos[useldap] = 0;
}
if ( ! function_exists('imap_open')) {
$tutos[usemailboxes] = 0;
}
if ( ($tutos[usedocmanagement] != 0) && (("Off" == ini_get("file_uploads")) || ("1" != ini_get("file_uploads"))) ) {
$tutos[usedocmanagement] = 0;
}
# Allowed Features are defaulted by config.pinc
$this->p = array();
for ( $i = -1 ; $i > -100 ; $i-- ) {
if ( isset($tutos[$i]) ) {
$this->p[$i] = $tutos[$i];
}
}
# Allowed Features via team memberships
$this->teams = array();
# Start of week
$this->weekstart = $tutos[weekstart];
$this->workday = array(0,1,2,3,4,5,6);
# Default all holidays
foreach ($tutos[holiday] as $i => $f) {
$this->holiday[strtolower($i)] = $f;
}
# Default all iconsets
foreach ($tutos[rowiconsbefore] as $f) {
$this->rowiconsbefore[strtolower($f)] = 0;
}
foreach ($tutos[rowiconsafter] as $f) {
$this->rowiconsafter[strtolower($f)] = 0;
}
# Disable all namedays
foreach ($tutos[nameday] as $i => $f) {
$this->nameday[strtolower($i)] = 0;
}
if (isset($dbconn)) {
$this->tablename = $this->dbconn->prefix . "people";
}
#
# initialize custom database fields
#
$this->init_custom("people");
}
/**
* Read in a user
* mode = 0 id is address id (default)
* mode = 1 id is user id
* mode = 2 use in user_overview
*/
function read($id,&$obj,$mode = 0) {
global $g_hash;
if ( empty($id) ) return;
if ( -1 == $id ) return;
# if ( isset($g_hash[$id]) ) {
# # Hashed
# $this = $g_hash[$id];
# return;
# }
if ( $mode == 0 ) {
$query = "SELECT a.* ,p.*,p.id as u_id FROM ". $obj->dbconn->prefix ."addresses a,". $obj->tablename ." p WHERE a.id = ". $id ." AND a.id = p.adr_id";
} else if ( $mode == 1 ) {
$query = "SELECT a.* ,p.*,p.id as u_id FROM ". $obj->dbconn->prefix ."addresses a,". $obj->tablename ." p WHERE p.id = ". $id ." AND a.id = p.adr_id";
} else if ( $mode == 2 ) {
$query = "SELECT p.*,a.f_name,a.m_name,a.l_name,a.birthday, p.id as u_id FROM ". $obj->dbconn->prefix ."addresses a,". $obj->tablename ." p WHERE p.id = ". $id ." AND a.id = p.adr_id";
}
$result = $obj->dbconn->Exec($query);
if ( 0 != $result->numrows() ) {
$obj->read_result($result,0);
} else if ($mode == 0 ) {
$a = new tutos_address($obj->dbconn);
$a = $a->read($id,$a);
if ( ($a->id == $id) && ($a->gettype() == "address") ) {
$obj->f_name = $a->f_name;
$obj->l_name = $a->l_name;
$obj->id = $a->id;
}
unset($a);
team::obj_read($obj);
}
$result->free();
return $obj;
}
/**
* Read all a result
*/
function read_result(&$r,$pos) {
global $g_hash,$tutos;
$i=0;
while($i < count($this->larray)) {
$f = $this->larray[$i];
$this->$f = StripSlashes($r->get($pos, "$f"));
$i++;
}
$this->id = $r->get($pos, "adr_id");
$this->birthday = $r->getDateTime($pos, "birthday");
$this->last_seen = $r->getDateTime($pos, "last_seen");
$this->last_host = StripSlashes($r->get($pos, "last_host"));
$this->uid = $r->get($pos,"u_id");
$this->admin = $r->get($pos,"admin");
$this->disabled = $r->get($pos,"disabled");
$this->prefteam = $r->get($pos,"prefteam");
$this->lang = strtolower(StripSlashes($r->get($pos, "lang")));
$this->tz = StripSlashes($r->get($pos, "tz"));
$this->theme = StripSlashes($r->get($pos, "theme"));
$this->ly = StripSlashes($r->get($pos, "layout"));
$holidays = StripSlashes($r->get($pos, "holidays"));
foreach($tutos[holiday] as $i => $f) {
$this->holiday[strtolower($i)] = 0;
}
if ( strlen($holidays) > 0 ) {
$h = split(",",$holidays);
while( list ($i,$f) = @each ($h) ) {
$this->holiday[strtolower($f)] = 1;
}
}
$rowiconsbefore = StripSlashes($r->get($pos, "rowiconsbefore"));
foreach($tutos[rowiconsbefore] as $i => $f) {
$this->rowiconsbefore[strtolower($i)] = 0;
}
if ( strlen($rowiconsbefore) > 0 ) {
$h = split(",",$rowiconsbefore);
while( list ($i,$f) = @each ($h) ) {
if ( $f != "" )
$this->rowiconsbefore[strtolower($f)] = 1;
}
}
$rowiconsafter = StripSlashes($r->get($pos, "rowiconsafter"));
foreach($tutos[rowiconsafter] as $i => $f) {
$this->rowiconsafter[strtolower($i)] = 0;
}
if ( strlen($rowiconsafter) > 0 ) {
$h = split(",",$rowiconsafter);
while( list ($i,$f) = @each ($h) ) {
if ( $f != "" )
$this->rowiconsafter[strtolower($f)] = 1;
}
}
$namedays = StripSlashes($r->get($pos, "namedays"));
if ( strlen($namedays) > 0 ) {
$h = split(",",$namedays);
while( list ($i,$f) = @each ($h) ) {
if ( $f != "" )
$this->nameday[strtolower($f)] = 1;
}
} else {
foreach ($tutos[nameday] as $i => $f) {
$this->nameday[strtolower($i)] = 0;
}
}
$wd = StripSlashes($r->get($pos, "workdays"));
if ( strlen($wd) > 0 ) {
$this->workday = array();
$h = split(",",$wd);
while( list ($i,$f) = @each ($h) ) {
if ( is_numeric($f) ) {
$this->workday[] = $f;
}
}
}
$this->weekstart = (integer)($r->get($pos, "weekstart"));
if ( !is_int($this->weekstart) ) {
$this->weekstart = $tutos[weekstart];
}
if ( !is_numeric($this->disabled) ) {
$this->disabled = 0;
}
if ( $this->lang == "" ) {
$this->lang = "auto";
}
#
# read custom database fields
#
$this->read_custom_result($r,$pos,"people");
acl_read($this);
acl_readdefault($this);
# acl_raise($this,$this->id,$tutos[modok]);
$g_hash[$this->uid] = &$this;
# $g_hash[$this->id] = &$this;
team::obj_read($this);
}
/**
* Read and set the permissions this user has
* feature permissions have an ID < 0
*/
function read_permissions() {
global $tutos;
$q = "SELECT * FROM ". $this->dbconn->prefix ."acl WHERE obj_id < 0 AND adr_id = ". $this->id;
$r = $this->dbconn->Exec($q);
$n = $r->numrows();
$a = 0;
while ( $a < $n ) {
$p = $r->get($a, "perm");
$obj_id = (integer)$r->get($a, "obj_id");
$a++;
if ( ! isset ($tutos[$obj_id]) ) {
continue;
}
if ($tutos[$obj_id] == 1) {
$this->p[$obj_id] = $p;
} else {
$this->p[$obj_id] = $tutos[$obj_id];
}
}
$r->free();
# read team permissions
foreach ( $this->teamlist as $i => $f ) {
$t = new team($this->dbconn);
$t = $t->read($i,$t);
$t->read_permissions();
$this->teams[$t->id] = &$t;
unset($t);
}
# hardcoded (CHANGE THIS !!!)
if ($this->isadmin()) {
$this->p[usedbs] = PERM_ALL;
$this->p[useuser] = PERM_ALL;
$this->p[useteams] = PERM_ALL;
} else {
$this->p[usedbs] = PERM_SEE;
$this->p[useuser] = PERM_SEE | PERM_USE| PERM_MOD;
}
if (isset($tutos[useaddressbook])) {
$this->p[uselocation] = $this->p[useaddressbook];
$this->p[usecompany] = $this->p[useaddressbook];
$this->p[usedepartment] = $this->p[useaddressbook];
}
return;
}
/**
* Save the permissions of this user
* feature permissions have an ID < 0
*/
function save_permissions() {
$msg = "";
$q = "DELETE FROM ". $this->dbconn->prefix ."acl where obj_id < 0 AND adr_id = ". $this->id;
$this->dbconn->Exec($q);
@reset ($this->p);
while( list ($i,$f) = @each ($this->p)) {
$q = "INSERT INTO ". $this->dbconn->prefix ."acl (obj_id,adr_id,perm) VALUES (". $i .",". $this->id .",". $f .")";
#error_log($q,3,$tutos[errlog]);
$this->dbconn->Exec($q);
}
return $msg;
}
/**
* return a list of all known users and teams
* parties == combined list
* t_parties == teams
* a_parties == users
* indexed by the Adr-ID
*/
function readKnownParties() {
global $tutos,$lang;
if ( isset($this->parties) ) {
return $this->parties ;
}
$this->parties = array();
$this->t_parties = array();
$this->a_parties = array();
$t1 = "( (a.id = ". $this->id .")";
$t2 = " a.adr_id in (0,". $this->id ;
$sep = "";
$tids = "";
if ( count($this->teamlist) > 0 ) {
$t1 .= " OR t.team_id in (";
foreach ( $this->teamlist as $i => $f ) {
$this->parties[$i] = $lang['Team'] ." ".$f;
$this->t_parties[$i] = $lang['Team'] ." ".$f;
$tids .= $sep . $i;
$sep = ",";
}
$t1 .= $tids .")";
}
$t2 .= $sep . $tids .")";
$t1 .= ")";
#
# users we may see by special (ACL) allowance
#
$q = "SELECT distinct u.adr_id ,d.f_name , d.l_name FROM ". $this->tablename ." u,". $this->dbconn->prefix ."addresses d , ". $this->dbconn->prefix ."acl a WHERE (u.id = a.obj_id) AND (u.adr_id = d.id) AND (a.perm >= ".$tutos[useok].") AND ". $t2 ." ORDER by l_name";
$r = $this->dbconn->Exec($q);
$n = $r->numrows();
$a = 0;
while ( $a < $n ) {
$id = $r->get($a, "adr_id");
$l_name = $r->get($a, "l_name");
$f_name = $r->get($a, "f_name");
$this->parties[$id] = sprintf($lang['AdrFormat2'],$f_name, $l_name);
$this->a_parties[$id] = sprintf($lang['AdrFormat2'],$f_name ,$l_name);
$a++;
}
$r->free();
#
# teams we may see by special (ACL) allowance
#
$q = "SELECT distinct t.id ,t.name from ". $this->dbconn->prefix ."teams t , ". $this->dbconn->prefix ."acl a WHERE (t.id = a.obj_id) AND (a.perm >= ". $tutos[useok].") AND ".$t2." ORDER by t.name";
$r = $this->dbconn->Exec($q);
$n = $r->numrows();
$a = 0;
while ( $a < $n ) {
$id = $r->get($a, "id");
$name = $r->get($a, "name");
$this->parties[$id] = $lang['team'] ." ". $name;
$this->t_parties[$id] = $lang['team'] ." ".$name;
$a++;
}
$r->free();
#
# Members of our teams
#
$q = "SELECT distinct a.id ,a.l_name ,a.f_name FROM ". $this->dbconn->prefix ."addresses a, ". $this->dbconn->prefix ."adrteam t WHERE t.adr_id = a.id AND ".$t1." ORDER by a.l_name";
$r = $this->dbconn->exec($q);
$n = $r->numrows();
$a = 0;
while ( $a < $n ) {
$id = $r->get($a, "id");
$l_name = $r->get($a, "l_name");
$f_name = $r->get($a, "f_name");
$this->parties[$id] = sprintf($lang['AdrFormat2'],$f_name, $l_name);
$this->a_parties[$id] = sprintf($lang['AdrFormat2'],$f_name ,$l_name);
$a++;
}
$r->free();
# Self
$this->parties[$this->id] = $this->getFullName();
$this->a_parties[$this->id] = $this->getFullName();
return;
}
/**
* Add option to array
*/
function addOption(&$array,&$show,$pre,$id, $f, $multi, $exclude = -1) {
if( $exclude != -1 && array_key_exists($f, $exclude) )
return;
if (isset($show[$id]) && ($show[$id] == 1) ) {
return;
}
$x = "\n";
if( array_key_exists($n, $parts) )
$parts[$n] = $x;
else
$people[$n] = $x;
}
else if ( $o->getType() == "team" ) {
$n = $lang['Team'] ." ". $o->name;
$x = "\n";
$tlist[$n] = $x;
}
}
/**
* Ask for People (list all people teams the user can see)
*/
function askPeople($name,$pre,$multi,$project=-1,$any = false) {
global $lang;
$this->readKnownParties();
$rlist = array();
$plist = array();
$tlist = array();
$show = array();
/**
* If a project is given, we first show the users having a role in
* this project. This will be used from task_new...
*/
if( $project != -1 ) {
$project->readroles();
@reset($project->role);
while( list($role, $xf) = each($project->role) ) {
if( isset($project->role[$role]) && is_array($project->role[$role]) ) {
@reset($project->role[$role]);
while( list($i, $o) = each($project->role[$role]) ) {
$this->addOption($rlist,$show,$pre, $o->id, $o->getFullName(),$multi);
}
}
}
}
$r = "";
return $r;
}
/**
* Checks if this user is allowed to use a feature
*/
function feature_ok ($feature,$level) {
global $tutos;
if ( !isset($tutos[$feature])) {
# echo "NO1 |". $this->p[$feature]."| ".$feature;
return false;
}
if ( $tutos[$feature] != 1 ) {
# echo "NO2 |". $this->p[$feature]."| ".$feature;
return false;
}
if ($tutos[useacl] != 1) {
return true;
}
#internal feature of a module
if ( $feature < -1000 ) {
return true;
}
# check users permissions
if ( ($this->p[$feature] & $level) ) {
return true;
}
if ( ($this->p[$feature] & PERM_ALL) ) {
return true;
}
# Check team permissions
foreach($this->teams as $f) {
if ( ($f->p[$feature] & $level) ) {
return true;
}
if ( ($f->p[$feature] & PERM_ALL) ) {
return true;
}
}
return false;
}
/**
* set the login name
*/
function setLogin($value) {
return $this->setStrField("login",$value,"Username");
}
/**
* set the language
*/
function setLanguage($value) {
return $this->setStrField("lang",$value,"UserLanguage");
}
/**
* set the theme
*/
function setTheme($value) {
return $this->setStrField("theme",$value,"UserTheme");
}
/**
* set the layout
*/
function setLayout($value) {
return $this->setStrField("ly",$value,"UserLayout");
}
/**
* set the timezone
*/
function setTimezone($value) {
return $this->setStrField("tz",$value,"UserTimezone");
}
/**
* set the Password
*/
function setPassword($name) {
if ( $this->pw != $name ) {
$this->modified[] = array ( "field" => "Password" , "old" => "*", "new" => "*" );
$this->pw = $name;
return 1;
}
return 0;
}
/**
* datetime of last login
*/
function setLastSeen($value) {
$x = $this->setDateTimeField("last_seen",$value,"UserLastSeen");
if ($x) {
// search for modified data and patch it
foreach ($this->modified as $i => $f) {
if ($f['field'] == "UserLastSeen") {
$this->modified[$i]['obj_id'] = $this->uid;
break;
}
}
}
return $x;
}
/**
* host of last login
*/
function setLastHost($value) {
$x = $this->setStrField("last_host",$value,"UserLastHost");
if ($x) {
// search for modified data and patch it
foreach ($this->modified as $i => $f) {
if ($f['field'] == "UserLastHost") {
$this->modified[$i]['obj_id'] = $this->uid;
break;
}
}
}
return $x;
}
/**
* set the disabled flag
*/
function setDisabled($value) {
return $this->setIntField("disabled",$value,"UserDisabled");
}
/**
* set the admin flag
*/
function setAdmin($value) {
return $this->setIntField("admin",$value,"UserAdmin");
}
/**
* set preferred team (not set via user_new , but when using the calendars)
*/
function set_prefteam($team) {
if (is_array($team) ) {
$team = $team[0];
}
$x = $this->setIntField("prefteam",$team,"forphrase");
if ($x == 1) {
$this->update(false);
}
return $x;
}
/**
* get the admin flag
*/
function isAdmin() {
return ($this->admin == 1);
}
/**
* Save entry
*/
function save() {
global $current_user,$tutos;
$msg = "";
if ( $tutos[demo] == 1 ) {
return "Sorry Demo does not allow change of UserEntry
";
}
$q = new query($this->dbconn);
$q->setTable($this->tablename);
$q->addFV("login",$this->login,"STRING",20);
if ( $this->updatepw == 1 ) {
$q->addFV("pw",$this->pw,"PASSWORD");
}
$q->addFV("admin",$this->admin,"INT");
$q->addFV("disabled",$this->disabled,"INT");
$q->addFV("lang",$this->lang,"STRING",5);
$q->addFV("tz",$this->tz,"STRING",30);
$q->addFV("theme",$this->theme,"STRING",10);
$q->addFV("layout",$this->ly,"STRING",30);
$q->addFV("weekstart",$this->weekstart,"INT");
@reset($this->workday);
$h = "";
while( list ($i,$f) = @each ($this->workday)) {
$h .= $f .",";
}
$q->addFV("workdays",$h,"STRING",60);
@reset($this->nameday);
$h = "";
while( list ($i,$f) = @each ($this->nameday)) {
if($f == 1) {
$h .= $i .",";
}
}
$q->addFV("namedays",$h,"STRING",60);
@reset($this->holiday);
$h = "";
while( list ($i,$f) = @each ($this->holiday)) {
if($f == 1) {
$h .= $i .",";
}
}
$q->addFV("holidays",$h,"STRING",60);
@reset($this->rowiconsbefore);
$h = "";
while( list ($i,$f) = @each ($this->rowiconsbefore)) {
if($f == 1) {
$h .= $i .",";
}
}
$q->addFV("rowiconsbefore",$h,"STRING",30);
@reset($this->rowiconsafter);
$h = "";
while( list ($i,$f) = @each ($this->rowiconsafter)) {
if($f == 1) {
$h .= $i .",";
}
}
$q->addFV("rowiconsafter",$h,"STRING",30);
$this->save_custom_fields($q,"people");
if ( $this->uid < 0 ) {
$this->modified = array();
if ( isset($this->newid) ) {
$this->uid = $this->newid;
$q->addFV("id",$this->uid,"");
} else {
$this->uid = $q->addFV("id",-1,"NEXTID");
$this->modified[] = array ( "field" => "UserCreate" ,
"old" => "-1" ,
"new" => $this->uid,
"obj_id" => $this->id
);
$this->modified[] = array ( "field" => "created" ,
"old" => "-1",
"new" => $this->uid,
"obj_id" => $this->uid
);
$this->acl = array();
acl_default($this,$current_user);
acl_raise($this,$this->id,$tutos[modok]);
acl_raise($this,$current_user->id,$tutos[delok]);
}
$q->addFV("adr_id",$this->id,"");
$query = $q->getInsert();
} else {
$q->addWC("adr_id",$this->id,"");
$q->addWC("id",$this->uid,"");
$query = $q->getUpdate();
}
$this->dbconn->Exec($query);
#$msg .= acl_save($this);
#$msg .= acl_savedefault($this);
#$msg .= history_save($this);
return $msg;
}
/**
* Update Password function added for vtigerCRM
*/
function update_password($new_passwd,$uname)
{
$this->pw = $new_passwd;
$this->login = $uname;
$pq = new query($this->dbconn);
$pq->setTable($this->tablename);
$pq->addFV("login",$this->login,"STRING",20);
$pq->addFV("pw",$this->pw,"PASSWORD");
$pq->addWC("login",$this->login,"STRING");
$query1 = $pq->getUpdate();
return $query1;
#$db->query($query1,true);
#$this->dbconn->Exec($query1);
}
/**
* Delete entry (that is easy as long as the address still exists !)
*/
function delete() {
global $current_user;
$msg = "";
unset ($this->modified);
$msg .= acl_deletedefault($this);
$q = "DELETE FROM ". $this->tablename ." WHERE adr_id =". $this->id ." AND id = ". $this->uid;
$this->dbconn->Exec($q);
$this->modified[] = array ( "field" => "UserDel" ,
"old" => $this->uid,
"new" => "-1",
"obj_id" => $this->id
);
$this->modified[] = array ( "field" => "Delete" ,
"old" => "user",
"new" => $this->uid,
"obj_id" => $this->uid
);
$this->modified[] = array ( "obj_id" => $this->uid , "field" => "Delete" , "old" => $this->gettype() , "new" => -1 );
$msg .= team::obj_delete($current_user,$this);
$msg .= parent::delete();
return $msg;
}
/**
* get preferred team for calendar selection
*/
function get_prefteam() {
if ( strlen($this->prefteam) == 0 ) {
$this->prefteam = 1;
}
return $this->prefteam;
}
/**
* get preferred number of displayed weeks for calendar display
*/
function get_prefweeks() {
if ( !isset($this->prefweeks) || ($this->prefweeks == "") ) {
$this->prefweeks = 4;
}
return $this->prefweeks;
}
/**
* get preferred icons
* $mode = 1 --> icons before grid
* $mode = 2 --> icons after grid
*/
function get_preficons($mode = 1) {
$ico = array();
if ( $mode == 1 ) {
/*foreach($tutos[rowicons] as $i => $f) {
$this->rowicons[strtolower($i)] = 0;
}
if ( strlen($rowicons) > 0 ) {
$h = split(",",$rowicons);
while( list ($i,$f) = @each ($h) ) {
$this->rowicons[strtolower($f)] = 1;
}
}*/
if ( $this->rowiconsbefore["see"] == 1 ) {
array_push($ico,"see");
}
if ( $this->rowiconsbefore["mod"] == 1 ) {
array_push($ico,"mod");
}
if ( $this->rowiconsbefore["del"] == 1 ) {
array_push($ico,"del");
}
} else if ( $mode == 2 ) {
if ( $this->rowiconsafter["see"] == 1 ) {
array_push($ico,"see");
}
if ( $this->rowiconsafter["mod"] == 1 ) {
array_push($ico,"mod");
}
if ( $this->rowiconsafter["del"] == 1 ) {
array_push($ico,"del");
}
}
return $ico;
}
/**
* per page update
*/
function update($initial = false) {
if ( isset($_SERVER['REMOTE_ADDR']) ) {
$lh = $_SERVER['REMOTE_ADDR'];
} else {
$lh = "not set";
}
if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
$lh = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
$this->setLastSeen(new DateTime());
$this->setLastHost($lh);
$q = new query($this->dbconn);
$q->setTable($this->tablename);
$q->addFV("last_seen",$this->last_seen,"DATETIME");
$q->addFV("prefteam",$this->get_prefteam(),"");
$q->addFV("last_host",$this->last_host,"STRING",20);
$q->addFV("creator",$this->creator,"OBJ");
$q->addFV("creation",$this->creation,"DATETIME");
$q->addWC("login",$this->login,"STRING");
$query = $q->getUpdate();
$this->dbconn->Begin("WORK");
$this->dbconn->Exec($query);
if ($initial == true) {
history_save($this);
}
$this->dbconn->Commit("WORK");
}
/**
* checks if the given day is a workday for this user
*/
function isWorkDay ($wd) {
return in_array($wd,$this->workday);
}
/**
* get the type of object
*/
function gettype () {
return "user";
}
/**
* get the type of object
*/
function gettypeid () {
return useuser;
}
/**
* get the help index
*/
function getHelpIndex () {
global $lang;
$r = "";
$r .= "