X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_glpiAttachmentPool.inc;h=0d1ae07ff97a01880517908c81bf59d62d6ca887;hb=e1caeaac864e3118ac900e3fc2d697bd88da1326;hp=eebbb9e881b37a56eca00dec645e08deeb7af20c;hpb=f93cfbd35e60ed3d0a3eb4c9076a2fbce95f5325;p=gosa.git diff --git a/plugins/admin/systems/class_glpiAttachmentPool.inc b/plugins/admin/systems/class_glpiAttachmentPool.inc index eebbb9e88..0d1ae07ff 100644 --- a/plugins/admin/systems/class_glpiAttachmentPool.inc +++ b/plugins/admin/systems/class_glpiAttachmentPool.inc @@ -9,13 +9,13 @@ class glpiAttachmentPool extends plugin /* attribute list for save action */ var $ignore_account = TRUE; - var $attributes = array("name","comment","mime","filename"); + var $attributes = array("name","comment","mime","filename","date_mod"); var $objectclasses = array("whatever"); var $parent; var $edit = false; var $entry = false; - + var $date_mod =""; var $name =""; var $comment =""; var $mime =""; @@ -23,12 +23,16 @@ class glpiAttachmentPool extends plugin var $Selected = array(); + var $delAttach= ""; + function glpiAttachmentPool ($config, $dn= NULL,$used=NULL) { plugin::plugin ($config, $dn); if(!isset($_SESSION['GlpiAttachmentFilter'])){ $_SESSION['GlpiAttachmentFilter'] = array("filter"=>"*"); } + + /* Assign used attributes */ if($used != NULL){ $this->Selected = $used; } @@ -37,44 +41,84 @@ class glpiAttachmentPool extends plugin function execute() { plugin::execute(); - $attach = $this->parent->handle->getAttachments(); + $attach = $this->parent->handle->getAttachments(); /* Fill templating stuff */ - $smarty= get_smarty(); - $display= ""; - $only_once = true; + $smarty = get_smarty(); + $display = ""; + $only_once = true; + + /* walk through all posted objects */ foreach($_POST as $name => $value){ + /* Open dialog to create a new entry */ if(preg_match("/new_attach/",$name)){ $this->edit = true; $this->entry=array(); + + /* Set default values */ foreach($this->attributes as $attr) { $this->$attr = ""; $this->entry[$attr]=""; } } + /* Remove attach*/ if((preg_match("/^delAttach_/",$name))&&($only_once)){ $only_once = false; $str = preg_replace("/^delAttach_/","",$name); $str = base64_decode(preg_replace("/_.*$/","",$str)); - $this->parent->handle->deleteAttachment($str); + + /* remove attach from db */ + $this->delAttach = $str; + $smarty->assign("warning", sprintf(_("You're about to delete the glpi attachment component '%s'."), $attach[$str]['name'])); + return($smarty->fetch(get_template_path('remove_glpi.tpl', TRUE))); } - + + /* Start editing entry */ if((preg_match("/^editAttach_/",$name))&&($only_once)){ $only_once = false; $str = preg_replace("/^editAttach_/","",$name); $str = base64_decode(preg_replace("/_.*$/","",$str)); - - $this->edit = true; + + /* Check if we have an attachment with given ID */ foreach($attach as $att ){ - if($att['ID'] == $str ){ - $this->entry = $att; + + /* Entry was found, show dialog */ + $this->edit = true; + $this->entry = $att; + + foreach($att as $name => $value){ + $this->$name = $value; + } } } } } + if((isset($_POST['delete_glpi_confirm']))&&(isset($attach[$this->delAttach]))){ + if($this->parent->handle->is_attachmentUsed($this->delAttach)){ + $tmp = $this->parent->handle->is_attachmentUsed($this->delAttach); + + $names = ""; + foreach($tmp as $name){ + $names .= ", ".$name; + } + $names = preg_replace("/^, /","",$names); + $names = trim($names); + if(count($tmp) == 3){ + $names .= " ..."; + } + print_red(sprintf(_("You can't delete this attachment, it is still in use by these system(s) '%s'"),$names)); + + }else{ + $this->parent->handle->deleteAttachment($this->delAttach); + @unlink(CONFIG_DIR."/glpi/".$this->filename); + $attach = $this->parent->handle->getAttachments(); + } + } + + /* Someone tries to upload a file */ if(($this->edit == true)&&(isset($_POST['upload']))){ if(!isset($_FILES['filename'])){ print_red(_("There is no valid file uploaded.")); @@ -86,28 +130,34 @@ class glpiAttachmentPool extends plugin if($FILE['error']!=0) { print_red(_("Upload wasn't successfull.")); }else{ - if(!is_dir("/etc/gosa/glpi/")){ - print_red(_("Missing directory '/etc/gosa/glpi/' to store glpi uploads.")); + if(!is_dir(CONFIG_DIR."/glpi/")){ + print_red(sprintf(_("Missing directory '%s/glpi/' to store glpi uploads."),CONFIG_DIR)); }else{ - $filen = "/etc/gosa/glpi/".$FILE['name']; - $fh = fopen($filen,"w"); - if(!$fh){ - print_red(sprintf(_("Can't create file '%s'."),$filen)); + $filen = CONFIG_DIR."/glpi/".$FILE['name']; + if(file_exists($filen)){ + print_red(_("There is already a file with the same name uploaded.")); }else{ - $str = file_get_contents($FILE['tmp_name']); - fwrite($fh,$str,strlen($str)); - fclose($fh); - $this->mime = $FILE['type']; - $this->filename = $FILE['name']; - } + $fh = fopen($filen,"w"); + if(!$fh){ + print_red(sprintf(_("Can't create file '%s'."),$filen)); + }else{ + $str = file_get_contents($FILE['tmp_name']); + fwrite($fh,$str,strlen($str)); + fclose($fh); + $this->mime = $FILE['type']; + $this->filename = $FILE['name']; + } + } // File already exists } } // Check if any error occured } // check if valid filename was uploaded } // ende check if file was uploaded }// upload post + /* save attachment*/ if(($this->edit == true)&&(isset($_POST['SaveAttachment']))){ if(count($this->check())==0){ + $this->date_mod = date("Y-m-d H:i:s"); $this->save_entry(); $this->edit= false; $this->entry = array(); @@ -119,17 +169,20 @@ class glpiAttachmentPool extends plugin } } + /* Abort editing/adding attachment*/ if(($this->edit == true)&&(isset($_POST['CancelAttachment']))){ $this->edit = false; $this->entry = array(); } + /* If edit == true, we have to show a dialog to edit or add an attach + */ if($this->edit == true){ foreach($this->attributes as $attr){ - $smarty->assign($attr,$this->$attr); + $smarty->assign($attr,htmlentities(utf8_decode($this->$attr))); } if(!empty($this->filename)){ - if(is_readable("/etc/gosa/glpi/".$this->filename)){ + if(is_readable(CONFIG_DIR."/glpi/".$this->filename)){ $status =_("File is available."); }else{ $status =_("File is not readable, possibly the file is missing."); @@ -141,10 +194,7 @@ class glpiAttachmentPool extends plugin return($smarty->fetch(get_template_path('glpiAttachmentEdit.tpl', TRUE))); } - - - - + /* Create list with checkboxes to select / deselect some attachents */ $divlist = new divlist("Attachment"); $divlist->SetHeader(array( array("string" => " ", "attach" => "style='text-align:center;width:20px;'"), @@ -158,64 +208,69 @@ class glpiAttachmentPool extends plugin $editdel = ""; $editdel.= ""; + /* Add all given attachments to divlist + */ foreach($attach as $entry){ - - if((empty($entry['name']))||(empty($entry['comment']))){ - - if(empty($entry['name'])){ - $str1 = ""._("empty").""; - }else{ - $str1 = $entry['name']; - } - - if(!empty($entry['comment'])){ - $str1.= " [".$entry['comment']."]"; - } - }else{ - $str1 = $entry['name']." [".$entry['comment']."]"; - } - $edit = str_replace("%s",base64_encode($entry['ID']),$editdel); - $str2 = $entry['mime']." "; + /* Create display name*/ + if((empty($entry['name']))||(empty($entry['comment']))){ - $chkbox = "". - ""; - - if(in_array($entry['ID'],$this->Selected)){ - $chkbox = preg_replace("/%CHECKED%/"," checked ",$chkbox); - }else { - $chkbox = preg_replace("/%CHECKED%/"," ",$chkbox); + /* In glpi it is possible to add entries without name + so i've added this block + */ + if(empty($entry['name'])){ + $str1 = ""._("empty").""; + }else{ + $str1 = $entry['name']; } - $chkbox = preg_replace("/%s/",$entry['ID'],$chkbox); - $divlist->AddEntry(array( - array("string" => $chkbox, - "attach" => "style='text-align:center;width:20px;'"), - array("string"=> $str1), - array("string"=> $str2,"attach"=>"style='width:200px;'"), - array("string"=> $edit ,"attach" => "style='width:60px;border-right:0px;text-align:right;'") - )); - + + if(!empty($entry['comment'])){ + $str1.= " [".$entry['comment']."]"; + } + }else{ + /* Both attributes given */ + $str1 = $entry['name']." [".$entry['comment']."]"; + } + + $edit = str_replace("%s",base64_encode($entry['ID']),$editdel); + $str2 = $entry['mime']." "; + + $chkbox = "". + ""; + + if(in_array($entry['ID'],$this->Selected)){ + $chkbox = preg_replace("/%CHECKED%/"," checked ",$chkbox); + }else { + $chkbox = preg_replace("/%CHECKED%/"," ",$chkbox); + } + $chkbox = preg_replace("/%s/",$entry['ID'],$chkbox); + $divlist->AddEntry(array( + array("string" => $chkbox, + "attach" => "style='text-align:center;width:20px;'"), + array("string"=> $str1), + array("string"=> $str2,"attach"=>"style='width:200px;'"), + array("string"=> $edit ,"attach" => "style='width:60px;border-right:0px;text-align:right;'") + )); + } $listhead = "
". - "  ". - "
"; - + "  ". + ""; $smarty->assign("attachments", $divlist->DrawList()); $smarty->assign("attachmenthead", $listhead); $smarty->assign("search_image", get_template_path('images/search.png')); $smarty->assign("searchu_image", get_template_path('images/search_user.png')); $smarty->assign("tree_image", get_template_path('images/tree.png')); - $smarty->assign("infoimage", get_template_path('images/info.png')); - $smarty->assign("launchimage", get_template_path('images/launch.png')); + $smarty->assign("infoimage", get_template_path('images/info_small.png')); + $smarty->assign("launchimage", get_template_path('images/small_filter.png')); $smarty->assign("apply", apply_filter()); $smarty->assign("alphabet", generate_alphabet()); $smarty->assign("attachment_regex", $_SESSION['GlpiAttachmentFilter']['filter']); - $display.= $smarty->fetch(get_template_path('glpiAttachmentPool.tpl', TRUE)); return($display); } @@ -225,6 +280,7 @@ class glpiAttachmentPool extends plugin return($this->Selected); } + /* Adds new or saves edited entries */ function save_entry() { if($this->edit){ @@ -248,6 +304,11 @@ class glpiAttachmentPool extends plugin } } + /* Checkboxes are only posted, if they are checked + * To check if it was deselected, we check if wasOnPage + * was posted with given name, so we can deselect this entry + */ + foreach($_POST as $name => $value){ if(preg_match("/wasOnPage_/",$name)){ $id=preg_replace("/wasOnPage_/","",$name); @@ -262,10 +323,33 @@ class glpiAttachmentPool extends plugin } } + /* Simple check */ function check() { - $message = array(); + /* Call common method to give check the hook */ + $message= plugin::check(); + if($this->edit){ + + /* check if given name is already in use */ + $att = $this->parent->handle->getAttachments(); + $ok = true; + $this->name=trim($this->name); + + foreach($att as $val){ + if(!isset($this->entry['ID'])){ + if($val['name'] == $this->name){ + $ok = false; + } + }else{ + if(($val['name'] == $this->name)&&($this->entry['ID'] != $val['ID'])){ + $ok = false; + } + } + } + if(!$ok){ + $message[] = _("This name is already in use."); + } if(empty($this->name)){ $message[] = _("Please specify a valid name for this attachment."); }