From aad512d7f4465628a9ad3295d4003d616fb30503 Mon Sep 17 00:00:00 2001 From: hickert Date: Tue, 20 May 2008 13:18:12 +0000 Subject: [PATCH] Added import function to deployment status. git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@10967 594d385d-05f5-0310-b6e9-bd551577e9d8 --- .../addons/goto/class_goto_import_file.inc | 161 ++++++++++++++++++ .../goto/addons/goto/class_gotomasses.inc | 14 ++ .../goto/addons/goto/goto_import_file.tpl | 77 +++++++++ 3 files changed, 252 insertions(+) create mode 100644 gosa-plugins/goto/addons/goto/class_goto_import_file.inc create mode 100644 gosa-plugins/goto/addons/goto/goto_import_file.tpl diff --git a/gosa-plugins/goto/addons/goto/class_goto_import_file.inc b/gosa-plugins/goto/addons/goto/class_goto_import_file.inc new file mode 100644 index 000000000..45f164fe2 --- /dev/null +++ b/gosa-plugins/goto/addons/goto/class_goto_import_file.inc @@ -0,0 +1,161 @@ +parent = $parent; + $this->daemon_events = DaemonEvent::get_event_types( SYSTEM_EVENT); + + $this->csv_fields = array( + "0" => "MAC", "1" => "HEADER", "2" => "OGROUP", + "3" => "BASE", "4" => "FQDN", "5" => "IP", "6" => "DHCP"); + } + + + private function parse_csv($str) + { + + /* Some file checks + */ + $lines = split("\n",$str); + if(empty($str) || !count($lines)){ + msg_dialog::display(_("Import"),_("Could not import file, it seems to be empty."),ERROR_DIALOG); + return; + } + + /* Reset current events + */ + $this->events = array(); + + /* Parse each line of the given file + */ + foreach($lines as $line){ + + // Skip empty lines. + if(empty($line)) continue; + + /* Load values from file + */ + $fields = split(";",$line); + $event = array(); + foreach($this->csv_fields as $key => $val) { + $event[$val] = ""; + if(isset($fields[$key])){ + $event[$val] = $fields[$key]; + } + } + $this->events[] = $event; + } + $this->check_fields(); + } + + + public function execute() + { + /* Import file + */ + if(isset($_POST['import']) && isset($_FILES['file'])) { + if(isset($_FILES['file']['tmp_name'])){ + $str = file_get_contents($_FILES['file']['tmp_name']); + $this->parse_csv($str); + } + } + + /* Import started + */ + $confirmed = FALSE; + foreach($_POST as $name => $value){ + if(preg_match("/^MSG_OK/",$name)){ + $confirmed = TRUE; + } + } + if(isset($_POST['start_import']) || $confirmed){ + $error = FALSE; + if(!$confirmed){ + foreach($this->events as $event){ + if(!empty($event['ERROR'])){ + $error = TRUE; + break; + } + } + if($error){ + msg_dialog::display(_("Import"), + _("Entries marked as having errors will be skippen, do you still want to proceed?"),CONFIRM_DIALOG); + } + } + if(!$error){ + + $success = 0; + $fail = 0; + + foreach($this->events as $key => $event){ + if(!empty($event['ERROR'])){ + $fail ++; + continue; + } + $class= $this->daemon_events['QUEUED'][$event['HEADER']]; + $object = new $class($this->config); + $object->set_type(TRIGGERED_EVENT); + $object->add_targets(array($event['MAC'])); + if(!$this->parent->o_queue->append($object)){ + msg_dialog::display(_("Service infrastructure"),msgPool::siError($this->parent->o_queue->get_error()),ERROR_DIALOG); + $fail ++; + }else{ + unset($this->events[$key]); + $success ++; + } + } + msg_dialog::display(_("Import"),sprintf(_("Import complete: %s events successfully send, %s failed."),$success,$fail),INFO_DIALOG); + } + } + + + /* Prepare output + */ + $evts = $this->events; + foreach($this->events as $id => $evt){ + foreach($evt as $key => $val){ + if(in_array($key,$this->csv_fields)){ + $evts[$id][$key] = "".strip_tags($val).""; + } + } + } + + $smarty = get_smarty(); + $smarty->assign("info",$evts); + $smarty->assign("count",count($evts)); + return($smarty->fetch(get_template_path('goto_import_file.tpl', TRUE))); + } + + + public function check() + { + $message = plugin::check(); + $this->check_fields(); + return($message); + } + + + private function check_fields() + { + foreach($this->events as $key => $event){ + $this->events[$key]['ERROR'] = ""; + if(empty($event['MAC']) || !tests::is_mac($event['MAC'])){ + $this->events[$key]['ERROR'] .= msgPool::invalid(_("Mac")).", "; + } + if(empty($event['HEADER']) || !isset($this->daemon_events['QUEUED'][$event['HEADER']])){ + $this->events[$key]['ERROR'] .= msgPool::invalid(_("Event")).", "; + } + $this->events[$key]['ERROR'] = trim($this->events[$key]['ERROR'],", "); + } + } +} + +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/gosa-plugins/goto/addons/goto/class_gotomasses.inc b/gosa-plugins/goto/addons/goto/class_gotomasses.inc index 316526699..00d46d86a 100644 --- a/gosa-plugins/goto/addons/goto/class_gotomasses.inc +++ b/gosa-plugins/goto/addons/goto/class_gotomasses.inc @@ -123,6 +123,19 @@ class gotomasses extends plugin } + /************ + * Import CSV file + ************/ + + if($s_action == "import_file"){ + $this->dialog = new goto_import_file($this->config,$this); + } + + if(isset($_POST['import_abort'])){ + $this->dialog = FALSE; + } + + /************ * Handle Priority modifications ************/ @@ -331,6 +344,7 @@ class gotomasses extends plugin } if($this->acl_is_removeable()){ $s.= "..|---|\n"; + $s.= "..| "._("Import")."|import_file\n"; $s.= "..| "._("Remove")."|remove_multiple\n"; } if(preg_match("/w/",$this->getacl(""))){ diff --git a/gosa-plugins/goto/addons/goto/goto_import_file.tpl b/gosa-plugins/goto/addons/goto/goto_import_file.tpl new file mode 100644 index 000000000..62d51b03e --- /dev/null +++ b/gosa-plugins/goto/addons/goto/goto_import_file.tpl @@ -0,0 +1,77 @@ +

{t}Import jobs{/t}

+ + + + + + + {if $count} + + + + + {/if} +
+ {t}Select the file to import{/t} + + + +
{t}Start import{/t} + +
+ + {if $count} +

 

+
+
+
+ + + + + + + + + + + {foreach from=$info item=item key=key} + {if $item.ERROR} + + + + + + + + + + + + + {else} + {if ($key % 2)} + + {else} + + {/if} + + + + + + + + + + {/if} + {/foreach} +
{t}Mac{/t}{t}Event{/t}{t}Object group{/t}{t}Base{/t}{t}FQDN{/t}{t}IP{/t}{t}DHCP{/t}
{$item.MAC}{$item.HEADER}{$item.OGROUP}{$item.BASE}{$item.FQDN}{$item.IP}{$item.DHCP}
{$item.ERROR}
{$item.MAC}{$item.HEADER}{$item.OGROUP}{$item.BASE}{$item.FQDN}{$item.IP}{$item.DHCP}
+
+ {/if} +
+

+
+ +
+
-- 2.30.2