public $phone_direct; // varchar(32) NOT NULL DEFAULT '';
public $countries; // VARCHAR(128) NULL;
+ public $language;
+
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
function isAuth()
{
// do not start a session if we are using http auth...
- if (empty($_SERVER['PHP_AUTH_USER']) && php_sapi_name() != "cli") {
- @session_start();
- }
-
+ // we have a situation where the app is behind a http access and is also login
+ // need to work out a way to handle that.
$ff= HTML_FlexyFramework::get();
+ if (php_sapi_name() != "cli" && (empty($_SERVER['PHP_AUTH_USER']) || !empty($ff->disable_http_auth))) {
+ @session_start();
+ }
+
+
$sesPrefix = $this->sesPrefix();
// http basic auth..
$u = DB_DataObject::factory($this->tableName());
- if (!empty($_SERVER['PHP_AUTH_USER'])
+ if (empty($ff->disable_http_auth) // http auth requests should not have this...
+ &&
+ !empty($_SERVER['PHP_AUTH_USER'])
&&
!empty($_SERVER['PHP_AUTH_PW'])
&&
self::$authUser = $u;
return true;
}
+
+ // at this point all http auth stuff is done, so we can init session
+
+
//die("test init");
if (!$this->canInitializeSystem()) {
// die("can not init");
if (empty($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] == '/Login') {
$auto_auth_allow = false;
}
- //var_dump($auto_auth_allow);
+ //var_dump($auto_auth_allow);
// local auth -
$default_admin = false;
if ($auto_auth_allow) {
$u = DB_DataObject::factory($this->tableName());
$u->whereAdd(' LENGTH(passwd) > 0');
$n = $u->count();
+ if (empty($_SESSION[get_class($this)]) || !is_array($_SESSION[get_class($this)])) {
+ $_SESSION[get_class($this)] = array();
+ }
$_SESSION[get_class($this)][$sesPrefix .'-empty'] = $n;
if (class_exists('PEAR')) {
$error = PEAR::getStaticProperty('DB_DataObject','lastError');
$this->isAuth(); // force session start..
$sesPrefix = $this->sesPrefix();
-
$_SESSION[get_class($this)][$sesPrefix .'-auth-timeout'] = -1;
-
$_SESSION[get_class($this)][$sesPrefix .'-auth'] = "";
-
self::$authUser = false;
}
$uu = clone($this);
$this->lang = $val;
$this->update($uu);
+ if(!empty(self::$authUser) && self::$authUser->id == $this->id) {
+ self::$authUser->lang = $this->lang;
+ }
return $this->lang;
}
$oath_require = $s->lookup('core', 'two_factor_auth_required');
$aur['require_oath'] = $oath_require ? $oath_require->val : 0;
- $aur['core_person_settings'] = array();
-
- $core_person_settings = DB_DataObject::factory('core_person_settings');
- $core_person_settings->setFrom(array(
- 'person_id' => $this->id
- ));
-
- $aur['core_person_settings'] = $core_person_settings->fetchAll('scope', 'data');
+ $aur['core_person_settings'] = $this->settings();
return $aur;
}
+ function settings($return_obj = false)
+ {
+ $cs = DB_DataObject::factory('core_person_settings');
+ $cs->setFrom(array(
+ 'person_id' => $this->id
+ ));
+ return $return_obj ? $cs->fetchAll() : $cs->fetchAll('scope', 'data');;
+ }
+ function toRooSingleArray($authUser, $request)
+ {
+ $ret = $this->toArray();
+ foreach( $this->settings() as $k=>$v) {
+ $ret['core_person_settings['. $k .']'] = $v;
+ }
+
+ return $ret;
+ }
// ----------PERMS------ ----------------
function getPerms()
{
)"
);
}
+ if(!empty($q['in_group_starts'])){
+
+ $v = $this->escape($q['in_group_starts']);
+
+ $this->whereAdd("
+ $tn_p.id IN (
+ SELECT
+ DISTINCT(user_id) FROM $tn_gm
+ LEFT JOIN
+ $tn_g
+ ON
+ $tn_g.id = $tn_gm.group_id
+ WHERE
+ $tn_g.name LIKE '{$v}%'
+ )"
+ );
+ }
+
+
// #2307 Search Country!!
if (!empty($q['query']['in_country'])) {
// DB_DataObject::debugLevel(1);
- $inc = $q['query']['in_country'];
+ $inc = $this->escape($q['query']['in_country']);
$this->whereAdd("$tn_p.countries LIKE '%{$inc}%'");
}
{$this->tableName()}.name LIKE '%{$this->escape($q['query']['name'])}%'
");
}
+
+ if(!empty($q['query']['name_or_email'])){
+ $v = $this->escape($q['query']['name_or_email']);
+ $this->whereAdd("
+ {$this->tableName()}.name LIKE '%{$v}%'
+ OR
+ {$this->tableName()}.email LIKE '%{$v}%'
+ ");
+ }
if(!empty($q['query']['name_starts'])){
$this->whereAdd("
{$this->tableName()}.name LIKE '{$this->escape($q['query']['name_starts'])}%'
if (!$roo->hasPerm('Core.Projects_All', 'S')) {
$peps = $p->people($pids);
- $this->whereAddIn("{$tn}.id", $peps, 'int');
+ $this->whereAddIn("{$this->tableName()}.id", $peps, 'int');
}
}
COALESCE((
SELECT
- GROUP_CONCAT( core_group.name separator '\n')
+ GROUP_CONCAT( CASE WHEN core_group.display_name = '' THEN core_group.name ELSE core_group.display_name END separator '\n')
FROM
core_group_member
LEFT JOIN
core_group.id = core_group_member.group_id
WHERE
core_group_member.user_id = core_person.id
+ ORDER BY
+ core_group.display_name ASC
), '') as member_of");
}
// determine if it's staff!!!
$owncomp = DB_DataObject::Factory('core_company');
$owncomp->get('comptype', 'OWNER');
- $isStaff = ($au->company_id == $owncomp->id);
-
+ $editor_is_staff = ($au->company_id == $owncomp->id);
+
+ if (!$editor_is_staff) {
+ // non staff editing should not user roo/isPerm?
+ return false; // no permission if user is not staff!?
+
+ }
+
+ $this_is_staff = ($this->company_id == $owncomp->id);
- if (!$isStaff) {
+ /*
+ if (!$this_is_staff ) {
// - can not change company!!!
if ($changes &&
//return $this->company_id == $au->company_id;
}
-
+ */
// yes, only owner company can mess with this...
// extra case change passwod?
case 'P': //??? password
// standard perms -- for editing + if the user is dowing them selves..
- $ret = $isStaff ? $au->hasPerm("Core.Staff", "E") : $au->hasPerm("Core.Person", "E");
- return $ret || $au->id == $this->id;
+ $ret = $this_is_staff ? $au->hasPerm("Core.Staff", "E") : $au->hasPerm("Core.Person", "E");
+ return $ret || $au->id == $this->id; // can change own data?
default:
- return $isStaff ? $au->hasPerm("Core.Staff", $lvl) : $au->hasPerm("Core.Person", $lvl);
+ return $this_is_staff ? $au->hasPerm("Core.Staff", $lvl) : $au->hasPerm("Core.Person", $lvl);
+
+
}
return false;
{
$p = DB_DataObject::factory('core_person');
if ($roo->authUser->id > -1 || $p->count() > 1) {
+ $pp = DB_DataObject::factory('core_person');
+ $pp->email = trim($this->email);
+ if ($pp->count()){
+ $roo->jerr("that email already exists in the database");
+ }
+
+
return;
}
$c = DB_DataObject::Factory('core_company');
$this->company_id = $c->id;
$this->email = trim($this->email);
+
+
+
+
+
}
function onInsert($req, $roo)
$pd->company_id = $this->company_id;
$pd->insert();
}
-
+ if (!empty($req['core_person_settings'])) {
+ $this->updateSettings($req['core_person_settings'], $roo);
+ }
+ }
+
+ function onUpdate($old, $req,$roo, $event)
+ {
+ if (!empty($req['core_person_settings'])) {
+ $this->updateSettings($req['core_person_settings'], $roo);
+ }
}
+ // there should really be a registry of valid scope values!?
+ function updateSettings($ar, $roo)
+ {
+ //DB_DataObject::debugLevel(1);
+ $old = array();
+ foreach($this->settings(true) as $o) {
+ $old[$o->scope] = $o;
+ }
+ foreach($ar as $k=>$v) {
+ if (isset($old[$k])) {
+ $oo = clone($old[$k]);
+ $old[$k]->data = $v;
+ $old[$k]->update($oo);
+ continue;
+ }
+ $cs = DB_DataObject::Factory('core_person_settings');
+ $cs->setFrom(array(
+ 'person_id' =>$this->id,
+ 'scope' => $k,
+ 'data' => $v
+ ));
+ $cs->insert();
+ }
+ // we dont delete old stuff....
+ }
+
+
function importFromArray($roo, $persons, $opts)
{
if (empty($opts['prefix'])) {