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;
- }
-}
-
-?>