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 = $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) { //echo "Setting $PermName to $Value
\n"; $oldval = $this->HasSystemPermission($PermName); if($Value != $oldval) { if($Value>-1) { if($oldval>-1) { $sql = "UPDATE ".GetTablePrefix()."Permissions SET PermissionValue=$Value "; $sql .=" WHERE Type=1 AND Permission='$PermName' AND GroupId=".$this->Get("GroupId"); //echo "UPDATE SQL: $sql
"; } else { $sql = "INSERT INTO ".GetTablePrefix()."Permissions (Permission, GroupId, PermissionValue, Type, CatId) "; $sql .="VALUES ('$PermName',".$this->Get("GroupId").",$Value,1,0)"; //echo "INSERT SQL: $sql
"; } $this->adodbConnection->Execute($sql); //echo $sql."
\n"; } else { $sql = "DELETE FROM ".GetTablePrefix()."Permissions "; $sql .=" WHERE Type=1 AND Permission='$PermName' AND GroupId=".$this->Get("GroupId"); //echo "DELETE SQL: $sql
"; $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) { global $objSession; // add user to group OR just updates it's status there $db =& $this->adodbConnection; $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() { global $objSession; $sql = "SELECT * FROM ".$objSession->GetEditTable("UserGroup")." WHERE GroupId=".$this->Get("GroupId"); $rs = $this->adodbConnection->Execute($sql); $res = array(); while($rs && !$rs->EOF) { $res[] = $rs->fields["PortalUserId"]; $rs->MoveNext(); } return $res; } function parsetag($tag) { global $var_list_update, $objConfig; if(is_object($tag)) { $tagname = $tag->name; } else $tagname = $tag; switch($tagname) { 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"; $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(); unset($c); unset($r); $rs->MoveNext(); } @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); unset($GLOBALS['_CopyFromEditTable']); } 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; 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["PortalUserId"] == 0) { } $sql = "INSERT INTO ".$this->SourceTable." (PortalUserId, GroupId, PrimaryGroup) VALUES (".$data['PortalUserId'].", ".$data['GroupId'].", ".$data['PrimaryGroup'].")"; @$this->adodbConnection->Execute($sql); $rs->MoveNext(); } @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table"); unset($GLOBALS['_CopyFromEditTable']); } } ?>