Index: trunk/kernel/include/portalgroup.php =================================================================== diff -u -N --- trunk/kernel/include/portalgroup.php (revision 4446) +++ trunk/kernel/include/portalgroup.php (revision 0) @@ -1,563 +0,0 @@ -clsParsedItem($GroupId); - $this->tablename=GetTablePrefix()."PortalGroup"; - $this->type=7; - $this->BasePermission="GROUP"; - $this->id_field = "GroupId"; - if($GroupId) - $this->LoadFromDatabase($GroupId); - } - - function Validate() - { - global $objSession, $Errors; - - $dataValid = true; - if(!isset($this->m_Name) || $this->m_Name == "") - { - $Errors->AddError("error.fieldIsRequired",'Login',"","",get_class($this),"Validate"); - $dataValid = false; - } - - return $dataValid; - } - - - function HasSystemPermission($PermissionName) - { - $GroupId = (int)$this->Get("GroupId"); - $sql = "SELECT * FROM ".GetTablePrefix()."Permissions WHERE GroupId=$GroupId AND Permission='$PermissionName' AND type=1"; - $result = $this->adodbConnection->Execute($sql); - if($result && !$result->EOF) - { - $this->SysPermCache[$PermissionName] = (int)$result->fields["PermissionValue"]; - return (int)$result->fields["PermissionValue"]; - } - else - return -1; - } - - /* set $Value to -1 to delete the permission row from the DB */ - function SetSystemPermission($PermName, $Value) - { - // don't save DENY system permissions - - //echo "Setting $PermName to $Value
\n"; - $old_value = $this->HasSystemPermission($PermName); - if ($Value == $old_value) { - return true; - } - - if ($Value == 1) { - // new value is ALLOWED - if ($old_value > -1) { - // old value is ALLOWED/DENIED - $sql = 'UPDATE '.GetTablePrefix().'Permissions - SET PermissionValue = '.$Value.' - WHERE Type = 1 AND Permission = '.$this->adodbConnection->qstr($PermName).' AND GroupId = '.$this->Get('GroupId'); - } - else { - // permission was inherited before => no record in db - $sql = 'INSERT INTO '.GetTablePrefix().'Permissions (Permission, GroupId, PermissionValue, Type, CatId) '; - $sql .= 'VALUES ('.$this->adodbConnection->qstr($PermName).','.$this->Get('GroupId').','.$Value.',1,0)'; - } - $this->adodbConnection->Execute($sql); - } - else { - // permission becomes inherited now or set to DENIED - $sql = 'DELETE FROM '.GetTablePrefix().'Permissions - WHERE Type = 1 AND Permission = '.$this->adodbConnection->qstr($PermName).' AND GroupId = '.$this->Get('GroupId'); - $this->adodbConnection->Execute($sql); - } - - } - - function CheckPermission($permissionName) - { - //Check permission and if needs approval set approval - global $objSession, $Errors; - - if(!$objSession->HasSystemPermission($permissionName)) - { - //$Errors->AddError("error.AccessDenied","","","",get_class($this),"CheckPermission"); - return false; - } - return true; - } - - function LoadFromDatabase($Id) - { - global $Errors; - - if(!isset($Id)) - { - $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase"); - return false; - } - - $sql = "SELECT * FROM ".$this->tablename." WHERE GroupId = $Id"; - $result = $this->adodbConnection->Execute($sql); - if ($result === false) - { - $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase"); - return false; - } - $data = $result->fields; - $this->SetFromArray($data); - $this->Clean(); - return true; - } - - function AddUser($UserId,$PrimaryGroup=0,$edit_table = true) - { - global $objSession; - - // add user to group OR just updates it's status there - $db =& $this->adodbConnection; - $table=$edit_table?$objSession->GetEditTable('UserGroup'):GetTablePrefix().'UserGroup'; - - $group_id = $this->Get('GroupId'); - - $sql_patterns['check'] = 'SELECT PortalUserId FROM %s WHERE GroupId = %s AND PortalUserId = %s'; - $sql_patterns['reset_primary'] = 'UPDATE %s SET PrimaryGroup = 0 WHERE PortalUserId = %s'; - $sql_patterns['set_primary'] = 'UPDATE %s SET PrimaryGroup = 1 WHERE GroupId = %s AND PortalUserId = %s'; - $sql_patterns['add_to_group'] = 'INSERT INTO %s (PortalUserId,GroupId,PrimaryGroup) VALUES (%s, %s, %s)'; - - $tmp_sql = sprintf($sql_patterns['check'], $table, $group_id, $UserId); - $check_result = $db->GetOne($tmp_sql); - if(!$check_result) - { - // user is not a memeber of this group - $GroupCount = TableCount($table,"PortalUserId = $UserId", 0); - if(!$PrimaryGroup) $PrimaryGroup = ($GroupCount == 0) ? 1 : 0; // reset primary status if not already - $tmp_sql = sprintf($sql_patterns['add_to_group'], $table, $UserId, $group_id, $PrimaryGroup); - $db->Execute($tmp_sql); - } - - if($PrimaryGroup) - { - $tmp_sql = sprintf($sql_patterns['reset_primary'], $table, $UserId); - $db->Execute($tmp_sql); - - $tmp_sql = sprintf($sql_patterns['set_primary'], $table, $group_id, $UserId); - $db->Execute($tmp_sql); - } - } - - function DeleteUser($UserId) - { - global $objSession; - - $sql = "DELETE FROM ".$objSession->GetEditTable("UserGroup")." WHERE PortalUserId=$UserId AND GroupId=".$this->Get("GroupId"); - $this->adodbConnection->Execute($sql); - } - - - function GetCustomField( $fieldName) - { - global $Errors; - - if(!isset($this->m_UserId)) - { - $Errors->AddError("error.AppError",NULL,"Get field is required in order to set custom field values","","clsPortalGroup","GetCustomField"); - return false; - } - - return GetCustomFieldValue($this->m_UserId,"portaluser",$fieldName); - } - - function SetCustomField( $fieldName, $value) - { - global $Errors; - if(!isset($this->m_UserId)) - { - $Errors->AddError("error.AppError",NULL,"Set field is required in order to set custom field values","","clsPortalGroup","SetCustomField"); - return false; - } - return SetCustomFieldValue($this->m_UserId,"portaluser",$fieldName,$value); - } - - function GetUserCount() - { - if(!is_numeric($this->UserCount)) - { - $sql = "SELECT count(*) as UserCount FROM ".GetTablePrefix()."UserGroup WHERE GroupId=".$this->Get("GroupId"); - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - $users = $rs->fields["UserCount"]; - $this->UserCount = (int)$users; - } - return $this->UserCount; - } - - function GetUserList($edit_table = false) - { - global $objSession; - - $table = $edit_table ? $objSession->GetEditTable('UserGroup') : GetTablePrefix().'UserGroup'; - - $sql = 'SELECT PortalUserId FROM '.$table.' WHERE GroupId = '.$this->UniqueId(); // Get('GroupId'); - return $this->adodbConnection->GetCol($sql); - } - - function parsetag($tag) - { - global $var_list_update, $objConfig, $objSession; - $tagname = is_object($tag) ? $tag->name : $tag; - - switch($tagname) - { - case 'GroupName': - $db =& GetADODBConnection(); - $sql = 'SELECT Name - FROM '.TABLE_PREFIX.'PortalGroup - WHERE GroupId = '.$this->Get('GroupId'); - return $db->GetOne($sql); - break; - - case 'membership_expires_date': - return $this->Get('MembershipExpires') <= 0 ? '' : LangDate( $this->Get('MembershipExpires'), 0, true ); - break; - - case 'membership_expires_time': - return $this->Get('MembershipExpires') <= 0 ? '' : LangTime( $this->Get('MembershipExpires'), 0, true ); - break; - - case "group_id": - return $this->Get("GroupId"); - break; - case "group_name": - return $this->Get("Name"); - break; - case "group_desc": - return $this->Get("Description"); - break; - case "group_date": - return LangDate($this->Get("CreatedOn")); - break; - case "group_name": - return $this->Get("Name"); - break; - case "group_enabled": - return $this->Get("Enabled"); - break; - case "group_date_month": - return adodb_date("m", $this->Get("CreatedOn")); - break; - case "group_date_day": - return adodb_date("d", $this->Get("CreatedOn")); - break; - case "group_date_year": - return adodb_date("Y", $this->Get("CreatedOn")); - break; - case "group_system": - if ($this->Get("System") == 1) - return "System"; - else - return "User Defined"; - break; - case "group_status": - if ($this->Get("Enabled") == 1) - return "Enabled"; - else - return "Disabled"; - break; - default: - if (substr($tag, 0, 6) == "custom") - return Users_Custom($this->Get("ResourceId"), $tag); - else - return "Undefined:$tagname"; - break; - } - } -} - -class clsGroupList extends clsItemCollection -{ - var $Page; - - function clsGroupList() - { - $this->clsItemCollection(); - $this->classname = "clsPortalGroup"; - $this->SetTable('live', GetTablePrefix()."PortalGroup"); - $this->AdminSearchFields = array("name"); - $this->id_field = "GroupId"; - } - function NumGroups() - { - return $this->NumItems(); - } - - function GetGroup($GroupID) - { - return $this->GetItem($GroupID); - } - - function GetPersonalGroup($UserLogin) - { - $n = "_".$UserLogin; - $g = $this->GetItemByField("Name",$n); - return $g; - } - - function LoadGroups($where = "",$orderBy = "") - { - global $objConfig; - - $this->Clear(); - if($this->Page<1) - $this->Page=1; - - if(is_numeric($objConfig->Get("Perpage_Groups"))) - { - $Start = ($this->Page-1)*$objConfig->Get("Perpage_Groups"); - $limit = "LIMIT ".$Start.",".$objConfig->Get("Perpage_Groups"); - } - else - $limit = NULL; - - if(strlen($where) == 0) $where = '1'; - $this->QueryItemCount=TableCount($this->SourceTable, $where, 0); - //echo $this->QueryItemCount."
\n"; - - if ($orderBy!="") - { - $this->Query_PortalGroup($where,$orderBy,$limit); - } - else - { - $this->Query_PortalGroup($where,"Name DESC",$limit); - } - - } - - function Query_PortalGroup($whereClause=NULL,$orderByClause=NULL,$limit=null) - { - global $m_var_list,$objSession,$Errors; - - $sql = "SELECT * FROM ".$this->SourceTable." "; - - if(strlen($whereClause)) - $sql = sprintf('%s WHERE %s',$sql,$whereClause); - - if(strlen($orderByClause)) - if(strlen(trim($orderByClause))) - $sql = sprintf('%s ORDER BY %s',$sql,$orderByClause); - - if( isset($limit) ) $sql .= ' '.$limit; - return $this->Query_Item($sql); - } - - function Query_UserPortalGroup($whereClause,$orderByClause) - { - global $m_var_list,$objSession,$Errors; - - if ($m_var_list["action"] == "m_group_search") - $table = $userSession->Get("SessionKey") . "_search"; - else - $table = $this->SourceTable; - - $sql = "SELECT * FROM $table LEFT JOIN UserGroup USING (GroupId) "; - - if(isset($whereClause)) - $sql = sprintf('%s WHERE %s',$sql,$whereClause); - - if(isset($orderByClause)) - if (strlen(trim($orderByClause))) - { - $sql = sprintf('%s ORDER BY %s',$sql,$orderByClause); - } - $result = $this->adodbConnection->Execute($sql); - - return $this->Query_Item($sql); - } - - function GetAllGroupList() - { - static $GroupListCache; - - if(!is_array($GroupListCache)) - { - $GroupListCache = array(); - $sql = "SELECT GroupId FROM ".$this->SourceTable." WHERE Enabled=1"; - - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $GroupListCache[] = $rs->fields["GroupId"]; - $rs->MoveNext(); - } - } - return $GroupListCache; - } - - function Group_Custom($ResourceId, $tag) - { - $fieldname= substr($tag, 7); - - $sql = "SELECT Value FROM ".GetTablePrefix()."CustomMetaData LEFT JOIN ".GetTablePrefix()."CustomField USING (CustomFieldId) where ".GetTablePrefix()."CustomMetaData.ResourceId=$ResourceId AND ".GetTablePrefix()."CustomField.FieldName='$fieldname'"; - - $result = $this->adodbConnection->Execute($sql); - - if ($result->EOF) - return ""; - else - return $result->fields["Value"]; - } - - function Add_Users_To_Group($groupid) - { - global $g_usergroup_status; - $userids = explode("-", $g_usergroup_status); - $g = $this->GetItem($groupid); - foreach($userids as $userid) - $g->AddUser($userid); - } - - function Delete_Group($GroupId) - { - $g = $this->GetItem($GroupId); - if(is_object($g)) - { - $g->Delete(); - } - } - - function Edit_Group($GroupId, $Name, $Description) - { - $g = $this->GetItem($GroupId); - $g->Set(array("Name", "Description"), array($Name, $Description)); - $g->Update(); - return $g; - } - - function &Add_Group($Name, $Description, $System=1) - { - $g = new clsPortalGroup(NULL); - $g->tablename = $this->SourceTable; - $g->Set(array("Name", "Description", "System"),array($Name, $Description,$System)); - $g->Set("CreatedOn",adodb_date("U")); - $g->Create(); - return $g; - } - - function CopyFromEditTable($idfield) - { - global $objSession; - $GLOBALS['_CopyFromEditTable']=1; - - $edit_table = $objSession->GetEditTable($this->SourceTable); - $sql = "SELECT * FROM $edit_table"; - - $item_ids = Array(); - $rs = $this->adodbConnection->Execute($sql); - while ($rs && !$rs->EOF) { - $data = $rs->fields; - $c = new $this->classname; - $c->SetFromArray($data); - $c->idfield = $idfield; - $c->Dirty(); - if($c->Get($idfield)<1) - { - $old_id = $c->Get($idfield); - $c->UnsetIdField(); - if(!is_numeric($c->Get("OrgId"))) - $c->Clean(array("OrgId")); - $c->Create(); - $sql = "UPDATE ".GetTablePrefix()."UserGroup SET GroupId=".$c->Get("GroupId")." WHERE GroupId=$old_id"; - $this->adodbConnection->Execute($sql); - $sql = "UPDATE ".GetTablePrefix()."Permissions SET GroupId=".$c->Get("GroupId")." WHERE GroupId=$old_id"; - $this->adodbConnection->Execute($sql); - } - $c->Update(); - $item_ids[] = $c->UniqueId(); - unset($c); - unset($r); - $rs->MoveNext(); - } - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - unset($GLOBALS['_CopyFromEditTable']); - return $item_ids; - } - - function PurgeEditTable($idfield) - { - global $objSession; - - $edit_table = $objSession->GetEditTable($this->SourceTable); - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - - $sql = "DELETE FROM ".GetTablePrefix()."UserGroup WHERE GroupId<1"; - $this->adodbConnection->Execute($sql); - $sql = "DELETE FROM ".GetTablePrefix()."Permissions WHERE GroupId<1"; - $this->adodbConnection->Execute($sql); - - } -} - -class clsUserGroupList extends clsItemCollection -{ - function clsUserGroupList() - { - $this->clsItemCollection(); - $this->classname = "clsPortalGroup"; - $this->SetTable('live', GetTablePrefix()."UserGroup"); - $this->id_field = "PortalUserId"; // don't try to insert by this ID :) - } - - function CopyFromEditTable($idfield) - { - global $objSession; - $GLOBALS['_CopyFromEditTable']=1; - - $edit_table = $objSession->GetEditTable($this->SourceTable); - $sql = "SELECT * FROM $edit_table"; - $rs = $this->adodbConnection->Execute($sql); - - //echo $sql."
"; - - $clear_old = true; - $insert_sql = 'INSERT INTO %s (PortalUserId,GroupId,MembershipExpires,PrimaryGroup) VALUES (%s,%s,%s,%s)'; - while($rs && !$rs->EOF) - { - $data = $rs->fields; - - if($clear_old) - { - $sql = "DELETE FROM ".$this->SourceTable." WHERE $idfield = ".$data[$idfield]; - @$this->adodbConnection->Execute($sql); - $clear_old = false; - } - - if(!$data['MembershipExpires']) $data['MembershipExpires'] = 'NULL'; - $sql = sprintf($insert_sql, $this->SourceTable, $data['PortalUserId'], $data['GroupId'], $data['MembershipExpires'], $data['PrimaryGroup'] ); - - @$this->adodbConnection->Execute($sql); - - $rs->MoveNext(); - } - - @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); - unset($GLOBALS['_CopyFromEditTable']); - } - - function &Edit_UserGroup($group_id, $user_id, $membership_expires) - { - $ug =& $this->GetItemByField( Array('GroupId','PortalUserId'), Array($group_id,$user_id) ); - if($membership_expires == 0) $membership_expires = null; - - $ug->Set('MembershipExpires', $membership_expires); - $ug->Update(); - return $ug; - } -} - -?>