summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 5d0b024)
raw | patch | inline | side by side (parent: 5d0b024)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 17 Nov 2005 12:50:26 +0000 (12:50 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Thu, 17 Nov 2005 12:50:26 +0000 (12:50 +0000) |
Added category selection for groups
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@1959 594d385d-05f5-0310-b6e9-bd551577e9d8
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@1959 594d385d-05f5-0310-b6e9-bd551577e9d8
diff --git a/plugins/admin/applications/class_applicationGeneric.inc b/plugins/admin/applications/class_applicationGeneric.inc
index 161350329afdc4d3cfd9107a60e7a4fe487eb7f5..48615401f0f8821bfa397f897cb49417aadb3148 100644 (file)
var $gosaApplicationName= "";
var $gosaApplicationFlags= "";
var $gosaApplicationIcon= "";
- var $gosaApplicationCategory= "";
var $gotoLogonScript ="";
var $iconData;
var $Categories = array();
/* attribute list for save action */
var $attributes= array("cn", "description", "gosaApplicationExecute", "gosaApplicationName",
- "gosaApplicationFlags","gotoLogonScript", "gosaApplicationCategory");
+ "gosaApplicationFlags","gotoLogonScript");
var $objectclasses= array("top", "gosaApplication");
function application ($config, $dn= NULL)
$smarty->assign("rand", rand(0, 10000));
/* Variables */
- foreach(array("description", "gosaApplicationExecute", "gosaApplicationName",
- "gosaApplicationCategory") as $val){
+ foreach(array("description", "gosaApplicationExecute", "gosaApplicationName") as $val){
$smarty->assign($val, $this->$val);
$smarty->assign($val."ACL", chkacl($this->acl, $val));
}
index 410075f9f0b6317d81f2a0375f06be336e457d5b..6ac3b6cb37971e5b02afc12e20421ae562137c8f 100644 (file)
</td>
<td style="vertical-align:top;">
<table>
- <tr>
- <td><LABEL for="gosaApplicationCategory">{t}Category{/t}</LABEL></td>
- <td>
- <select size="1" id="base" name="gosaApplicationCategory" title="">
- {html_options options=$categories selected=$gosaApplicationCategory}
- </select>
- </td>
- </tr>
- <tr><td colspan=2><div style="height:15px;"></div></td></tr>
<tr>
<td>
<LABEL for="picture_file">{t}Icon{/t}</LABEL>
index 3c87bcadaa1353df94fd22ea9c2fc0239e3ba2f3..cc4efe3d8960cf6796dda15ae96e0c289fb04d42 100644 (file)
<tr>
<td style="width:48%; vertical-align:top;">
<b><LABEL for="used_apps">{t}Used applications{/t}</LABEL></b>
- <br>
- <select id="used_apps" style="width:100%;height:300px;" name="used_apps[]" size=15 multiple>
- {html_options options=$used_apps}
- <option disabled> </option>
- </select>
- <br>
- <input type=submit name="edit_options" value="{t}Edit parameters{/t}" title="{t}Edit optional application parameters{/t}">
- <input type=submit name="del_app" value="{t}Remove{/t}">
+ {$UsedApps}
</td>
<td>
</td>
<b><LABEL for="apps">{t}Available applications{/t}</LABEL></b>
<br>
{$List}
+ <input type="submit" value="{t}Add{/t}" name='AddApps'>
</td>
</tr>
</table>
diff --git a/plugins/admin/groups/class_groupApplication.inc b/plugins/admin/groups/class_groupApplication.inc
index 481c514961036bd6a8354b65484105627d91b35b..a73092b23cc91a059a78f6d21eb2886e9c5eb255 100644 (file)
var $curbase = "";
+
+ var $curCatDir;
+ var $curCatDepth=0;
+ var $Categories=array();
+
+
/* attribute list for save action */
var $attributes= array();
var $objectclasses= array("gosaApplicationGroup");
$this->appoption[$name]= $option;
}
}
+
+ $tmp = array();
+ $tmp2 = array();
+ foreach($this->gosaMemberApplication as $memberApp){
+ if(preg_match("/\|/i",$memberApp)){
+ $tmp = split("\|",$memberApp);
+ $tmp2[$tmp[0]."|".$tmp[1]]['App'] = $tmp[0];
+ $tmp2[$tmp[0]."|".$tmp[1]]['Cat'] = $tmp[1];
+ $tmp2[$tmp[0]."|".$tmp[1]]['Pri'] = $tmp[2];
+ }else{
+ $tmp2[$memberApp."|"]['App'] = $memberApp;
+ $tmp2[$memberApp."|"]['Cat'] = "";
+ $tmp2[$memberApp."|"]['Pri'] = 100;
+ }
+ }
+ $this->gosaMemberApplication = $tmp2;
+
$this->curbase = $this->config->current['BASE'];
}
}
}
+
+ if((isset($_GET['act']))&&($_GET['act']=="open")){
+ $this->curCatDir = $_GET['id'];
+
+ $found = false;
+ foreach($this->Categories as $key => $name ){
+ if($this->curCatDir==$name){
+ $tmp = array_flip(split("\/",$key));
+
+ $this->curCatDepth = ($tmp[$this->curCatDir]);
+ $found= true;
+ }
+ }
+ if(!$found){
+ $this->curCatDir = "";
+ $this->curCatDepth = 0;
+ }
+ }
+
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
}
}
- /* Check sorting variable */
$this->reload();
-
- /* Delete app from group */
- if (isset($_POST['del_app']) && isset ($_POST['used_apps'])){
- foreach ($_POST['used_apps'] as $value){
- unset ($this->used_apps["$value"]);
- $this->removeApp($value);
+ foreach($_POST as $name => $value){
+ if(preg_match("/DelApp_/",$name)){
+ $app = preg_replace("/DelApp_/","",$name);
+ unset($this->used_apps[$app]);
+ unset($this->gosaMemberApplication[$app."|".$this->curCatDir]);
}
- }
+ if(preg_match("/EdiApp_/",$name)){
+ $appname = $value;
+ /* We've got the appname, get parameters from ldap */
+ $ldap= $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->search("(&(objectClass=gosaApplication)(cn=$appname))");
+ if ($ldap->count() != 1){
+ print_red (_("The selected application name is not uniq. Please check your LDAP."));
+ } else {
+ $attrs= $ldap->fetch();
+ if(isset($attrs['gosaApplicationParameter'])){
+ $this->dialog= TRUE;
+
+ /* Fill name and value arrays */
+ for ($i= 0; $i<$attrs['gosaApplicationParameter']['count']; $i++){
+ $option= preg_replace('/^[^:]+:/', '',
+ $attrs['gosaApplicationParameter'][$i]);
+ $name= preg_replace('/:.*$/', '',
+ $attrs['gosaApplicationParameter'][$i]);
+ $this->option_name[$i]= $name;
+
+ /* Fill with values from application, default should be
+ loaded by the external scripts */
+ if (isset($this->appoption[$name])){
+ $this->option_value[$i]= $this->appoption[$name];
+ }
+ }
- /* Add app to group */
- if (isset($_POST['add_app']) && isset($_POST['apps'])){
- foreach ($_POST['apps'] as $value){
- $this->used_apps["$value"]= $this->apps[$value];
- asort($this->used_apps);
- $this->addApp($value);
+ /* Create edit field */
+ $table= "<table summary=\"\">";
+ for ($i= 0; $i < count($this->option_name); $i++){
+ if (isset($this->option_value[$i])){
+ $value= $this->option_value[$i];
+ } else {
+ $value= "";
+ }
+ $table.="<tr><td>".$this->option_name[$i]."</td><td>".
+ "<input name=\"value$i\" size=60 maxlength=250 ".
+ "value=\"".$value."\"><br></td></tr>";
+ }
+ $table.= "</table>";
+ $this->table= $table;
+ } else {
+ print_red (_("The selected application has no options."));
+ }
+ }
}
}
+ $this->reload();
/* Add group with post */
if((isset($_GET['act']))&&($_GET['act']=="add")){
$this->addApp($_GET['id']);
}
- /* Edit application options? */
- if (isset($_POST['edit_options']) && isset($_POST['used_apps'])){
- $appname= $_POST['used_apps'][0];
-
- /* We've got the appname, get parameters from ldap */
- $ldap= $this->config->get_ldap_link();
- $ldap->cd($this->config->current['BASE']);
- $ldap->search("(&(objectClass=gosaApplication)(cn=$appname))");
- if ($ldap->count() != 1){
- print_red (_("The selected application name is not uniq. Please check your LDAP."));
- } else {
- $attrs= $ldap->fetch();
- if(isset($attrs['gosaApplicationParameter'])){
- $this->dialog= TRUE;
-
- /* Fill name and value arrays */
- for ($i= 0; $i<$attrs['gosaApplicationParameter']['count']; $i++){
- $option= preg_replace('/^[^:]+:/', '',
- $attrs['gosaApplicationParameter'][$i]);
- $name= preg_replace('/:.*$/', '',
- $attrs['gosaApplicationParameter'][$i]);
- $this->option_name[$i]= $name;
-
- /* Fill with values from application, default should be
- loaded by the external scripts */
- if (isset($this->appoption[$name])){
- $this->option_value[$i]= $this->appoption[$name];
- }
- }
-
- /* Create edit field */
- $table= "<table summary=\"\">";
- for ($i= 0; $i < count($this->option_name); $i++){
- if (isset($this->option_value[$i])){
- $value= $this->option_value[$i];
- } else {
- $value= "";
- }
- $table.="<tr><td>".$this->option_name[$i]."</td><td>".
- "<input name=\"value$i\" size=60 maxlength=250 ".
- "value=\"".$value."\"><br></td></tr>";
- }
- $table.= "</table>";
- $this->table= $table;
- } else {
- print_red (_("The selected application has no options."));
+ /* Add multiple */
+ if(isset($_POST['AddApps'])){
+ foreach($_POST as $name => $value){
+ if(preg_match("/AddApp_/",$name)){
+ $app = preg_replace("/AddApp_/","",$name);
+ $this->addApp($app);
}
}
}
+
/* Cancel edit options? */
if (isset($_POST['edit_options_cancel'])){
$this->dialog= FALSE;
foreach($apps as $key => $app){
$div->AddEntry(array(
- array("string"=>"<img src='images/select_application.png' alt='"._("application")."'> ".sprintf($linkadd,$key,$app),
+ array("string"=>sprintf("<input type='checkbox' value='1' name='AddApp_%s'>",$key).
+ "<img src='images/select_application.png' alt='"._("application")."'> ".sprintf($linkadd,$key,$app),
"attach"=>"style='border:0px;'")
));
}
+ if((isset($_GET['act']))&&(($_GET['act'] == "one_up")||($_GET['act']=="one_down"))){
+ if(isset($_GET['id'])){
+ $id = $_GET['id'];
+ $act = $_GET['act'];
+ $found = false;
+ foreach($this->gosaMemberApplication as $key => $member){
+ if($id == $member['App']){
+ $found = $key;
+ }
+ }
+
+ if($found != false){
+ if($act == "one_up"){
+ $this->gosaMemberApplication[$found]['Pri'] = $this->gosaMemberApplication[$found]['Pri'] -1;
+ }elseif($act == "one_down") {
+ $this->gosaMemberApplication[$found]['Pri'] = $this->gosaMemberApplication[$found]['Pri'] +1;
+ }
+ }
+ }
+ }
+
+ $div2 = new DivSelectBox("appgroup");
+ $div2->SetHeight(300);
+
+ $menu = $this->CreateCatMenu();
+ $str_noprio = " [ "._("Priority: %s")." ] ";
+ $linkopen = "<img src='images/folder.png'> <a href='?plug=".$_GET['plug']."&act=open&id=%s'>%s</a>";
+ $app = "<img src='images/select_application.png'> %s".$str_noprio;
+
+ /* append back entry */
+ if($menu["__BACK__"] != false){
+ $div2 ->AddEntry(array(
+ array("string"=>sprintf($linkopen,$menu["__BACK__"],".. [ "._("back")." ]")),
+ array("string"=>" ","attach"=>"style='border-right:0px;'")
+ ));
+ }
+
+ foreach($menu['__CATEGORY__'] as $path => $name){
+ $div2 ->AddEntry(array(array("string"=>sprintf($linkopen,$path,$name)),array("string"=>" ","attach"=>"style='border-right:0px;'")));
+ }
+
+ /* Append entries */
+
+ $upudown = "<a href='?plug=".$_GET['plug']."&act=one_up&id=%s'> <img src='images/sort_up.png' border=0></a>".
+ " <a href='?plug=".$_GET['plug']."&act=one_down&id=%s'> <img src='images/sort_down.png' border=0></a>".
+ " <input type='image' src='images/edittrash.png' name='DelApp_%s' value='%s'>".
+ " <input type='image' src='images/edit.png' name='EdiApp_%s' value='%s'>";
+
+ foreach($menu["__ENTRY__"] as $path => $entry){
+ $div2 ->AddEntry(array(array("string"=>sprintf($app,$entry['name'],$entry['prio'])),
+ array("string"=>sprintf($upudown,$entry['name'],$entry['name'],$entry['name'],$entry['name'],$entry['name'],$entry['name']),"attach"=>"style='border-right:0px;'")));
+ }
+
+ $smarty->assign("UsedApps", $div2->DrawList());
$smarty->assign("List", $div->DrawList());
$smarty->assign("apps", $apps);
} else {
$display.= $smarty->fetch (get_template_path('application.tpl', TRUE));
}
-
return ($display);
}
/* Copy members */
$this->attrs["gosaMemberApplication"]= array();
foreach ($this->gosaMemberApplication as $val){
- $this->attrs["gosaMemberApplication"][]= stripslashes($val);
+ $this->attrs["gosaMemberApplication"][]= $val['App']."|".$val['Cat']."|".$val['Pri'];
}
/* Are there application parameters to be saved */
reset ($this->apps);
foreach ($this->gosaMemberApplication as $value){
- $this->used_apps[$value]= $value;
+ $this->used_apps[$value['App']]= $value['App'];
}
}
+
+
+
+
+
+
+
+
+
+ function CreateCatMenu()
+ {
+ /* The current category */
+ $na = $this->curCatDir;
+
+ /* the current folder depth */
+ $nd = $this->curCatDepth;
+
+ /* init array */
+ $return = array();
+
+ $return["__CATEGORY__"] = array(); // Categories
+ $return["__ENTRY__"] = array(); // Entries in this category
+ $return["__BACK__"] = false; // The back entry
+
+ $tmp = new xmlParse();
+
+ $this->Categories= array();
+ if(!isset($this->config->data['MAIN']['KDE_APPLICATIONS_MENU'])) {
+ print_red(_("There is no value for 'KDE_APPLICATIONS_MENU' specified in your gosa.conf."));
+ }else{
+ $path = $this->config->data['MAIN']['KDE_APPLICATIONS_MENU'];
+ if(file_exists($path)){
+ if(is_readable($path)){
+ $tmp->parseMenu($path);
+ $this->Categories = $tmp->GetData();
+ }else{
+ print_red(sprintf(_("The specified file '%s' for 'KDE_APPLICATIONS_MENU' in your gosa.conf is not accessable."),$path));
+ }
+ }else{
+ print_red(sprintf(_("The specified file '%s' for 'KDE_APPLICATIONS_MENU' in your gosa.conf is not accessable."),$path));
+ }
+ }
+
+
+ /* Create new categories to return */
+ foreach($this->Categories as $key => $val){
+
+ /* Split categories by | to get name and priority */
+ $nk = split("\/",$key);
+
+ /* Check if this category must be shown */
+ if((isset($nk[$nd]))&&(is_array($nk))&&($nk[$nd] == $na)){
+
+ /* Add this to the list, if theres is a sub category */
+ if(isset($nk[($nd+1)])){
+ $return["__CATEGORY__"][$nk[($nd+1)]] = $nk[($nd+1)];
+ }
+
+ /* Create back entry */
+ if($nd !=0 ){
+ $return['__BACK__'] = $nk[($nd-1)];
+ }else{
+ $return['__BACK__'] = "..";
+ }
+
+ }elseif($na==""){
+ $return["__CATEGORY__"][$nk[0]] = $nk[0];
+ }
+
+
+
+ }
+
+ /* If back entry isn't set, set it to false (none) or to ..(base)*/
+ if($return["__BACK__"] == false){
+ $return['__BACK__'] = "..";
+ if($nd == 0 ){
+ $return['__BACK__'] = false;
+ }
+ }
+
+ foreach($this->gosaMemberApplication as $app){
+ if($app['Cat'] == $this->curCatDir){
+ $return["__ENTRY__"][$app['Pri']][$app['App']] = array("name"=>$app['App'],"prio" => $app['Pri']) ;
+ }
+ }
+
+
+ ksort($return["__ENTRY__"]);
+ /* recreate array index */
+ $tmp = array();
+ foreach($return["__ENTRY__"] as $prio => $entries){
+ ksort($entries);
+ foreach($entries as $entry){
+ $tmp[$entry['name']] = $entry;
+ }
+ }
+
+ /* Assign sorted entries */
+ $return['__ENTRY__'] = ($tmp);
+
+ /* Return this all ..*/
+ return($return);
+ }
+
function addApp($cn)
{
- $this->gosaMemberApplication[]= $cn;
- $this->gosaMemberApplication= array_unique($this->gosaMemberApplication);
+ $this->gosaMemberApplication[$cn."|".$this->curCatDir]= array("App"=>$cn,"Cat"=>$this->curCatDir,"Pri"=>"100");
+ $this->used_apps[$cn]=$cn;
$this->is_modified= TRUE;
}
-
function removeApp($cn)
{
$temp= array();