From: Jonny B. <tw...@no...> - 2009-08-18 11:03:22
|
On 18 Aug 2009, at 11:02, Sylvie Greverend wrote: > Hard to follow after one week of vacation Hi Sylvie - hope you had a good one - we've been busy again! :D > -1 for this one. What can we do if there is a lot of groups? > I prefered the tpl before at least it was working - not efficiently - > but it was working with more than 10 groups Agreed - but i still have to do a "group-picker" for this, so you can show/hide group columns easily. Then if you want to admin just one group at a time, like before, you can, but usually i guess you would pick half a dozen or so. I'm currently looking for a good (hopefully jquery ui) widget to help do this elegantly... Then i am going to change the global "tiki-assignpermissions" over to use this too (reducing code - woo!) - it's mostly done but needs a bit of fixing. One big question unanswered so far (imho) is what to do about the levels (a.k.a. 'advanced') editor on assignperms. Marc is of the view that the whole "level" concept should be replaced by profiles, because no one set of levels (some say roles) will fit each type of instal (intranet, community, publishing etc), however, now there is the "quick perms" interface this way seems to make some sense to me now (i was always confused by how some of the levels "seemed to be" groups, but not all - turns out some of them were just named the same as groups - bad move imho; -should have been: "guest, member, leader, controller" or something like that) Anyway - suggestions welcome... While on this subject; there's a strange bug on objectperms on demo.tw.o - somehow it selects and disabled columns vertically, not horizontally, but i cannot reproduce it on my servers - does anyone else get that? (it's supposed to select and disable all groups that inherit - e.g. you click registered and "editors" automatically gets selected) There will be a little gap in my work on this for a day or three while travelling - so time to discuss... jonny > On Wed, 2009-08-05 at 14:50 +0000, jon...@us... > wrote: >> Revision: 20584 >> http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=20584&view=rev >> Author: jonnybradley >> Date: 2009-08-05 14:50:01 +0000 (Wed, 05 Aug 2009) >> >> Log Message: >> ----------- >> [ENH] Object permissions admin mini-revamp >> Groups now displayed on each perm (in a grid) and set/unset by >> checking/unchecking >> Perms grouped by type with collapsible headings (using treetable) >> Filter by text in perm rows including description (using listfilter) >> >> TODO >> Figure out what to do when there are dozens of groups (probably >> using perspectives to set a new "visible groups" pref). >> Fix for when list is filtered opening a type section looses filter >> on that part. >> Maybe move descriptions to a tooltip? >> Test more! >> >> Modified Paths: >> -------------- >> trunk/lib/smarty_tiki/function.listfilter.php >> trunk/lib/smarty_tiki/function.treetable.php >> trunk/lib/userslib.php >> trunk/templates/tiki-objectpermissions.tpl >> trunk/tiki-objectpermissions.php >> >> Modified: trunk/lib/smarty_tiki/function.listfilter.php >> =================================================================== >> --- trunk/lib/smarty_tiki/function.listfilter.php 2009-08-05 >> 12:47:13 UTC (rev 20583) >> +++ trunk/lib/smarty_tiki/function.listfilter.php 2009-08-05 >> 14:50:01 UTC (rev 20584) >> @@ -17,6 +17,8 @@ >> * @maxlength max length of the input field in characters >> * @prefix prefix text to be put before the input field >> * @selectors CSS (jQuery) selector(s) for what to filter >> + * @exclude selector(s) for what to exclude from the text filter >> + * (but still hide when parent is empty) >> * >> * Mainly for treetable lists... >> * @parentSelector CSS (jQuery) selector(s) for parent nodes of >> what to filter >> @@ -65,7 +67,7 @@ >> for( i = 0; criterias.length > i; ++i ) { >> word = criterias[i]; >> if( word.length > 0 && text.indexOf( word ) == -1 ) { >> - \$jq(this).hide(); >> + \$jq(this).not('$exclude').hide(); // don't search within >> excluded elements >> return; >> } >> } >> @@ -76,8 +78,9 @@ >> $content .= " >> \$jq('$parentSelector').show().each( function() { >> var cl = '.$childPrefix' + \$jq(this).attr('id'); >> - if (\$jq(cl + ':visible').length == 0) { >> + if (\$jq(cl + ':visible:not(\"$exclude\")').length == 0) { // >> excluded things don't count >> \$jq(this).hide(); >> + \$jq(cl + '$exclude').hide(); // but need hiding if the >> parent is 'empty' >> } >> }); >> "; >> >> Modified: trunk/lib/smarty_tiki/function.treetable.php >> =================================================================== >> --- trunk/lib/smarty_tiki/function.treetable.php 2009-08-05 >> 12:47:13 UTC (rev 20583) >> +++ trunk/lib/smarty_tiki/function.treetable.php 2009-08-05 >> 14:50:01 UTC (rev 20584) >> @@ -24,24 +24,31 @@ >> * or a string like: '"permName"="Permission Name", >> "permDesc"="Description", etc' >> * if undefined it tries to guess (?) >> * >> - * _valueColumnIndex = 0 : index of the col in the array above to >> use as the unique index >> + * _valueColumnIndex = 0 : index of the col in the _data array >> above to use as the unique index >> * >> - * _sortColumn = '' : column to organise tree by (actually row key >> = e.g. 'type') >> + * _sortColumn = '' : column to organise tree by (actually row >> key = e.g. 'type') >> * >> - * _checkbox = '' : name of checkbox (auto-incrementing) - no >> checkboxes if not set >> + * _checkbox = '' : name of checkbox (auto-incrementing) - no >> checkboxes if not set >> + * if comma delimted list then makes multiple checkboxes >> * >> - * _listFilter = 'y' : include dynamic text filter >> + * _checkboxColumnIndex = 0 : index of the col in the _data array >> above to use as the checkbox value >> + * comma delimeted list (of ints) for multiple checkboxes >> as set above >> + * if set needs to match number of checkboxes defines in >> _checkbox (or if not set uses 0,1,2 etc) >> * >> - * _filterMinRows = 12 : don't show filter box if less than this >> number of rows >> + * _checkboxTitles = '' : Comma delimited list of header titles >> for checkboxes (optional, but needs to match number of checkboxes >> above) >> * >> - * class = 'treeTable' : class of the table - will add 'sortable' >> if feature_jquery_sortable = y >> - * id = 'treetable1' : id of the table (auto-incrementing) >> + * _listFilter = 'y' : include dynamic text filter >> * >> + * _filterMinRows = 12 : don't show filter box if less than this >> number of rows >> + * >> + * class = 'treeTable' : class of the table - will add 'sortable' >> if feature_jquery_sortable = y >> + * id = 'treetable1' : id of the table (auto-incrementing) >> + * >> * _rowClasses = array('odd','even') : classes to cycle through for >> rows (tr's and td's) >> * can be a string for same class on each row >> * or empty string for not >> * >> - * _emptyDataMessage = tra('No rows found') : message if there are >> no rows >> + * _emptyDataMessage = {treetable}: '.tra('No rows found') : >> message if there are no rows >> * >> */ >> >> @@ -56,11 +63,41 @@ >> >> extract($params); >> >> - $_emptyDataMessage = empty($_emptyDataMessage) ? tra('No rows >> found') : $_emptyDataMessage; >> + $_emptyDataMessage = empty($_emptyDataMessage) ? '{treetable}: >> ' . tra('No rows found') : $_emptyDataMessage; >> if (empty($_data)) { >> return $_emptyDataMessage; >> } >> >> + $_checkbox = empty($_checkbox) ? '' : $_checkbox; >> + $_checkboxTitles = empty($_checkboxTitles) ? '' : $_checkboxTitles; >> + >> + if (strpos($_checkbox, ',') !== false) { >> + $_checkbox = split(',', trim($_checkbox)); >> + if (isset($_checkboxColumnIndex)) { >> + if (strpos($_checkboxColumnIndex, ',') !== false) { >> + $_checkboxColumnIndex = split(',', trim($_checkboxColumnIndex)); >> + } >> + if (count($_checkbox) != count($_checkboxColumnIndex)) { >> + return tra('{treetable}: Number of items in >> _checkboxColumnIndex doesn not match items in _checkbox'); >> + } >> + } >> + if (!empty($_checkboxTitles)) { >> + if (strpos($_checkboxTitles, ',') !== false) { >> + $_checkboxTitles = split(',', trim($_checkboxTitles)); >> + } >> + if (count($_checkbox) != count($_checkboxTitles)) { >> + return tra('{treetable}: Number of items in _checkboxTitles >> doesn not match items in _checkbox'); >> + } >> + } >> + } >> + $_checkboxColumnIndex = empty($_checkboxColumnIndex) ? 0 : >> $_checkboxColumnIndex; >> + $_valueColumnIndex = empty($_valueColumnIndex) ? 0 : >> $_valueColumnIndex; >> + >> + if (!empty($_checkbox) && !is_array($_checkbox)) { >> + $_checkbox = array($_checkbox); >> + $_checkboxColumnIndex = array($_checkboxColumnIndex); >> + } >> + >> $html = ''; >> $nl = "\n"; >> >> @@ -106,13 +143,12 @@ >> unset($ar, $ar2); >> } >> >> - $_valueColumnIndex = empty($_valueColumnIndex) ? 0 : >> $_valueColumnIndex; >> $_sortColumn = empty($_sortColumn) ? '' : $_sortColumn; >> >> if ($_sortColumn) { >> sort2d($_data, $_sortColumn); >> $headerlib->add_jq_onready('$jq("#'. >> $id.'").treeTable({clickableNodeNames:true});'); >> - // TODO refilter when .parent is opened >> + // TODO refilter when .parent is opened - seems to prevent the >> click propagating >> // $headerlib- >> >add_jq_onready('$jq("tr.parent").click(function(event) { >> //if ($jq("#'.$id.'_filter").val()) { >> // $jq("#'.$id.'_filter").trigger("keyup"); >> @@ -133,8 +169,10 @@ >> include_once('lib/smarty_tiki/function.listfilter.php'); >> $html .= smarty_function_listfilter( >> array('id' => $id.'_filter', >> - 'selectors' => "#$id tbody tr:not(.parent)", >> - 'parentSelector' => "#$id tbody .parent"), $smarty); >> + 'selectors' => "#$id tbody tr:not(.parent)", >> + 'parentSelector' => "#$id tbody .parent", >> + 'exclude' => ".subHeader", >> + $smarty)); >> } >> >> // start writing the table >> @@ -143,10 +181,14 @@ >> // write the table header >> $html .= '<thead><tr>'; >> if (!empty($_checkbox)) { >> - $html .= '<th>'; >> include_once('lib/smarty_tiki/function.select_all.php'); >> - $html .= smarty_function_select_all(array('checkbox_names'=> >> $_checkbox.'[]'), $smarty); >> - $html .= '</th>'; >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + $html .= '<th class="checkBoxHeader">'; >> + $html .= smarty_function_select_all( >> + array('checkbox_names'=>$_checkbox[$i].'[]', >> + 'label' => empty($_checkboxTitles) ? '' : >> $_checkboxTitles[$i]), $smarty); >> + $html .= '</th>'; >> + } >> } >> >> foreach ($_columns as $column => $columnName) { >> @@ -165,12 +207,29 @@ >> if ($_sortColumn) { >> $treeType = htmlentities($row[$_sortColumn]); >> $treeTypeId = preg_replace('/\s+/', '_', $treeType); >> + $childRowClass = ' child-of-'.$id.'_'.$treeTypeId; >> + >> if (!in_array($treeTypeId, $treeColumnsAdded)) { >> - $html .= '<tr id="'.$id.'_'.$treeTypeId.'"><td colspan="'. >> (count($_columns) + (!empty($_checkbox) ? 1 : 0)).'">'; >> + $html .= '<tr id="'.$id.'_'.$treeTypeId.'"><td colspan="'. >> (count($_columns) + count($_checkbox)).'">'; >> $html .= $treeType.'</td></tr>'.$nl; >> $treeColumnsAdded[] = $treeTypeId; >> + >> + // write a sub-header >> + $html .= '<tr class="subHeader'.$childRowClass.'">'; >> + if (!empty($_checkbox)) { >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + $html .= '<td class="checkBoxHeader">'; >> + $html .= empty($_checkboxTitles) ? '' : $_checkboxTitles[$i]; >> + $html .= '</td>'; >> + } >> + } >> + foreach ($_columns as $column => $columnName) { >> + $html .= '<td>'; >> + $html .= htmlentities($columnName); >> + $html .= '</td>'; >> + } >> + $html .= '</tr>'.$nl; >> } >> - $childRowClass = ' child-of-'.$id.'_'.$treeTypeId; >> } else { >> $rowId = ''; >> $childRowClass = ''; >> @@ -178,21 +237,27 @@ >> >> // work out row class (odd/even etc) >> if ($rowCounter > -1) { >> - $rowClass = ' class="'.$_rowClasses[$rowCounter]. >> $childRowClass.'"'; >> + $rowClass = $_rowClasses[$rowCounter].$childRowClass; >> $rowCounter++; >> if ($rowCounter >= count($_rowClasses)) { $rowCounter = 0; } >> } else { >> - $rowClass = ' class="'.$childRowClass.'"'; >> + $rowClass = $childRowClass; >> } >> - // get row's "value" >> - $rowVal = htmlentities($row[$_valueColumnIndex]); >> >> - $html .= '<tr'.$rowClass.'>'; >> + $html .= '<tr class="'.$rowClass.'">'; >> // add the checkbox >> if (!empty($_checkbox)) { >> - $html .= '<td'.$rowClass.'>'; >> - $html .= '<input type="checkbox" name="'.$_checkbox.'[]" >> value="'.$rowVal.'" title="'.$rowVal.'"/>'; >> - $html .= '</td>'; >> + for ($i = 0; $i < count($_checkbox); $i++) { >> + // get checkbox's "value" >> + $cbxVal = htmlentities($row[$_checkboxColumnIndex[$i]]); >> + $rowVal = htmlentities($row[$_valueColumnIndex]); >> + $html .= '<td class="checkBoxCell">'; >> + $html .= '<input type="checkbox" name="'.$_checkbox[$i].'[]" >> value="'.$rowVal.'"'.($cbxVal=='y' ? ' checked=checked' : '').' >> title="'.$_checkbox[$i].'" />'; >> + if ($cbxVal == 'y') { >> + $html .= '<input type="hidden" name="old_'. >> $_checkbox[$i].'[]" value="'.$rowVal.'" />'; >> + } >> + $html .= '</td>'; >> + } >> } >> >> foreach ($_columns as $column => $columnName) { >> >> Modified: trunk/lib/userslib.php >> =================================================================== >> --- trunk/lib/userslib.php 2009-08-05 12:47:13 UTC (rev 20583) >> +++ trunk/lib/userslib.php 2009-08-05 14:50:01 UTC (rev 20584) >> @@ -1862,7 +1862,7 @@ >> return $utr; >> } >> >> - function get_permissions($offset = 0, $maxRecords = -1, >> $sort_mode = 'permName_asc', $find = '', $type = '', $group = '', >> $enabledOnly = false) { >> + function get_permissions($offset = 0, $maxRecords = -1, >> $sort_mode = 'permName_asc', $find = '', $type = '', $group = '', >> $enabledOnly = false) { // TODO enabledOnly doesn't seem to do >> anything - KIL? >> global $prefs; >> >> $values = array(); >> @@ -1898,10 +1898,26 @@ >> continue; >> >> $cant++; >> - if ($group && $this->group_has_permission($group, >> $res['permName'])) { >> - $res['hasPerm'] = 'y'; >> - } else { >> - $res['hasPerm'] = 'n'; >> + if ($group) { >> + if (is_string($group)) { >> + if ($this->group_has_permission($group, $res['permName'])) { >> + $res['hasPerm'] = 'y'; >> + $res[count($res)/2] = 'y'; // keep indexed key too >> + } else { >> + $res['hasPerm'] = 'n'; >> + $res[count($res)/2] = 'n'; >> + } >> + } else if (is_array($group)) { >> + foreach( $group as $groupName) { >> + if ($this->group_has_permission($groupName, >> $res['permName'])) { >> + $res[$groupName.'_hasPerm'] = 'y'; >> + $res[count($res)/2] = 'y'; >> + } else { >> + $res[$groupName.'_hasPerm'] = 'n'; >> + $res[count($res)/2] = 'n'; >> + } >> + } >> + } >> } >> >> $ret[] = $res; >> >> Modified: trunk/templates/tiki-objectpermissions.tpl >> =================================================================== >> --- trunk/templates/tiki-objectpermissions.tpl 2009-08-05 12:47:13 >> UTC (rev 20583) >> +++ trunk/templates/tiki-objectpermissions.tpl 2009-08-05 14:50:01 >> UTC (rev 20584) >> @@ -22,58 +22,66 @@ >> >> <h2>{tr}Current permissions for this object{/tr}</h2> >> >> - <table class="normal"> >> - <tr> >> - <th> >> + <form method="post" action="tiki-objectpermissions.php"> >> + <input type="hidden" name="referer" value="{$referer|escape}" /> >> + <input type="hidden" name="objectName" value="{$objectName| >> escape}" /> >> + <input type="hidden" name="objectType" value="{$objectType| >> escape}" /> >> + <input type="hidden" name="objectId" value="{$objectId|escape}" /> >> + <input type="hidden" name="permType" value="{$permType|escape}" /> >> + <table class="normal"> >> + <tr> >> + <th> >> + {if $page_perms} >> + {select_all checkbox_names='checked[]'} >> + {/if} >> + </th> >> + <th>{tr}Permissions{/tr}</th> >> + <th>{tr}Groups{/tr}</th> >> + <th style="width: 20px">{tr}Action{/tr}</th> >> + </tr> >> + >> + {cycle values="odd,even" print=false} >> + {section name=pg loop=$page_perms} >> + <tr> >> + <td class="{cycle advance=false}"> >> + <input type="checkbox" name="checked[]" >> value="{$page_perms[pg].permName|cat:' '|cat: >> $page_perms[pg].groupName|escape}" /> >> + </td> >> + <td class="{cycle advance=false}"> >> + {$page_perms[pg].permName|escape}<br /><em>{tr} >> {$page_perms[pg].permDesc|escape}{/tr}</em> >> + </td> >> + <td class="{cycle advance=false}"> >> + {if $page_perms[pg].groupName eq >> $prefs.trackerCreatorGroupName}<i>{tr}Creator Group{/tr}</i>{else} >> {$page_perms[pg].groupName|escape}{/if} >> + </td> >> + <td class="{cycle advance=true}"> >> + <a class="link" href="tiki-objectpermissions.php? >> referer={$referer| >> escape >> :"url >> "}& >> ;action >> = >> remove >> & >> ;objectName >> = >> {$ >> objectName >> }& >> ;objectId >> = >> {$ >> objectId >> }& >> ;objectType >> = >> {$ >> objectType >> }& >> ;permType >> = >> {$ >> permType >> }& >> ;perm >> ={$page_perms[pg].permName}&group={$page_perms[pg].groupName} >> {if ! >> empty($filegals_manager)}&filegals_manager={$filegals_manager| >> escape}{/if}" title="{tr}Delete{/tr}">{icon _id='cross' >> alt="{tr}Delete{/tr}"}</a> >> + </td> >> + </tr> >> + {sectionelse} >> + <tr> >> + <td colspan="4" class="odd"> >> + {if !empty($categ_perms)}<strong>{tr}No individual >> permissions but category permissions apply{/tr}</strong> >> + {else}{tr}There are no individual permissions and no category >> permissions applied{/tr} >> + {/if} >> + </td> >> + </tr> >> + {/section} >> + </table> >> + >> {if $page_perms} >> - {select_all checkbox_names='checked[]'} >> - {/if} >> - </th> >> - <th>{tr}Permissions{/tr}</th> >> - <th>{tr}Groups{/tr}</th> >> - <th style="width: 20px">{tr}Action{/tr}</th> >> - </tr> >> - >> - {cycle values="odd,even" print=false} >> - {section name=pg loop=$page_perms} >> - <tr> >> - <td class="{cycle advance=false}"> >> - <input type="checkbox" name="checked[]" >> value="{$page_perms[pg].permName|cat:' '|cat: >> $page_perms[pg].groupName|escape}" /> >> - </td> >> - <td class="{cycle advance=false}"> >> - {$page_perms[pg].permName|escape}<br /><em>{tr} >> {$page_perms[pg].permDesc|escape}{/tr}</em> >> - </td> >> - <td class="{cycle advance=false}"> >> - {if $page_perms[pg].groupName eq >> $prefs.trackerCreatorGroupName}<i>{tr}Creator Group{/tr}</i>{else} >> {$page_perms[pg].groupName|escape}{/if} >> - </td> >> - <td class="{cycle advance=true}"> >> - <a class="link" href="tiki-objectpermissions.php? >> referer={$referer| >> escape >> :"url >> "}& >> ;action >> = >> remove >> & >> ;objectName >> = >> {$ >> objectName >> }& >> ;objectId >> = >> {$ >> objectId >> }& >> ;objectType >> = >> {$ >> objectType >> }& >> ;permType >> = >> {$ >> permType >> }& >> ;perm >> ={$page_perms[pg].permName}&group={$page_perms[pg].groupName} >> {if ! >> empty($filegals_manager)}&filegals_manager={$filegals_manager| >> escape}{/if}" title="{tr}Delete{/tr}">{icon _id='cross' >> alt="{tr}Delete{/tr}"}</a> >> - </td> >> - </tr> >> - {sectionelse} >> - <tr> >> - <td colspan="4" class="odd"> >> - {if !empty($categ_perms)}<strong>{tr}No individual permissions >> but category permissions apply{/tr}</strong> >> - {else}{tr}There are no individual permissions and no category >> permissions applied{/tr} >> + <div> >> + {tr}Perform action with checked:{/tr} >> + <input type="image" name="delsel" src='pics/icons/cross.png' >> alt='{tr}Delete{/tr}' title='{tr}Delete{/tr}' /> >> + {if isset($inStructure)} >> + {tr}and also to all pages of the sub-structure:{/tr} >> + <input name="removestructure" type="checkbox" /> >> {/if} >> - </td> >> - </tr> >> - {/section} >> - </table> >> - >> - {if $page_perms} >> - <div> >> - {tr}Perform action with checked:{/tr} >> - <input type="image" name="delsel" src='pics/icons/cross.png' >> alt='{tr}Delete{/tr}' title='{tr}Delete{/tr}' /> >> - {if isset($inStructure)} >> - {tr}and also to all pages of the sub-structure:{/tr} <input >> name="removestructure" type="checkbox" /> >> - {/if} >> - </div> >> + </div> >> {/if} >> + </form> >> >> - {if isset($commentCreatorGroup) && $commentCreatorGroup eq 'y'} >> - {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}Creator >> group perms apply only if no tiki_p_view_trackers{/tr}{/remarksbox} >> - {/if} >> + {if isset($commentCreatorGroup) && $commentCreatorGroup eq 'y'} >> + {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}Creator >> group perms apply only if no tiki_p_view_trackers{/tr}{/remarksbox} >> + {/if} >> >> <hr /> >> >> @@ -90,7 +98,7 @@ >> {cycle print=false values="even,odd"} >> {section name=x loop=$categ_perms} >> {section name=y loop=$categ_perms[x]} >> - <tr class="{cycle advance=true}">qwerty >> + <tr class="{cycle advance=true}"> >> <td class="{cycle advance=false}">{$categ_perms[x][y].permName| >> escape}<br />{if isset($categ_perms[x] >> [y].permDesc)}<i>{$categ_perms[x][y].permDesc}</i>{/if}</td> >> <td class="{cycle advance=false}">{$categ_perms[x][y].groupName| >> escape}</td> >> <td class="{cycle advance=false}">{$categ_perms[x][0].catpath}</ >> td> >> @@ -111,9 +119,15 @@ >> {/if} >> <form method="post" action="tiki-objectpermissions.php{if ! >> empty($filegals_manager)}?filegals_manager={$filegals_manager| >> escape}{/if}"> >> {if empty($filegals_manager)} >> - {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}These >> permissions override any global permissions or category permissions >> affecting this object.{/tr}<br /> >> - {if $tiki_p_admin eq 'y'}{tr}To edit global permissions <a >> class="rbox-link" href="tiki-admingroups.php">click here</a>.{/tr}{/ >> if} >> - {/remarksbox} >> + {if !empty($page_perms) or !empty($categ_perms)} >> + {remarksbox type="warning" title="{tr}Warning{/tr}"}{tr}These >> permissions override any global permissions or category permissions >> affecting this object.{/tr}<br /> >> + {if $tiki_p_admin eq 'y'}{tr}To edit global permissions <a >> class="rbox-link" href="tiki-admingroups.php">click here</a>.{/tr}{/ >> if} >> + {/remarksbox} >> + {else} >> + {remarksbox type="note" title="{tr}Note{/tr}"} >> + {tr}No permissions yet applied to this object. Global >> permissions currently set below.{/tr} >> + {/remarksbox} >> + {/if} >> {/if} >> >> <hr /> >> @@ -129,23 +143,10 @@ >> <div class="input_submit_container" style="text-align: center"> >> <input type="submit" name="assign" value="{tr}Assign{/tr}" /> >> </div> >> - >> - <h3>{tr}Groups{/tr}</h3> >> - >> - {treetable _data=$groups _columns='"groupName"="Group Name", >> "groupDesc"="Description"' _checkbox='group' _valueColumnIndex=1} >> - >> - {if isset($group_tracker) and $group_tracker eq 'y'} >> - <hr class="{cycle advance=true}" /> >> >> - <div class="{cycle advance=true}"> >> - <input type="checkbox" name="group[]" >> value="{$prefs.trackerCreatorGroupName}"{if isset($groupName) and >> $grouName eq $prefs.trackerCreatorGroupName} checked="checked"{/ >> if} /> <em>{tr}Creator Group{/tr}</em></div> >> - </div> >> - {/if} >> - >> - <h3>{tr}Permissions{/tr}</h3> >> - >> - {treetable _data=$perms _columns='"permName"="Permission >> Name", "permDesc"="Description"' _sortColumn='type' _checkbox='perm'} >> - >> + <h3>{tr}Permissions{/tr}</h3> >> + {treetable _data=$perms _checkbox=$permGroups _checkboxTitles= >> $groupNames _checkboxColumnIndex=$permGroupCols >> _columns='"permName"="Permission Name", "permDesc"="Description"' >> _sortColumn='type'} >> + >> <div class="input_submit_container" style="text-align: center"> >> <input type="submit" name="assign" value="{tr}Assign{/tr}" /> >> </div> >> >> Modified: trunk/tiki-objectpermissions.php >> =================================================================== >> --- trunk/tiki-objectpermissions.php 2009-08-05 12:47:13 UTC (rev >> 20583) >> +++ trunk/tiki-objectpermissions.php 2009-08-05 14:50:01 UTC (rev >> 20584) >> @@ -17,6 +17,7 @@ >> 'objectType', >> 'permType', >> 'objectId', >> + 'filegals_manager', >> ); >> $perm = 'tiki_p_assign_perm_' . str_replace(' ', '_', >> $_REQUEST['objectType']); >> if ($_REQUEST['objectType'] == 'wiki page') { >> @@ -165,30 +166,48 @@ >> //Quickperm END >> >> // Process the form to assign a new permission to this page >> -elseif (isset($_REQUEST['assign']) && isset($_REQUEST['group']) && >> isset($_REQUEST['perm'])) { >> +elseif (isset($_REQUEST['assign'])) { >> check_ticket('object-perms'); >> - foreach($_REQUEST['perm'] as $perm) { >> - if ($tiki_p_admin_objects != 'y' && !$userlib- >> >user_has_permission($user, $perm)) { >> - $smarty->assign('errortype', 401); >> - $smarty->assign('msg', tra('Permission denied')); >> - $smarty->display('error.tpl'); >> - die; >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> + if ($tiki_p_admin_objects != 'y' && !$userlib- >> >user_has_permission($user, $perm)) { >> + $smarty->assign('errortype', 401); >> + $smarty->assign('msg', tra('Permission denied')); >> + $smarty->display('error.tpl'); >> + die; >> + } >> } >> } >> if (!empty($_REQUEST['assignstructure']) && >> $_REQUEST['assignstructure'] == 'on' && !empty($pageInfoTree)) { >> foreach($pageInfoTree as $subPage) { >> - foreach($_REQUEST['perm'] as $perm) { >> - foreach($_REQUEST['group'] as $group) { >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> $userlib->assign_object_permission($group, >> $subPage["pageName"], 'wiki page', $perm); >> } >> } >> } >> } else { >> - foreach($_REQUEST['perm'] as $perm) { >> - foreach($_REQUEST['group'] as $group) { >> + // set new perms >> + foreach($_REQUEST['perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> $userlib->assign_object_permission($group, >> $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); >> } >> } >> + // remove unchecked ones >> + foreach($_REQUEST['old_perm'] as $group => $perms) { >> + foreach($perms as $perm) { >> + $stillChecked = false; >> + foreach ($_REQUEST['perm'][$group] as $new_perm) { >> + if ($new_perm == $perm) { // still checked >> + $stillChecked = true; >> + continue; >> + } >> + } >> + if (!$stillChecked) { >> + $userlib->remove_object_permission($group, >> $_REQUEST["objectId"], $_REQUEST["objectType"], $perm); >> + } >> + } >> + } >> } >> $smarty->assign('groupName', $_REQUEST["group"]); >> } >> @@ -247,22 +266,39 @@ >> //Quickperm END >> >> $smarty->assign_by_ref('groups', $groups["data"]); >> + >> +// get groupNames etc >> +$permGroups = array(); >> +$groupNames = array(); >> +$groupIndices = array(); >> +$groupIndex = 6; // yuk! >> +foreach($groups['data'] as $row) { >> + $groupNames[] = $row['groupName']; >> + $permGroups[] = 'perm['.$row['groupName'].']'; >> + $groupIndices[] = $groupIndex; >> + $groupIndex++; >> +} >> + >> // Get a list of permissions >> -$perms = $userlib->get_permissions(0, -1, 'permName_asc', '', >> $_REQUEST["permType"], '', true); >> +$perms = $userlib->get_permissions(0, -1, 'permName_asc', '', >> $_REQUEST["permType"], $groupNames, true); // TODO enabledOnly >> doesn't seem to do anything - KIL >> +$perms = $perms['data']; >> >> +$smarty->assign('permGroups', implode(',', $permGroups)); >> +$smarty->assign('permGroupCols', $groupIndices); >> +$smarty->assign('groupNames', implode(',', $groupNames)); >> + >> if ($tiki_p_admin_objects != 'y') { >> $userPerms = array(); >> - foreach($perms['data'] as $perm) { >> + foreach($perms as $perm) { >> if ($userlib->user_has_permission($user, $perm['permName'])) { >> $userPerms[] = $perm; >> } >> } >> - $smarty->assign_by_ref('perms', $userPerms); >> -} else { >> - $smarty->assign_by_ref('perms', $perms['data']); >> + $perms = $userPerms; >> } >> + >> foreach($page_perms as $i => $pp) { >> - foreach($perms['data'] as $p) { >> + foreach($perms as $p) { >> if ($pp['permName'] == $p['permName']) { >> $page_perms[$i]['permDesc'] = $p['permDesc']; >> break; >> @@ -276,7 +312,7 @@ >> // Get the permissions of the categories that this object belongs >> to, >> $categ_perms = array(); >> $parents = $categlib- >> >get_object_categories($_REQUEST['objectType'], >> $_REQUEST['objectId']); >> - $perms_categ = $userlib->get_permissions(0, -1, 'permName_asc', >> '', 'category'); >> + $perms_categ = $userlib->get_permissions(0, -1, 'permName_asc', >> '', 'category', $groupNames); >> foreach($parents as $categId) { >> if ($userlib->object_has_one_permission($categId, 'category')) { >> $categ_perm = $userlib->get_object_permissions($categId, >> 'category'); >> @@ -308,6 +344,25 @@ >> } >> $smarty->assign_by_ref('categ_perms', $categ_perms); >> } >> +// blend the perms from object onto the big perm list >> + >> +foreach ($page_perms as $page_perm) { >> + foreach ($perms as &$perm) { >> + if ($perm['permName'] == $page_perm['permName']) { >> + break; >> + } >> + } >> + for( $i = 0; $i < count($groupNames); $i++) { >> + if ($page_perm['groupName'] == $groupNames[$i]) { >> + $perm[$groupNames[$i] . '_hasPerm'] = 'y'; >> + $perm[$groupIndices[$i]] = 'y'; >> + } >> + } >> +} >> + >> + >> +$smarty->assign_by_ref('perms', $perms); >> + >> ask_ticket('object-perms'); >> // Display the template >> $smarty->assign('mid', 'tiki-objectpermissions.tpl'); >> >> >> This was sent by the SourceForge.net collaborative development >> platform, the world's largest Open Source development site. >> >> ------------------------------------------------------------------------------ >> Let Crystal Reports handle the reporting - Free Crystal Reports >> 2008 30-Day >> trial. Simplify your report design, integration and deployment - >> and focus on >> what you do best, core application coding. Discover what's new with >> Crystal Reports now. http://p.sf.net/sfu/bobj-july >> _______________________________________________ >> Tikiwiki-cvs mailing list >> Tik...@li... >> https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 > 30-Day > trial. Simplify your report design, integration and deployment - and > focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > Tikiwiki-cvs mailing list > Tik...@li... > https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs |