Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1160117
in-portal
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Sep 19, 12:39 AM
Size
22 KB
Mime Type
text/x-diff
Expires
Sun, Sep 21, 12:39 AM (2 h, 14 m)
Engine
blob
Format
Raw Data
Handle
750328
Attached To
rINP In-Portal
in-portal
View Options
Index: trunk/kernel/units/groups/groups_config.php
===================================================================
--- trunk/kernel/units/groups/groups_config.php (revision 5252)
+++ trunk/kernel/units/groups/groups_config.php (revision 5253)
@@ -1,119 +1,120 @@
<?php
$config = Array(
'Prefix' => 'g',
'ItemClass' => Array('class' => 'GroupsItem', 'file' => 'groups_item.php', 'build_event' => 'OnItemBuild'),
'ListClass' => Array('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array('class' => 'GroupsEventHandler', 'file' => 'groups_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class' => 'kDBTagProcessor', 'file' => '','build_event'=>'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array(
1 => 'id',
2 => 'page',
3 => 'event',
4 => 'mode',
),
'IDField' => 'GroupId',
'StatusField' => Array('Enabled'),
'TitleField' => 'Name',
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('g' => '!la_title_Adding_Group!'),
'edit_status_labels' => Array('g' => '!la_title_Editing_Group!'),
'new_titlefield' => Array('g' => '!la_title_New_Group!'),
),
'groups_list' => Array('prefixes' => Array('g_List'), 'format' => "!la_title_Groups! (#g_recordcount#)"),
'groups_edit' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_General!"),
'groups_edit_users' => Array('prefixes' => Array('g', 'g-ug_List'), 'format' => "#g_status# '#g_titlefield#' - !la_title_Users! (#g-ug_recordcount#)" ),
'groups_edit_permissions' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_Permissions!" ),
'groups_edit_additional_permissions' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_AdditionalPermissions!" ),
'groups_select' => Array('prefixes' => Array('g_List'), 'format' => "!la_title_Groups! (#g_recordcount#) - !la_title_SelectGroup!"),
),
'PermSection' => Array('main' => 'in-portal:user_groups'),
'Sections' => Array(
'in-portal:user_groups' => Array(
'parent' => 'in-portal:users',
'icon' => 'usergroups',
'label' => 'la_tab_User_Groups',
'url' => Array('t' => 'groups/groups_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:send_email'),
'priority' => 2,
'type' => stTREE,
),
),
'TableName' => TABLE_PREFIX.'PortalGroup',
'ListSQLs' => Array('' => ' SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'UserGroup ug ON ug.GroupId = %1$s.GroupId'),
'ItemSQLs' => Array('' => ' SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'UserGroup ug ON ug.GroupId = %1$s.GroupId'),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('Name' => 'asc'),
)
),
'SubItems' => Array('g-perm', /*'g-ug'*/),
'CalculatedFields' => Array(
'total' => Array(
'UserCount' => 'COUNT(ug.PortalUserId)',
),
),
'Fields' => Array (
'GroupId' => Array(),
'Name' => Array('type' => 'string', 'not_null' => '1', 'required' => 1, 'default' => ''),
'Description' => Array('type' => 'string','default' => ''),
'CreatedOn' => Array('type' => 'double', 'formatter' => 'kDateFormatter', 'not_null' => '1','default' => '#NOW#'),
'System' => Array('type' => 'int','not_null' => '1','default' => '0'),
'Personal' => Array('type' => 'int','not_null' => '1','default' => '0'),
'Enabled' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Enabled', 0 => 'la_Disabled'), 'use_phrases' => 1, 'not_null' => '1','default' => 1),
'ResourceId' => Array('type' => 'int','not_null' => '1','default' => '0'),
),
'VirtualFields' => Array(
'UserCount' => Array('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(1 => 'icon16_group.gif', 0 => 'icon16_group_disabled.gif'),
'Fields' => Array(
- 'Name' => Array('title' => 'la_col_GroupName', 'data_block' => 'grid_checkbox_td'),
+ 'GroupId' => Array('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td'),
+ 'Name' => Array('title' => 'la_col_GroupName'),
'UserCount' => Array('title' => 'la_col_UserCount'),
),
),
/*'GroupSelector' => Array(
'Icons' => Array(0 => 'icon16_user_disabled.gif', 1 => 'icon16_user.gif', 2 => 'icon16_user_pending.gif'),
'Fields' => Array(
'Login' => Array('title' => 'la_col_Username', 'data_block' => 'grid_radio_td'),
'LastName' => Array( 'title'=>'la_col_LastName'),
'FirstName' => Array( 'title'=>'la_col_FirstName'),
'Email' => Array( 'title'=>'la_col_Email'),
'PrimaryGroup' => Array( 'title'=>'la_col_PrimaryGroup'),
'CreatedOn_formatted' => Array('title' => 'la_col_CreatedOn', 'sort_field' => 'CreatedOn'),
),
),*/
),
);
?>
\ No newline at end of file
Property changes on: trunk/kernel/units/groups/groups_config.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.10
\ No newline at end of property
Index: trunk/admin/category/permcacheupdate.php
===================================================================
--- trunk/admin/category/permcacheupdate.php (revision 5252)
+++ trunk/admin/category/permcacheupdate.php (revision 5253)
@@ -1,383 +1,383 @@
<?php
class clsRecursionStack
{
var $Stack;
function clsRecursionStack()
{
$this->Stack = Array();
}
function Push($values)
{
array_push($this->Stack, $values);
}
function Pop()
{
if ($this->Count() > 0) {
return array_pop($this->Stack);
}
else {
return false;
}
}
function Get()
{
if ($this->Count() > 0) {
// return end($this->Stack);
return $this->Stack[count($this->Stack)-1];
}
else {
return false;
}
}
function Update($values)
{
$this->Stack[count($this->Stack)-1] = $values;
}
function Count()
{
return count($this->Stack);
}
}
class clsCachedPermissions
{
var $Allow = Array();
var $Deny = Array();
var $CatId;
function clsCachedPermissions($CatId)
{
$this->CatId = $CatId;
}
function SetCatId($CatId)
{
$this->CatId = $CatId;
}
function CheckPermArray($Perm)
{
if (!isset($this->Allow[$Perm])) {
$this->Allow[$Perm] = array();
$this->Deny[$Perm] = array();
}
}
function AddAllow($Perm, $GroupId)
{
$this->CheckPermArray($Perm);
if (!in_array($GroupId, $this->Allow[$Perm])) {
array_push($this->Allow[$Perm], $GroupId);
$this->RemoveDeny($Perm, $GroupId);
}
}
function AddDeny($Perm, $GroupId)
{
$this->CheckPermArray($Perm);
if (!in_array($GroupId, $this->Deny[$Perm])) {
array_push($this->Deny[$Perm], $GroupId);
$this->RemoveAllow($Perm, $GroupId);
}
}
function RemoveDeny($Perm, $GroupId)
{
if (in_array($GroupId, $this->Deny[$Perm])) {
array_splice($this->Deny[$Perm], array_search($GroupId, $this->Deny[$Perm]), 1);
}
}
function RemoveAllow($Perm, $GroupId)
{
if (in_array($GroupId, $this->Allow[$Perm])) {
array_splice($this->Allow[$Perm], array_search($GroupId, $this->Allow[$Perm]), 1);
}
}
function GetInsertSQL()
{
$values = array();
$has_deny = array();
- foreach ($this->Deny as $perm => $groups) {
+ /*foreach ($this->Deny as $perm => $groups) {
if (count($groups) > 0) {
$values[] = '('.$this->CatId.', '.$perm.', "", "'.join(',', $groups).'")';
$has_deny[] = $perm;
}
- }
+ }*/
foreach ($this->Allow as $perm => $groups) {
- if (in_array($perm, $has_deny)) continue;
+// if (in_array($perm, $has_deny)) continue;
if (count($groups) > 0) {
$values[] = '(' .$this->CatId. ', ' .$perm. ', "' .join(',', $groups). '", "")';
}
}
if (!$values) return '';
$sql = 'INSERT INTO '.GetTablePrefix().'PermCache (CategoryId, PermId, ACL, DACL) VALUES '.join(',', $values);
return $sql;
}
}
class clsCacheUpdater
{
var $Stack;
var $iteration;
var $totalCats;
var $doneCats;
var $table;
var $root_prefixes = Array();
/**
* Kernel Application
*
* @var kApplication
*/
var $Application = null;
/**
* Enter description here...
*
* @var kDBConnection
*/
var $Conn = null;
function clsCacheUpdater($continuing=false)
{
$this->Application =& kApplication::Instance();
$this->Conn =& $this->Application->GetADODBConnection();
foreach ($this->Application->ModuleInfo as $module_name => $module_info) {
$this->root_prefixes[ $module_info['RootCat'] ] = $module_info['Var'];
}
$this->conn =& GetADODBConnection();
$this->iteration = 0;
$this->table=$GLOBALS['objSession']->GetEditTable('permCacheUpdate');
if (!$continuing) {
$this->Stack =& new clsRecursionStack();
$sql = 'DELETE FROM '.GetTablePrefix().'PermCache';
$this->conn->Execute($sql);
$this->initData();
}
else {
$this->getData();
// $this->SetStack($data);
}
}
function getDonePercent()
{
if(!$this->totalCats)return 0;
return intval( round( $this->doneCats / $this->totalCats * 100 ) );
}
function getData()
{
$sql='SELECT data FROM '.$this->table;
if( $rs = $this->conn->Execute($sql) )
$tmp = unserialize($rs->fields['data']);
$this->totalCats = isset($tmp['totalCats']) ? $tmp['totalCats'] : 0;
$this->doneCats = isset($tmp['doneCats']) ? $tmp['doneCats'] : 0;
if(isset($tmp['stack']))
$this->Stack = $tmp['stack'];
else
$this->Stack = & new clsRecursionStack();
}
function setData()
{
$tmp=Array
(
'totalCats' =>$this->totalCats,
'doneCats' =>$this->doneCats,
'stack' =>$this->Stack,
);
$sql='DELETE FROM '.$this->table;
$this->conn->Execute($sql);
$sql='INSERT '.$this->table.' SET data="'.addslashes(serialize($tmp)).'"';
$this->conn->Execute($sql);
}
function initData()
{
$this->clearData(); // drop table before starting anyway
$sql = 'CREATE TABLE '.$this->table.'(data LONGTEXT)';
$this->conn->Execute($sql);
$sql='SELECT COUNT(*) as count FROM '.GetTablePrefix().'Category';
if( $rs = $this->conn->Execute($sql) )
$this->totalCats=$rs->fields['count'];
$this->doneCats=0;
}
function clearData()
{
$sql='DROP TABLE IF EXISTS '.$this->table;
$this->conn->Execute($sql);
}
function DoTheJob()
{
$data = $this->Stack->Get();
if ($data === false) { //If Stack is empty
$data['current_id'] = 0;
$data['title'] = Array();
$data['named_path'] = Array();
$data['category_template'] = '';
$data['item_template'] = '';
$this->Stack->Push($data);
}
if (!isset($data['queried'])) {
$this->QueryTitle($data);
$this->QueryChildren($data);
$this->QueryPermissions($data);
$data['queried'] = 1;
if($sql = $data['perms']->GetInsertSQL())
{
$this->conn->Execute($sql);
$this->doneCats++;
}
$this->iteration++;
}
// start with first child if we haven't started yet
if (!isset($data['current_child'])) $data['current_child'] = 0;
// if we have more children
if (isset($data['children'][$data['current_child']]))
{
$next_data = Array();
$next_data['title'] = $data['title'];
$next_data['named_path'] = $data['named_path'];
$next_data['category_template'] = $data['category_template'];
$next_data['item_template'] = $data['item_template'];
$next_data['current_id'] = $data['children'][$data['current_child']]; //next iteration should process child
$next_data['perms'] = $data['perms']; //we should copy our permissions to child - inheritance
$next_data['perms']->SetCatId($next_data['current_id']);
$data['current_child']++;
$this->Stack->Update($data); //we need to update ourself for the iteration after the next (or further) return to next child
$this->Stack->Push($next_data); //next iteration should process this child
return true;
}
else {
$this->UpdateCachedPath($data);
$this->Stack->Pop(); //remove ourself from stack if we have finished all the childs (or there are none)
// we are getting here if we finished with current level, so check if it's first level - then bail out.
return $this->Stack->Count() > 0;
}
}
function UpdateCachedPath(&$data)
{
$fields_hash = Array( 'CachedNavbar' => implode('>', $data['title']),
'NamedParentPath' => implode('/', $data['named_path'] ),
'CachedCategoryTemplate'=> $data['category_template'],
'CachedItemTemplate' => $data['item_template'],
);
$this->Conn->doUpdate($fields_hash, TABLE_PREFIX.'Category', 'CategoryId = '.$data['current_id']);
}
function QueryTitle(&$data)
{
$category_id = $data['current_id'];
$sql = 'SELECT Name, Filename, CategoryTemplate, ItemTemplate
FROM '.GetTablePrefix().'Category
WHERE CategoryId = '.$category_id;
$rs = $this->conn->Execute($sql);
if ($rs && !$rs->EOF)
{
$data['title'][] = $rs->fields['Name'];
$data['named_path'][] = $rs->fields['Filename'];
// it is one of the modules root category
$root_prefix = isset($this->root_prefixes[$category_id]) ? $this->root_prefixes[$category_id] : false;
if ($root_prefix) {
$fields_hash = Array();
if (!$rs->fields['CategoryTemplate']) {
$rs->fields['CategoryTemplate'] = $this->Application->ConfigValue($root_prefix.'_CategoryTemplate');
$fields_hash['CategoryTemplate'] = $rs->fields['CategoryTemplate'];
}
if (!$rs->fields['ItemTemplate']) {
$rs->fields['ItemTemplate'] = $this->Application->ConfigValue($root_prefix.'_ItemTemplate');
$fields_hash['ItemTemplate'] = $rs->fields['ItemTemplate'];
}
$this->Conn->doUpdate($fields_hash, TABLE_PREFIX.'Category', 'CategoryId = '.$category_id);
}
// if explicitly set, then use it; use parent template otherwise
if ($rs->fields['CategoryTemplate']) {
$data['category_template'] = $rs->fields['CategoryTemplate'];
}
if ($rs->fields['ItemTemplate']) {
$data['item_template'] = $rs->fields['ItemTemplate'];
}
}
}
function QueryChildren(&$data)
{
$sql = sprintf('SELECT CategoryId FROM '.GetTablePrefix().'Category WHERE ParentId = %s',
$data['current_id']);
$rs = $this->conn->Execute($sql);
$data['children'] = Array();
while ($rs && !$rs->EOF)
{
$data['children'][] = $rs->fields['CategoryId'];
$rs->MoveNext();
}
}
function QueryPermissions(&$data)
{
// don't search for section "view" permissions here :)
$sql = sprintf('SELECT ipc.PermissionConfigId, ip.GroupId, ip.PermissionValue FROM '.GetTablePrefix().'Permissions AS ip
LEFT JOIN '.GetTablePrefix().'PermissionConfig AS ipc
ON ipc.PermissionName = ip.Permission
WHERE (CatId = %s) AND (Permission LIKE "%%.VIEW") AND (ipc.PermissionConfigId IS NOT NULL)',
$data['current_id']);
$rs = $this->conn->Execute($sql);
//create permissions array only if we don't have it yet (set by parent)
if (!isset($data['perms'])) {
$data['perms'] = new clsCachedPermissions($data['current_id']);
}
while ($rs && !$rs->EOF)
{
if ($rs->fields['PermissionValue'] == 1) {
$data['perms']->AddAllow($rs->fields['PermissionConfigId'], $rs->fields['GroupId']);
}
else {
$data['perms']->AddDeny($rs->fields['PermissionConfigId'], $rs->fields['GroupId']);
}
$rs->MoveNext();
}
}
}
?>
\ No newline at end of file
Property changes on: trunk/admin/category/permcacheupdate.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.10
\ No newline at end of property
Index: trunk/core/units/groups/groups_config.php
===================================================================
--- trunk/core/units/groups/groups_config.php (revision 5252)
+++ trunk/core/units/groups/groups_config.php (revision 5253)
@@ -1,119 +1,120 @@
<?php
$config = Array(
'Prefix' => 'g',
'ItemClass' => Array('class' => 'GroupsItem', 'file' => 'groups_item.php', 'build_event' => 'OnItemBuild'),
'ListClass' => Array('class' => 'kDBList', 'file' => '', 'build_event' => 'OnListBuild'),
'EventHandlerClass' => Array('class' => 'GroupsEventHandler', 'file' => 'groups_event_handler.php','build_event'=>'OnBuild'),
'TagProcessorClass' => Array('class' => 'kDBTagProcessor', 'file' => '','build_event'=>'OnBuild'),
'AutoLoad' => true,
'QueryString' => Array(
1 => 'id',
2 => 'page',
3 => 'event',
4 => 'mode',
),
'IDField' => 'GroupId',
'StatusField' => Array('Enabled'),
'TitleField' => 'Name',
'TitlePresets' => Array(
'default' => Array( 'new_status_labels' => Array('g' => '!la_title_Adding_Group!'),
'edit_status_labels' => Array('g' => '!la_title_Editing_Group!'),
'new_titlefield' => Array('g' => '!la_title_New_Group!'),
),
'groups_list' => Array('prefixes' => Array('g_List'), 'format' => "!la_title_Groups! (#g_recordcount#)"),
'groups_edit' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_General!"),
'groups_edit_users' => Array('prefixes' => Array('g', 'g-ug_List'), 'format' => "#g_status# '#g_titlefield#' - !la_title_Users! (#g-ug_recordcount#)" ),
'groups_edit_permissions' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_Permissions!" ),
'groups_edit_additional_permissions' => Array('prefixes' => Array('g'), 'format' => "#g_status# '#g_titlefield#' - !la_title_AdditionalPermissions!" ),
'groups_select' => Array('prefixes' => Array('g_List'), 'format' => "!la_title_Groups! (#g_recordcount#) - !la_title_SelectGroup!"),
),
'PermSection' => Array('main' => 'in-portal:user_groups'),
'Sections' => Array(
'in-portal:user_groups' => Array(
'parent' => 'in-portal:users',
'icon' => 'usergroups',
'label' => 'la_tab_User_Groups',
'url' => Array('t' => 'groups/groups_list', 'pass' => 'm'),
'permissions' => Array('view', 'add', 'edit', 'delete', 'advanced:send_email'),
'priority' => 2,
'type' => stTREE,
),
),
'TableName' => TABLE_PREFIX.'PortalGroup',
'ListSQLs' => Array('' => ' SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'UserGroup ug ON ug.GroupId = %1$s.GroupId'),
'ItemSQLs' => Array('' => ' SELECT %1$s.* %2$s FROM %1$s
LEFT JOIN '.TABLE_PREFIX.'UserGroup ug ON ug.GroupId = %1$s.GroupId'),
'ListSortings' => Array(
'' => Array(
'Sorting' => Array('Name' => 'asc'),
)
),
'SubItems' => Array('g-perm', /*'g-ug'*/),
'CalculatedFields' => Array(
'total' => Array(
'UserCount' => 'COUNT(ug.PortalUserId)',
),
),
'Fields' => Array (
'GroupId' => Array(),
'Name' => Array('type' => 'string', 'not_null' => '1', 'required' => 1, 'default' => ''),
'Description' => Array('type' => 'string','default' => ''),
'CreatedOn' => Array('type' => 'double', 'formatter' => 'kDateFormatter', 'not_null' => '1','default' => '#NOW#'),
'System' => Array('type' => 'int','not_null' => '1','default' => '0'),
'Personal' => Array('type' => 'int','not_null' => '1','default' => '0'),
'Enabled' => Array('type' => 'int', 'formatter' => 'kOptionsFormatter', 'options' => Array(1 => 'la_Enabled', 0 => 'la_Disabled'), 'use_phrases' => 1, 'not_null' => '1','default' => 1),
'ResourceId' => Array('type' => 'int','not_null' => '1','default' => '0'),
),
'VirtualFields' => Array(
'UserCount' => Array('type' => 'int', 'default' => 0),
),
'Grids' => Array(
'Default' => Array(
'Icons' => Array(1 => 'icon16_group.gif', 0 => 'icon16_group_disabled.gif'),
'Fields' => Array(
- 'Name' => Array('title' => 'la_col_GroupName', 'data_block' => 'grid_checkbox_td'),
+ 'GroupId' => Array('title' => 'la_col_Id', 'data_block' => 'grid_checkbox_td'),
+ 'Name' => Array('title' => 'la_col_GroupName'),
'UserCount' => Array('title' => 'la_col_UserCount'),
),
),
/*'GroupSelector' => Array(
'Icons' => Array(0 => 'icon16_user_disabled.gif', 1 => 'icon16_user.gif', 2 => 'icon16_user_pending.gif'),
'Fields' => Array(
'Login' => Array('title' => 'la_col_Username', 'data_block' => 'grid_radio_td'),
'LastName' => Array( 'title'=>'la_col_LastName'),
'FirstName' => Array( 'title'=>'la_col_FirstName'),
'Email' => Array( 'title'=>'la_col_Email'),
'PrimaryGroup' => Array( 'title'=>'la_col_PrimaryGroup'),
'CreatedOn_formatted' => Array('title' => 'la_col_CreatedOn', 'sort_field' => 'CreatedOn'),
),
),*/
),
);
?>
\ No newline at end of file
Property changes on: trunk/core/units/groups/groups_config.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.10
\ No newline at end of property
Event Timeline
Log In to Comment