From 371d3ca152b0bfe86daa568efe2f17afc68d8eb1 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 29 Nov 2016 18:24:30 +0100 Subject: [PATCH 001/178] change classname add autoloader for install and fields/ folder --- hook.php | 6 +++-- inc/fields.class.php | 16 ++++++------- ...ld.class.php => checkboxesfield.class.php} | 2 +- ...te-field.class.php => datefield.class.php} | 2 +- ...ield.class.php => datetimefield.class.php} | 2 +- ...d.class.php => descriptionfield.class.php} | 2 +- ...ield.class.php => dropdownfield.class.php} | 2 +- ...l-field.class.php => emailfield.class.php} | 2 +- ...le-field.class.php => filefield.class.php} | 2 +- ...t-field.class.php => floatfield.class.php} | 2 +- ...ld.class.php => glpiselectfield.class.php} | 3 +-- ...-field.class.php => hiddenfield.class.php} | 2 +- ...field.class.php => integerfield.class.php} | 2 +- .../{ip-field.class.php => ipfield.class.php} | 2 +- ...ld.class.php => ldapselectfield.class.php} | 4 +--- ...d.class.php => multiselectfield.class.php} | 4 +--- ...-field.class.php => radiosfield.class.php} | 2 +- ...-field.class.php => selectfield.class.php} | 2 +- ...tag-field.class.php => tagfield.class.php} | 4 +--- ...ield.class.php => textareafield.class.php} | 2 +- ...xt-field.class.php => textfield.class.php} | 2 +- ...field.class.php => urgencyfield.class.php} | 2 +- inc/form.class.php | 2 +- inc/question.class.php | 2 +- setup.php | 24 +++++++++++++++++++ 25 files changed, 57 insertions(+), 40 deletions(-) rename inc/fields/{checkboxes-field.class.php => checkboxesfield.class.php} (98%) rename inc/fields/{date-field.class.php => datefield.class.php} (97%) rename inc/fields/{datetime-field.class.php => datetimefield.class.php} (97%) rename inc/fields/{description-field.class.php => descriptionfield.class.php} (93%) rename inc/fields/{dropdown-field.class.php => dropdownfield.class.php} (96%) rename inc/fields/{email-field.class.php => emailfield.class.php} (96%) rename inc/fields/{file-field.class.php => filefield.class.php} (96%) rename inc/fields/{float-field.class.php => floatfield.class.php} (97%) rename inc/fields/{glpiselect-field.class.php => glpiselectfield.class.php} (88%) rename inc/fields/{hidden-field.class.php => hiddenfield.class.php} (94%) rename inc/fields/{integer-field.class.php => integerfield.class.php} (97%) rename inc/fields/{ip-field.class.php => ipfield.class.php} (94%) rename inc/fields/{ldapselect-field.class.php => ldapselectfield.class.php} (97%) rename inc/fields/{multiselect-field.class.php => multiselectfield.class.php} (97%) rename inc/fields/{radios-field.class.php => radiosfield.class.php} (97%) rename inc/fields/{select-field.class.php => selectfield.class.php} (97%) rename inc/fields/{tag-field.class.php => tagfield.class.php} (97%) rename inc/fields/{textarea-field.class.php => textareafield.class.php} (97%) rename inc/fields/{text-field.class.php => textfield.class.php} (96%) rename inc/fields/{urgency-field.class.php => urgencyfield.class.php} (97%) diff --git a/hook.php b/hook.php index dafa13b85..564b57fff 100644 --- a/hook.php +++ b/hook.php @@ -9,10 +9,12 @@ function plugin_formcreator_install() $version = plugin_version_formcreator(); $migration = new Migration($version['version']); + spl_autoload_register('plugin_formcreator_autoload'); + // Parse inc directory foreach (glob(dirname(__FILE__).'/inc/*') as $filepath) { // Load *.class.php files and get the class name - if (preg_match("/inc.(.+)\.class.php$/", $filepath, $matches)) { + if (preg_match("#inc/(.+)\.class.php$#", $filepath, $matches)) { $classname = 'PluginFormcreator' . ucfirst($matches[1]); include_once($filepath); // If the install method exists, load it @@ -36,7 +38,7 @@ function plugin_formcreator_uninstall() // Parse inc directory foreach (glob(dirname(__FILE__).'/inc/*') as $filepath) { // Load *.class.php files and get the class name - if (preg_match("/inc.(.+)\.class.php/", $filepath, $matches)) { + if (preg_match("#inc/(.+)\.class.php$#", $filepath, $matches)) { $classname = 'PluginFormcreator' . ucfirst($matches[1]); include_once($filepath); // If the install method exists, load it diff --git a/inc/fields.class.php b/inc/fields.class.php index c8839054b..6d2cc2dad 100644 --- a/inc/fields.class.php +++ b/inc/fields.class.php @@ -11,11 +11,9 @@ public static function getTypes() { $tab_field_types = array(); - foreach (glob(dirname(__FILE__).'/fields/*-field.class.php') as $class_file) { - preg_match("/fields.(.+)-field\.class.php/", $class_file, $matches); - $classname = $matches[1].'Field'; - - include_once($class_file); + foreach (glob(dirname(__FILE__).'/fields/*field.class.php') as $class_file) { + preg_match("#fields/(.+)field\.class.php$#", $class_file, $matches); + $classname = 'PluginFormcreator' . ucfirst($matches[1]) . 'Field'; if(class_exists($classname)) { $tab_field_types[strtolower($matches[1])] = $class_file; @@ -42,7 +40,7 @@ public static function getNames() // Get localized names of field types foreach ($tab_field_types as $field_type => $class_file) { - $classname = $field_type.'Field'; + $classname = 'PluginFormcreator' . $field_type . 'Field'; if ($classname == 'tagField' &&(!$plugin->isInstalled('tag') || !$plugin->isActivated('tag'))) { continue; @@ -69,7 +67,7 @@ public static function getValue($field, $value) if(is_file($class_file)) { include_once ($class_file); - $classname = $field['fieldtype'].'Field'; + $classname = 'PluginFormcreator'.ucfirst($field['fieldtype']).'Field'; if(class_exists($classname)) { $obj = new $classname($field, $value); return $obj->getAnswer(); @@ -86,7 +84,7 @@ public static function printAllTabFieldsForJS() // Get field types preference for JS foreach ($tab_field_types as $field_type => $class_file) { - $classname = $field_type.'Field'; + $classname = 'PluginFormcreator' . $field_type.'Field'; if(method_exists($classname, 'getJSFields')) { echo PHP_EOL.' '.$classname::getJSFields(); @@ -100,7 +98,7 @@ public static function showField($field, $datas = null, $edit = true) $tab_field_types = self::getTypes(); if(array_key_exists($field['fieldtype'], $tab_field_types)) { - $fieldClass = $field['fieldtype'].'Field'; + $fieldClass = 'PluginFormcreator'.ucfirst($field['fieldtype']).'Field'; $plugin = new Plugin(); if ($fieldClass == 'tagField' &&(!$plugin->isInstalled('tag') || !$plugin->isActivated('tag'))) { diff --git a/inc/fields/checkboxes-field.class.php b/inc/fields/checkboxesfield.class.php similarity index 98% rename from inc/fields/checkboxes-field.class.php rename to inc/fields/checkboxesfield.class.php index b896ac83e..e2b6f8bcf 100644 --- a/inc/fields/checkboxes-field.class.php +++ b/inc/fields/checkboxesfield.class.php @@ -1,5 +1,5 @@ isInstalled('formcreator') && $plugin->isActivated('formcreator')) { + spl_autoload_register('plugin_formcreator_autoload'); + // Redirect to helpdesk replacement if (strpos($_SERVER['REQUEST_URI'], "front/helpdesk.public.php") !== false) { if (!isset($_POST['newprofile']) && !isset($_GET['active_entity'])) { @@ -272,3 +274,25 @@ function plugin_formcreator_getFromDBByField(CommonDBTM $item, $field = "", $val return false; } } + +/** + * Autoloader + * @param unknown $classname + */ +function plugin_formcreator_autoload($classname) { + if (strpos($classname, 'PluginFormcreator') === 0) { + // Search first for field clases + $filename = __DIR__ . '/inc/fields/' . strtolower(str_replace('PluginFormcreator', '', $classname)) . '.class.php'; + if (is_readable($filename) && is_file($filename)) { + include_once($filename); + return true; + } + + // useful only for installer GLPi autoloader already handles inc/ folder + $filename = __DIR__ . '/inc/' . strtolower(str_replace('PluginFormcreator', '', $classname)). '.class.php'; + if (is_readable($filename) && is_file($filename)) { + include_once($filename); + return true; + } + } +} \ No newline at end of file From 7d6003df4adbd080c439e3fbcbc0bef92ffe29ef Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 29 Nov 2016 20:27:22 +0100 Subject: [PATCH 002/178] capitalize first char for computed classnames --- inc/fields.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/fields.class.php b/inc/fields.class.php index 6d2cc2dad..8133a6dd6 100644 --- a/inc/fields.class.php +++ b/inc/fields.class.php @@ -40,7 +40,7 @@ public static function getNames() // Get localized names of field types foreach ($tab_field_types as $field_type => $class_file) { - $classname = 'PluginFormcreator' . $field_type . 'Field'; + $classname = 'PluginFormcreator' . ucfirst($field_type) . 'Field'; if ($classname == 'tagField' &&(!$plugin->isInstalled('tag') || !$plugin->isActivated('tag'))) { continue; @@ -84,7 +84,7 @@ public static function printAllTabFieldsForJS() // Get field types preference for JS foreach ($tab_field_types as $field_type => $class_file) { - $classname = 'PluginFormcreator' . $field_type.'Field'; + $classname = 'PluginFormcreator' . ucfirst($field_type) . 'Field'; if(method_exists($classname, 'getJSFields')) { echo PHP_EOL.' '.$classname::getJSFields(); From e36c732ada795c787e4d163bf63b6b4a9bc65ace Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 29 Nov 2016 20:50:49 +0100 Subject: [PATCH 003/178] update tests --- tests/0005_Unit/CheckboxFieldTest.php | 2 +- tests/0005_Unit/FloatFieldTest.php | 2 +- tests/0005_Unit/IntegerFieldTest.php | 2 +- tests/0005_Unit/MultiselectFieldTest.php | 2 +- tests/0005_Unit/SelectFieldTest.php | 2 +- tests/0010_Integration/UrgencyTest.php | 7 ++++--- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/0005_Unit/CheckboxFieldTest.php b/tests/0005_Unit/CheckboxFieldTest.php index 34f159aaf..9c899242b 100644 --- a/tests/0005_Unit/CheckboxFieldTest.php +++ b/tests/0005_Unit/CheckboxFieldTest.php @@ -101,7 +101,7 @@ public function provider() { ); foreach($dataset as &$data) { - $data['field'] = new checkboxesField($data['fields'], $data['data']); + $data['field'] = new PluginFormcreatorCheckboxesField($data['fields'], $data['data']); } return $dataset; diff --git a/tests/0005_Unit/FloatFieldTest.php b/tests/0005_Unit/FloatFieldTest.php index 391ab1bab..936b9e9e8 100644 --- a/tests/0005_Unit/FloatFieldTest.php +++ b/tests/0005_Unit/FloatFieldTest.php @@ -90,7 +90,7 @@ public function provider() { ); foreach($dataset as &$data) { - $data['field'] = new floatField($data['fields'], $data['data']); + $data['field'] = new PluginFormcreatorFloatField($data['fields'], $data['data']); } return $dataset; diff --git a/tests/0005_Unit/IntegerFieldTest.php b/tests/0005_Unit/IntegerFieldTest.php index b47b40dfa..7751e1f0f 100644 --- a/tests/0005_Unit/IntegerFieldTest.php +++ b/tests/0005_Unit/IntegerFieldTest.php @@ -107,7 +107,7 @@ public function provider() { ); foreach($dataset as &$data) { - $data['field'] = new integerField($data['fields'], $data['data']); + $data['field'] = new PluginFormcreatorIntegerField($data['fields'], $data['data']); } return $dataset; diff --git a/tests/0005_Unit/MultiselectFieldTest.php b/tests/0005_Unit/MultiselectFieldTest.php index 3e1b27655..a5693c835 100644 --- a/tests/0005_Unit/MultiselectFieldTest.php +++ b/tests/0005_Unit/MultiselectFieldTest.php @@ -92,7 +92,7 @@ public function provider() { ); foreach($dataset as &$data) { - $data['field'] = new multiSelectField($data['fields'], $data['data']); + $data['field'] = new PluginFormcreatorMultiSelectField($data['fields'], $data['data']); } return $dataset; diff --git a/tests/0005_Unit/SelectFieldTest.php b/tests/0005_Unit/SelectFieldTest.php index 8604c05b3..9a26118c6 100644 --- a/tests/0005_Unit/SelectFieldTest.php +++ b/tests/0005_Unit/SelectFieldTest.php @@ -86,7 +86,7 @@ public function provider() { ); foreach($dataset as &$data) { - $data['field'] = new selectField($data['fields'], $data['data']); + $data['field'] = new PluginFormcreatorSelectField($data['fields'], $data['data']); } return $dataset; diff --git a/tests/0010_Integration/UrgencyTest.php b/tests/0010_Integration/UrgencyTest.php index c9c6f973e..930088dc8 100644 --- a/tests/0010_Integration/UrgencyTest.php +++ b/tests/0010_Integration/UrgencyTest.php @@ -90,8 +90,9 @@ public function testInitCreateForm() { /** * @depends testInitCreateForm + * @param PluginFormcreatorForm $urgencyQuestions */ - public function testInitCreateTargetTicket($form) { + public function testInitCreateTargetTicket(PluginFormcreatorForm $form) { $urgencyQuestions = array(); $formId = $form->getID(); foreach ($this->targetTicketData as $targetData) { @@ -147,9 +148,9 @@ public function testInitCreateTargetTicket($form) { /** * @depends testInitCreateForm * @depends testInitCreateTargetTicket - * @param unknown $urgencyQuestions + * @param PluginFormcreatorForm $urgencyQuestions */ - public function testSendForm($form, $urgencyQuestions) { + public function testSendForm(PluginFormcreatorForm $form, $urgencyQuestions) { $formId = $form->getID(); $_POST = array('formcreator_form' => $form->getID()); foreach($urgencyQuestions as $question) { From 1389bc7d62601668cabc85bdb2b412bdbe4307b6 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 5 Dec 2016 09:15:57 +0100 Subject: [PATCH 004/178] saveform() should not contain frontend code (#366) --- front/form.form.php | 4 +++- inc/form.class.php | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/front/form.form.php b/front/form.form.php index ae7b7a6aa..a60945bd0 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -66,7 +66,9 @@ } // Save form - $form->saveForm(); + if (!$form->saveForm()) { + Html::back(); + } $form->update([ 'id' => $form->getID(), 'usage_count' => $form->getField('usage_count') + 1, diff --git a/inc/form.class.php b/inc/form.class.php index 85da74eb1..360e64fa6 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1113,13 +1113,13 @@ public function saveForm() } $_SESSION['formcreator']['datas'] = $datas; - Html::back(); - // Save form } else { $formanswer = new PluginFormcreatorForm_Answer(); $formanswer->saveAnswers($datas); } + + return $valid; } /** From 27c49414f832c584d66872f0c64dbc94f045060c Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 6 Dec 2016 15:57:59 +0100 Subject: [PATCH 005/178] remove useless file test --- inc/form.class.php | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 360e64fa6..2fa154ad9 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1072,16 +1072,11 @@ public function saveForm() $className = 'PluginFormcreator' . ucfirst($fields['fieldtype']) . 'Field'; $filePath = dirname(__FILE__) . '/fields/' . $fields['fieldtype'] . '-field.class.php'; - if(is_file($filePath)) { - include_once ($filePath); - if (class_exists($className)) { - $obj = new $className($fields, $datas); - if (PluginFormcreatorFields::isVisible($id, $datas) && !$obj->isValid($datas[$id])) { - $valid = false; - } + if (class_exists($className)) { + $obj = new $className($fields, $datas); + if (PluginFormcreatorFields::isVisible($id, $datas) && !$obj->isValid($datas[$id])) { + $valid = false; } - } else { - $valid = false; } } if (isset($_POST) && is_array($_POST)) { From 0b9ebafbd003808e7a79912c8c04f2344ec8b523 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 6 Dec 2016 16:11:36 +0100 Subject: [PATCH 006/178] type hinting --- tests/0010_Integration/UrgencyTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/0010_Integration/UrgencyTest.php b/tests/0010_Integration/UrgencyTest.php index 037249bfb..03833746e 100644 --- a/tests/0010_Integration/UrgencyTest.php +++ b/tests/0010_Integration/UrgencyTest.php @@ -151,7 +151,7 @@ public function testInitCreateTargetTicket(PluginFormcreatorForm $form) { * @param PluginFormcreatorForm $form * @param array $urgencyQuestions */ - public function testSendForm($form, $urgencyQuestions) { + public function testSendForm(PluginFormcreatorForm $form, $urgencyQuestions) { $formId = $form->getID(); $_POST = array('formcreator_form' => $form->getID()); foreach($urgencyQuestions as $question) { From 1d7a88be799107753ce286099f9027d7500df681 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 12 Dec 2016 11:55:29 +0100 Subject: [PATCH 007/178] Question condition rewrite (#369) * Move install and upgrade code question_conditions has its own class now * remove direct SQL * fix installation --- ajax/question.php | 18 +++-- inc/fields.class.php | 9 ++- inc/question.class.php | 107 +++-------------------------- inc/question_condition.class.php | 112 +++++++++++++++++++++++++++++++ 4 files changed, 137 insertions(+), 109 deletions(-) diff --git a/ajax/question.php b/ajax/question.php index 6f0b85192..9e9ff81a6 100644 --- a/ajax/question.php +++ b/ajax/question.php @@ -342,12 +342,18 @@ // =============================================================== // TODO : Mettre en place l'interface multi-conditions // Ci-dessous une solution temporaire qui affiche uniquement la 1ere condition - $sql = "SELECT `show_field`, `show_condition`, `show_value` - FROM glpi_plugin_formcreator_questions_conditions - WHERE `plugin_formcreator_questions_id` = $question_id - LIMIT 0, 1"; - $result = $DB->query($sql); - list($show_field, $show_condition, $show_value) = $DB->fetch_array($result); + $question_condition = new PluginFormcreatorQuestion_Condition(); + $rows = $question_condition->find("`plugin_formcreator_questions_id` = '$question_id'"); + if (count($rows) < 1) { + $show_field = ''; + $show_condition = '=='; + $show_value = ''; + } else { + $row = array_shift($rows); + $show_field = $row['show_field']; + $show_condition = $row['show_condition']; + $show_value = $row['show_value']; + } // =============================================================== $table_question = getTableForItemtype('PluginFormcreatorQuestion'); diff --git a/inc/fields.class.php b/inc/fields.class.php index c8839054b..034b16f0d 100644 --- a/inc/fields.class.php +++ b/inc/fields.class.php @@ -133,11 +133,10 @@ public static function isVisible($id, $values) if ($fields['show_rule'] == 'always') return true; // Get conditions to show or hide field - $query = "SELECT `show_logic`, `show_field`, `show_condition`, `show_value` - FROM `glpi_plugin_formcreator_questions_conditions` - WHERE `plugin_formcreator_questions_id` = ".$fields['id']; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { + $questionId = $fields['id']; + $question_condition = new PluginFormcreatorQuestion_Condition(); + $rows = $question_condition->find("`plugin_formcreator_questions_id` = '$questionId'"); + foreach ($rows as $line) { $conditions[] = array( 'multiple' => in_array($fields['fieldtype'], array('checkboxes', 'multiselect')), 'logic' => $line['show_logic'], diff --git a/inc/question.class.php b/inc/question.class.php index b293e7682..78b324066 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -532,9 +532,8 @@ protected function deserializeDefaultValue($input) { public function updateConditions($input) { global $DB; - $query = "DELETE FROM `glpi_plugin_formcreator_questions_conditions` - WHERE `plugin_formcreator_questions_id` = {$input['id']}"; - $DB->query($query); + $question_condition = new PluginFormcreatorQuestion_Condition(); + $question_condition->deleteByCriteria(array('plugin_formcreator_questions_id' => $input['id'])); if ($input['show_rule'] != 'always') { // =============================================================== @@ -543,12 +542,13 @@ public function updateConditions($input) { $value = plugin_formcreator_encode($input['show_value']); $show_field = empty($input['show_field']) ? 'NULL' : (int) $input['show_field']; $show_condition = plugin_formcreator_decode($input['show_condition']); - $query = "INSERT INTO `glpi_plugin_formcreator_questions_conditions` SET - `plugin_formcreator_questions_id` = {$input['id']}, - `show_field` = $show_field, - `show_condition` = '" . $show_condition . "', - `show_value` = '" . $value . "'"; - $DB->query($query); + $question_condition = new PluginFormcreatorQuestion_Condition(); + $question_condition->add([ + 'plugin_formcreator_questions_id' => $input['id'], + 'show_field' => $show_field, + 'show_condition' => $show_condition, + 'show_value' => $value, + ]); // =============================================================== } } @@ -789,69 +789,6 @@ public static function install(Migration $migration) ADD `show_rule` enum('always','hidden','shown') NOT NULL DEFAULT 'always'"; $DB->query($query) or die ($DB->error()); } - - // Create new table for conditionnal show of questions - $query = "CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions_conditions` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_questions_id` int(11) NOT NULL, - `show_field` int(11) DEFAULT NULL, - `show_condition` enum('==','!=','<','>','<=','>=') DEFAULT NULL, - `show_value` varchar(255) DEFAULT NULL, - `show_logic` enum('AND','OR','XOR') DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - - // Migrate date from "questions" table to "questions_conditions" table - $query = "SELECT `id`, `show_type`, `show_field`, `show_condition`, `show_value` - FROM $table"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - switch ($line['show_type']) { - case 'hide' : - $show_rule = 'hidden'; - break; - default: - $show_rule = 'always'; - } - switch ($line['show_condition']) { - case 'notequal' : - $show_condition = '!='; - break; - case 'lower' : - $show_condition = '<'; - break; - case 'greater' : - $show_condition = '>'; - break; - default: - $show_condition = '=='; - } - - $show_field = empty($line['show_field']) ? 'NULL' : $line['show_field']; - - $query_udate = "UPDATE `glpi_plugin_formcreator_questions` SET - `show_rule` = '$show_rule' - WHERE `id` = " . $line['id']; - $DB->query($query_udate) or die ($DB->error()); - - $query_udate = "INSERT INTO `glpi_plugin_formcreator_questions_conditions` SET - `plugin_formcreator_questions_id` = {$line['id']}, - `show_field` = $show_field, - `show_condition` = '$show_condition', - `show_value` = '" . Toolbox::addslashes_deep($line['show_value']) . "'"; - $DB->query($query_udate) or die ($DB->error()); - } - - // Delete old fields - $query = "ALTER TABLE `$table` - DROP `show_type`, - DROP `show_field`, - DROP `show_condition`, - DROP `show_value`;"; - $DB->query($query) or die ($DB->error()); } /** @@ -873,17 +810,6 @@ public static function install(Migration $migration) $DB->query($query_update) or die ($DB->error()); } - // Migrate "question_conditions" table - $query = "SELECT `id`, `show_value` - FROM `glpi_plugin_formcreator_questions_conditions`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `glpi_plugin_formcreator_questions_conditions` SET - `show_value` = '" . plugin_formcreator_encode($line['show_value']) . "' - WHERE `id` = " . (int) $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - /** * Add natural language search * @@ -912,21 +838,6 @@ public static function install(Migration $migration) foreach($all_questions as $questions_id => $question) { $obj->update(array('id' => $questions_id)); } - - // add uuid to questions conditions - if (!FieldExists("glpi_plugin_formcreator_questions_conditions", 'uuid', false)) { - $migration->addField("glpi_plugin_formcreator_questions_conditions", 'uuid', 'string'); - $migration->migrationOneTable("glpi_plugin_formcreator_questions_conditions"); - } - - // fill missing uuid (force update of questions, see self::prepareInputForUpdate) - $condition_obj = new PluginFormcreatorQuestion_Condition; - $all_conditions = $condition_obj->find("uuid IS NULL"); - foreach($all_conditions as $conditions_id => $condition) { - $condition_obj->update(array('id' => $conditions_id, - 'uuid' => plugin_formcreator_getUuid())); - } - } return true; diff --git a/inc/question_condition.class.php b/inc/question_condition.class.php index b870bf74b..fb576a8a0 100644 --- a/inc/question_condition.class.php +++ b/inc/question_condition.class.php @@ -48,4 +48,116 @@ public function export() { return $condition; } + public static function install(Migration $migration) + { + global $DB; + + $table = self::getTable(); + if (!TableExists($table)) { + $query = "CREATE TABLE IF NOT EXISTS `$table` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_questions_id` int(11) NOT NULL DEFAULT '0', + `show_field` int(11) NULL DEFAULT NULL, + `show_condition` enum('==','!=','<','>','<=','>=') NULL DEFAULT NULL, + `show_value` varchar(255) NULL DEFAULT NULL , + `show_logic` enum('AND','OR','XOR') NULL DEFAULT NULL, + `uuid` varchar(255) NULL DEFAULT NULL + PRIMARY KEY (`id`) + ) + ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;"; + $DB->query($query) or die ($DB->error()); + } + + // Migration 0.85-1.0 => 0.85-1.1 + $question_table = 'glpi_plugin_formcreator_questions'; + if (FieldExists($question_table, 'show_type', false)) { + // Migrate date from "questions" table to "questions_conditions" table + $query = "SELECT `id`, `show_type`, `show_field`, `show_condition`, `show_value` + FROM $question_table"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + switch ($line['show_type']) { + case 'hide' : + $show_rule = 'hidden'; + break; + default: + $show_rule = 'always'; + } + switch ($line['show_condition']) { + case 'notequal' : + $show_condition = '!='; + break; + case 'lower' : + $show_condition = '<'; + break; + case 'greater' : + $show_condition = '>'; + break; + default: + $show_condition = '=='; + } + + $show_field = empty($line['show_field']) ? 'NULL' : $line['show_field']; + + $query_udate = "UPDATE `$question_table` SET + `show_rule` = '$show_rule' + WHERE `id` = " . $line['id']; + $DB->query($query_udate) or die ($DB->error()); + + $query_udate = "INSERT INTO `$table` SET + `plugin_formcreator_questions_id` = {$line['id']}, + `show_field` = $show_field, + `show_condition` = '$show_condition', + `show_value` = '" . Toolbox::addslashes_deep($line['show_value']) . "'"; + $DB->query($query_udate) or die ($DB->error()); + } + + // Delete old fields + $query = "ALTER TABLE `$table` + DROP `show_type`, + DROP `show_field`, + DROP `show_condition`, + DROP `show_value`;"; + $DB->query($query) or die ($DB->error()); + } + + // Migrate "question_conditions" table + $query = "SELECT `id`, `show_value` + FROM `$table`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `$table` SET + `show_value` = '" . plugin_formcreator_encode($line['show_value']) . "' + WHERE `id` = " . $line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + // add uuid to questions conditions + if (!FieldExists($table, 'uuid', false)) { + $migration->addField($table, 'uuid', 'string'); + $migration->migrationOneTable($table); + } + + // fill missing uuid (force update of questions, see self::prepareInputForUpdate) + $condition_obj = new self(); + $all_conditions = $condition_obj->find("uuid IS NULL"); + foreach($all_conditions as $conditions_id => $condition) { + $condition_obj->update(array('id' => $conditions_id, + 'uuid' => plugin_formcreator_getUuid())); + } + + return true; + } + + public static function uninstall() + { + global $DB; + + $table = self::getTable(); + $query = "DROP TABLE IF EXISTS `$table`"; + $DB->query($query) or die($DB->error()); + + return true; + } + } \ No newline at end of file From 843445e7ec4cf2355a970b6e59ca9004eff5a59e Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Mon, 12 Dec 2016 16:13:09 +0100 Subject: [PATCH 008/178] display form answers in forms admin --- hook.php | 30 +++++++- inc/form.class.php | 1 + inc/form_answer.class.php | 158 ++++++++++++++++++++++++++------------ 3 files changed, 141 insertions(+), 48 deletions(-) diff --git a/hook.php b/hook.php index a0513e49e..d43e1dfce 100644 --- a/hook.php +++ b/hook.php @@ -121,7 +121,13 @@ function plugin_formcreator_addDefaultWhere($itemtype) break; case "PluginFormcreatorForm_Answer" : - $condition = plugin_formcreator_getCondition($itemtype); + if (isset($_SESSION['formcreator']['form_search_answers']) + && $_SESSION['formcreator']['form_search_answers']) { + $condition = "`$table`.`".PluginFormcreatorForm_Answer::$items_id."` = ". + $_SESSION['formcreator']['form_search_answers']; + } else { + $condition = plugin_formcreator_getCondition($itemtype); + } break; } return $condition; @@ -253,3 +259,25 @@ function plugin_formcreator_giveItem($itemtype, $ID, $data, $num) { return ""; } + + +function plugin_formcreator_dynamicReport($params) { + switch ($params['item_type']) { + case "PluginFormcreatorForm_Answer"; + if ($url = parse_url($_SERVER['HTTP_REFERER'])) { + if (strpos($url['path'], + Toolbox::getItemTypeFormURL("PluginFormcreatorForm")) !== false) { + parse_str($url['query'], $query); + if (isset($query['id'])) { + $item = new PluginFormcreatorForm; + $item->getFromDB($query['id']); + PluginFormcreatorForm_Answer::showForForm($item, $params); + return true; + } + } + } + break; + } + + return false; +} \ No newline at end of file diff --git a/inc/form.class.php b/inc/form.class.php index aa45e7ba9..545270e33 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -493,6 +493,7 @@ public function defineTabs($options=array()) $this->addStandardTab('PluginFormcreatorForm_Profile', $ong, $options); $this->addStandardTab('PluginFormcreatorTarget', $ong, $options); $this->addStandardTab(__CLASS__, $ong, $options); + $this->addStandardTab('PluginFormcreatorForm_Answer', $ong, $options); return $ong; } diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index aceb869c9..ca3743fe5 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -8,6 +8,8 @@ class PluginFormcreatorForm_Answer extends CommonDBChild static public $itemtype = "PluginFormcreatorForm"; static public $items_id = "plugin_formcreator_forms_id"; + const SOPTION_ANSWER = 900000; + /** * Check if current user have the right to create and modify requests * @@ -46,58 +48,90 @@ public static function getTypeName($nb = 0) */ public function getSearchOptions() { - $tab = array( - '1' => array( - 'table' => self::getTable(), - 'field' => 'status', - 'name' => _n('Status', 'Statuses', 1), - 'searchtype' => array('equals', 'notequals'), - 'datatype' => 'specific', - 'massiveaction' => false, - ), - '2' => array( - 'table' => self::getTable(), - 'field' => 'id', - 'name' => __('ID'), - 'searchtype' => 'contains', - 'datatype' => 'itemlink', - 'massiveaction' => false, - ), - '3' => array( + $tab = []; + + $display_for_form = isset($_SESSION['formcreator']['form_search_answers']) + && $_SESSION['formcreator']['form_search_answers']; + + $tab['1'] = [ + 'table' => self::getTable(), + 'field' => 'status', + 'name' => _n('Status', 'Statuses', 1), + 'searchtype' => array('equals', 'notequals'), + 'datatype' => 'specific', + 'massiveaction' => false, + ]; + $tab['2'] = [ + 'table' => self::getTable(), + 'field' => 'id', + 'name' => __('ID'), + 'searchtype' => 'contains', + 'datatype' => 'itemlink', + 'massiveaction' => false, + ]; + if (!$display_for_form) { + $tab['3'] = [ 'table' => getTableForItemType('PluginFormcreatorForm'), 'field' => 'name', 'name' => PluginFormcreatorForm::getTypeName(1), 'searchtype' => 'contains', 'datatype' => 'string', 'massiveaction' => false, + ]; + } + $tab['4'] = [ + 'table' => getTableForItemType('User'), + 'field' => 'name', + 'name' => __('Requester', 'formcreator'), + 'datatype' => 'itemlink', + 'massiveaction' => false, + 'linkfield' => 'requester_id', + ]; + $tab['5'] = [ + 'table' => getTableForItemType('User'), + 'field' => 'name', + 'name' => __('Validator', 'formcreator'), + 'datatype' => 'itemlink', + 'massiveaction' => false, + 'linkfield' => 'validator_id', + ]; + $tab['6'] = [ + 'table' => self::getTable(), + 'field' => 'request_date', + 'name' => __('Creation date'), + 'datatype' => 'datetime', + 'massiveaction' => false, + ]; + + if ($display_for_form) { + $optindex = self::SOPTION_ANSWER; + $section = new PluginFormcreatorSection; + $question = new PluginFormcreatorQuestion; + $sections = $section->find("`".PluginFormcreatorSection::$items_id."` = ". + $_SESSION['formcreator']['form_search_answers']); + foreach ($sections as $sections_id => $current_section) { + $questions = $question->find("`".PluginFormcreatorQuestion::$items_id."` = ". + $sections_id); + + foreach($questions as $questions_id => $current_question) { + $tab[$optindex] = [ + 'table' => PluginFormcreatorAnswer::getTable(), + 'field' => 'answer', + 'name' => $current_question['name'], + 'datatype' => 'string', + 'massiveaction' => false, + 'nosearch' => true, + 'joinparams' => [ + 'jointype' => 'child', + 'condition' => "AND NEWTABLE.`plugin_formcreator_question_id` = $questions_id", + ] + ]; + + $optindex++; + } + } + } - ), - '4' => array( - 'table' => getTableForItemType('User'), - 'field' => 'name', - 'name' => __('Requester', 'formcreator'), - 'datatype' => 'itemlink', - 'massiveaction' => false, - 'linkfield' => 'requester_id', - - ), - '5' => array( - 'table' => getTableForItemType('User'), - 'field' => 'name', - 'name' => __('Validator', 'formcreator'), - 'datatype' => 'itemlink', - 'massiveaction' => false, - 'linkfield' => 'validator_id', - - ), - '6' => array( - 'table' => self::getTable(), - 'field' => 'request_date', - 'name' => __('Creation date'), - 'datatype' => 'datetime', - 'massiveaction' => false, - ), - ); return $tab; } @@ -180,7 +214,11 @@ public static function getSpecificValueToSelect($field, $name='', $values='', ar */ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { - $item->showForm($item->fields['id']); + if ($item instanceof PluginFormcreatorForm) { + self::showForForm($item); + } else { + $item->showForm($item->fields['id']); + } } public function defineTabs($options = array()) @@ -206,7 +244,33 @@ public function defineTabs($options = array()) */ public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { - return $this->getTypeName(); + if ($item instanceof PluginFormcreatorForm) { + $number = count($this->find("`".self::$items_id."` = ".$item->getID())); + return self::createTabEntry(self::getTypeName($number), $number); + } else { + return $this->getTypeName(); + } + } + + static function showForForm(PluginFormcreatorForm $form, $params = []) { + // set a session var to tweak search results + $_SESSION['formcreator']['form_search_answers'] = $form->getID(); + + // prepare params for search + $item = new Self; + $soptions = $item->getSearchOptions(); + $sopt_keys = array_keys($soptions); + $forcedisplay = array_combine($sopt_keys, $sopt_keys); + + // do search + $params = Search::manageParams(__CLASS__, $params); + $data = Search::prepareDatasForSearch(__CLASS__, $params, $forcedisplay); + Search::constructSQL($data); + Search::constructDatas($data); + Search::displayDatas($data); + + // remove previous session var (restore default view) + unset($_SESSION['formcreator']['form_search_answers']); } /** From c40ff95397a8462e0e2225d2bee08f546d36cf17 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 12 Dec 2016 21:19:37 +0100 Subject: [PATCH 009/178] WIP : Add target change (#368) * add change target * remove ticket template : no equivalent on change * remove direct SQL and fix field name * add export / import methods * generate uuid on add * remove direct SQL * fix file ending * add missing entry in dropdown * code refactor; fix not object call --- ajax/target.php | 1 + front/knowbaseitem.form.php | 1 - front/targetchange.form.php | 74 ++ inc/target.class.php | 193 ++-- inc/targetchange.class.php | 1502 ++++++++++++++++++++++++++++++ inc/targetchange_actor.class.php | 172 ++++ 6 files changed, 1859 insertions(+), 84 deletions(-) create mode 100644 front/targetchange.form.php create mode 100644 inc/targetchange.class.php create mode 100644 inc/targetchange_actor.class.php diff --git a/ajax/target.php b/ajax/target.php index c6861d479..3f93291a3 100644 --- a/ajax/target.php +++ b/ajax/target.php @@ -15,6 +15,7 @@ Dropdown::showFromArray('itemtype', array( '' => '-----', 'PluginFormcreatorTargetTicket' => __('Ticket'), + 'PluginFormcreatorTargetChange' => __('Change'), )); echo ''; echo ''; diff --git a/front/knowbaseitem.form.php b/front/knowbaseitem.form.php index 48f5b7cde..b07562779 100644 --- a/front/knowbaseitem.form.php +++ b/front/knowbaseitem.form.php @@ -22,4 +22,3 @@ PluginFormcreatorWizard::footer(); } -?> \ No newline at end of file diff --git a/front/targetchange.form.php b/front/targetchange.form.php new file mode 100644 index 000000000..1c047132f --- /dev/null +++ b/front/targetchange.form.php @@ -0,0 +1,74 @@ +isActivated("formcreator")) { + $targetticket = new PluginFormcreatorTargetChange(); + + // Edit an existing target ticket + if(isset($_POST["update"])) { + Session::checkRight("entity", UPDATE); + + $target = new PluginFormcreatorTarget(); + $found = $target->find('items_id = ' . (int) $_POST['id']); + $found = array_shift($found); + $target->update(array('id' => $found['id'], 'name' => $name)); + $targetticket->update($_POST); + Html::back(); + + } elseif (isset($_POST['actor_role'])) { + Session::checkRight("entity", UPDATE); + $id = (int) $_POST['id']; + $actor_value = isset($_POST['actor_value_' . $_POST['actor_type']]) + ? $_POST['actor_value_' . $_POST['actor_type']] + : ''; + $use_notification = ($_POST['use_notification'] == 0) ? 0 : 1; + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->add(array( + 'plugin_formcreator_targetchanges_id' => $id, + 'actor_role' => $_POST['actor_role'], + 'actor_type' => $_POST['actor_type'], + 'actor_value' => $actor_value, + 'use_notification' => $use_notification + )); + Html::back(); + + } elseif (isset($_GET['delete_actor'])) { + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->delete(array( + 'id' => (int) $_GET['delete_actor'] + )); + Html::back(); + + // Show target ticket form + } else { + Html::header( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'], + 'admin', + 'PluginFormcreatorForm' + ); + + $itemtype = "PluginFormcreatorTargetChange"; + $target = new PluginFormcreatorTarget; + $found = $target->find("itemtype = '$itemtype' AND items_id = " . (int) $_REQUEST['id']); + $first = array_shift($found); + $form = new PluginFormcreatorForm; + $form->getFromDB($first['plugin_formcreator_forms_id']); + + $_SESSION['glpilisttitle'][$itemtype] = sprintf(__('%1$s = %2$s'), + $form->getTypeName(1), $form->getName()); + $_SESSION['glpilisturl'][$itemtype] = $form->getFormURL()."?id=".$form->getID(); + + $targetticket->display($_REQUEST); + + Html::footer(); + } + + // Or display a "Not found" error +} else { + Html::displayNotFoundError(); +} diff --git a/inc/target.class.php b/inc/target.class.php index d012c8ae4..6a88f70e4 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -56,15 +56,16 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ foreach ($found_targets as $target) { $i++; echo ''; + $targetItemUrl = Toolbox::getItemTypeFormURL($target['itemtype']) . '?id=' . $target['items_id']; + echo ''; - echo ''; echo $target['name']; echo ''; echo ''; echo '* '; + alt="*" title="'.__('Edit'); + echo 'onclick="document.location=\'' . $targetItemUrl . '\'" align="absmiddle" style="cursor: pointer" /> '; echo ''; echo ''; @@ -102,7 +103,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ * @param $input datas used to add the item * * @return the modified $input array - **/ + **/ public function prepareInputForAdd($input) { global $DB; @@ -115,54 +116,80 @@ public function prepareInputForAdd($input) // Control fields values : // - name is required if(isset($input['name']) - && empty($input['name'])) { - Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); - return array(); - } - // - field type is required - if(isset($input['itemtype'])) { - if (empty($input['itemtype'])) { - Session::addMessageAfterRedirect(__('The type cannot be empty!', 'formcreator'), false, ERROR); - return array(); - } + && empty($input['name'])) { + Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } + // - field type is required + if(isset($input['itemtype'])) { + if (empty($input['itemtype'])) { + Session::addMessageAfterRedirect(__('The type cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } - switch ($input['itemtype']) { - case 'PluginFormcreatorTargetTicket': - $targetticket = new PluginFormcreatorTargetTicket(); - $id_targetticket = $targetticket->add(array( - 'name' => $input['name'], - 'comment' => '##FULLFORM##' - )); - $input['items_id'] = $id_targetticket; - - if (!isset($input['_skip_create_actors']) - || !$input['_skip_create_actors']) { - $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); - $targetTicket_actor->add(array( - 'plugin_formcreator_targettickets_id' => $id_targetticket, - 'actor_role' => 'requester', - 'actor_type' => 'creator', - 'use_notification' => '1' - )); - $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); - $targetTicket_actor->add(array( - 'plugin_formcreator_targettickets_id' => $id_targetticket, - 'actor_role' => 'observer', - 'actor_type' => 'validator', - 'use_notification' => '1' - )); + switch ($input['itemtype']) { + case 'PluginFormcreatorTargetTicket': + $targetticket = new PluginFormcreatorTargetTicket(); + $id_targetticket = $targetticket->add(array( + 'name' => $input['name'], + 'comment' => '##FULLFORM##' + )); + $input['items_id'] = $id_targetticket; + + if (!isset($input['_skip_create_actors']) + || !$input['_skip_create_actors']) { + $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); + $targetTicket_actor->add(array( + 'plugin_formcreator_targettickets_id' => $id_targetticket, + 'actor_role' => 'requester', + 'actor_type' => 'creator', + 'use_notification' => '1' + )); + $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); + $targetTicket_actor->add(array( + 'plugin_formcreator_targettickets_id' => $id_targetticket, + 'actor_role' => 'observer', + 'actor_type' => 'validator', + 'use_notification' => '1' + )); + } + break; + case 'PluginFormcreatorTargetChange': + $targetchange = new PluginFormcreatorTargetChange(); + $id_targetchange = $targetchange->add(array( + 'name' => $input['name'], + 'comment' => '##FULLFORM##' + )); + $input['items_id'] = $id_targetchange; + + if (!isset($input['_skip_create_actors']) + || !$input['_skip_create_actors']) { + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->add(array( + 'plugin_formcreator_targetchanges_id' => $id_targetchange, + 'actor_role' => 'requester', + 'actor_type' => 'creator', + 'use_notification' => '1', + )); + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->add(array( + 'plugin_formcreator_targetchanges_id' => $id_targetchange, + 'actor_role' => 'observer', + 'actor_type' => 'validator', + 'use_notification' => '1', + )); + } + break; } - break; - } - } + } - // generate a uniq id - if (!isset($input['uuid']) - || empty($input['uuid'])) { - $input['uuid'] = plugin_formcreator_getUuid(); - } + // generate a uniq id + if (!isset($input['uuid']) + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } - return $input; + return $input; } /** @@ -171,7 +198,7 @@ public function prepareInputForAdd($input) * @param $input datas used to add the item * * @return the modified $input array - **/ + **/ public function prepareInputForUpdate($input) { // Decode (if already encoded) and encode strings to avoid problems with quotes @@ -181,11 +208,11 @@ public function prepareInputForUpdate($input) // generate a uniq id if (!isset($input['uuid']) - || empty($input['uuid'])) { - $input['uuid'] = plugin_formcreator_getUuid(); - } + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } - return $input; + return $input; } public function pre_deleteItem() { @@ -201,16 +228,16 @@ public static function install(Migration $migration) $table = getTableForItemType(__CLASS__); if (!TableExists($table)) { $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_forms_id` int(11) NOT NULL, - `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', - `items_id` int(11) NOT NULL DEFAULT 0, - `name` varchar(255) NOT NULL DEFAULT '', - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; + `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `plugin_formcreator_forms_id` int(11) NOT NULL, + `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', + `items_id` int(11) NOT NULL DEFAULT 0, + `name` varchar(255) NOT NULL DEFAULT '', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; $DB->query($query) or die($DB->error()); - // Migration from previous version + // Migration from previous version } else{ // Migration to 0.85-1.2.5 if (FieldExists($table, 'plugin_formcreator_forms_id', false)) { @@ -223,14 +250,14 @@ public static function install(Migration $migration) // Migration from version 1.5 to 1.6 if (!FieldExists($table, 'type', false)) { $query = "ALTER TABLE `$table` - ADD `type` tinyint(1) NOT NULL default '2';"; + ADD `type` tinyint(1) NOT NULL default '2';"; $DB->query($query); } // Add new column for link with target items $query = "ALTER TABLE `$table` - ADD `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', - ADD `items_id` int(11) NOT NULL DEFAULT 0;"; + ADD `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', + ADD `items_id` int(11) NOT NULL DEFAULT 0;"; $DB->query($query); // Create ticket template for each configuration in DB @@ -247,9 +274,9 @@ public static function install(Migration $migration) $template = new TicketTemplate(); $template_id = $template->add(array( - 'name' => 'Template Formcreator '.$i, - 'entities_id' => $ligne['entities_id'], - 'is_recursive' => 1, + 'name' => 'Template Formcreator '.$i, + 'entities_id' => $ligne['entities_id'], + 'is_recursive' => 1, )); $predefinedField = new TicketTemplatePredefinedField(); @@ -257,36 +284,36 @@ public static function install(Migration $migration) // Urgency if(!empty($ligne['urgency'])) { $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 10, - 'value' => $ligne['urgency'], + 'tickettemplates_id' => $template_id, + 'num' => 10, + 'value' => $ligne['urgency'], )); } // Priority if(!empty($ligne['priority'])) { $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 3, - 'value' => $ligne['priority'], + 'tickettemplates_id' => $template_id, + 'num' => 3, + 'value' => $ligne['priority'], )); } // Category if(!empty($ligne['itilcategories_id'])) { $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 7, - 'value' => $ligne['itilcategories_id'], + 'tickettemplates_id' => $template_id, + 'num' => 7, + 'value' => $ligne['itilcategories_id'], )); } // Type if(!empty($ligne['type'])) { $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 14, - 'value' => $ligne['type'], + 'tickettemplates_id' => $template_id, + 'num' => 14, + 'value' => $ligne['type'], )); } @@ -311,7 +338,7 @@ public static function install(Migration $migration) while ($line = $DB->fetch_array($result)) { // Insert target ticket $query_insert = "INSERT INTO `$table_targetticket` SET - `name` = '".htmlspecialchars($line['name'])."', + `name` = '".htmlspecialchars($line['name'])."', `tickettemplates_id` = ".$line['tickettemplates_id'].", `comment` = '".htmlspecialchars($line['content'])."'"; $DB->query($query_insert); @@ -319,7 +346,7 @@ public static function install(Migration $migration) // Update target with target ticket id $query_update = "UPDATE `$table` - SET `items_id` = ".$targetticket_id." + SET `items_id` = ".$targetticket_id." WHERE `id` = ".$line['id']; $DB->query($query_update); } @@ -335,11 +362,11 @@ public static function install(Migration $migration) */ if (FieldExists($table_targetticket, 'comment')) { $query = "SELECT `id`, `comment` - FROM `$table_targetticket`"; + FROM `$table_targetticket`"; $result = $DB->query($query); while ($line = $DB->fetch_array($result)) { $query_update = "UPDATE `$table_targetticket` SET - `comment` = '".plugin_formcreator_encode($line['comment'])."' + `comment` = '".plugin_formcreator_encode($line['comment'])."' WHERE `id` = ".$line['id']; $DB->query($query_update) or die ($DB->error()); } diff --git a/inc/targetchange.class.php b/inc/targetchange.class.php new file mode 100644 index 000000000..ba9089dba --- /dev/null +++ b/inc/targetchange.class.php @@ -0,0 +1,1502 @@ + __("Current active entity", 'formcreator'), + 'requester' => __("Default requester user's entity", 'formcreator'), + 'requester_dynamic_first' => __("First dynamic requester user's entity (alphabetical)", 'formcreator'), + 'requester_dynamic_last' => __("Last dynamic requester user's entity (alphabetical)", 'formcreator'), + 'form' => __('The form entity', 'formcreator'), + 'validator' => __('Default entity of the validator', 'formcreator'), + 'specific' => __('Specific entity', 'formcreator'), + 'user' => __('Default entity of a user type question answer', 'formcreator'), + 'entity' => __('From a GLPI object > Entity type question answer', 'formcreator'), + ); + } + + static function getEnumTagType() { + return array( + 'none' => __("None"), + 'questions' => __('Tags from questions', 'formcreator'), + 'specifics' => __('Specific tags', 'formcreator'), + 'questions_and_specific' => __('Tags from questions and specific tags', 'formcreator'), + 'questions_or_specific' => __('Tags from questions or specific tags', 'formcreator') + ); + } + + static function getEnumDueDateRule() { + return array( + 'answer' => __('equals to the answer to the question', 'formcreator'), + 'change' => __('calculated from the change creation date', 'formcreator'), + 'calcul' => __('calculated from the answer to the question', 'formcreator'), + ); + } + + /** + * Check if current user have the right to create and modify requests + * + * @return boolean True if he can create and modify requests + */ + public static function canCreate() + { + return true; + } + + /** + * Check if current user have the right to read requests + * + * @return boolean True if he can read requests + */ + public static function canView() + { + return true; + } + + public static function getTypeName($nb = 1) + { + return _n('Target change', 'Target changes', $nb, 'formcreator'); + } + + + /** + * Show the Form edit form the the adminsitrator in the config page + * + * @param Array $options Optional options + * + * @return NULL Nothing, just display the form + */ + public function showForm($options=array()) + { + global $CFG_GLPI, $DB; + + $rand = mt_rand(); + + $obj = new PluginFormcreatorTarget(); + $found = $obj->find("itemtype = '" . __CLASS__ . "' AND items_id = " . (int) $this->getID()); + $target = array_shift($found); + + $form = new PluginFormcreatorForm(); + $form->getFromDB($target['plugin_formcreator_forms_id']); + + echo '
'; + echo '
'; + + // General information : name + echo ''; + + echo ''; + + echo ''; + echo ''; + echo ''; + + echo '
' . __('Edit a destination', 'formcreator') . '
' . __('Name') . ' *'; + echo '
'; + + // change information : title, template... + echo ''; + + echo ''; + + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + /* Modif G.DONAT ALFUN - Ajout des champs spécifiques aux changements */ + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + /*Fin Modif G.DONAT ALFUN */ + + // Ticket Template + /** + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + // for each section ... + $questions_list = array(Dropdown::EMPTY_VALUE); + $query = "SELECT s.id, s.name + FROM glpi_plugin_formcreator_targets t + INNER JOIN glpi_plugin_formcreator_sections s ON s.plugin_formcreator_forms_id = t.plugin_formcreator_forms_id + WHERE t.items_id = " . (int) $this->getID() . " + ORDER BY s.order"; + $result = $DB->query($query); + while ($section = $DB->fetch_array($result)) { + // select all date and datetime questions + $query2 = "SELECT q.id, q.name + FROM glpi_plugin_formcreator_questions q + INNER JOIN glpi_plugin_formcreator_sections s ON s.id = q.plugin_formcreator_sections_id + WHERE s.id = {$section['id']} + AND q.fieldtype IN ('date', 'datetime')"; + $result2 = $DB->query($query2); + $section_questions = array(); + while ($question = $DB->fetch_array($result2)) { + $section_questions[$question['id']] = $question['name']; + } + if (count($section_questions) > 0) { + $questions_list[$section['name']] = $section_questions; + } + } + // List questions + if ($this->fields['due_date_rule'] != 'answer' && $this->fields['due_date_rule'] != 'calcul') { + echo ''; + + // ------------------------------------------------------------------------------------------- + // Ticket Entity + // ------------------------------------------------------------------------------------------- + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + + // ------------------------------------------------------------------------------------------- + // Tags + // ------------------------------------------------------------------------------------------- + $plugin = new Plugin(); + if ($plugin->isInstalled('tag') && $plugin->isActivated('tag')) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + + // ------------------------------------------------------------------------------------------- + // Validation as ticket followup + // ------------------------------------------------------------------------------------------- + if ($form->fields['validation_required']) { + echo ''; + echo ''; + echo ''; + } + + echo '
' . _n('Target change', 'Target changes', 1, 'formcreator') . '
' . __('Change title', 'formcreator') . ' *'; + echo '
' . __('Description') . ' *'; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('comment'); + } + echo '
' . __('Impacts') . ' '; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('impactcontent'); + } + echo '
' . __('Control list') . ' '; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('controlistcontent'); + } + echo '
' . __('Deployment plan') . ' '; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('rolloutplancontext'); + } + echo '
' . __('Backup plan') . ' '; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('backoutplancontext'); + } + echo '
' . __('Checklist') . ' '; + echo ''; + if ($CFG_GLPI["use_rich_text"]) { + Html::initEditorSystem('checklistcontent'); + } + echo '
' . _n('Change template', 'Change templates', 1) . ''; + Dropdown::show('TicketTemplate', array( + 'name' => 'changetemplates_id', + 'value' => $this->fields['changetemplates_id'] + )); + */ + echo '' . __('Due date') . ''; + + // ------------------------------------------------------------------------------------------- + // Due date type selection + // ------------------------------------------------------------------------------------------- + Dropdown::showFromArray('due_date_rule', self::getEnumDueDateRule(), + array( + 'value' => $this->fields['due_date_rule'], + 'on_change' => 'formcreatorChangeDueDate(this.value)', + 'display_emptychoice' => true + ) + ); + echo '
' . __('Destination entity') . ''; + $rand = mt_rand(); + Dropdown::showFromArray( + 'destination_entity', + self::getEnumDestinationEntity(), + array( + 'value' => $this->fields['destination_entity'], + 'on_change' => 'change_entity()', + 'rand' => $rand, + ) + ); + + $script = <<'; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo '
' . __('Ticket tags', 'formcreator') . ''; + $rand = mt_rand(); + Dropdown::showFromArray('tag_type', self::getEnumTagType(), + array( + 'value' => $this->fields['tag_type'], + 'on_change' => 'change_tag_type()', + 'rand' => $rand, + ) + ); + + $script = <<'; + echo ''; + echo ''; + echo ''; + echo ''; + + // Tag questions + echo ''; + + // Spécific tags + echo ''; + + echo '
'; + echo ''; + echo 'fields['validation_followup']) || ($this->fields['validation_followup'] == 1)) { + echo ' checked="checked"'; + } + echo '/>'; + echo ' '; + echo '
'; + + + // Buttons + echo ''; + + echo ''; + echo ''; + echo ''; + + echo '
'; + echo '   '; + echo ''; + echo ''; + echo '
'; + Html::closeForm(); + + // Get available questions for actors lists + $questions_user_list = array(Dropdown::EMPTY_VALUE); + $questions_group_list = array(Dropdown::EMPTY_VALUE); + $questions_supplier_list = array(Dropdown::EMPTY_VALUE); + $query = "SELECT s.id, s.name + FROM glpi_plugin_formcreator_targets t + INNER JOIN glpi_plugin_formcreator_sections s ON s.plugin_formcreator_forms_id = t.plugin_formcreator_forms_id + WHERE t.items_id = " . (int) $this->getID() . " + ORDER BY s.order"; + $result = $DB->query($query); + while ($section = $DB->fetch_array($result)) { + // select all user, group or supplier questions (GLPI Object) + $query2 = "SELECT q.id, q.name, q.values + FROM glpi_plugin_formcreator_questions q + INNER JOIN glpi_plugin_formcreator_sections s ON s.id = q.plugin_formcreator_sections_id + WHERE s.id = {$section['id']} + AND q.fieldtype = 'glpiselect' + AND q.values IN ('User', 'Group', 'Supplier')"; + $result2 = $DB->query($query2); + $section_questions_user = array(); + $section_questions_group = array(); + $section_questions_supplier = array(); + while ($question = $DB->fetch_array($result2)) { + switch ($question['values']) { + case 'User' : + $section_questions_user[$question['id']] = $question['name']; + break; + case 'Group' : + $section_questions_group[$question['id']] = $question['name']; + break; + case 'Supplier' : + $section_questions_supplier[$question['id']] = $question['name']; + break; + } + } + $questions_user_list[$section['name']] = $section_questions_user; + $questions_group_list[$section['name']] = $section_questions_group; + $questions_supplier_list[$section['name']] = $section_questions_supplier; + } + + // Get available questions for actors lists + $actors = array('requester' => array(), 'observer' => array(), 'assigned' => array()); + $query = "SELECT id, actor_role, actor_type, actor_value, use_notification + FROM glpi_plugin_formcreator_targetchanges_actors + WHERE plugin_formcreator_targetchanges_id = " . $this->getID(); + $result = $DB->query($query); + while ($actor = $DB->fetch_array($result)) { + $actors[$actor['actor_role']][$actor['id']] = array( + 'actor_type' => $actor['actor_type'], + 'actor_value' => $actor['actor_value'], + 'use_notification' => $actor['use_notification'], + ); + } + + $img_user = '' . __('User') . ''; + $img_group = '' . __('Group') . ''; + $img_supplier = '' . __('Supplier') . ''; + $img_mail = '' . __('Yes') . ''; + $img_nomail = '' . __('No') . ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + // Requester + echo ''; + + // Observer + echo ''; + + // Assigned to + echo ''; + + echo ''; + + echo '
' . __('Ticket actors', 'formcreator') . '
'; + echo _n('Requester', 'Requesters', 1) . '  '; + echo 'Ajouter'; + echo ''; + echo ''; + echo _n('Watcher', 'Watchers', 1) . '  '; + echo 'Ajouter'; + echo ''; + echo ''; + echo __('Assigned to') . '  '; + echo 'Ajouter'; + echo ''; + echo '
'; + + // => Add requester form + echo ''; + + Dropdown::showFromArray('actor_type', array( + '' => Dropdown::EMPTY_VALUE, + 'creator' => __('Form requester', 'formcreator'), + 'validator' => __('Form validator', 'formcreator'), + 'person' => __('Specific person', 'formcreator'), + 'question_person' => __('Person from the question', 'formcreator'), + 'group' => __('Specific group', 'formcreator'), + 'question_group' => __('Group from the question', 'formcreator'), + ), array( + 'on_change' => 'formcreatorChangeActorRequester(this.value)' + )); + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo '
'; + echo __('Email followup'); + Dropdown::showYesNo('use_notification', 1); + echo '
'; + + echo '

'; + echo ''; + echo ''; + echo ''; + echo '

'; + + echo "
"; + + Html::closeForm(); + + // => List of saved requesters + foreach ($actors['requester'] as $id => $values) { + echo '
'; + switch ($values['actor_type']) { + case 'creator' : + echo $img_user . ' ' . __('Form requester', 'formcreator') . ''; + break; + case 'validator' : + echo $img_user . ' ' . __('Form validator', 'formcreator') . ''; + break; + case 'person' : + $user = new User(); + $user->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('User') . ' "' . $user->getName() . '"'; + break; + case 'question_person' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Person from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + case 'group' : + $group = new Group(); + $group->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Group') . ' "' . $group->getName() . '"'; + break; + case 'question_group' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_group . ' ' . __('Group from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + } + echo $values['use_notification'] ? ' ' . $img_mail . ' ' : ' ' . $img_nomail . ' '; + echo self::getDeleteImage($id); + echo '
'; + } + + echo '
'; + + // => Add observer form + echo ''; + + Dropdown::showFromArray('actor_type', array( + '' => Dropdown::EMPTY_VALUE, + 'creator' => __('Form requester', 'formcreator'), + 'validator' => __('Form validator', 'formcreator'), + 'person' => __('Specific person', 'formcreator'), + 'question_person' => __('Person from the question', 'formcreator'), + 'group' => __('Specific group', 'formcreator'), + 'question_group' => __('Group from the question', 'formcreator'), + ), array( + 'on_change' => 'formcreatorChangeActorWatcher(this.value)' + )); + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo '
'; + echo __('Email followup'); + Dropdown::showYesNo('use_notification', 1); + echo '
'; + + echo '

'; + echo ''; + echo ''; + echo ''; + echo '

'; + + echo "
"; + + Html::closeForm(); + + + // => List of saved observers + foreach ($actors['observer'] as $id => $values) { + echo '
'; + switch ($values['actor_type']) { + case 'creator' : + echo $img_user . ' ' . __('Form requester', 'formcreator') . ''; + break; + case 'validator' : + echo $img_user . ' ' . __('Form validator', 'formcreator') . ''; + break; + case 'person' : + $user = new User(); + $user->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('User') . ' "' . $user->getName() . '"'; + break; + case 'question_person' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Person from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + case 'group' : + $group = new Group(); + $group->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Group') . ' "' . $group->getName() . '"'; + break; + case 'question_group' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_group . ' ' . __('Group from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + } + echo $values['use_notification'] ? ' ' . $img_mail . ' ' : ' ' . $img_nomail . ' '; + echo self::getDeleteImage($id); + echo '
'; + } + + echo '
'; + + // => Add assigned to form + echo ''; + + Dropdown::showFromArray('actor_type', array( + '' => Dropdown::EMPTY_VALUE, + 'creator' => __('Form requester', 'formcreator'), + 'validator' => __('Form validator', 'formcreator'), + 'person' => __('Specific person', 'formcreator'), + 'question_person' => __('Person from the question', 'formcreator'), + 'group' => __('Specific group', 'formcreator'), + 'question_group' => __('Group from the question', 'formcreator'), + 'supplier' => __('Specific supplier', 'formcreator'), + 'question_supplier' => __('Supplier from the question', 'formcreator'), + ), array( + 'on_change' => 'formcreatorChangeActorAssigned(this.value)' + )); + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo ''; + + echo '
'; + echo __('Email followup'); + Dropdown::showYesNo('use_notification', 1); + echo '
'; + + echo '

'; + echo ''; + echo ''; + echo ''; + echo '

'; + + echo "
"; + + Html::closeForm(); + + // => List of saved assigned to + foreach ($actors['assigned'] as $id => $values) { + echo '
'; + switch ($values['actor_type']) { + case 'creator' : + echo $img_user . ' ' . __('Form requester', 'formcreator') . ''; + break; + case 'validator' : + echo $img_user . ' ' . __('Form validator', 'formcreator') . ''; + break; + case 'person' : + $user = new User(); + $user->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('User') . ' "' . $user->getName() . '"'; + break; + case 'question_person' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Person from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + case 'group' : + $group = new Group(); + $group->getFromDB($values['actor_value']); + echo $img_user . ' ' . __('Group') . ' "' . $group->getName() . '"'; + break; + case 'question_group' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_group . ' ' . __('Group from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + case 'supplier' : + $supplier = new Supplier(); + $supplier->getFromDB($values['actor_value']); + echo $img_supplier . ' ' . __('Supplier') . ' "' . $supplier->getName() . '"'; + break; + case 'question_supplier' : + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($values['actor_value']); + echo $img_supplier . ' ' . __('Supplier from the question', 'formcreator') + . ' "' . $question->getName() . '"'; + break; + } + echo $values['use_notification'] ? ' ' . $img_mail . ' ' : ' ' . $img_nomail . ' '; + echo self::getDeleteImage($id); + echo '
'; + } + + echo '
'; + + // List of available tags + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $table_questions = getTableForItemType('PluginFormcreatorQuestion'); + $table_sections = getTableForItemType('PluginFormcreatorSection'); + $query = "SELECT q.`id`, q.`name` AS question, s.`name` AS section + FROM $table_questions q + LEFT JOIN $table_sections s ON q.`plugin_formcreator_sections_id` = s.`id` + WHERE s.`plugin_formcreator_forms_id` = " . $target['plugin_formcreator_forms_id'] . " + ORDER BY s.`order`, q.`order`"; + $result = $DB->query($query); + + $i = 0; + while ($question = $DB->fetch_array($result)) { + $i++; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
' . __('List of available tags') . '
' . _n('Question', 'Questions', 1, 'formcreator') . '' . __('Title') . '' . _n('Answer', 'Answers', 1, 'formcreator') . '' . _n('Section', 'Sections', 1, 'formcreator') . '
' . __('Full form', 'formcreator') . '-##FULLFORM##-
' . $question['question'] . '##question_' . $question['id'] . '####answer_' . $question['id'] . '##' . $question['section'] . '
'; + echo '
'; + } + + /** + * Prepare input datas for updating the target ticket + * + * @param $input datas used to add the item + * + * @return the modified $input array + **/ + public function prepareInputForUpdate($input) + { + // Control fields values : + // - name is required + if(empty($input['title'])) { + Session::addMessageAfterRedirect(__('The title cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } + + // - comment is required + if(empty($input['comment'])) { + Session::addMessageAfterRedirect(__('The description cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } + + $input['name'] = plugin_formcreator_encode($input['title']); + + if ($GLOBALS['CFG_GLPI']['use_rich_text']) { + $input['comment'] = Html::entity_decode_deep($input['comment']); + } + + switch ($input['destination_entity']) { + case 'specific' : + $input['destination_entity_value'] = $input['_destination_entity_value_specific']; + break; + case 'user' : + $input['destination_entity_value'] = $input['_destination_entity_value_user']; + break; + case 'entity' : + $input['destination_entity_value'] = $input['_destination_entity_value_entity']; + break; + default : + $input['destination_entity_value'] = 'NULL'; + break; + } + + $plugin = new Plugin(); + if ($plugin->isInstalled('tag') && $plugin->isActivated('tag')) { + $input['tag_questions'] = (!empty($input['_tag_questions'])) + ? implode(',', $input['_tag_questions']) + : ''; + $input['tag_specifics'] = (!empty($input['_tag_specifics'])) + ? implode(',', $input['_tag_specifics']) + : ''; + } + + return $input; + } + + /** + * Save form datas to the target + * + * @param PluginFormcreatorForm_Answer $formanswer Answers previously saved + */ + public function save(PluginFormcreatorForm_Answer $formanswer) + { + global $DB; + + $datas = array(); + $ticket = new Change(); + $docItem = new Document_Item(); + $form = new PluginFormcreatorForm(); + $answer = new PluginFormcreatorAnswer(); + + $form->getFromDB($formanswer->fields['plugin_formcreator_forms_id']); + + // Get default request type + $query = "SELECT id FROM `glpi_requesttypes` WHERE `name` LIKE 'Formcreator';"; + $result = $DB->query($query) or die ($DB->error()); + list($requesttypes_id) = $DB->fetch_array($result); + + $datas['requesttypes_id'] = $requesttypes_id; + + // Get predefined Fields + $ttp = new TicketTemplatePredefinedField(); + $predefined_fields = $ttp->getPredefinedFields($this->fields['tickettemplates_id'], true); + $datas = array_merge($datas, $predefined_fields); + + // Parse datas + $fullform = $formanswer->getFullForm(); + + + $datas['name'] = addslashes($this->parseTags($this->fields['name'], + $formanswer, + $fullform)); + $datas['content'] = htmlentities($this->parseTags($this->fields['comment'], + $formanswer, + $fullform)); + $datas['impactcontent'] = htmlentities($this->parseTags($this->fields['impactcontent'], + $formanswer, + $fullform)); + + $datas['controlistcontent'] = htmlentities($this->parseTags($this->fields['controlistcontent'], + $formanswer, + $fullform)); + + $datas['rolloutplancontent'] = htmlentities($this->parseTags($this->fields['rolloutplancontent'], + $formanswer, + $fullform)); + + $datas['backoutplancontent'] = htmlentities($this->parseTags($this->fields['backoutplancontent'], + $formanswer, + $fullform)); + $datas['checklistcontent'] = htmlentities($this->parseTags($this->fields['checklistcontent'], + $formanswer, + $fullform)); + + $datas['_users_id_requester'] = 0; + $datas['_users_id_recipient'] = $_SESSION['glpiID']; + $datas['_tickettemplates_id'] = $this->fields['tickettemplates_id']; + + // Select ticket actors + $solo_requester = false; + $query_requester = "SELECT id, actor_type, actor_value, use_notification + FROM glpi_plugin_formcreator_targetchanges_actors + WHERE plugin_formcreator_targettickets_id = ".$this->getID()." + AND actor_role = 'requester'"; + $result_requester = $DB->query($query_requester); + + // If there is only one requester add it on creation, otherwize we will add them later + if ($DB->numrows($result_requester) == 1) { + $actor = $DB->fetch_array($result_requester); + $solo_requester = true; + switch ($actor['actor_type']) { + case 'creator' : + $user_id = $formanswer->fields['requester_id']; + break; + case 'validator' : + $user_id = $formanswer->fields['validator_id']; + break; + case 'person' : + case 'group' : + case 'supplier' : + $user_id = $actor['actor_value']; + break; + case 'question_person' : + case 'question_group' : + case 'question_supplier' : + $found = $answer->find('`plugin_formcreator_question_id` = '.$actor['actor_value']. + ' AND `plugin_formcreator_formanwers_id` = '.$formanswer->fields['id']); + $found = array_shift($found); + if (empty($found['answer'])) { + continue; + } else { + $user_id = (int) $found['answer']; + } + break; + } + $datas['_users_id_requester'] = $user_id; + } + + $requesters_id = $formanswer->fields['requester_id']; + if ($datas['_users_id_requester']) { + $requesters_id = $datas['_users_id_requester']; + } + + + // Computation of the entity + switch ($this->fields['destination_entity']) { + // Requester's entity + case 'current' : + $datas['entities_id'] = $_SESSION['glpiactive_entity']; + case 'requester' : + $userObj = new User(); + $userObj->getFromDB($requesters_id); + $datas['entities_id'] = $userObj->fields['entities_id']; + break; + + // Requester's first dynamic entity + case 'requester_dynamic_first' : + $order_entities = "`glpi_profiles`.`name` ASC"; + case 'requester_dynamic_last' : + if (!isset($order_entities)) { + $order_entities = "`glpi_profiles`.`name` DESC"; + } + $query_entities = "SELECT `glpi_profiles_users`.`entities_id` + FROM `glpi_profiles_users` + LEFT JOIN `glpi_profiles` + ON `glpi_profiles`.`id` = `glpi_profiles_users`.`profiles_id` + WHERE `glpi_profiles_users`.`users_id` = $requesters_id + ORDER BY `glpi_profiles_users`.`is_dynamic` DESC, $order_entities"; + $res_entities = $DB->query($query_entities); + while($data_entities[] = $DB->fetch_array($res_entities)) { + + } + $first_entity = array_shift($data_entities); + $datas['entities_id'] = $first_entity['entities_id']; + break; + + // Specific entity + case 'specific' : + $datas['entities_id'] = $this->fields['destination_entity_value']; + break; + + // The form entity + case 'form' : + $datas['entities_id'] = $form->fields['entities_id']; + break; + + // The validator entity + case 'validator' : + $userObj = new User(); + $userObj->getFromDB($formanswer->fields['validator_id']); + $datas['entities_id'] = $userObj->fields['entities_id']; + break; + + // Default entity of a user from the answer of a user's type question + case 'user' : + $found = $answer->find('plugin_formcreator_formanwers_id = '.$formanswer->fields['id']. + ' AND plugin_formcreator_question_id = '.$this->fields['destination_entity_value']); + $user = array_shift($found); + $user_id = $user['answer']; + + if ($user_id > 0) { + $userObj = new User(); + $userObj->getFromDB($user_id); + $datas['entities_id'] = $userObj->fields['entities_id']; + } else { + $datas['entities_id'] = 0; + } + break; + + // Entity from the answer of an entity's type question + case 'entity' : + $found = $answer->find('plugin_formcreator_formanwers_id = '.$formanswer->fields['id']. + ' AND plugin_formcreator_question_id = '.$this->fields['destination_entity_value']); + $entity = array_shift($found); + + $datas['entities_id'] = (int) $entity['answer']; + break; + + // Requester current entity + default : + $datas['entities_id'] = 0; + break; + } + + // Define due date + $found = $answer->find('plugin_formcreator_formanwers_id = '.$formanswer->fields['id']. + ' AND plugin_formcreator_question_id = '.$this->fields['due_date_question']); + $date = array_shift($found); + $str = "+" . $this->fields['due_date_value'] . " " . $this->fields['due_date_period']; + + switch ($this->fields['due_date_rule']) { + case 'answer': + $due_date = $date['answer']; + break; + case 'ticket': + $due_date = date('Y-m-d H:i:s', strtotime($str)); + break; + case 'calcul': + $due_date = date('Y-m-d H:i:s', strtotime($date['answer'] . " " . $str)); + break; + default: + $due_date = null; + break; + } + if (!is_null($due_date)) { + $datas['due_date'] = $due_date; + } + + // Create the target ticket + if (!$ticketID = $ticket->add($datas)) { + return false; + } + + // Add tag if presents + $plugin = new Plugin(); + if ($plugin->isInstalled('tag') && $plugin->isActivated('tag')) { + + $tagObj = new PluginTagTagItem(); + $tags = array(); + + // Add question tags + if (($this->fields['tag_type'] == 'questions' + || $this->fields['tag_type'] == 'questions_and_specific' + || $this->fields['tag_type'] == 'questions_or_specific') + && (!empty($this->fields['tag_questions']))) { + + $query = "SELECT answer + FROM `glpi_plugin_formcreator_answers` + WHERE `plugin_formcreator_formanwers_id` = " . (int) $formanswer->fields['id'] . " + AND `plugin_formcreator_question_id` IN (" . $this->fields['tag_questions'] . ")"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $tab = json_decode($line['answer']); + if (is_array($tab)) { + $tags = array_merge($tags, $tab); + } + } + } + + // Add specific tags + if ($this->fields['tag_type'] == 'specifics' + || $this->fields['tag_type'] == 'questions_and_specific' + || ($this->fields['tag_type'] == 'questions_or_specific' && empty($tags)) + && (!empty($this->fields['tag_specifics']))) { + + $tags = array_merge($tags, explode(',', $this->fields['tag_specifics'])); + } + + $tags = array_unique($tags); + + // Save tags in DB + foreach ($tags as $tag) { + $tagObj->add(array( + 'plugin_tag_tags_id' => $tag, + 'items_id' => $ticketID, + 'itemtype' => 'Ticket', + )); + } + } + + // Add link between Ticket and FormAnswer + $itemlink = new Item_Ticket(); + $itemlink->add(array( + 'itemtype' => 'PluginFormcreatorForm_Answer', + 'items_id' => $formanswer->fields['id'], + 'tickets_id' => $ticketID, + )); + + // Add actors to ticket + $query = "SELECT id, actor_role, actor_type, actor_value, use_notification + FROM glpi_plugin_formcreator_targetchanges_actors + WHERE plugin_formcreator_targettickets_id = " . $this->getID(); + $result = $DB->query($query); + while ($actor = $DB->fetch_array($result)) { + // If actor type is validator and if the form doesn't have a validator, continue to other actors + if ($actor['actor_type'] == 'validator' && !$form->fields['validation_required']) continue; + + // If there is only one requester, it have already been added, so continue to next actors + if ($solo_requester && ($actor['actor_role'] == 'requester')) continue; + + switch ($actor['actor_role']) { + case 'requester' : $role = CommonITILActor::REQUESTER; break; + case 'observer' : $role = CommonITILActor::OBSERVER; break; + case 'assigned' : $role = CommonITILActor::ASSIGN; break; + } + switch ($actor['actor_type']) { + case 'creator' : + $user_id = $formanswer->fields['requester_id']; + break; + case 'validator' : + $user_id = $formanswer->fields['validator_id']; + break; + case 'person' : + case 'group' : + case 'supplier' : + $user_id = $actor['actor_value']; + break; + case 'question_person' : + case 'question_group' : + case 'question_supplier' : + $found = $answer->find('`plugin_formcreator_question_id` = '.$actor['actor_value']. + ' AND `plugin_formcreator_formanwers_id` = '.$formanswer->fields['id']); + $found = array_shift($found); + + if (empty($found['answer'])) { + continue; + } else { + $user_id = (int) $found['answer']; + } + break; + } + switch ($actor['actor_type']) { + case 'creator' : + case 'validator' : + case 'person' : + case 'question_person' : + $obj = new Ticket_User(); + $obj->add(array( + 'tickets_id' => $ticketID, + 'users_id' => $user_id, + 'type' => $role, + 'use_notification' => $actor['use_notification'], + )); + break; + case 'group' : + case 'question_group' : + $obj = new Group_Ticket(); + $obj->add(array( + 'tickets_id' => $ticketID, + 'groups_id' => $user_id, + 'type' => $role, + 'use_notification' => $actor['use_notification'], + )); + break; + case 'supplier' : + case 'question_supplier' : + $obj = new Supplier_Ticket(); + $obj->add(array( + 'tickets_id' => $ticketID, + 'suppliers_id' => $user_id, + 'type' => $role, + 'use_notification' => $actor['use_notification'], + )); + break; + } + } + + // Attach documents to ticket + $found = $docItem->find("itemtype = 'PluginFormcreatorForm_Answer' + AND items_id = ".$formanswer->getID()); + if(count($found) > 0) { + foreach ($found as $document) { + $docItem->add(array( + 'documents_id' => $document['documents_id'], + 'itemtype' => 'Ticket', + 'items_id' => $ticketID + )); + } + } + + // Attach validation message as first ticket followup if validation is required and + // if is set in ticket target configuration + // /!\ Followup is directly saved to the database to avoid double notification on ticket + // creation and add followup + if ($form->fields['validation_required'] && $this->fields['validation_followup']) { + $message = addslashes(__('Your form has been accepted by the validator', 'formcreator')); + if (!empty($formanswer->fields['comment'])) { + $message.= "\n".addslashes($formanswer->fields['comment']); + } + + $query = "INSERT INTO `glpi_changevalidations` SET + `changes_id` = $ticketID, + `submission_date` = NOW(), + `users_id` = {$_SESSION['glpiID']}, + `submission` = \"$message\""; + $DB->query($query); + } + + return true; + } + + /** + * Parse target content to replace TAGS like ##FULLFORM## by the values + * + * @param String $content String to be parsed + * @param PluginFormcreatorForm_Answer $formanswer Formanswer object where answers are stored + * @return String Parsed string with tags replaced by form values + */ + private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $fullform = "") { + global $DB, $CFG_GLPI; + + if ($fullform == "") { + $fullform = $formanswer->getFullForm(); + } + + $content = str_replace('##FULLFORM##', $fullform, $content); + $section = new PluginFormcreatorSection(); + $found = $section->find('plugin_formcreator_forms_id = '.$formanswer->fields['plugin_formcreator_forms_id'], + '`order` ASC'); + $tab_section = array(); + foreach($found as $section_item) { + $tab_section[] = $section_item['id']; + } + + if(!empty($tab_section)) { + $query_questions = "SELECT `questions`.*, `answers`.`answer` + FROM `glpi_plugin_formcreator_questions` AS questions + LEFT JOIN `glpi_plugin_formcreator_answers` AS answers + ON `answers`.`plugin_formcreator_question_id` = `questions`.`id` + AND `plugin_formcreator_formanwers_id` = ".$formanswer->getID()." + WHERE `questions`.`plugin_formcreator_sections_id` IN (".implode(', ', $tab_section).") + ORDER BY `questions`.`order` ASC"; + $res_questions = $DB->query($query_questions); + while ($question_line = $DB->fetch_assoc($res_questions)) { + $id = $question_line['id']; + $name = $question_line['name']; + $value = PluginFormcreatorFields::getValue($question_line, $question_line['answer']); + if (is_array($value)) { + if ($CFG_GLPI['use_rich_text']) { + $value = '
' . implode('
', $value); + } else { + $value = "\r\n" . implode("\r\n", $value); + } + } + + $content = str_replace('##question_' . $id . '##', $name, $content); + $content = str_replace('##answer_' . $id . '##', $value, $content); + } + } + + return $content; + } + + public static function install(Migration $migration) + { + global $DB; + + $enum_destination_entity = "'".implode("', '", array_keys(self::getEnumDestinationEntity()))."'"; + $enum_tag_type = "'".implode("', '", array_keys(self::getEnumTagType()))."'"; + $enum_due_date_rule = "'".implode("', '", array_keys(self::getEnumDueDateRule()))."'"; + $table = getTableForItemType(__CLASS__); + if (!TableExists($table)) { + $query = "CREATE TABLE IF NOT EXISTS `$table` ( + `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, + `name` varchar(255) NOT NULL DEFAULT '', + `changetemplates_id` int(11) NULL DEFAULT NULL, + `comment` text collate utf8_unicode_ci, + `impactcontent` text collate utf8_unicode_ci, + `controlistcontent` text collate utf8_unicode_ci, + `rolloutplancontext` text collate utf8_unicode_ci, + `backoutplancontext` text collate utf8_unicode_ci, + `checklistcontent` text collate utf8_unicode_ci, + `due_date_rule` ENUM($enum_due_date_rule) NULL DEFAULT NULL, + `due_date_question` INT NULL DEFAULT NULL, + `due_date_value` TINYINT NULL DEFAULT NULL, + `due_date_period` ENUM('minute', 'hour', 'day', 'month') NULL DEFAULT NULL, + `validation_followup` BOOLEAN NOT NULL DEFAULT TRUE, + `destination_entity` ENUM($enum_destination_entity) NOT NULL DEFAULT 'requester', + `destination_entity_value` int(11) NULL DEFAULT NULL, + `tag_type` ENUM($enum_tag_type) NOT NULL DEFAULT 'none', + `tag_questions` VARCHAR(255) NOT NULL, + `tag_specifics` VARCHAR(255) NOT NULL + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; + $DB->query($query) or die($DB->error()); + } else { + + } + + return true; + } + + public static function uninstall() + { + global $DB; + + $query = "DROP TABLE IF EXISTS `" . getTableForItemType(__CLASS__) . "`"; + return $DB->query($query) or die($DB->error()); + } + + private static function getDeleteImage($id) { + global $CFG_GLPI; + + $link = '  '; + $link .= '' . __('Delete') . ''; + $link .= ''; + return $link; + } +} diff --git a/inc/targetchange_actor.class.php b/inc/targetchange_actor.class.php new file mode 100644 index 000000000..c74fb5cf9 --- /dev/null +++ b/inc/targetchange_actor.class.php @@ -0,0 +1,172 @@ +query($query) or die($DB->error()); + } + + // fill missing uuid + $obj = new self(); + $all_actor = $obj->find("uuid IS NULL"); + foreach($all_actor as $actors_id => $actor) { + $obj->update(array('id' => $actors_id, + 'uuid' => plugin_formcreator_getUuid())); + } + } + + public function prepareInputForAdd($input) { + + // generate a uniq id + if (!isset($input['uuid']) + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } + + return $input; + } + + public static function uninstall() + { + global $DB; + + $table = self::getTable(); + $query = "DROP TABLE IF EXISTS `$table`"; + return $DB->query($query) or die($DB->error()); + } + + /** + * Import a form's targetticket's actor into the db + * @see PluginFormcreatorTargetTicket::import + * + * @param integer $targettickets_id id of the parent targetticket + * @param array $actor the actor data (match the actor table) + * @return integer the actor's id + */ + public static function import($targetchanges_id = 0, $actor = array()) { + $item = new self; + + $actor['plugin_formcreator_targetchanges_id'] = $targetchanges_id; + + // retrieve FK + if (isset($actor['_question'])) { + $section = new PluginFormcreatorSection; + $question = new PluginFormcreatorQuestion; + $exploded = explode('##$$##', $actor['_question']); + + if (plugin_formcreator_getFromDBByField($section, 'name', $exploded[0]) + && $questions_id = plugin_formcreator_getFromDBByField($question, 'name', $exploded[1])) { + $actor['actor_value'] = $questions_id; + } else{ + return false; + } + + } else if (isset($actor['_user'])) { + $user = new User; + if ($users_id = plugin_formcreator_getFromDBByField($user, 'name', $actor['_user'])) { + $actor['actor_value'] = $users_id; + } else { + return false; + } + } else if (isset($actor['_group'])) { + $group = new Group; + if ($groups_id = plugin_formcreator_getFromDBByField($group, 'completename', $actor['_user'])) { + $actor['actor_value'] = $groups_id; + } else { + return false; + } + } else if (isset($actor['_supplier'])) { + $supplier = new Supplier; + if ($suppliers_id = plugin_formcreator_getFromDBByField($supplier, 'name', $actor['_user'])) { + $actor['actor_value'] = $suppliers_id; + } else { + return false; + } + } + + if ($actors_id = plugin_formcreator_getFromDBByField($item, 'uuid', $actor['uuid'])) { + // add id key + $actor['id'] = $actors_id; + + // update actor + $item->update($actor); + } else { + //create actor + $actors_id = $item->add($actor); + } + + return $actors_id; + } + + /** + * Export in an array all the data of the current instanciated actor + * @return array the array with all data (with sub tables) + */ + public function export() { + if (!$this->getID()) { + return false; + } + + $target_actor = $this->fields; + + unset($target_actor['id'], + $target_actor['plugin_formcreator_targetchanges_id']); + + // export FK + switch ($target_actor['actor_type']) { + case 'question_person': + case 'question_group': + case 'question_supplier': + $question = new PluginFormcreatorQuestion; + $section = new PluginFormcreatorSection; + if ($question->getFromDB($target_actor['actor_value']) + && $section->getFromDB($question->fields['plugin_formcreator_sections_id'])) { + $target_actor['_question'] = $section->fields['name']. + "##$$##". + $question->fields['name']; + unset($target_actor['actor_value']); + } + break; + case 'person': + $user = new User; + if ($user->getFromDB($target_actor['actor_value'])) { + $target_actor['_user'] = $user->fields['name']; + unset($target_actor['actor_value']); + } + break; + case 'group': + $group = new Group; + if ($group->getFromDB($target_actor['actor_value'])) { + $target_actor['_group'] = $group->fields['completename']; + unset($target_actor['actor_value']); + } + break; + case 'supplier': + $supplier = new Supplier; + if ($supplier->getFromDB($target_actor['actor_value'])) { + $target_actor['_supplier'] = $supplier->fields['name']; + unset($target_actor['actor_value']); + } + break; + } + + return $target_actor; + } + +} \ No newline at end of file From 3de6dd89adfb3791c621bae4730fce7ad69ca513 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 09:28:56 +0100 Subject: [PATCH 010/178] css and icon for print form --- css/styles.css | 3 +-- inc/form.class.php | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/css/styles.css b/css/styles.css index 9afe65ecd..0a58a373b 100644 --- a/css/styles.css +++ b/css/styles.css @@ -138,8 +138,7 @@ form.formcreator_form { .formcreator_form > h1 { text-align: center; font-weight: bold; - font-size: 1.5em; - text-decoration: underline; + font-size: 1.8em; margin: 0 0 15px; } diff --git a/inc/form.class.php b/inc/form.class.php index aa45e7ba9..80aedd3d7 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -828,10 +828,18 @@ public function displayUserForm(CommonGLPI $item) $datas = null; } - echo ''; - echo '

' . $item->fields['name'] . '

'; + // Print css media + echo Html::css(FORMCREATOR_ROOTDOC."/css/print.css", array('media' => 'print')); + + // Display form + echo "getID()."' method='post' role='form' enctype='multipart/form-data' + action='". $CFG_GLPI['root_doc']."/plugins/formcreator/front/form.form.php' + class='formcreator_form form_horizontal' onsubmit='return validateForm(this);'>"; + echo "

"; + echo $item->fields['name']." "; + echo ""; + echo '

'; // Form Header if (!empty($item->fields['content'])) { From bc2e6de9f3f1e9f65dd216538a49a9ca3faac1cb Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 09:47:46 +0100 Subject: [PATCH 011/178] add missing files --- css/print.css | 136 +++++++++++++++++++++++++++++++++++++++++++++++++ css/styles.css | 1 + pics/print.png | Bin 0 -> 292 bytes 3 files changed, 137 insertions(+) create mode 100644 css/print.css create mode 100644 pics/print.png diff --git a/css/print.css b/css/print.css new file mode 100644 index 000000000..ba383edba --- /dev/null +++ b/css/print.css @@ -0,0 +1,136 @@ +.print_button { + display: none; +} + +#page { + text-align: left; + margin: 10px; +} + +.form_section { + margin-left: 10px; +} + +.form-group { + margin: 20px 10px; + break-inside: avoid-page; +} + +.form_field { + margin-top: 5px; +} + +.select2-container, +input, +textarea, +.mce-edit-area { + border: 1px solid #AAA; + padding: 5px; + min-height: 15px; + width: 80%; +} + +.select2-container a { + display: none; +} + +.mce-toolbar { + display: none; +} + +input[type=submit] { + display: none; +} + +label[for] { + font-weight: bold; +} + +/** FORM ANSWER */ +.form_answer .headerRow, +.form_answer .help-block, +.form_answer .accepted_header { + display: none; +} + + +/** GLPI COMPONENTS */ +.tab_cadre_fixe, +.tab_cadre_fixe th { + border: 0; + margin: 0; + font-size: 13px; +} + +.glpi_tabs { + display: none; +} + +/** CHECKBOXES */ +.form-group-checkbox { + position:relative; + width: 16px; + height: 16px; + margin: 0 auto; + display: inline-block; + margin: 5px; +} + +.label-checkbox { + cursor:pointer; + width: 16px; + height: 16px; + display: block; +} + +.label-checkbox span { + display:block; + position:absolute; + left:0; +} + +.label-checkbox .box { + top: -2px; + border: 1px solid #222; + border-radius: 3px; + height:16px; + width:16px; +} + + +/** RADIO BUTTONS */ + +.formcreator_radios input[type = radio] { + display: none; +} +.formcreator_radios input[type = radio] + label { + cursor: pointer; + padding-left: 22px; + position: relative; + display: block; + height: 26px; +} +.formcreator_radios input[type = radio] + label:before, +.formcreator_radios input[type = radio] + label:after { + position: absolute; + content: ""; + border-radius: 50%; + transition: all 0.3s ease; +} +.formcreator_radios input[type = radio] + label:before { + top: -1px; + left: 0; + width: 15px; + height: 15px; + background-color: #727272; + box-shadow: inset 0 0 0 13px #FFF; + border: 2px solid #727272; +} +.formcreator_radios input[type = radio] + label:after { + top: 40%; + left: 9px; + width: 54px; + height: 54px; + background-color: rgba(50, 50, 50, 0.1); + transform: translate(-50%, -50%) scale(0); +} diff --git a/css/styles.css b/css/styles.css index 0a58a373b..c33ea2db9 100644 --- a/css/styles.css +++ b/css/styles.css @@ -135,6 +135,7 @@ form.formcreator_form { width: 850px; } +.form_answer h1, .formcreator_form > h1 { text-align: center; font-weight: bold; diff --git a/pics/print.png b/pics/print.png new file mode 100644 index 0000000000000000000000000000000000000000..ea7716b4b0b300512915acde365814b4789fb4b0 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQafdM`tu0UGHE`W;2@)*}TprKMF zL4LsujGSEDf|6>cW_I=t-UWpX6IZQ1b@ASlmw(rC2P^}s%J6h?43U^R^}HuvvjLAo zpl}q|TI&|e|Nq!inHimx55`COd(G)kk&1lvspEywh3EAX^lm@quXuBDj#c|QJ~qjF zO1uwD-F`2f(D3$g1=sN}O0(WB2wExiW!3g4{m0(6KJEE_{nrnp$u7b(<_kQ{TCJE4 Pw3ETp)z4*}Q$iB}>^x&X literal 0 HcmV?d00001 From e56b0972423cc31acfec363277eee0e775eb3c98 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 09:47:58 +0100 Subject: [PATCH 012/178] print for formanswer --- inc/form_answer.class.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index aceb869c9..736e5c62f 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -250,6 +250,11 @@ public function showForm($ID, $options = array()) { } $options = array('canedit' => false); + // Print css media + echo Html::css(FORMCREATOR_ROOTDOC."/css/print.css", array('media' => 'print')); + + // start form + echo "
"; $this->initForm($ID, $options); $this->showFormHeader($options); @@ -266,11 +271,16 @@ public function showForm($ID, $options = array()) { echo ''; // Form Header + echo '
'; + echo "

"; + echo $form->fields['name']." "; + echo ""; + echo "

"; if (!empty($form->fields['content'])) { - echo '
'; echo html_entity_decode($form->fields['content']); - echo '
'; } + echo '
'; if ($this->fields['status'] == 'refused') { echo '
'; @@ -379,6 +389,7 @@ function checkComment(field) { echo ''; $this->showFormButtons($options); + echo "
"; // .form_answer return true; } From b5efa566e0a7844d9296921a77b46bc354468bdd Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 09:50:49 +0100 Subject: [PATCH 013/178] fix label block --- css/styles.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/css/styles.css b/css/styles.css index c33ea2db9..21c67f4c1 100644 --- a/css/styles.css +++ b/css/styles.css @@ -200,8 +200,6 @@ form.formcreator_form { .formcreator_form .form-group > label { display: block; font-size: 1.2em; - display: inline-block; - width: 300px; line-height: 32px; } .formcreator_form .form-group:after { From 87f33a918d2df8a7a62aeb8948470116725f49b7 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 09:52:11 +0100 Subject: [PATCH 014/178] style for label --- css/styles.css | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/css/styles.css b/css/styles.css index 21c67f4c1..0fdc288cb 100644 --- a/css/styles.css +++ b/css/styles.css @@ -201,6 +201,7 @@ form.formcreator_form { display: block; font-size: 1.2em; line-height: 32px; + font-weight: bold; } .formcreator_form .form-group:after { content: ''; @@ -210,10 +211,6 @@ form.formcreator_form { height: 32px; } -.formcreator_form .form-group.required > label { - font-weight: bold; -} - .formcreator_form .form-group .form_field { width: 650px; display: inline-block; From 89c7f016d7ee017cf8d4f1530f496011f1869359 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 13 Dec 2016 10:36:32 +0100 Subject: [PATCH 015/178] allow plugin specific autoload when no user logged in; update tests --- setup.php | 145 +++++++++++------------ tests/0005_Unit/CheckboxFieldTest.php | 16 +-- tests/0005_Unit/FloatFieldTest.php | 12 +- tests/0005_Unit/IntegerFieldTest.php | 12 +- tests/0005_Unit/MultiselectFieldTest.php | 16 +-- tests/0005_Unit/SelectFieldTest.php | 16 +-- 6 files changed, 111 insertions(+), 106 deletions(-) diff --git a/setup.php b/setup.php index 1a8fc0209..6a088f17c 100644 --- a/setup.php +++ b/setup.php @@ -78,98 +78,97 @@ function plugin_init_formcreator () array_push($CFG_GLPI["document_types"], 'PluginFormcreatorForm_Answer'); $plugin = new Plugin(); - if (isset($_SESSION['glpiactiveentities_string']) - && $plugin->isInstalled('formcreator') - && $plugin->isActivated('formcreator')) { - + if ($plugin->isInstalled('formcreator') && $plugin->isActivated('formcreator')) { spl_autoload_register('plugin_formcreator_autoload'); - // Redirect to helpdesk replacement - if (strpos($_SERVER['REQUEST_URI'], "front/helpdesk.public.php") !== false) { - if (!isset($_POST['newprofile']) && !isset($_GET['active_entity'])) { - // Not changing profile or active entity - if (isset($_SESSION['glpiactiveprofile']['interface']) - && isset($_SESSION['glpiactive_entity'])) { - // Interface and active entity are set in session - if (plugin_formcreator_replaceHelpdesk()) { - Html::redirect($CFG_GLPI["root_doc"]."/plugins/formcreator/front/wizard.php"); + if (isset($_SESSION['glpiactiveentities_string'])) { + // Redirect to helpdesk replacement + if (strpos($_SERVER['REQUEST_URI'], "front/helpdesk.public.php") !== false) { + if (!isset($_POST['newprofile']) && !isset($_GET['active_entity'])) { + // Not changing profile or active entity + if (isset($_SESSION['glpiactiveprofile']['interface']) + && isset($_SESSION['glpiactive_entity'])) { + // Interface and active entity are set in session + if (plugin_formcreator_replaceHelpdesk()) { + Html::redirect($CFG_GLPI["root_doc"]."/plugins/formcreator/front/wizard.php"); + } } } } - } - // Massive Action definition - $PLUGIN_HOOKS['use_massive_action']['formcreator'] = 1; + // Massive Action definition + $PLUGIN_HOOKS['use_massive_action']['formcreator'] = 1; - // Load menu entries if user is logged in and if he has access to at least one form - if (isset($_SESSION['glpiID'])) { - // If user have acces to one form or more, add link - if (PluginFormcreatorForm::countAvailableForm() > 0) { - $PLUGIN_HOOKS['menu_toadd']['formcreator']['helpdesk'] = 'PluginFormcreatorFormlist'; - } + // Load menu entries if user is logged in and if he has access to at least one form + if (isset($_SESSION['glpiID'])) { + // If user have acces to one form or more, add link + if (PluginFormcreatorForm::countAvailableForm() > 0) { + $PLUGIN_HOOKS['menu_toadd']['formcreator']['helpdesk'] = 'PluginFormcreatorFormlist'; + } - // Add a link in the main menu plugins for technician and admin panel - $PLUGIN_HOOKS['menu_entry']['formcreator'] = 'front/formlist.php'; + // Add a link in the main menu plugins for technician and admin panel + $PLUGIN_HOOKS['menu_entry']['formcreator'] = 'front/formlist.php'; - // Config page - $links = array(); - if (Session::haveRight('entity', UPDATE)) { - $PLUGIN_HOOKS['config_page']['formcreator'] = 'front/form.php'; - $PLUGIN_HOOKS['menu_toadd']['formcreator']['admin'] = 'PluginFormcreatorForm'; - $links['config'] = '/plugins/formcreator/front/form.php'; - $links['add'] = '/plugins/formcreator/front/form.form.php'; + // Config page + $links = array(); + if (Session::haveRight('entity', UPDATE)) { + $PLUGIN_HOOKS['config_page']['formcreator'] = 'front/form.php'; + $PLUGIN_HOOKS['menu_toadd']['formcreator']['admin'] = 'PluginFormcreatorForm'; + $links['config'] = '/plugins/formcreator/front/form.php'; + $links['add'] = '/plugins/formcreator/front/form.form.php'; + } + $img = 'Waiting forms list'; + + $links[$img] = '/plugins/formcreator/front/formanswer.php'; + + // Set options for pages (title, links, buttons...) + $links['search'] = '/plugins/formcreator/front/formlist.php'; + $PLUGIN_HOOKS['submenu_entry']['formcreator']['options'] = array( + 'config' => array('title' => __('Setup'), + 'page' => '/plugins/formcreator/front/form.php', + 'links' => $links), + 'options' => array('title' => _n('Form', 'Forms', 2, 'formcreator'), + 'links' => $links), + ); } - $img = 'Waiting forms list'; - - $links[$img] = '/plugins/formcreator/front/formanswer.php'; - - // Set options for pages (title, links, buttons...) - $links['search'] = '/plugins/formcreator/front/formlist.php'; - $PLUGIN_HOOKS['submenu_entry']['formcreator']['options'] = array( - 'config' => array('title' => __('Setup'), - 'page' => '/plugins/formcreator/front/form.php', - 'links' => $links), - 'options' => array('title' => _n('Form', 'Forms', 2, 'formcreator'), - 'links' => $links), - ); - } - // Load JS and CSS files if we are on a page witch need them - if (strpos($_SERVER['REQUEST_URI'], "plugins/formcreator") !== false - || strpos($_SERVER['REQUEST_URI'], "central.php") !== false - || isset($_SESSION['glpiactiveprofile']) && - $_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { + // Load JS and CSS files if we are on a page witch need them + if (strpos($_SERVER['REQUEST_URI'], "plugins/formcreator") !== false + || strpos($_SERVER['REQUEST_URI'], "central.php") !== false + || isset($_SESSION['glpiactiveprofile']) && + $_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { - // Add specific CSS - $PLUGIN_HOOKS['add_css']['formcreator'][] = "css/styles.css"; + // Add specific CSS + $PLUGIN_HOOKS['add_css']['formcreator'][] = "css/styles.css"; - $PLUGIN_HOOKS['add_css']['formcreator'][] = 'lib/pqselect/pqselect.min.css'; - $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/pqselect/pqselect.min.js'; + $PLUGIN_HOOKS['add_css']['formcreator'][] = 'lib/pqselect/pqselect.min.css'; + $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/pqselect/pqselect.min.js'; - // Add specific JavaScript - $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'scripts/forms-validation.js.php'; - $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'scripts/scripts.js.php'; - } + // Add specific JavaScript + $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'scripts/forms-validation.js.php'; + $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'scripts/scripts.js.php'; + } - if (strpos($_SERVER['REQUEST_URI'], "helpdesk") !== false - || strpos($_SERVER['REQUEST_URI'], "central.php") !== false - || strpos($_SERVER['REQUEST_URI'], "formcreator/front/formlist.php") !== false - || strpos($_SERVER['REQUEST_URI'], "formcreator/front/wizard.php") !== false) { - $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/slinky/assets/js/jquery.slinky.js'; + if (strpos($_SERVER['REQUEST_URI'], "helpdesk") !== false + || strpos($_SERVER['REQUEST_URI'], "central.php") !== false + || strpos($_SERVER['REQUEST_URI'], "formcreator/front/formlist.php") !== false + || strpos($_SERVER['REQUEST_URI'], "formcreator/front/wizard.php") !== false) { + $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/slinky/assets/js/jquery.slinky.js'; - $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/masonry.pkgd.min.js'; - } + $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/masonry.pkgd.min.js'; + } - // Load field class and all its method to manage fields - Plugin::registerClass('PluginFormcreatorFields'); + // Load field class and all its method to manage fields + Plugin::registerClass('PluginFormcreatorFields'); - // Notification - Plugin::registerClass('PluginFormcreatorForm_Answer', array( - 'notificationtemplates_types' => true - )); + // Notification + Plugin::registerClass('PluginFormcreatorForm_Answer', array( + 'notificationtemplates_types' => true + )); - Plugin::registerClass('PluginFormcreatorEntityconfig', array('addtabon' => 'Entity')); + Plugin::registerClass('PluginFormcreatorEntityconfig', array('addtabon' => 'Entity')); + } } } diff --git a/tests/0005_Unit/CheckboxFieldTest.php b/tests/0005_Unit/CheckboxFieldTest.php index 9c899242b..4d27aae3d 100644 --- a/tests/0005_Unit/CheckboxFieldTest.php +++ b/tests/0005_Unit/CheckboxFieldTest.php @@ -100,17 +100,15 @@ public function provider() { ), ); - foreach($dataset as &$data) { - $data['field'] = new PluginFormcreatorCheckboxesField($data['fields'], $data['data']); - } - return $dataset; } /** * @dataProvider provider */ - public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorCheckboxesField($fields, $data); + $availableValues = $fieldInstance->getAvailableValues(); $expectedAvaliableValues = explode("\r\n", $fields['values']); @@ -124,7 +122,9 @@ public function testFieldAvailableValue($fields, $data, $expectedValue, $expecte /** * @dataProvider provider */ - public function testFieldValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorCheckboxesField($fields, $data); + $value = $fieldInstance->getValue(); $this->assertEquals(count($expectedValue), count($value)); foreach ($expectedValue as $expectedSubValue) { @@ -135,7 +135,9 @@ public function testFieldValue($fields, $data, $expectedValue, $expectedValidity /** * @dataProvider provider */ - public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorCheckboxesField($fields, $data); + $values = json_encode(explode("\r\n", $fields['default_values']), JSON_OBJECT_AS_ARRAY); $isValid = $fieldInstance->isValid($values); $this->assertEquals($expectedValidity, $isValid); diff --git a/tests/0005_Unit/FloatFieldTest.php b/tests/0005_Unit/FloatFieldTest.php index 936b9e9e8..d22afc47a 100644 --- a/tests/0005_Unit/FloatFieldTest.php +++ b/tests/0005_Unit/FloatFieldTest.php @@ -89,17 +89,15 @@ public function provider() { ), ); - foreach($dataset as &$data) { - $data['field'] = new PluginFormcreatorFloatField($data['fields'], $data['data']); - } - return $dataset; } /** * @dataProvider provider */ - public function testFieldValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorFloatField($fields, $data); + $value = $fieldInstance->getValue(); $this->assertEquals($expectedValue, $value); } @@ -107,7 +105,9 @@ public function testFieldValue($fields, $data, $expectedValue, $expectedValidity /** * @dataProvider provider */ - public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorFloatField($fields, $data); + $isValid = $fieldInstance->isValid($fields['default_values']); $this->assertEquals($expectedValidity, $isValid); } diff --git a/tests/0005_Unit/IntegerFieldTest.php b/tests/0005_Unit/IntegerFieldTest.php index 7751e1f0f..da95a0f2b 100644 --- a/tests/0005_Unit/IntegerFieldTest.php +++ b/tests/0005_Unit/IntegerFieldTest.php @@ -106,17 +106,15 @@ public function provider() { ), ); - foreach($dataset as &$data) { - $data['field'] = new PluginFormcreatorIntegerField($data['fields'], $data['data']); - } - return $dataset; } /** * @dataProvider provider */ - public function testFieldValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorIntegerField($fields, $data); + $value = $fieldInstance->getValue(); $this->assertEquals($expectedValue, $value); } @@ -124,7 +122,9 @@ public function testFieldValue($fields, $data, $expectedValue, $expectedValidity /** * @dataProvider provider */ - public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorIntegerField($fields, $data); + $isValid = $fieldInstance->isValid($fields['default_values']); $this->assertEquals($expectedValidity, $isValid); } diff --git a/tests/0005_Unit/MultiselectFieldTest.php b/tests/0005_Unit/MultiselectFieldTest.php index a5693c835..98ba8fdd9 100644 --- a/tests/0005_Unit/MultiselectFieldTest.php +++ b/tests/0005_Unit/MultiselectFieldTest.php @@ -91,17 +91,15 @@ public function provider() { ), ); - foreach($dataset as &$data) { - $data['field'] = new PluginFormcreatorMultiSelectField($data['fields'], $data['data']); - } - return $dataset; } /** * @dataProvider provider */ - public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorMultiSelectField($fields, $data); + $availableValues = $fieldInstance->getAvailableValues(); $expectedAvaliableValues = explode("\r\n", $fields['values']); @@ -115,7 +113,9 @@ public function testFieldAvailableValue($fields, $data, $expectedValue, $expecte /** * @dataProvider provider */ - public function testFieldValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorMultiSelectField($fields, $data); + $value = $fieldInstance->getValue(); $this->assertEquals(count($expectedValue), count($value)); foreach ($expectedValue as $expectedSubValue) { @@ -126,7 +126,9 @@ public function testFieldValue($fields, $data, $expectedValue, $expectedValidity /** * @dataProvider provider */ - public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorMultiSelectField($fields, $data); + $values = json_encode(explode("\r\n", $fields['default_values']), JSON_OBJECT_AS_ARRAY); $isValid = $fieldInstance->isValid($values); $this->assertEquals($expectedValidity, $isValid); diff --git a/tests/0005_Unit/SelectFieldTest.php b/tests/0005_Unit/SelectFieldTest.php index 9a26118c6..eb5156395 100644 --- a/tests/0005_Unit/SelectFieldTest.php +++ b/tests/0005_Unit/SelectFieldTest.php @@ -85,17 +85,15 @@ public function provider() { ), ); - foreach($dataset as &$data) { - $data['field'] = new PluginFormcreatorSelectField($data['fields'], $data['data']); - } - return $dataset; } /** * @dataProvider provider */ - public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldAvailableValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorSelectField($fields, $data); + $availableValues = $fieldInstance->getAvailableValues(); $expectedAvaliableValues = explode("\r\n", $fields['values']); @@ -109,7 +107,9 @@ public function testFieldAvailableValue($fields, $data, $expectedValue, $expecte /** * @dataProvider provider */ - public function testFieldValue($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorSelectField($fields, $data); + $value = $fieldInstance->getValue(); $this->assertEquals($expectedValue, $value); } @@ -117,7 +117,9 @@ public function testFieldValue($fields, $data, $expectedValue, $expectedValidity /** * @dataProvider provider */ - public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity, $fieldInstance) { + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorSelectField($fields, $data); + $isValid = $fieldInstance->isValid($fields['default_values']); $this->assertEquals($expectedValidity, $isValid); } From feae8301ca6e56df7df7bdc162020156e446760e Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 13:46:36 +0100 Subject: [PATCH 016/178] review design of form questions admin --- css/styles.css | 11 ++++ inc/question.class.php | 126 +++++++++++++++++++---------------------- pics/delete.png | Bin 760 -> 344 bytes pics/down.png | Bin 416 -> 149 bytes pics/down2.png | Bin 435 -> 0 bytes pics/edit.png | Bin 0 -> 388 bytes pics/not-required.png | Bin 510 -> 389 bytes pics/pencil.png | Bin 474 -> 0 bytes pics/required.png | Bin 569 -> 493 bytes pics/up.png | Bin 367 -> 148 bytes pics/up2.png | Bin 370 -> 0 bytes 11 files changed, 70 insertions(+), 67 deletions(-) delete mode 100644 pics/down2.png create mode 100644 pics/edit.png delete mode 100644 pics/pencil.png delete mode 100644 pics/up2.png diff --git a/css/styles.css b/css/styles.css index 0fdc288cb..c8b791233 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1361,6 +1361,17 @@ span.fc_list_icon { padding-top: 15px; } +.section_row, +.section_row th { + background-color: #CCC; +} + +.form_control { + width: 23px; + float: right; + min-height: 1px; +} + /* ################--------------- Responsive ---------------#################### */ @media screen and (max-width: 700px) { form.formcreator_form { diff --git a/inc/question.class.php b/inc/question.class.php index 102cb4f2d..6bb91edae 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -97,40 +97,37 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi $token = Session::getNewCSRFToken(); foreach ($found_sections as $section) { $tab_sections[] = $section['id']; - echo ''; - echo '' . $section['name'] . ''; - echo ' '; - - echo ''; - if($section['order'] != 1) { - echo '* '; - } else { - echo ' '; - } + echo ''; + echo ''; + echo ""; + echo $section['name']; + echo ''; echo ''; - echo ''; + + echo ''; + + echo ""; + echo ' '; + echo ""; + + echo ""; if($section['order'] != $section_number) { - echo '* '; - } else { - echo ' '; + echo ''; } - echo ''; + echo ""; - echo ''; - echo '* '; - echo ''; + echo ""; + if($section['order'] != 1) { + echo ' '; + } + echo ""; - echo ''; - echo '* '; echo ''; echo ''; @@ -144,9 +141,11 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi $i++; $tab_questions[] = $question['id']; echo ''; - echo ''; - echo ' '; + echo ''; + echo ""; + echo ' '; echo $question['name']; + echo ""; echo ''; echo ''; @@ -161,45 +160,37 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi // avoid quote js error $question['name'] = htmlspecialchars_decode($question['name'], ENT_QUOTES); - if ($fields['required'] == 0) { - echo ' '; - } elseif($question['required']) { - echo '* '; - } else { - echo '* '; + echo ""; + echo ' '; + echo ""; + + if ($fields['required'] != 0) { + $required_pic = ($question['required'] ? "required": "not-required"); + echo ""; + echo " "; + echo ""; } - echo ''; - echo ''; + + echo ""; if($question['order'] != 1) { echo '* '; - } else { - echo ' '; + title="' . __('Bring up') . '" + onclick="moveQuestion(\'' . $token . '\', ' . $question['id'] . ', \'up\');" align="absmiddle"> '; } - echo ''; - echo ''; + echo ""; + + echo ""; if($question['order'] != $question_number) { echo '* '; - } else { - echo ' '; + title="' . __('Bring down') . '" + onclick="moveQuestion(\'' . $token . '\', ' . $question['id'] . ', \'down\');"> '; } - echo ''; - echo ''; - echo '* '; - echo ''; - echo ''; - echo '* '; + echo ""; + echo ''; echo ''; } @@ -208,20 +199,21 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi echo ''; echo ''; echo ' - + + + '.__('Add a question', 'formcreator').' '; echo ''; echo ''; } - echo ''; - echo ''; + echo ''; + echo ''; echo ' - + + + '.__('Add a section', 'formcreator').' '; echo ''; + echo ''; echo ''; echo ""; diff --git a/pics/delete.png b/pics/delete.png index 10d117c9b64381bda985bfd031f7f3019ce046d5..94f342b694a29c54bba7cd10e294789a6051097b 100644 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaGJa)3{WE0DIPF}V0jy$ooLLP?Nc zFaskq3o9EZH=lsGoPv_FimHZ|xkL1+a~Ch)d-USv@4xf;IxT=|TRdGHLnOj$`yL84 zDG0QLw*~}y?{&G{@V)*NhvE9nW$*9T7VqBdpt7FHlCS03+K-Hvvve0p*(7&(2|B+$ z`Rm_8ztoavFVp-(9o! w(s{k(Wxda@7_LmRJQJkSx@L`1>bHGyG5dw4Fziuh0=kF6)78&qol`;+0AS8^cK`qY literal 760 zcmVsB5W0pa9DW|C;rI&fG(Hpcg<{RNiEY@Ni#$m z7UDAx5Mb9;;hM?FC%eb4UhejWOlynk|J$bN_lB6o82-wuZ{Of*GwavND)$=5BBKC6phj@mtYB|!U@Jrr7Ze>$J3on= z0o$tv*mptGCb%~@<(ASr&llQEIWZS6!LINK9>Qv4*3QG^;gMuSLIsXZx3+*hF{v-M zrY?&s(Sy>_!dp!X9qm^RX*3`^5XwUYZu8g1!aPiNbU@IF#D5YD^;v&tq{rR z-I6++u_aHDnhHBZ_EUhrHkX%SytfB}Q%?1stgXwI%H`h~F7*loiQpM~@_6ni**p#h zU|=A4{C>jL!9|=jEPN?ICR_3Oyvs;MdG)wKUwHV~Q3wu_10Z9GM)ZZuFD`+7auUKc z8K&eaU5*eSaRPcgk`Y~Xxlwfl2hXM9R7N^ZWuE7A@N62#_{}?=-$qe^eYcB^Zl_ZQ zU-Y&2n^g)NP^aL;nbXv2{6>@A??eT)5@wY5-04CuOf zqq9LJ`ZQ*)5&i!MwirYa|5e7Ife2G}_7F4sz5$nOM^}D+`wP{UM)aBe#Q;4KodpHP q^|`sju&rDU$KGzOwvlxIGyej0@uzh-;@=nm0000K0G~gQu&X%Q~loCIGzAC^-NC literal 416 zcmV;R0bl-!P)nFoZT^&OUaZx47r!Q_YeEaqdjDGg_J28` zyd;qO42a+UhuVzd0-yp8AjJy`a2&Ds7l=Vo^c|}KBQ!4n1Q-B#r;jTL7vMnv0000< KMNUMnLSTZw8LtNb diff --git a/pics/down2.png b/pics/down2.png deleted file mode 100644 index 7b7d399dbb657075d942b223f1c4f84f20ed58e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmV;k0ZjghP)Ef{TqI zJ#+cL*U0J_u_YvD4JJ`Dd4`#mN(>et=@a)EPMmtkkiPc@s%CgBz)fRh6aZ3EK+JjN z8RMi^Ul>?H;#)2=OnUYCzZ_6r63Bf9#BcvYZANhcPyq*!;ss(>9I^Koh(81IcdQ1C d(7XT;U;qf(mj`N`G86y+002ovPDHLkV1hy0$C>~D diff --git a/pics/edit.png b/pics/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..55c036859ce9024d1708f8cb6413b967ed7813e8 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S3?yCqj{O5tbpbvhu0Yym;DA`(RZgG_G)sc~ zf*F{Y*|>Rl`6T5OEi7$p?d%;Kot#}<-GY{_UcYJk&NJsOKY8~0?fc(#vi9xe9M)O_c5msSSjtHNKyYuCznG|sGiV|6JZ&41Zq zp*tCEU0OP7ZjTZ+)cE!4Ot?@`FzfBa-QRD&x8gk+Rx2j;f9bU!%f%;#@|#X~fAsQaGJb%0NZE08`vKwwIQ`Awkp8YMw~ z!3>PdY}|sXYL-^kw)P>Rk?9$k`3+6Y6DQ4>wPow}6Q^$7dGPY%=kGtOnKsq{^-T11 zaSV|N&z;~Y)D$4#d^p{WQ7|x2gyl;4f8kvYZCWQjm4;91Qt>QWY|n6^YftJ>mLIfv@y%QG$>GWp_G{o%QSe3@3})&TF7(@qP;R=)J! z=VCd3?fTodvXw9H3EwMnAUP-AQNdIFMbhz2b9OW*S;#$8-E{KH{_wZnm-vmE1#5l( StcU_Sj=|H_&t;ucLK6UIjL8fD literal 510 zcmV8($D#XH8I-M?|d-x|CFexosfkYi6 z>d1}g1;u6Z-^i^xlYBlt(Q*ZVb;B^qxLyzhMdF!C`S^yWX;-?g+gQ{0{km$nx&k+O zfK7l!fLWOi_3?M)42UV1L=pj>a&r@4iO^C7A{p^1bn!p1FWAdp97Hl44j1fGw9Czw zYA%JZxaZYs^)8Xb!C-KJX$tc)0mZpE5S*(TEhebdY7gu0;2IL8*pz^ECQPx7W*}`s zW8o!7oF|qqvA;s1n#5FJVZu#s6c~!!nVd;ZF!8nH4LY9ZJ)`%4&lLMc)LhOaCm6xT zcUx+&*DFMRzu$ixkH-NIY>xkwgb`i&3hj0~i`kMfZQDMwEbCa#UDv&F9A_ktN<#F# z(P)H8KhqcbiO#3fX&2jF%Lj^w)W&!4SNRcO01q(`$OiEt3jhEB07*qoM6N<$f)`)d A%m4rY diff --git a/pics/pencil.png b/pics/pencil.png deleted file mode 100644 index d5ba3d5962359f1d6e4c7965e89850570307fe0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VV#4P)RCwBy(#=Z(K^O+`$FQyiC3%oK zWOa$6@}mDhhloB7-Re|ARQC|1AW$jjuq6bB5Z;3bx=2b%Mui{grMgHUMQfs^;@8?V zyJTS6G7ap)%`si2O~Czmj&i09A<0Y66>`{b))W1-3P{8e zYgvHnmSAu|3-6T|+@?)Odk|2_;u$r-zX2(FWnK|!Tg72WfgQ_+j=mBQo2Zb-Ns3cI z_MNU4;0kLnzZaD7pSw_xKWL!>4kGYPb+{(rQU)8ji-uSnO7Z4f z(-Fgz>bqfSW-J9HjweaSupW4H14$Z?%hCT5n6Oj=DOPAqCraJ3KvAGyE;3^&;N-p? zr=BM$OL;(JfFsnyjHMD{dQaH!>Hwb*S0HUYM8KY{v;F{`Yf%#9 z7tFxO%*MgREhsLjqN=8;YiVU|YabFC7MYZuk(uAn)Z9OD(u`RPmaX5ib^GBHr*7T3 z_u%En&)$CjO5_Wggn+arOhpe0W% zH@)ZS@OqdaFm1w0vEY)Gl}69vh25V$SsWg+>PGbhZttikhR?fpGT&tSGP(1cZpoqL zZtXmGqFpC)oiH=o!~C>M(YmP9+Wgs?0N=~IRNo|@)wY|HJdw?su2! aE%6u|1=i#v8y$h3VDNPHb6Mw<&;$TgaI0GY literal 569 zcmV-90>=G`P)8AP@ryNI*Dpxg>jc z$=loA=gi$+SoSWBKKOXw&CJbwGjG;7=lGvfxX4jAW>!#1QNA#PD(K+=CVIREm1qSU zy(Jd@eNc?zT)}}tvrE|UB~E>P3bdmAM%b?67Z;fvf|2A1;$0%)H;W5QMu+&}55gof0@HhiKgLYS z_2LrT9=b|tc!p8Unlxn6B}x93T6|2S4Vx18X56{ez9B01VOCJ7Une+ufKw<}oBHzc z=L&wO3NDKRPZShxi2{9RF(fUBwx~s?G|o~5H}VShq(WmF8$6V%_i$2eTPio3(_OB% z;J*0oVD|f_(_%U=qJCV(r)1zo<;}{)Rr6)nvy(iW{6&oMDSsMjdEw6!lkjY zH-={Sx-100000NkvXX Hu0mjfQ}Y7= diff --git a/pics/up.png b/pics/up.png index 766ea272c96b4243143d4d65982f37fc67cf6a4e..d13f41991a4a4e13d9dca264d5b28f0191c6f15f 100644 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2ZGmxy8xzq=wBm#UwT!FL=Hn391%M2*TUJ~RN z%)lsPy6^S(wSHIgfkG;tE{-7_(a8x8j7$o0!A2b++U5*Kmrr*)o+(l|F6+Ujw3>}! XQa_ttpp2skP(6dEtDnm{r-UW|))6B4 literal 367 zcmV-#0g(QQP)4U!^p@`01ToD<#GR(kmQ2KnM^T1e=rny*jE{YXb_)h14=rXV!nN5DDZJ9Hh%iz zB7?VcfiZ{=631o$BXTrmQ~?zMogE*WVSM+&Nro?9zc73SVmWDThQ0gtoMixdXGR;U zci;v@W-`SvF)MGA&fxGY;4UqhhLaM zm)NNL_?F@F*`xncfR_IS8vw*SK+FX-kPrZQ>>Ch&0UI!y7Z?Bn3;;!Pd0Mb*g;f9m N002ovPDHLkV1nnfK>X(~1DMSSRLsW8z%b`1!&#vCgsxo>LqOupetL{^ zB>5S1iH*AF9~mxhy7WH Date: Tue, 13 Dec 2016 14:31:27 +0100 Subject: [PATCH 017/178] clone question --- front/question.form.php | 5 ++++ inc/question.class.php | 39 ++++++++++++++++++++++++++++++-- inc/question_condition.class.php | 8 ++++++- scripts/scripts.js.php | 13 +++++++++++ 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/front/question.form.php b/front/question.form.php index 56d2e04dd..e7de3641f 100644 --- a/front/question.form.php +++ b/front/question.form.php @@ -32,6 +32,11 @@ Session::checkRight("entity", UPDATE); $question->delete($_POST); + // Clone a Question + } elseif(isset($_POST["clone_question"])) { + Session::checkRight("entity", UPDATE); + $question->clone($_POST); + // Set a Question required } elseif(isset($_POST["set_required"])) { global $DB; diff --git a/inc/question.class.php b/inc/question.class.php index 6bb91edae..b1fe1f793 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -166,6 +166,12 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi onclick="deleteQuestion(' . $item->getId() . ', \'' . $token . '\', ' . $question['id'] . ')"> '; echo ""; + echo ""; + echo ' '; + echo ""; + if ($fields['required'] != 0) { $required_pic = ($question['required'] ? "required": "not-required"); echo ""; @@ -853,6 +859,29 @@ public static function uninstall() return true; } + /** + * Clone a question + * @param array $input with these keys + * - id the id of the question to clone + * @return integer the question id of the new clone + */ + public function clone($input = []) { + global $DB; + + if ($DB->isSlave()) { + return false; + } + + if (!$this->getFromDB($input[static::getIndexName()])) { + return false; + } + + // export and import the current question without uuid in order to clone it + return $this->import($this->getField('plugin_formcreator_sections_id'), + $this->export(true)); + } + + /** * Import a section's question into the db * @see PluginFormcreatorSection::import @@ -890,9 +919,11 @@ public static function import($sections_id = 0, $question = array()) { /** * Export in an array all the data of the current instanciated question + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -909,10 +940,14 @@ public function export() { $all_conditions = $form_question_condition->find("plugin_formcreator_questions_id = ".$this->getID()); foreach($all_conditions as $conditions_id => $condition) { if ($form_question_condition->getFromDB($conditions_id)) { - $question['_conditions'][] = $form_question_condition->export(); + $question['_conditions'][] = $form_question_condition->export($remove_uuid); } } + if ($remove_uuid) { + $question['uuid'] = ''; + } + return $question; } } diff --git a/inc/question_condition.class.php b/inc/question_condition.class.php index fb576a8a0..9e617a8e0 100644 --- a/inc/question_condition.class.php +++ b/inc/question_condition.class.php @@ -33,9 +33,11 @@ public static function import($questions_id = 0, $condition = array()) { /** * Export in an array all the data of the current instanciated condition + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -45,6 +47,10 @@ public function export() { unset($condition['id'], $condition['plugin_formcreator_questions_id']); + if ($remove_uuid) { + $condition['uuid'] = ''; + } + return $condition; } diff --git a/scripts/scripts.js.php b/scripts/scripts.js.php index 30d6e23bf..95ccf88d6 100644 --- a/scripts/scripts.js.php +++ b/scripts/scripts.js.php @@ -413,6 +413,19 @@ function deleteQuestion(items_id, token, question_id) { } } +function cloneQuestion(items_id, token, question_id) { + jQuery.ajax({ + url: urlFrontQuestion, + type: "POST", + data: { + id: question_id, + clone_question: 1, + plugin_formcreator_forms_id: items_id, + _glpi_csrf_token: token + } + }).done(reloadTab); +} + // === SECTIONS === var urlSection = rootDoc + "/plugins/formcreator/ajax/section.php"; From 6ab9834ad9c608765a5e6a383021b27f56d0c172 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 14:38:04 +0100 Subject: [PATCH 018/178] extend remove_uuid params to all export functions --- inc/form.class.php | 16 +++++++++++----- inc/form_profile.class.php | 8 +++++++- inc/form_validator.class.php | 8 +++++++- inc/section.class.php | 10 ++++++++-- inc/target.class.php | 10 ++++++++-- inc/targetchange_actor.class.php | 8 +++++++- inc/targetticket_actor.class.php | 8 +++++++- 7 files changed, 55 insertions(+), 13 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 80bb56167..e2b51ae36 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1573,9 +1573,11 @@ public static function countAvailableForm() { /** * Export in an array all the data of the current instanciated form + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - function export() { + function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -1609,7 +1611,7 @@ function export() { $all_sections = $form_section->find("plugin_formcreator_forms_id = ".$this->getID()); foreach($all_sections as $sections_id => $section) { $form_section->getFromDB($sections_id); - $form['_sections'][] = $form_section->export(); + $form['_sections'][] = $form_section->export($remove_uuid); } // get validators @@ -1617,7 +1619,7 @@ function export() { $all_validators = $form_validator->find("plugin_formcreator_forms_id = ".$this->getID()); foreach($all_validators as $validators_id => $validator) { $form_validator->getFromDB($validators_id); - $form['_validators'][] = $form_validator->export(); + $form['_validators'][] = $form_validator->export($remove_uuid); } // get targets @@ -1625,7 +1627,7 @@ function export() { $all_target = $form_target->find("plugin_formcreator_forms_id = ".$this->getID()); foreach($all_target as $targets_id => $target) { $form_target->getFromDB($targets_id); - $form['_targets'][] = $form_target->export(); + $form['_targets'][] = $form_target->export($remove_uuid); } // get profiles @@ -1633,7 +1635,11 @@ function export() { $all_profiles = $form_profile->find("plugin_formcreator_forms_id = ".$this->getID()); foreach($all_profiles as $profiles_id => $profile) { $form_profile->getFromDB($profiles_id); - $form['_profiles'][] = $form_profile->export(); + $form['_profiles'][] = $form_profile->export($remove_uuid); + } + + if ($remove_uuid) { + $form['uuid'] = ''; } return $form; diff --git a/inc/form_profile.class.php b/inc/form_profile.class.php index d1990c3f4..fb02755fb 100644 --- a/inc/form_profile.class.php +++ b/inc/form_profile.class.php @@ -186,9 +186,11 @@ public static function import($forms_id = 0, $form_profile = array()) { /** * Export in an array all the data of the current instanciated form_profile + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -206,6 +208,10 @@ public function export() { $form_profile['profiles_id'], $form_profile['plugin_formcreator_forms_id']); + if ($remove_uuid) { + $form_profile['uuid'] = ''; + } + return $form_profile; } } diff --git a/inc/form_validator.class.php b/inc/form_validator.class.php index cadd4fc80..882a872a6 100644 --- a/inc/form_validator.class.php +++ b/inc/form_validator.class.php @@ -124,9 +124,11 @@ public static function import($forms_id = 0, $validator = array()) { /** * Export in an array all the data of the current instanciated validator + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -150,6 +152,10 @@ public function export() { } unset($validator['items_id']); + if ($remove_uuid) { + $validator['uuid'] = ''; + } + return $validator; } } diff --git a/inc/section.class.php b/inc/section.class.php index 075da6b41..9d89dbfe9 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -271,9 +271,11 @@ public static function import($forms_id = 0, $section = array()) { /** * Export in an array all the data of the current instanciated section + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -290,10 +292,14 @@ public function export() { $all_questions = $form_question->find("plugin_formcreator_sections_id = ".$this->getID()); foreach($all_questions as $questions_id => $question) { if ($form_question->getFromDB($questions_id)) { - $section['_questions'][] = $form_question->export(); + $section['_questions'][] = $form_question->export($remove_uuid); } } + if ($remove_uuid) { + $section['uuid'] = ''; + } + return $section; } } diff --git a/inc/target.class.php b/inc/target.class.php index 6a88f70e4..ac4dd9b33 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -434,9 +434,11 @@ public static function import($forms_id = 0, $target = array()) { /** * Export in an array all the data of the current instanciated target + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -463,10 +465,14 @@ public function export() { $all_target_actors = $form_target_actor->find("`plugin_formcreator_targettickets_id` = '$targetId'"); foreach($all_target_actors as $target_actors_id => $target_actor) { if ($form_target_actor->getFromDB($target_actors_id)) { - $target['_data']['_actors'][] = $form_target_actor->export(); + $target['_data']['_actors'][] = $form_target_actor->export($remove_uuid); } } + if ($remove_uuid) { + $target['uuid'] = ''; + } + return $target; } } diff --git a/inc/targetchange_actor.class.php b/inc/targetchange_actor.class.php index c74fb5cf9..5e66b6889 100644 --- a/inc/targetchange_actor.class.php +++ b/inc/targetchange_actor.class.php @@ -116,9 +116,11 @@ public static function import($targetchanges_id = 0, $actor = array()) { /** * Export in an array all the data of the current instanciated actor + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -166,6 +168,10 @@ public function export() { break; } + if ($remove_uuid) { + $target_actor['uuid'] = ''; + } + return $target_actor; } diff --git a/inc/targetticket_actor.class.php b/inc/targetticket_actor.class.php index 817fa4f27..c59b921c1 100644 --- a/inc/targetticket_actor.class.php +++ b/inc/targetticket_actor.class.php @@ -164,9 +164,11 @@ public static function import($targettickets_id = 0, $actor = array()) { /** * Export in an array all the data of the current instanciated actor + * @param boolean $remove_uuid remove the uuid key + * * @return array the array with all data (with sub tables) */ - public function export() { + public function export($remove_uuid = false) { if (!$this->getID()) { return false; } @@ -214,6 +216,10 @@ public function export() { break; } + if ($remove_uuid) { + $target_actor['uuid'] = ''; + } + return $target_actor; } From 4bd5979b9cae57f4b60e64ec10416e1250f2d854 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 14:50:42 +0100 Subject: [PATCH 019/178] duplicate section + add missing clone icon --- front/section.form.php | 5 +++++ inc/question.class.php | 8 +++++++- inc/section.class.php | 23 +++++++++++++++++++++++ pics/clone.png | Bin 0 -> 270 bytes scripts/scripts.js.php | 13 +++++++++++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 pics/clone.png diff --git a/front/section.form.php b/front/section.form.php index 9553b807f..a66972f06 100644 --- a/front/section.form.php +++ b/front/section.form.php @@ -26,6 +26,11 @@ $section->delete($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); + // Duplicate a Section + } elseif(isset($_POST["duplicate_section"])) { + Session::checkRight("entity", UPDATE); + $section->clone($_POST); + // Move a Section } elseif(isset($_POST["move"])) { global $DB; diff --git a/inc/question.class.php b/inc/question.class.php index b1fe1f793..4574620a8 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -112,6 +112,12 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi onclick="deleteSection(' . $item->getId() . ', \'' . $token . '\', ' . $section['id'] . ')"> '; echo ""; + echo ""; + echo ' '; + echo ""; + echo ""; if($section['order'] != $section_number) { echo '"; echo ' '; echo ""; diff --git a/inc/section.class.php b/inc/section.class.php index 9d89dbfe9..3349192b3 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -234,6 +234,29 @@ public function post_purgeItem() $question->deleteByCriteria(array('plugin_formcreator_sections_id' => $this->getID()), 1); } + /** + * Clone a section + * @param array $input with these keys + * - id the id of the section to clone + * @return integer the section id of the new clone + */ + public function clone($input = []) { + global $DB; + + if ($DB->isSlave()) { + return false; + } + + if (!$this->getFromDB($input[static::getIndexName()])) { + return false; + } + + // export and import the current section without uuid in order to clone it + return $this->import($this->getField('plugin_formcreator_forms_id'), + $this->export(true)); + } + + /** * Import a form's section into the db * @see PluginFormcreatorForm::importJson diff --git a/pics/clone.png b/pics/clone.png new file mode 100644 index 0000000000000000000000000000000000000000..f22c7f268d0dd91a12d18d75832d9c4a309d5a94 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaG}eSlAhs|{s9u6b7y&?v@|AirP+ zhi5m^K%69RcNc~ZR#^`qhqJ&VvY3H^TNs2H8D`Cq01C2~c>21sKj7iz6_7k#z19XO zji5*1_ci03uWeYJO4-WX7L=#Ij$}sARz2?Im2k$-05>`PKp%?Ubgo4 w^wF ")) { jQuery.ajax({ From e36f12cd75c23ee0e6703c637b7c290491caa3b6 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 16:33:03 +0100 Subject: [PATCH 020/178] add tests --- tests/0010_Integration/CloneTest.php | 85 ++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 tests/0010_Integration/CloneTest.php diff --git a/tests/0010_Integration/CloneTest.php b/tests/0010_Integration/CloneTest.php new file mode 100644 index 000000000..978847e38 --- /dev/null +++ b/tests/0010_Integration/CloneTest.php @@ -0,0 +1,85 @@ +add(array('name' => "test clone form", + 'is_active' => true, + 'validation_required' => PluginFormcreatorForm_Validator::VALIDATION_USER)); + + $sections_id = $form_section->add(array('name' => "test clone section", + 'plugin_formcreator_forms_id' => $forms_id)); + + $questions_id_1 = $form_question->add(array('name' => "test clone question 1", + 'fieldtype' => 'text', + 'plugin_formcreator_sections_id' => $sections_id)); + $questions_id_2 = $form_question->add(array('name' => "test clone question 2", + 'fieldtype' => 'textarea', + 'plugin_formcreator_sections_id' => $sections_id)); + } + + /** + * @cover PluginFormcreatorSection::clone + */ + public function testCloneSection() { + $section = new PluginFormcreatorSection; + $new_section = new PluginFormcreatorSection; + + //get section + plugin_formcreator_getFromDBByField($section, 'name', "test clone section"); + + //clone it + $new_sections_id = $section->clone(['id' => $section->getID()]); + $this->assertNotFalse($new_sections_id); + + // check uuid + $new_section->getFromDB($new_sections_id); + $this->assertNotEquals($section->getField('uuid'), + $new_section->getField('uuid')); + + // check questions + $all_questions = $form_question->find("plugin_formcreator_sections_id = ".$section->getID()); + $all_new_questions = $form_question->find("plugin_formcreator_sections_id = ".$new_section->getID()); + $this->assertEquals(count($all_questions), count($all_new_questions)); + + // check that all question uuid are new + $uuids = $new_uuids = []; + foreach($all_questions as $question) { + $uuids[] = $question['uuid']; + } + foreach($all_new_questions as $question) { + $new_uuids[] = $question['uuid']; + } + $this->assertEquals($new_uuids, array_diff($new_uuids, $uuids)); + } + + /** + * @cover PluginFormcreatorQuestion::clone + */ + public function testCloneQuestion() { + $question = new PluginFormcreatorQuestion; + $new_question = new PluginFormcreatorQuestion; + + //get question + plugin_formcreator_getFromDBByField($question, 'name', "test clone question 1"); + + //clone it + $new_questions_id = $question->clone(['id' => $question->getID()]); + $this->assertNotFalse($new_questions_id); + + // check uuid + $new_question->getFromDB($new_questions_id); + $this->assertNotEquals($question->getField('uuid'), + $new_question->getField('uuid')); + } +} \ No newline at end of file From 9f254fc837e547c38961af0394c0d99d3557702d Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 17:02:39 +0100 Subject: [PATCH 021/178] clone is reserved word --- front/question.form.php | 2 +- front/section.form.php | 2 +- inc/question.class.php | 2 +- inc/section.class.php | 2 +- tests/0010_Integration/CloneTest.php | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/front/question.form.php b/front/question.form.php index e7de3641f..108812434 100644 --- a/front/question.form.php +++ b/front/question.form.php @@ -35,7 +35,7 @@ // Clone a Question } elseif(isset($_POST["clone_question"])) { Session::checkRight("entity", UPDATE); - $question->clone($_POST); + $question->cloneItem($_POST); // Set a Question required } elseif(isset($_POST["set_required"])) { diff --git a/front/section.form.php b/front/section.form.php index a66972f06..58ce6a88a 100644 --- a/front/section.form.php +++ b/front/section.form.php @@ -29,7 +29,7 @@ // Duplicate a Section } elseif(isset($_POST["duplicate_section"])) { Session::checkRight("entity", UPDATE); - $section->clone($_POST); + $section->cloneItem($_POST); // Move a Section } elseif(isset($_POST["move"])) { diff --git a/inc/question.class.php b/inc/question.class.php index 4574620a8..2853487c0 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -871,7 +871,7 @@ public static function uninstall() * - id the id of the question to clone * @return integer the question id of the new clone */ - public function clone($input = []) { + public function cloneItem($input = []) { global $DB; if ($DB->isSlave()) { diff --git a/inc/section.class.php b/inc/section.class.php index 3349192b3..ac889bacd 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -240,7 +240,7 @@ public function post_purgeItem() * - id the id of the section to clone * @return integer the section id of the new clone */ - public function clone($input = []) { + public function cloneItem($input = []) { global $DB; if ($DB->isSlave()) { diff --git a/tests/0010_Integration/CloneTest.php b/tests/0010_Integration/CloneTest.php index 978847e38..e8234ebff 100644 --- a/tests/0010_Integration/CloneTest.php +++ b/tests/0010_Integration/CloneTest.php @@ -39,7 +39,7 @@ public function testCloneSection() { plugin_formcreator_getFromDBByField($section, 'name', "test clone section"); //clone it - $new_sections_id = $section->clone(['id' => $section->getID()]); + $new_sections_id = $section->cloneItem(['id' => $section->getID()]); $this->assertNotFalse($new_sections_id); // check uuid @@ -74,7 +74,7 @@ public function testCloneQuestion() { plugin_formcreator_getFromDBByField($question, 'name', "test clone question 1"); //clone it - $new_questions_id = $question->clone(['id' => $question->getID()]); + $new_questions_id = $question->cloneItem(['id' => $question->getID()]); $this->assertNotFalse($new_questions_id); // check uuid From 748f8d72aef6d640ed45c78c2149234d11c9e6d3 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Tue, 13 Dec 2016 17:06:55 +0100 Subject: [PATCH 022/178] fix tests --- tests/0010_Integration/CloneTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/0010_Integration/CloneTest.php b/tests/0010_Integration/CloneTest.php index e8234ebff..1eede9d4e 100644 --- a/tests/0010_Integration/CloneTest.php +++ b/tests/0010_Integration/CloneTest.php @@ -32,8 +32,9 @@ public static function setUpBeforeClass() { * @cover PluginFormcreatorSection::clone */ public function testCloneSection() { - $section = new PluginFormcreatorSection; - $new_section = new PluginFormcreatorSection; + $section = new PluginFormcreatorSection; + $new_section = new PluginFormcreatorSection; + $form_question = new PluginFormcreatorQuestion; //get section plugin_formcreator_getFromDBByField($section, 'name', "test clone section"); From d429707764d8944bc6993cc039a050f88aaf0ec4 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 20 Dec 2016 10:51:23 +0100 Subject: [PATCH 023/178] fix form duplication target created from an other itemtype use of not defined var --- inc/form.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 80bb56167..b25d3ba80 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1399,8 +1399,8 @@ public function Duplicate() foreach($rows as $targets_id => $target_values) { unset($target_values['id'], $target_values['uuid']); - $row['plugin_formcreator_forms_id'] = $new_form_id; - if (!$new_targets_id = $target->add($row)) { + $target_values['plugin_formcreator_forms_id'] = $new_form_id; + if (!$new_targets_id = $target->add($target_values)) { return false; } @@ -1434,7 +1434,7 @@ public function Duplicate() $update_target = "UPDATE `glpi_plugin_formcreator_targets` SET `items_id` = " . $new_target_ticket_id . " - WHERE `id` = " . $new_target_id; + WHERE `id` = " . $new_targets_id; $DB->query($update_target); // Form target tickets actors From 27769a2fe735aced75f76fee23f713a7046ddc7e Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 20 Dec 2016 11:29:10 +0100 Subject: [PATCH 024/178] remove direct SQL queries --- inc/form.class.php | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index b25d3ba80..5953610b1 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1400,42 +1400,32 @@ public function Duplicate() unset($target_values['id'], $target_values['uuid']); $target_values['plugin_formcreator_forms_id'] = $new_form_id; - if (!$new_targets_id = $target->add($target_values)) { + if (!$target->add($target_values)) { return false; } - $query_ttickets = "SELECT `id`, `name`, `tickettemplates_id`, `comment`, `due_date_rule`, - `due_date_question`, `due_date_value`, `due_date_period`, `destination_entity` - FROM `glpi_plugin_formcreator_targettickets` - WHERE `id` = {$target_values['items_id']}"; - $result_ttickets = $DB->query($query_ttickets); - $result_ttickets = $DB->fetch_array($result_ttickets); - if (!$result_ttickets) return false; + if (!$target_ticket->getFromDB($target_values['items_id'])) { + return false; + } + $update_target_ticket = $target_ticket->fields; + unset($update_target_ticket['id'], $update_target_ticket['uuid']); foreach ($tab_questions as $id => $value) { - $result_ttickets['name'] = str_replace('##question_' . $id . '##', '##question_' . $value . '##', $result_ttickets['name']); - $result_ttickets['name'] = str_replace('##answer_' . $id . '##', '##answer_' . $value . '##', $result_ttickets['name']); - $result_ttickets['comment'] = str_replace('##question_' . $id . '##', '##question_' . $value . '##', $result_ttickets['comment']); - $result_ttickets['comment'] = str_replace('##answer_' . $id . '##', '##answer_' . $value . '##', $result_ttickets['comment']); + $update_target_ticket['name'] = str_replace('##question_' . $id . '##', '##question_' . $value . '##', $update_target_ticket['name']); + $update_target_ticket['name'] = str_replace('##answer_' . $id . '##', '##answer_' . $value . '##', $update_target_ticket['name']); + $update_target_ticket['comment'] = str_replace('##question_' . $id . '##', '##question_' . $value . '##', $update_target_ticket['comment']); + $update_target_ticket['comment'] = str_replace('##answer_' . $id . '##', '##answer_' . $value . '##', $update_target_ticket['comment']); } - $insert_ttickets = "INSERT INTO `glpi_plugin_formcreator_targettickets` SET - `name` = '" . addslashes($result_ttickets['name']) . "', - `tickettemplates_id` = " . (int) $result_ttickets['tickettemplates_id'] . ", - `comment` = '" . addslashes($result_ttickets['comment']) . "', - `due_date_rule` = '" . addslashes($result_ttickets['due_date_rule']) . "', - `due_date_question` = " . (int) $result_ttickets['due_date_question'] . ", - `due_date_value` = " . (int) $result_ttickets['due_date_value'] . ", - `due_date_period` = '" . addslashes($result_ttickets['due_date_period']) . "', - `destination_entity` = '" . addslashes($result_ttickets['destination_entity']) . "'"; - $DB->query($insert_ttickets); - $new_target_ticket_id = $DB->insert_id(); + $new_target_ticket = new PluginFormcreatorTargetTicket(); + $new_target_ticket->add($update_target_ticket); + $new_target_ticket_id = $new_target_ticket->getID(); if (!$new_target_ticket_id) return false; - $update_target = "UPDATE `glpi_plugin_formcreator_targets` SET - `items_id` = " . $new_target_ticket_id . " - WHERE `id` = " . $new_targets_id; - $DB->query($update_target); + $target->update(array( + 'id' => $target->getID(), + 'items_id' => $new_target_ticket_id, + )); // Form target tickets actors $rows = $target_ticket_actor->find("`plugin_formcreator_targettickets_id` = '{$target_values['items_id']}'"); From f6167bd8864006bacd6738f85b7f102661db2b76 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 20 Dec 2016 10:50:04 +0100 Subject: [PATCH 025/178] fix img tag --- inc/target.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/target.class.php b/inc/target.class.php index 6a88f70e4..0e5d0c18b 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -64,7 +64,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ echo ''; echo '* '; echo ''; From f28dd167b3535496d4af71d44972d7583d79ba70 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 20 Dec 2016 11:44:27 +0100 Subject: [PATCH 026/178] fix URL to edit image --- inc/target.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/target.class.php b/inc/target.class.php index ac4dd9b33..e60e477da 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -63,7 +63,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ echo ''; echo ''; - echo '* '; echo ''; From 760e9b65e16007adbd59cf64dc5e941f05eef6a4 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 21 Dec 2016 09:17:17 +0100 Subject: [PATCH 027/178] camelcase for method names --- inc/form.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 607536a58..737c934b8 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1310,7 +1310,7 @@ public static function uninstall() * * @return Boolean true if success, false toherwize. */ - public function Duplicate() + public function duplicate() { global $DB; @@ -1447,7 +1447,7 @@ public function Duplicate() * * @return Boolean true if success, false otherwize. */ - public function Transfer($entity) + public function transfer($entity) { global $DB; @@ -1489,7 +1489,7 @@ static function processMassiveActionsForOneItemtype(MassiveAction $ma, CommonDBT switch ($ma->getAction()) { case 'Duplicate' : foreach ($ids as $id) { - if ($item->getFromDB($id) && $item->Duplicate()) { + if ($item->getFromDB($id) && $item->duplicate()) { Session::addMessageAfterRedirect(sprintf(__('Form duplicated: %s', 'formcreator'), $item->getName())); $ma->itemDone($item->getType(), $id, MassiveAction::ACTION_OK); } else { @@ -1500,7 +1500,7 @@ static function processMassiveActionsForOneItemtype(MassiveAction $ma, CommonDBT return; case 'Transfert' : foreach ($ids as $id) { - if ($item->getFromDB($id) && $item->Transfer($ma->POST['entities_id'])) { + if ($item->getFromDB($id) && $item->transfer($ma->POST['entities_id'])) { Session::addMessageAfterRedirect(sprintf(__('Form Transfered: %s', 'formcreator'), $item->getName())); $ma->itemDone($item->getType(), $id, MassiveAction::ACTION_OK); } else { From a48ae5011b876ecb60ca006afb161eb38785d9bc Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 21 Dec 2016 12:54:53 +0100 Subject: [PATCH 028/178] fix question_condition duplication when duplicating a form (#389) * fix question_condition duplication when duplicating a form * fix test --- inc/form.class.php | 47 ++++++++++--------- .../0010_Integration/FormDuplicationTest.php | 1 + 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 737c934b8..3bc2ae054 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1360,37 +1360,40 @@ public function duplicate() } // Form sections - $rows = $form_section->find("`plugin_formcreator_forms_id` = '$old_form_id'"); - foreach($rows as $sections_id => $row) { - unset($row['id'], - $row['uuid']); - $row['plugin_formcreator_forms_id'] = $new_form_id; - if (!$new_sections_id = $form_section->add($row)) { + $sectionRows = $form_section->find("`plugin_formcreator_forms_id` = '$old_form_id'"); + foreach($sectionRows as $sections_id => $sectionRow) { + unset($sectionRow['id'], + $sectionRow['uuid']); + $sectionRow['plugin_formcreator_forms_id'] = $new_form_id; + if (!$new_sections_id = $form_section->add($sectionRow)) { return false; } // Form questions - $rows = $section_question->find("`plugin_formcreator_sections_id` = '$sections_id'"); - foreach($rows as $questions_id => $row) { - unset($row['id'], - $row['uuid']); - $row['plugin_formcreator_sections_id'] = $new_sections_id; - if (!$new_questions_id = $section_question->add($row)) { + $questionRows = $section_question->find("`plugin_formcreator_sections_id` = '$sections_id'"); + foreach($questionRows as $questions_id => $questionRow) { + unset($questionRow['id'], + $questionRow['uuid']); + $questionRow['plugin_formcreator_sections_id'] = $new_sections_id; + if (!$new_questions_id = $section_question->add($questionRow)) { return false; } + // Map old question ID to new question ID $tab_questions[$questions_id] = $new_questions_id; + } + } - // Form questions conditions - $rows = $question_condition->find("`plugin_formcreator_questions_id` = '$questions_id'"); - foreach($rows as $conditions_id => $row) { - unset($row['id'], - $row['uuid']); - $row['plugin_formcreator_questions_id'] = $new_questions_id; - if (!$new_conditions_id = $question_condition->add($row)) { - return false; - } - } + // Form questions conditions + $questionIds = implode("', '", array_keys($tab_questions)); + $rows = $question_condition->find("`plugin_formcreator_questions_id` IN ('$questionIds')"); + foreach($rows as $conditions_id => $row) { + unset($row['id'], + $row['uuid']); + $row['show_field'] = $tab_questions[$row['show_field']]; + $row['plugin_formcreator_questions_id'] = $tab_questions[$row['plugin_formcreator_questions_id']]; + if (!$new_conditions_id = $question_condition->add($row)) { + return false; } } diff --git a/tests/0010_Integration/FormDuplicationTest.php b/tests/0010_Integration/FormDuplicationTest.php index a975e35ba..c0a964da2 100644 --- a/tests/0010_Integration/FormDuplicationTest.php +++ b/tests/0010_Integration/FormDuplicationTest.php @@ -80,6 +80,7 @@ public function testInitCreateForm() { $showFieldName = $questionData['show_field']; $showfield = new PluginFormcreatorQuestion(); $showfield->getFromDBByQuery("WHERE `plugin_formcreator_sections_id` = '$sectionId' AND `name` = '$showFieldName'"); + $questionData['show_field'] = $showfield->getID(); $question->updateConditions($questionData); } } From 2e42c5e87e58636cf28e1bc75a9d689f147ae10b Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 21 Dec 2016 15:55:44 +0100 Subject: [PATCH 029/178] Feature/323 clean sql (#393) * direct SQL cleanup * create mthhods to move up / down questions and sections closes #323 --- front/form_profile.form.php | 16 ++++++---- front/formdisplay.php | 14 ++++----- front/question.form.php | 24 ++++----------- front/section.form.php | 24 ++++----------- inc/question.class.php | 38 +++++++++++++++++++++++ inc/section.class.php | 60 +++++++++++++++++++++++++++++++++++-- 6 files changed, 121 insertions(+), 55 deletions(-) diff --git a/front/form_profile.form.php b/front/form_profile.form.php index 5f0a90232..0b32f3e7a 100644 --- a/front/form_profile.form.php +++ b/front/form_profile.form.php @@ -16,15 +16,19 @@ )); } - $table = getTableForItemType('PluginFormcreatorForm_Profile'); - $DB->query("DELETE FROM $table WHERE plugin_formcreator_forms_id = " . (int) $_POST["form_id"]); + $form_profile = new PluginFormcreatorForm_Profile(); + $form_profile->deleteByCriteria(array( + 'plugin_formcreator_forms_id' => (int) $_POST["form_id"], + )); + $table = PluginFormcreatorForm_Profile::getTable(); foreach($_POST["profiles_id"] as $profile_id) { if ($profile_id != 0) { - $query = "INSERT IGNORE INTO $table SET - `plugin_formcreator_forms_id` = " . (int) $_POST["form_id"] .", - `profiles_id` = " . (int) $profile_id; - $DB->query($query); + $form_profile = new PluginFormcreatorForm_Profile(); + $form_profile->add(array( + 'plugin_formcreator_forms_id' => (int) $_POST["form_id"], + 'profiles_id' => (int) $profile_id, + )); } } Html::back(); diff --git a/front/formdisplay.php b/front/formdisplay.php index 7edbd1b2d..210c9dd40 100644 --- a/front/formdisplay.php +++ b/front/formdisplay.php @@ -12,14 +12,12 @@ Session::checkLoginUser(); } if($form->fields['access_rights'] == PluginFormcreatorForm::ACCESS_RESTRICTED) { - $table = getTableForItemType('PluginFormcreatorForm_Profile'); - $query = "SELECT * - FROM $table - WHERE profiles_id = {$_SESSION['glpiactiveprofile']['id']} - AND plugin_formcreator_forms_id = {$form->fields['id']}"; - $result = $DB->query($query); - - if($DB->numrows($result) == 0) { + $form_profile = new PluginFormcreatorForm_Profile(); + $formId = $form->getID(); + $activeProfileId = $_SESSION['glpiactiveprofile']['id']; + $rows = $form_profile->find("profiles_id = '$activeProfileId' + AND plugin_formcreator_forms_id = '$formId'", "", "1"); + if(count($rows) == 0) { Html::displayRightError(); exit(); } diff --git a/front/question.form.php b/front/question.form.php index 108812434..28a90ccbd 100644 --- a/front/question.form.php +++ b/front/question.form.php @@ -46,27 +46,13 @@ // Move a Question } elseif(isset($_POST["move"])) { - global $DB; - Session::checkRight("entity", UPDATE); - $table = getTableForItemtype('PluginFormcreatorQuestion'); - $result = $DB->query("SELECT `order`, `plugin_formcreator_sections_id` FROM $table WHERE id = " . $_POST['id']); - list($order, $section_id) = $DB->fetch_array($result); - - if($_POST["way"] == 'up') { - $result = $DB->query("SELECT `id`, `order` FROM $table WHERE `order` < $order AND plugin_formcreator_sections_id = $section_id ORDER BY `order` DESC LIMIT 0, 1"); - if($DB->numrows($result) != 0) { - list($id2, $order2) = $DB->fetch_array($result); - $DB->query("UPDATE $table SET `order` = $order2 WHERE `id` = " . (int) $_POST['id']); - $DB->query("UPDATE $table SET `order` = $order WHERE `id` = $id2"); - } - } else { - $result = $DB->query("SELECT `id`, `order` FROM $table WHERE `order` > $order AND plugin_formcreator_sections_id = $section_id ORDER BY `order` ASC LIMIT 0, 1"); - if($DB->numrows($result) != 0) { - list($id2, $order2) = $DB->fetch_array($result); - $DB->query("UPDATE $table SET `order` = $order2 WHERE `id` = " . (int) $_POST['id']); - $DB->query("UPDATE $table SET `order` = $order WHERE `id` = $id2"); + if ($question->getFromDB((int) $_POST['id'])) { + if($_POST["way"] == 'up') { + $question->moveUp(); + } else { + $question->moveDown(); } } diff --git a/front/section.form.php b/front/section.form.php index 58ce6a88a..cb550523a 100644 --- a/front/section.form.php +++ b/front/section.form.php @@ -33,27 +33,13 @@ // Move a Section } elseif(isset($_POST["move"])) { - global $DB; - Session::checkRight("entity", UPDATE); - $table = getTableForItemtype('PluginFormcreatorSection'); - $result = $DB->query("SELECT `order`, `plugin_formcreator_forms_id` FROM $table WHERE id = " . $_POST['id']); - list($order, $form_id) = $DB->fetch_array($result); - - if($_POST["way"] == 'up') { - $result = $DB->query("SELECT `id`, `order` FROM $table WHERE `order` < $order AND plugin_formcreator_forms_id = $form_id ORDER BY `order` DESC LIMIT 0, 1"); - if($DB->numrows($result) != 0) { - list($id2, $order2) = $DB->fetch_array($result); - $DB->query("UPDATE $table SET `order` = $order2 WHERE `id` = " . (int) $_POST['id']); - $DB->query("UPDATE $table SET `order` = $order WHERE `id` = $id2"); - } - } else { - $result = $DB->query("SELECT `id`, `order` FROM $table WHERE `order` > $order AND plugin_formcreator_forms_id = $form_id ORDER BY `order` ASC LIMIT 0, 1"); - if($DB->numrows($result) != 0) { - list($id2, $order2) = $DB->fetch_array($result); - $DB->query("UPDATE $table SET `order` = $order2 WHERE `id` = " . (int) $_POST['id']); - $DB->query("UPDATE $table SET `order` = $order WHERE `id` = $id2"); + if ($section->getFromDB((int) $_POST['id'])) { + if($_POST["way"] == 'up') { + $section->moveUp(); + } else { + $section->moveDown(); } } diff --git a/inc/question.class.php b/inc/question.class.php index 2853487c0..c74fb13bb 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -533,6 +533,44 @@ protected function deserializeDefaultValue($input) { return $input; } + public function moveUp() { + $order = $this->fields['order']; + $sectionId = $this->fields['plugin_formcreator_sections_id']; + $otherItem = new static(); + $otherItem->getFromDBByQuery("WHERE `plugin_formcreator_sections_id` = '$sectionId' + AND `order` < '$order' + ORDER BY `order` DESC LIMIT 1"); + if (!$otherItem->isNewItem()) { + $this->update(array( + 'id' => $this->getID(), + 'order' => $otherItem->getField('order'), + )); + $otherItem->update(array( + 'id' => $otherItem->getID(), + 'order' => $order, + )); + } + } + + public function moveDown() { + $order = $this->fields['order']; + $sectionId = $this->fields['plugin_formcreator_sections_id']; + $otherItem = new static(); + $otherItem->getFromDBByQuery("WHERE `plugin_formcreator_sections_id` = '$sectionId' + AND `order` > '$order' + ORDER BY `order` ASC LIMIT 1"); + if (!$otherItem->isNewItem()) { + $this->update(array( + 'id' => $this->getID(), + 'order' => $otherItem->getField('order'), + )); + $otherItem->update(array( + 'id' => $otherItem->getID(), + 'order' => $order, + )); + } + } + public function updateConditions($input) { global $DB; diff --git a/inc/section.class.php b/inc/section.class.php index ac889bacd..4a1f05c26 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -206,10 +206,26 @@ public function prepareInputForAdd($input) **/ public function prepareInputForUpdate($input) { - if (!isset($input['plugin_formcreator_forms_id'])) { - $input['plugin_formcreator_forms_id'] = $this->fields['plugin_formcreator_forms_id']; + // Decode (if already encoded) and encode strings to avoid problems with quotes + foreach ($input as $key => $value) { + $input[$key] = plugin_formcreator_encode($value); + } + + // Control fields values : + // - name is required + if(isset($input['name']) + && empty($input['name'])) { + Session::addMessageAfterRedirect(__('The title is required', 'formcreato'), false, ERROR); + return array(); } - return $this->prepareInputForAdd($input); + + // generate a uniq id + if (!isset($input['uuid']) + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } + + return $input; } @@ -257,6 +273,44 @@ public function cloneItem($input = []) { } + public function moveUp() { + $order = $this->fields['order']; + $formId = $this->fields['plugin_formcreator_forms_id']; + $otherItem = new static(); + $otherItem->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId' + AND `order` < '$order' + ORDER BY `order` DESC LIMIT 1"); + if (!$otherItem->isNewItem()) { + $this->update(array( + 'id' => $this->getID(), + 'order' => $otherItem->getField('order'), + )); + $otherItem->update(array( + 'id' => $otherItem->getID(), + 'order' => $order, + )); + } + } + + public function moveDown() { + $order = $this->fields['order']; + $formId = $this->fields['plugin_formcreator_forms_id']; + $otherItem = new static(); + $otherItem->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId' + AND `order` > '$order' + ORDER BY `order` ASC LIMIT 1"); + if (!$otherItem->isNewItem()) { + $this->update(array( + 'id' => $this->getID(), + 'order' => $otherItem->getField('order'), + )); + $otherItem->update(array( + 'id' => $otherItem->getID(), + 'order' => $order, + )); + } + } + /** * Import a form's section into the db * @see PluginFormcreatorForm::importJson From 65c9f58a6b2bf94fde85466d505b52035557810e Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 22 Dec 2016 09:10:51 +0100 Subject: [PATCH 030/178] reset search engine in wizard when showing requests for assistance (#402) --- inc/wizard.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/wizard.class.php b/inc/wizard.class.php index cfb2d7014..eacaf8176 100644 --- a/inc/wizard.class.php +++ b/inc/wizard.class.php @@ -69,7 +69,7 @@ public static function header($title) { echo ''; echo '
  • '; - echo ''; + echo ''; echo ''; echo ''; echo '
  • '; From 6a3823785a6303e8e1e32ec6a896a111ed9dbfb8 Mon Sep 17 00:00:00 2001 From: btry Date: Fri, 23 Dec 2016 08:53:42 +0100 Subject: [PATCH 031/178] repair class name consistency for notifications renaming PluginFormcreatorFormanswer to PluginFormcreatorForm_answer broke notification setup close #392 --- ...answer.class.php => notificationtargetform_answer.class.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename inc/{notificationtargetformanswer.class.php => notificationtargetform_answer.class.php} (99%) diff --git a/inc/notificationtargetformanswer.class.php b/inc/notificationtargetform_answer.class.php similarity index 99% rename from inc/notificationtargetformanswer.class.php rename to inc/notificationtargetform_answer.class.php index 0b5ba9520..ed18889b2 100644 --- a/inc/notificationtargetformanswer.class.php +++ b/inc/notificationtargetform_answer.class.php @@ -1,6 +1,6 @@ Date: Tue, 3 Jan 2017 09:27:03 +0100 Subject: [PATCH 032/178] css fixes; see #396 (#408) --- css/styles.css | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/css/styles.css b/css/styles.css index c8b791233..3c182e700 100644 --- a/css/styles.css +++ b/css/styles.css @@ -511,6 +511,7 @@ form.formcreator_form { #formcreator_servicecatalogue { position: absolute; width: 100%; + margin-top: 10px; } #formcreator_servicecatalogue_ticket_summary { @@ -573,7 +574,7 @@ form.formcreator_form { .plugin_formcreator_page #plugin_formcreator_wizard { - height: 100%; + height: calc(100vh - 28px - 65px); } .plugin_formcreator_marginRight { @@ -582,14 +583,14 @@ form.formcreator_form { #plugin_formcreator_wizard_categories { width: 275px; - min-height: 100vh; + min-height: calc(100vh - 28px - 65px); top: 0; bottom: 0; left: 0; float: left; } .plugin_formcreator_page #plugin_formcreator_wizard_categories { - height: 100vh; + height: calc(100vh - 28px - 65px); background-color: #f8f7f3; border-right: 1px solid #DDD; position: relative; @@ -850,17 +851,13 @@ a.plugin_formcreator_formTile_title { #plugin_formcreator_wizard_right { min-width: 116px; - height: 100vh; overflow-x: hidden; overflow-y: auto; padding: 10px 0 3px 23px; + margin: -10px 0 -3px -23px; background-color: #FFFFFF; } -.plugin_formcreator_page #plugin_formcreator_wizard_right { - height: calc(100vh - 28px); -} - #plugin_formcreator_wizard_forms { clear: both; } @@ -1322,7 +1319,8 @@ span.fc_list_icon { max-height: 100%; top: 0; overflow-y: auto; - height: calc(100% - 28px); + height: calc(100% - 28px - 65px); + min-height: 0; width: calc(100% - 300px); z-index: 0; position: relative; @@ -1493,9 +1491,9 @@ span.fc_list_icon { #page.plugin_formcreator_page { margin: 0; width: 100%; - height: inherit; margin-top: 60px; min-height: calc(100% - 100px); + overflow-x: hidden; } .toggle_menu #page.plugin_formcreator_page { From abfbc37a48bf69cdf458c600d81b93a4dd164f86 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 3 Jan 2017 09:38:44 +0100 Subject: [PATCH 033/178] remove direct sql (#405) * remove direct sql * re-use previous comment --- inc/targetticket.class.php | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 128446819..f59487d85 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1505,20 +1505,26 @@ public function save(PluginFormcreatorForm_Answer $formanswer) { // Attach validation message as first ticket followup if validation is required and // if is set in ticket target configuration - // /!\ Followup is directly saved to the database to avoid double notification on ticket - // creation and add followup if ($form->fields['validation_required'] && $this->fields['validation_followup']) { $message = addslashes(__('Your form has been accepted by the validator', 'formcreator')); if (!empty($formanswer->fields['comment'])) { $message.= "\n".addslashes($formanswer->fields['comment']); } - $query = "INSERT INTO `glpi_ticketfollowups` SET - `tickets_id` = $ticketID, - `date` = NOW(), - `users_id` = {$_SESSION['glpiID']}, - `content` = \"$message\""; - $DB->query($query); + // avoid double notification on ticket creation and add followup + $use_mailing = $CFG_GLPI['use_mailing']; + $CFG_GLPI['use_mailing'] = '0'; + + $ticketFollowup = new TicketFollowup(); + $ticketFollowup->add(array( + 'tickets_id' => $ticketID, + 'date' => date('Y-m-d H:i:s'), + 'users_id' => $_SESSION['glpiID'], + 'content' => $message + )); + + // Restore mail notification setting + $CFG_GLPI['use_mailing'] = $use_mailing; } return true; From 932a921bfe8996f645fdf7b492ba0cacbf1b02e2 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 3 Jan 2017 09:28:28 +0100 Subject: [PATCH 034/178] fix forms refresh when going back to upper level of categories (Firefox) (#407) --- scripts/scripts.js.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/scripts.js.php b/scripts/scripts.js.php index e2e1d715a..95f7fecac 100644 --- a/scripts/scripts.js.php +++ b/scripts/scripts.js.php @@ -178,7 +178,7 @@ function updateCategoriesView() { label: true }); $('#plugin_formcreator_wizard_categories a.back').click( - function() { + function(event) { parentItem = $(event.target).parentsUntil('#plugin_formcreator_wizard_categories > div', 'li')[1]; parentAnchor = $(parentItem).children('a')[0]; updateWizardFormsView(parentAnchor.getAttribute('data-parent-category-id')); From a65dc3f3f4a7ca9a9906167b431a3bf1852449d7 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 3 Jan 2017 16:05:28 +0100 Subject: [PATCH 035/178] Bugfix/duplicate section or question (#390) don't use import / export feature to duplicate sections or questions --- front/question.form.php | 8 ++-- front/section.form.php | 4 +- inc/question.class.php | 36 +++++++++------- inc/section.class.php | 63 ++++++++++++++++++++++------ scripts/scripts.js.php | 4 +- tests/0010_Integration/CloneTest.php | 16 ++++--- 6 files changed, 92 insertions(+), 39 deletions(-) diff --git a/front/question.form.php b/front/question.form.php index 28a90ccbd..d40e9d568 100644 --- a/front/question.form.php +++ b/front/question.form.php @@ -32,10 +32,12 @@ Session::checkRight("entity", UPDATE); $question->delete($_POST); - // Clone a Question - } elseif(isset($_POST["clone_question"])) { + // Duplicate a Question + } elseif(isset($_POST["duplicate_question"])) { Session::checkRight("entity", UPDATE); - $question->cloneItem($_POST); + if ($question->getFromDB((int) $_POST['id'])) { + $question->duplicate(); + } // Set a Question required } elseif(isset($_POST["set_required"])) { diff --git a/front/section.form.php b/front/section.form.php index cb550523a..896eede8d 100644 --- a/front/section.form.php +++ b/front/section.form.php @@ -29,7 +29,9 @@ // Duplicate a Section } elseif(isset($_POST["duplicate_section"])) { Session::checkRight("entity", UPDATE); - $section->cloneItem($_POST); + if ($section->getFromDB((int) $_POST['id'])) { + $section->duplicate(); + } // Move a Section } elseif(isset($_POST["move"])) { diff --git a/inc/question.class.php b/inc/question.class.php index c74fb13bb..a91e76c17 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -175,7 +175,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi echo ""; echo ' '; + onclick="duplicateQuestion(' . $item->getId() . ', \'' . $token . '\', ' . $question['id'] . ')"> '; echo ""; if ($fields['required'] != 0) { @@ -904,25 +904,33 @@ public static function uninstall() } /** - * Clone a question - * @param array $input with these keys - * - id the id of the question to clone - * @return integer the question id of the new clone + * Duplicate a question + * + * @return boolean */ - public function cloneItem($input = []) { - global $DB; - - if ($DB->isSlave()) { + public function duplicate() { + $oldQuestionId = $this->getID(); + $newQuestion = new static(); + $question_condition = new PluginFormcreatorQuestion_Condition(); + + $row = $this->fields; + unset($row['id'], + $row['uuid']); + if (!$newQuestion->add($row)) { return false; } - if (!$this->getFromDB($input[static::getIndexName()])) { - return false; + // Form questions conditions + $rows = $question_condition->find("`plugin_formcreator_questions_id` IN ('$oldQuestionId')"); + foreach($rows as $conditions_id => $row) { + unset($row['id'], + $row['uuid']); + $row['plugin_formcreator_questions_id'] = $newQuestion->getID(); + if (!$new_conditions_id = $question_condition->add($row)) { + return false; + } } - // export and import the current question without uuid in order to clone it - return $this->import($this->getField('plugin_formcreator_sections_id'), - $this->export(true)); } diff --git a/inc/section.class.php b/inc/section.class.php index 4a1f05c26..16d839abb 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -251,25 +251,55 @@ public function post_purgeItem() } /** - * Clone a section - * @param array $input with these keys - * - id the id of the section to clone - * @return integer the section id of the new clone + * Duplicate a section + * + * @return boolean */ - public function cloneItem($input = []) { - global $DB; - - if ($DB->isSlave()) { + public function duplicate() { + $oldSectionId = $this->getID(); + $newSection = new static(); + $section_question = new PluginFormcreatorQuestion(); + $question_condition = new PluginFormcreatorQuestion_Condition(); + + $tab_questions = array(); + + $row = $this->fields; + unset($row['id'], + $row['uuid']); + if (!$newSection->add($row)) { return false; } - if (!$this->getFromDB($input[static::getIndexName()])) { - return false; + // Form questions + $rows = $section_question->find("`plugin_formcreator_sections_id` = '$oldSectionId'", "`order` ASC"); + foreach($rows as $questions_id => $row) { + unset($row['id'], + $row['uuid']); + $row['plugin_formcreator_sections_id'] = $newSection->getID(); + if (!$new_questions_id = $section_question->add($row)) { + return false; + } + + $tab_questions[$questions_id] = $new_questions_id; } - // export and import the current section without uuid in order to clone it - return $this->import($this->getField('plugin_formcreator_forms_id'), - $this->export(true)); + // Form questions conditions + $questionIds = implode("', '", array_keys($tab_questions)); + $rows = $question_condition->find("`plugin_formcreator_questions_id` IN ('$questionIds')"); + foreach($rows as $conditions_id => $row) { + unset($row['id'], + $row['uuid']); + if (isset($tab_questions[$row['show_field']])) { + // update show_field if id in show_field belongs to the section being duplicated + $row['show_field'] = $tab_questions[$row['show_field']]; + } + $row['plugin_formcreator_questions_id'] = $tab_questions[$row['plugin_formcreator_questions_id']]; + if (!$new_conditions_id = $question_condition->add($row)) { + return false; + } + } + + return true; } @@ -338,6 +368,13 @@ public static function import($forms_id = 0, $section = array()) { if ($sections_id && isset($section['_questions'])) { + // sort questions by order + usort($section['_questions'], function ($a, $b) { + if ($a['order'] == $b['order']) return 0; + return ($a['order'] < $b['order']) ? -1 : 1; + } + ); + foreach($section['_questions'] as $question) { PluginFormcreatorQuestion::import($sections_id, $question); } diff --git a/scripts/scripts.js.php b/scripts/scripts.js.php index 95f7fecac..ee764caf3 100644 --- a/scripts/scripts.js.php +++ b/scripts/scripts.js.php @@ -413,13 +413,13 @@ function deleteQuestion(items_id, token, question_id) { } } -function cloneQuestion(items_id, token, question_id) { +function duplicateQuestion(items_id, token, question_id) { jQuery.ajax({ url: urlFrontQuestion, type: "POST", data: { id: question_id, - clone_question: 1, + duplicate_question: 1, plugin_formcreator_forms_id: items_id, _glpi_csrf_token: token } diff --git a/tests/0010_Integration/CloneTest.php b/tests/0010_Integration/CloneTest.php index 1eede9d4e..56e262a54 100644 --- a/tests/0010_Integration/CloneTest.php +++ b/tests/0010_Integration/CloneTest.php @@ -40,11 +40,13 @@ public function testCloneSection() { plugin_formcreator_getFromDBByField($section, 'name', "test clone section"); //clone it - $new_sections_id = $section->cloneItem(['id' => $section->getID()]); - $this->assertNotFalse($new_sections_id); + $this->assertTrue($section->duplicate()); + + //get cloned section + $originalId = $section->getID(); + $new_section->getFromDBByQuery("WHERE `name` = 'test clone section' AND `id` <> '$originalId'"); // check uuid - $new_section->getFromDB($new_sections_id); $this->assertNotEquals($section->getField('uuid'), $new_section->getField('uuid')); @@ -75,11 +77,13 @@ public function testCloneQuestion() { plugin_formcreator_getFromDBByField($question, 'name', "test clone question 1"); //clone it - $new_questions_id = $question->cloneItem(['id' => $question->getID()]); - $this->assertNotFalse($new_questions_id); + $this->assertNotFalse($question->duplicate()); + + //get cloned section + $originalId = $question->getID(); + $new_question->getFromDBByQuery("WHERE `name` = 'test clone question 1' AND `id` <> '$originalId'"); // check uuid - $new_question->getFromDB($new_questions_id); $this->assertNotEquals($question->getField('uuid'), $new_question->getField('uuid')); } From 22b8ffc9e48ba897cf9edaad30dd712e27b31b78 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 3 Jan 2017 16:16:51 +0100 Subject: [PATCH 036/178] 367 html entities encoding values (#411) saved values should be html_entities encoded --- inc/fields/selectfield.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/fields/selectfield.class.php b/inc/fields/selectfield.class.php index 75e00d0ff..2360572c3 100644 --- a/inc/fields/selectfield.class.php +++ b/inc/fields/selectfield.class.php @@ -43,7 +43,7 @@ public function getAnswer() { $values = $this->getAvailableValues(); $value = $this->getValue(); - return in_array($value, $values) ? $value : $this->fields['default_values']; + return in_array(Html::entities_deep($value), $values) ? $value : $this->fields['default_values']; } public static function getName() From 1937b07fa63d7b8e96b85b5045f35efa72c6fac5 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 3 Jan 2017 16:31:17 +0100 Subject: [PATCH 037/178] fix slashes problems (#409) fix #198 --- inc/form.class.php | 19 +++++++++--- inc/question.class.php | 63 +++++++++++++++++++++++++++----------- inc/section.class.php | 1 + inc/targetticket.class.php | 4 +-- 4 files changed, 63 insertions(+), 24 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 3bc2ae054..7d6662fc8 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -944,12 +944,23 @@ public function prepareInputForAdd($input) // Control fields values : // - name is required - if(isset($input['name']) - && empty($input['name'])) { - Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); - return array(); + if(isset($input['name'])) { + if (empty($input['name'])) { + Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } + $input['name'] = addslashes($input['name']); + } + + if (isset($input['description'])) { + $input['description'] = addslashes($input['description']); } + if (isset($input['content'])) { + $input['content'] = addslashes($input['content']); + } + + return $input; } diff --git a/inc/question.class.php b/inc/question.class.php index a91e76c17..a54c4bc67 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -256,10 +256,12 @@ private function checkBeforeSave($input) { // Control fields values : // - name is required - if (isset($input['name']) - && empty($input['name'])) { - Session::addMessageAfterRedirect(__('The title is required', 'formcreator'), false, ERROR); - return array(); + if (isset($input['name'])) { + if (empty($input['name'])) { + Session::addMessageAfterRedirect(__('The title is required', 'formcreator'), false, ERROR); + return array(); + } + $input['name'] = addslashes($input['name']); } // - field type is required @@ -278,13 +280,21 @@ private function checkBeforeSave($input) // Values are required for GLPI dropdowns, dropdowns, multiple dropdowns, checkboxes, radios, LDAP $itemtypes = array('select', 'multiselect', 'checkboxes', 'radios', 'ldap'); - if (isset($input['values']) - && empty($input['values']) && in_array($input['fieldtype'], $itemtypes)) { - Session::addMessageAfterRedirect( - __('The field value is required:', 'formcreator') . ' ' . $input['name'], - false, - ERROR); - return array(); + if (in_array($input['fieldtype'], $itemtypes)) { + if (isset($input['values'])) { + if (empty($input['values'])) { + Session::addMessageAfterRedirect( + __('The field value is required:', 'formcreator') . ' ' . $input['name'], + false, + ERROR); + return array(); + } else { + $input['values'] = addslashes($input['values']); + } + } + if (isset($input['default_values'])) { + $input['default_values'] = addslashes($input['default_values']); + } } // Fields are differents for dropdown lists, so we need to replace these values into the good ones @@ -317,14 +327,15 @@ private function checkBeforeSave($input) } // A description field should have a description - if ($input['fieldtype'] == 'description' - && isset($input['description']) - && empty($input['description'])) { + if ($input['fieldtype'] == 'description') { + if (isset($input['description']) + && empty($input['description'])) { Session::addMessageAfterRedirect( __('A description field should have a description:', 'formcreator') . ' ' . $input['name'], false, ERROR); return array(); + } } // format values for numbers @@ -390,6 +401,12 @@ function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) } } + if ($input['fieldtype'] == 'textarea' || $input['fieldtype'] == 'text') { + if (isset($input['default_values'])) { + $input['default_values'] = addslashes($input['default_values']); + } + } + // Add leading and trailing regex marker automaticaly if (isset($input['regex']) && !empty($input['regex'])) { @@ -401,6 +418,16 @@ function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) else $input['regex'] = $input['regex'] . '/'; } + if (($input['fieldtype'] == 'urgency')) { + if (isset($input['values'])) { + $input['values'] = addslashes($input['values']); + } + } + + if (isset($input['description'])) { + $input['description'] = addslashes($input['description']); + } + return $input; } @@ -844,10 +871,10 @@ public static function install(Migration $migration) $result = $DB->query($query); while ($line = $DB->fetch_array($result)) { $query_update = "UPDATE `glpi_plugin_formcreator_questions` SET - `name` = '" . plugin_formcreator_encode($line['name']) . "', - `values` = '" . plugin_formcreator_encode($line['values']) . "', - `default_values` = '" . plugin_formcreator_encode($line['default_values']) . "', - `description` = '" . plugin_formcreator_encode($line['description']) . "' + `name` = '" . addslashes(plugin_formcreator_encode($line['name'])) . "', + `values` = '" . addslashes(plugin_formcreator_encode($line['values'])) . "', + `default_values` = '" . addslashes(plugin_formcreator_encode($line['default_values'])) . "', + `description` = '" . addslashes(plugin_formcreator_encode($line['description'])) . "' WHERE `id` = " . $line['id']; $DB->query($query_update) or die ($DB->error()); } diff --git a/inc/section.class.php b/inc/section.class.php index 16d839abb..2fa725a09 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -178,6 +178,7 @@ public function prepareInputForAdd($input) Session::addMessageAfterRedirect(__('The title is required', 'formcreato'), false, ERROR); return array(); } + $input['name'] = addslashes($input['name']); // generate a uniq id if (!isset($input['uuid']) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index f59487d85..d186d3457 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1197,9 +1197,9 @@ public function save(PluginFormcreatorForm_Answer $formanswer) { $datas['name'] = addslashes($this->parseTags($this->fields['name'], $formanswer, $fullform)); - $datas['content'] = htmlentities($this->parseTags($this->fields['comment'], + $datas['content'] = htmlentities(addslashes($this->parseTags($this->fields['comment'], $formanswer, - $fullform)); + $fullform))); $datas['_users_id_recipient'] = $_SESSION['glpiID']; $datas['_tickettemplates_id'] = $this->fields['tickettemplates_id']; From 4acd336ba2e8dcc88629a375c83c425a5e6782b6 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 11 Jan 2017 17:35:19 +0100 Subject: [PATCH 038/178] fix #414 : shash lost problem in form tiles (service catalog) (#418) --- inc/form.class.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 1d62637eb..1113301a0 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -649,14 +649,13 @@ public function showFormList($rootCategory = 0, $keywords = '', $helpdeskHome = $formList = array(); if ($DB->numrows($result_forms) > 0) { while ($form = $DB->fetch_array($result_forms)) { - $formDescription = plugin_formcreator_encode($form['description']); $formList[] = [ 'id' => $form['id'], 'name' => $form['name'], - 'description' => $formDescription, + 'description' => $form['description'], 'type' => 'form', 'usage_count' => $form['usage_count'], - 'is_default' => $form['is_default']?"true":"false" + 'is_default' => $form['is_default'] ? "true" : "false" ]; } } From 72b619a4c1603eb01fb2a6f537381287a20a9842 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 11 Jan 2017 17:34:38 +0100 Subject: [PATCH 039/178] need to explicitly load JS libs (#421) --- front/form.form.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/front/form.form.php b/front/form.form.php index 8a1884227..1e2e52d39 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -95,6 +95,10 @@ 'option' ); + if (version_compare(GLPI_VERSION, '9.2', 'ge')) { + Html::requireJs('tinymce'); + } + $_GET['id'] = isset($_GET['id']) ? intval($_GET['id']) : -1; $form->display($_GET); From 8e3719a1991b206ad02e4ef7f6471639de5cd743 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 11 Jan 2017 17:39:30 +0100 Subject: [PATCH 040/178] fix initialization of MESSAGE_AFTER_REDIRECT : must be a string (#417) * fix initialization of MESSAGE_AFTER_REDIRECT : must be a string * fix test --- tests/0010_Integration/UrgencyTest.php | 2 +- tests/inc/CommonDBTestCase.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/0010_Integration/UrgencyTest.php b/tests/0010_Integration/UrgencyTest.php index 03833746e..2a0ed0be0 100644 --- a/tests/0010_Integration/UrgencyTest.php +++ b/tests/0010_Integration/UrgencyTest.php @@ -139,7 +139,7 @@ public function testInitCreateTargetTicket(PluginFormcreatorForm $form) { $targetTicketData['title'] = $targetTicketData['name']; $targetTicketData['urgency_rule'] = $targetData['urgency_rule']; $targetTicketData['_urgency_question'] = $questionId; - $this->assertTrue($targetTicket->update($targetTicketData), Html::clean($_SESSION['MESSAGE_AFTER_REDIRECT'])); + $this->assertTrue($targetTicket->update($targetTicketData)); } return $urgencyQuestions; diff --git a/tests/inc/CommonDBTestCase.php b/tests/inc/CommonDBTestCase.php index 3b1bf4218..f695781c5 100644 --- a/tests/inc/CommonDBTestCase.php +++ b/tests/inc/CommonDBTestCase.php @@ -146,7 +146,7 @@ protected static function setupGLPIFramework() { ini_set("max_execution_time", "0"); ini_set('session.use_cookies', 0); //disable session cookies - $_SESSION['MESSAGE_AFTER_REDIRECT'] = ''; + $_SESSION['MESSAGE_AFTER_REDIRECT'] = []; } protected static function login($name, $password, $noauto = false) { @@ -156,7 +156,7 @@ protected static function login($name, $password, $noauto = false) { $_SESSION['glpi_use_mode'] = Session::NORMAL_MODE; $auth = new Auth(); $result = $auth->Login($name, $password, $noauto); - $_SESSION['MESSAGE_AFTER_REDIRECT'] = ''; + $_SESSION['MESSAGE_AFTER_REDIRECT'] = []; return $result; } From 0d80f7154685efc3bbd4302578314bf1e89810e9 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 11 Jan 2017 17:43:46 +0100 Subject: [PATCH 041/178] WIP : Hotfix/import export question condition (#388) * fix question_conditions import * fix question order during import --- inc/form.class.php | 2 ++ inc/question_condition.class.php | 47 ++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 1113301a0..f208c4c16 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1763,6 +1763,8 @@ public static function import($form = array()) { PluginFormcreatorSection::import($forms_id, $section); } } + // Save all question conditions stored in memory + PluginFormcreatorQuestion_Condition::import(0, array(), false); // import form's validators if ($forms_id diff --git a/inc/question_condition.class.php b/inc/question_condition.class.php index 9e617a8e0..f49b18e12 100644 --- a/inc/question_condition.class.php +++ b/inc/question_condition.class.php @@ -12,23 +12,37 @@ class PluginFormcreatorQuestion_Condition extends CommonDBChild * @param array $condition the condition data (match the condition table) * @return integer the condition's id */ - public static function import($questions_id = 0, $condition = array()) { - $item = new self; - - $condition['plugin_formcreator_questions_id'] = $questions_id; - - if ($conditions_id = plugin_formcreator_getFromDBByField($item, 'uuid', $condition['uuid'])) { - // add id key - $condition['id'] = $conditions_id; - - // update condition - $item->update($condition); + public static function import($questions_id = 0, $condition = array(), $storeOnly = true) { + static $conditionsToImport = array(); + + if ($storeOnly) { + $condition['plugin_formcreator_questions_id'] = $questions_id; + + $item = new static(); + if ($conditions_id = plugin_formcreator_getFromDBByField($item, 'uuid', $condition['uuid'])) { + // add id key + $condition['id'] = $conditions_id; + + // prepare update condition + $conditionsToImport[] = $condition; + } else { + // prepare create condition + $conditionsToImport[] = $condition; + } } else { - //create condition - $conditions_id = $item->add($condition); + // Assumes all questions needed for the stored conditions exist + foreach ($conditionsToImport as $condition) { + $item = new static(); + $question = new PluginFormcreatorQuestion(); + $condition['show_field'] = plugin_formcreator_getFromDBByField($question, 'uuid', $condition['show_field']); + if (isset($condition['id'])) { + $item->update($condition); + } else { + $item->add($condition); + } + } + $conditionsToImport = array(); } - - return $conditions_id; } /** @@ -42,7 +56,10 @@ public function export($remove_uuid = false) { return false; } + $question = new PluginFormcreatorQuestion(); + $question->getFromDB($this->fields['show_field']); $condition = $this->fields; + $condition['show_field'] = $question->getField('uuid'); unset($condition['id'], $condition['plugin_formcreator_questions_id']); From d18dc163ba7a9dd2b265231390d04f63ce1c8c9a Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 16 Jan 2017 14:11:44 +0100 Subject: [PATCH 042/178] Group import fix --- inc/targetticket_actor.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/targetticket_actor.class.php b/inc/targetticket_actor.class.php index c59b921c1..ba553e8c2 100644 --- a/inc/targetticket_actor.class.php +++ b/inc/targetticket_actor.class.php @@ -134,7 +134,7 @@ public static function import($targettickets_id = 0, $actor = array()) { } } else if (isset($actor['_group'])) { $group = new Group; - if ($groups_id = plugin_formcreator_getFromDBByField($group, 'completename', $actor['_user'])) { + if ($groups_id = plugin_formcreator_getFromDBByField($group, 'completename', $actor['_group'])) { $actor['actor_value'] = $groups_id; } else { return false; From eb5917d7ecc12acdd220756be2a8ef707e536eea Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 16 Jan 2017 14:17:48 +0100 Subject: [PATCH 043/178] fix supplier import --- inc/targetticket_actor.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/targetticket_actor.class.php b/inc/targetticket_actor.class.php index ba553e8c2..2dd747992 100644 --- a/inc/targetticket_actor.class.php +++ b/inc/targetticket_actor.class.php @@ -141,7 +141,7 @@ public static function import($targettickets_id = 0, $actor = array()) { } } else if (isset($actor['_supplier'])) { $supplier = new Supplier; - if ($suppliers_id = plugin_formcreator_getFromDBByField($supplier, 'name', $actor['_user'])) { + if ($suppliers_id = plugin_formcreator_getFromDBByField($supplier, 'name', $actor['_supplier'])) { $actor['actor_value'] = $suppliers_id; } else { return false; From 4f466e58d3299269acd50ad54f9d8b53995b8223 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 16 Jan 2017 16:13:32 +0100 Subject: [PATCH 044/178] require fileupload JS lib for GLPI 9.2 --- front/form.form.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/front/form.form.php b/front/form.form.php index 1e2e52d39..c535ae775 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -47,6 +47,11 @@ 'PluginFormcreatorForm', 'option' ); + + if (version_compare(GLPI_VERSION, '9.2', 'ge')) { + Html::requireJs('fileuplpad'); + } + $form->showImportForm(); Html::footer(); From 882916f19794473fb8dc34d865e4a76d35ebe97c Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Wed, 18 Jan 2017 10:39:11 +0100 Subject: [PATCH 045/178] replace issue view (tickets now have the priority) and change id prefix for a letter (t_ & f_) fix #400 --- inc/issue.class.php | 87 +++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/inc/issue.class.php b/inc/issue.class.php index a92199612..340cd869e 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -31,47 +31,50 @@ public static function install(Migration $migration) { // create view who merge tickets and formanswers $query = "CREATE OR REPLACE VIEW `glpi_plugin_formcreator_issues` AS - SELECT DISTINCT - CONCAT(1,`fanswer`.`id`) AS `id`, - `fanswer`.`id` AS `original_id`, - 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, - `f`.`name` AS `name`, - `fanswer`.`status` AS `status`, - `fanswer`.`request_date` AS `date_creation`, - `fanswer`.`request_date` AS `date_mod`, - `fanswer`.`entities_id` AS `entities_id`, - `fanswer`.`is_recursive` AS `is_recursive`, - `fanswer`.`requester_id` AS `requester_id`, - `fanswer`.`validator_id` AS `validator_id`, - `fanswer`.`comment` AS `comment` - FROM `glpi_plugin_formcreator_forms_answers` AS `fanswer` - JOIN `glpi_plugin_formcreator_forms` AS `f` - ON`f`.`id` = `fanswer`.`plugin_formcreator_forms_id` - LEFT JOIN `glpi_items_tickets` AS `itic` - ON `itic`.`items_id` = `fanswer`.`id` - AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' - - UNION - - SELECT DISTINCT - CONCAT(2,`tic`.`id`) AS `id`, - `tic`.`id` AS `original_id`, - 'Ticket' AS `sub_itemtype`, - `tic`.`name` AS `name`, - `tic`.`status` AS `status`, - `tic`.`date` AS `date_creation`, - `tic`.`date_mod` AS `date_mod`, - `tic`.`entities_id` AS `entities_id`, - 0 AS `is_recursive`, - `tic`.`users_id_recipient` AS `requester_id`, - '' AS `validator_id`, - `tic`.`content` AS `comment` - FROM `glpi_tickets` AS `tic` - LEFT JOIN `glpi_items_tickets` AS `itic` - ON `itic`.`tickets_id` = `tic`.`id` - AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' - WHERE ISNULL(`itic`.`items_id`) - AND `tic`.`is_deleted` = 0"; + SELECT DISTINCT + CONCAT('f_',`fanswer`.`id`) AS `id`, + `fanswer`.`id` AS `original_id`, + 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, + `f`.`name` AS `name`, + `fanswer`.`status` AS `status`, + `fanswer`.`request_date` AS `date_creation`, + `fanswer`.`request_date` AS `date_mod`, + `fanswer`.`entities_id` AS `entities_id`, + `fanswer`.`is_recursive` AS `is_recursive`, + `fanswer`.`requester_id` AS `requester_id`, + `fanswer`.`validator_id` AS `validator_id`, + `fanswer`.`comment` AS `comment` + FROM `glpi_plugin_formcreator_forms_answers` AS `fanswer` + LEFT JOIN `glpi_plugin_formcreator_forms` AS `f` + ON`f`.`id` = `fanswer`.`plugin_formcreator_forms_id` + LEFT JOIN `glpi_items_tickets` AS `itic` + ON `itic`.`items_id` = `fanswer`.`id` + AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' + GROUP BY `original_id` + HAVING COUNT(`itic`.`tickets_id`) != 1 + + UNION + + SELECT DISTINCT + CONCAT('t_',`tic`.`id`) AS `id`, + `tic`.`id` AS `original_id`, + 'Ticket' AS `sub_itemtype`, + `tic`.`name` AS `name`, + `tic`.`status` AS `status`, + `tic`.`date` AS `date_creation`, + `tic`.`date_mod` AS `date_mod`, + `tic`.`entities_id` AS `entities_id`, + 0 AS `is_recursive`, + `tic`.`users_id_recipient` AS `requester_id`, + '' AS `validator_id`, + `tic`.`content` AS `comment` + FROM `glpi_tickets` AS `tic` + LEFT JOIN `glpi_items_tickets` AS `itic` + ON `itic`.`tickets_id` = `tic`.`id` + AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' + WHERE `tic`.`is_deleted` = 0 + GROUP BY `original_id` + HAVING COUNT(`itic`.`items_id`) <= 1"; $DB->query($query) or die ($DB->error()); } @@ -360,7 +363,7 @@ public static function giveItem($itemtype, $ID, $data, $num) { $field=$searchopt[$ID]["field"]; if (isset($data['raw']['id'])) { - $id = substr($data['raw']['id'], 1); + $id = substr($data['raw']['id'], 2); } switch ("$table.$field") { From 413210f5d06647cef660870dd79dcc035e794bd2 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 23 Jan 2017 15:36:18 +0100 Subject: [PATCH 046/178] fix typo --- front/form.form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/form.form.php b/front/form.form.php index c535ae775..1d43ae77c 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -49,7 +49,7 @@ ); if (version_compare(GLPI_VERSION, '9.2', 'ge')) { - Html::requireJs('fileuplpad'); + Html::requireJs('fileupload'); } $form->showImportForm(); From 0102ec8f3eb2f44aa39ce7f280f3406bf982f1f8 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 24 Jan 2017 10:14:05 +0100 Subject: [PATCH 047/178] bump version --- setup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.php b/setup.php index 6a088f17c..ebe69b106 100644 --- a/setup.php +++ b/setup.php @@ -1,7 +1,7 @@ Date: Tue, 24 Jan 2017 16:07:49 +0100 Subject: [PATCH 048/178] remove .gitattributes --- .gitattributes | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 4db7909cb..000000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -.tx export-ignore -tools/ export-ignore -plugin.xml export-ignore From 8afaf41ac94d95e863c5363b5dcbda0490acb905 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 24 Jan 2017 15:05:25 +0100 Subject: [PATCH 049/178] refresh screenshots --- README.md | 4 +++- screenshot.png | Bin 66645 -> 46957 bytes screenshot_2.png | Bin 0 -> 38033 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 screenshot_2.png diff --git a/README.md b/README.md index c740447a8..737fc23b7 100644 --- a/README.md +++ b/README.md @@ -61,4 +61,6 @@ Fonctionnalités Pour plus d'informations, visitez [la page WIKI](https://github.com/TECLIB/formcreator/wiki) -![Configuration](/screenshot.png "Configuration") +![3.-Configuration](/screenshot.png "Configuration") + +![3.9.-Formcreators-helpdesk](/screenshot_2.png "Service catalog") diff --git a/screenshot.png b/screenshot.png index f61ddb74160c19088fadbfa965edab13436d6f5a..6ef25e06c0c40884a849e45b041388012f82841c 100644 GIT binary patch literal 46957 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 sx$Ta3Sw?08cx}&9b~rsb=P5S?t-~yuN5^0} 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ë& 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 A@c;k- diff --git a/screenshot_2.png b/screenshot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f61cd3c406f837e3ca76fdb6459c932e169d1e7c GIT binary patch literal 38033 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 Date: Tue, 24 Jan 2017 16:28:18 +0100 Subject: [PATCH 050/178] Feature/438 fix user group confusion for validator (#445) use the validator user only for actor assignation to ticket fix #438 --- inc/targetticket.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index d186d3457..84e9dea53 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1695,7 +1695,7 @@ protected function prepareActors(PluginFormcreatorForm $form, PluginFormcreatorF $notify = $actor['use_notification']; break; case 'validator' : - $userIds = array($formanswer->fields['validator_id']); + $userIds = array($_SESSION['glpiID']); $notify = $actor['use_notification']; break; case 'person' : From f1dfd12ca5ce5503b52e8aac5529976e43e783f2 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 24 Jan 2017 17:30:19 +0100 Subject: [PATCH 051/178] update readme --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 737fc23b7..ab00fdc33 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,9 @@ If you want Formcreator to be available in your native language and have a littl Join us on [Transifex](https://www.transifex.com/teclib/glpi-project-plugin-formcreator) +Upgrade to 1.4.0 +-------------------- +After upgrade of FormCreator to version 0.90-1.4 or later, users may encounteer display issues. This is due to major changes on CSS of the plugin. You may need to refresh the cache of your browser with Ctrl+R or Ctrl+F5. If you plan to communicate about the new presentation of the plugin or the service catalog, introduce this simple manipulation to ensure all your users have a clean cache. ------------------------------------------------------------------------------------------------------------------------ @@ -61,6 +64,11 @@ Fonctionnalités Pour plus d'informations, visitez [la page WIKI](https://github.com/TECLIB/formcreator/wiki) +Mise à jour vers 1.4.0 +------------------------- +Après la mise à jour de FormCreator vers la version 0.90-1.4 ou supérieur, les utilisateurs peuvent rencontrer des problèmes d'affichage. Cela est dû aux changemetns majeurs de CSS dans le plugin. Vous pourriez avoir besoin de rafraichir le cache de votre navigateur avec Ctrl+R ou Ctrl+F5. Si vous prévoyez de communiquer à propos de la nouvelle présentation du plugin ou du catalogue de services, introduisez cette manipulation simple pour vous assurer que tous vos utilisateurs ont un cache à jour. + ![3.-Configuration](/screenshot.png "Configuration") ![3.9.-Formcreators-helpdesk](/screenshot_2.png "Service catalog") + From ca7a0074b7205300bbd5dbbc0a0ec627b26303cb Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 25 Jan 2017 13:13:38 +0100 Subject: [PATCH 052/178] fix warnings --- inc/section.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/section.class.php b/inc/section.class.php index 2fa725a09..b430cea98 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -173,8 +173,8 @@ public function prepareInputForAdd($input) // Control fields values : // - name is required - if(isset($input['name']) - && empty($input['name'])) { + if(!isset($input['name']) || + (isset($input['name']) && empty($input['name'])) ) { Session::addMessageAfterRedirect(__('The title is required', 'formcreato'), false, ERROR); return array(); } From 01853599744c9080a470bc8046e2771da11f9adf Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 26 Jan 2017 09:30:10 +0100 Subject: [PATCH 053/178] update README to match the version bump --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ab00fdc33..404096aa3 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ If you want Formcreator to be available in your native language and have a littl Join us on [Transifex](https://www.transifex.com/teclib/glpi-project-plugin-formcreator) -Upgrade to 1.4.0 --------------------- +Upgrade from 1.x to 2.4.0 or later +---------------------------------- After upgrade of FormCreator to version 0.90-1.4 or later, users may encounteer display issues. This is due to major changes on CSS of the plugin. You may need to refresh the cache of your browser with Ctrl+R or Ctrl+F5. If you plan to communicate about the new presentation of the plugin or the service catalog, introduce this simple manipulation to ensure all your users have a clean cache. @@ -64,8 +64,8 @@ Fonctionnalités Pour plus d'informations, visitez [la page WIKI](https://github.com/TECLIB/formcreator/wiki) -Mise à jour vers 1.4.0 -------------------------- +Mise à jour depuis 1.X vers 2.4.0 +--------------------------------- Après la mise à jour de FormCreator vers la version 0.90-1.4 ou supérieur, les utilisateurs peuvent rencontrer des problèmes d'affichage. Cela est dû aux changemetns majeurs de CSS dans le plugin. Vous pourriez avoir besoin de rafraichir le cache de votre navigateur avec Ctrl+R ou Ctrl+F5. Si vous prévoyez de communiquer à propos de la nouvelle présentation du plugin ou du catalogue de services, introduisez cette manipulation simple pour vous assurer que tous vos utilisateurs ont un cache à jour. ![3.-Configuration](/screenshot.png "Configuration") From a85cfff192661be8523bc289dbb853373a928984 Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 26 Jan 2017 09:32:50 +0100 Subject: [PATCH 054/178] bump version to 2.5 because older versions went up v1.8.1 --- setup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.php b/setup.php index ebe69b106..dcc36a2f7 100644 --- a/setup.php +++ b/setup.php @@ -1,7 +1,7 @@ Date: Thu, 26 Jan 2017 09:55:02 +0100 Subject: [PATCH 055/178] fix french part in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 404096aa3..adc894be3 100644 --- a/README.md +++ b/README.md @@ -64,8 +64,8 @@ Fonctionnalités Pour plus d'informations, visitez [la page WIKI](https://github.com/TECLIB/formcreator/wiki) -Mise à jour depuis 1.X vers 2.4.0 ---------------------------------- +Mise à jour depuis 1.x vers 2.4.0 ou supérieur +---------------------------------------------- Après la mise à jour de FormCreator vers la version 0.90-1.4 ou supérieur, les utilisateurs peuvent rencontrer des problèmes d'affichage. Cela est dû aux changemetns majeurs de CSS dans le plugin. Vous pourriez avoir besoin de rafraichir le cache de votre navigateur avec Ctrl+R ou Ctrl+F5. Si vous prévoyez de communiquer à propos de la nouvelle présentation du plugin ou du catalogue de services, introduisez cette manipulation simple pour vous assurer que tous vos utilisateurs ont un cache à jour. ![3.-Configuration](/screenshot.png "Configuration") From 248817e6b1966704e3a69dc2a472a2a377b1c27d Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 26 Jan 2017 09:55:57 +0100 Subject: [PATCH 056/178] update version in text of README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index adc894be3..a569e5a4b 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Join us on [Transifex](https://www.transifex.com/teclib/glpi-project-plugin-form Upgrade from 1.x to 2.4.0 or later ---------------------------------- -After upgrade of FormCreator to version 0.90-1.4 or later, users may encounteer display issues. This is due to major changes on CSS of the plugin. You may need to refresh the cache of your browser with Ctrl+R or Ctrl+F5. If you plan to communicate about the new presentation of the plugin or the service catalog, introduce this simple manipulation to ensure all your users have a clean cache. +After upgrade of FormCreator to version 2.4.0 or later, users may encounteer display issues. This is due to major changes on CSS of the plugin. You may need to refresh the cache of your browser with Ctrl+R or Ctrl+F5. If you plan to communicate about the new presentation of the plugin or the service catalog, introduce this simple manipulation to ensure all your users have a clean cache. ------------------------------------------------------------------------------------------------------------------------ @@ -66,7 +66,7 @@ Pour plus d'informations, visitez [la page WIKI](https://github.com/TECLIB/formc Mise à jour depuis 1.x vers 2.4.0 ou supérieur ---------------------------------------------- -Après la mise à jour de FormCreator vers la version 0.90-1.4 ou supérieur, les utilisateurs peuvent rencontrer des problèmes d'affichage. Cela est dû aux changemetns majeurs de CSS dans le plugin. Vous pourriez avoir besoin de rafraichir le cache de votre navigateur avec Ctrl+R ou Ctrl+F5. Si vous prévoyez de communiquer à propos de la nouvelle présentation du plugin ou du catalogue de services, introduisez cette manipulation simple pour vous assurer que tous vos utilisateurs ont un cache à jour. +Après la mise à jour de FormCreator vers la version 2.4.0 ou supérieur, les utilisateurs peuvent rencontrer des problèmes d'affichage. Cela est dû aux changemetns majeurs de CSS dans le plugin. Vous pourriez avoir besoin de rafraichir le cache de votre navigateur avec Ctrl+R ou Ctrl+F5. Si vous prévoyez de communiquer à propos de la nouvelle présentation du plugin ou du catalogue de services, introduisez cette manipulation simple pour vous assurer que tous vos utilisateurs ont un cache à jour. ![3.-Configuration](/screenshot.png "Configuration") From 1d28b0da1712fcecb304c631418bf6bb85f6aa2a Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 26 Jan 2017 18:47:49 +0100 Subject: [PATCH 057/178] show again forms without target fix #454 --- inc/form.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/inc/form.class.php b/inc/form.class.php index f208c4c16..9e09671d2 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -642,7 +642,6 @@ public function showFormList($rootCategory = 0, $keywords = '', $helpdeskHome = $table_form.description, $table_form.usage_count, $table_form.is_default - HAVING COUNT(`$table_target`.`plugin_formcreator_forms_id`) > 0 ORDER BY $order"; $result_forms = $DB->query($query_forms); From f3e6cd9d19f8ed4c9b90619cdf47975b0034cd16 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 30 Jan 2017 10:05:31 +0100 Subject: [PATCH 058/178] Feature/452 upgrade issue from empty db (#459) * immediately change table schema to ensure successful upgrade * skip upgrade of targets when empty if there is no target, there is nothing to convert into ticket template and no target ticket to create * add comment --- inc/form.class.php | 1 + inc/target.class.php | 61 +++++++++++++++++++++++--------------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 9e09671d2..8f3b23c30 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1217,6 +1217,7 @@ public static function install(Migration $migration) $migration->addField($table, 'helpdesk_home', 'bool', array('value' => '0')); $migration->addField($table, 'is_deleted', 'bool', array('value' => '0')); } + $migration->migrationOneTable($table); /** * Migration of special chars from previous versions diff --git a/inc/target.class.php b/inc/target.class.php index e601bda0b..0a241c3ea 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -320,35 +320,38 @@ public static function install(Migration $migration) $_SESSION["formcreator_tmp"]["ticket_template"]["$id"] = $template_id; } - // Prepare Mysql CASE For each ticket template - $mysql_case_template = "CASE CONCAT(`urgency`, `priority`, `itilcategories_id`, `type`)"; - foreach ($_SESSION["formcreator_tmp"]["ticket_template"] as $id => $value) { - $mysql_case_template .= " WHEN $id THEN $value "; - } - $mysql_case_template .= "END AS `tickettemplates_id`"; - - // Create Target ticket - $version = plugin_version_formcreator(); - $migration = new Migration($version['version']); - require_once ('targetticket.class.php'); - PluginFormcreatorTargetTicket::install($migration); - $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); - $query = "SELECT `id`, `name`, $mysql_case_template, `content` FROM `$table`;"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - // Insert target ticket - $query_insert = "INSERT INTO `$table_targetticket` SET - `name` = '".htmlspecialchars($line['name'])."', - `tickettemplates_id` = ".$line['tickettemplates_id'].", - `comment` = '".htmlspecialchars($line['content'])."'"; - $DB->query($query_insert); - $targetticket_id = $DB->insert_id(); - - // Update target with target ticket id - $query_update = "UPDATE `$table` - SET `items_id` = ".$targetticket_id." - WHERE `id` = ".$line['id']; - $DB->query($query_update); + // Convert targets to ticket templates only if at least one target extsis + if ($i > 0) { + // Prepare Mysql CASE For each ticket template + $mysql_case_template = "CASE CONCAT(`urgency`, `priority`, `itilcategories_id`, `type`)"; + foreach ($_SESSION["formcreator_tmp"]["ticket_template"] as $id => $value) { + $mysql_case_template .= " WHEN $id THEN $value "; + } + $mysql_case_template .= "END AS `tickettemplates_id`"; + + // Create Target ticket + $version = plugin_version_formcreator(); + $migration = new Migration($version['version']); + require_once ('targetticket.class.php'); + PluginFormcreatorTargetTicket::install($migration); + $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); + $query = "SELECT `id`, `name`, $mysql_case_template, `content` FROM `$table`;"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + // Insert target ticket + $query_insert = "INSERT INTO `$table_targetticket` SET + `name` = '".htmlspecialchars($line['name'])."', + `tickettemplates_id` = ".$line['tickettemplates_id'].", + `comment` = '".htmlspecialchars($line['content'])."'"; + $DB ->query($query_insert); + $targetticket_id = $DB->insert_id(); + + // Update target with target ticket id + $query_update = "UPDATE `$table` + SET `items_id` = ".$targetticket_id." + WHERE `id` = ".$line['id']; + $DB->query($query_update); + } } // Remove useless column content From d8c85c85f44d4353208bc3f343b362ee71921fa1 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 30 Jan 2017 14:57:52 +0100 Subject: [PATCH 059/178] fix email followup always off in generated tickets --- inc/targetticket.class.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 84e9dea53..9dc88fd4b 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1772,22 +1772,22 @@ protected function addActor($role, $user, $notify) { switch ($role) { case 'requester': $this->requesters['_users_id_requester'][] = $userId; - $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify === true); + $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify == true); $this->requesters['_users_id_requester_notif']['alternative_email'][] = $alternativeEmail; break; case 'observer' : $this->observers['_users_id_observer'][] = $userId; - $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify === true); + $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify == true); $this->observers['_users_id_observer_notif']['alternative_email'][] = $alternativeEmail; break; case 'assigned' : $this->assigned['_users_id_assign'][] = $userId; - $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify === true); + $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify == true); $this->assigned['_users_id_assign_notif']['alternative_email'][] = $alternativeEmail; break; case 'supplier' : $this->assignedSuppliers['_suppliers_id_assign'][] = $userId; - $this->assignedSuppliers['_suppliers_id_assign']['use_notification'][] = ($notify === true); + $this->assignedSuppliers['_suppliers_id_assign']['use_notification'][] = ($notify == true); $this->assignedSuppliers['_suppliers_id_assign']['alternative_email'][] = $alternativeEmail; break; } From 2ddbfc8e893a7ced028b9f129393e60d351bdf69 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 30 Jan 2017 11:56:56 +0100 Subject: [PATCH 060/178] ensure TargetTicket is always installed or upgraded --- inc/target.class.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/inc/target.class.php b/inc/target.class.php index 0a241c3ea..07e55f327 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -320,6 +320,13 @@ public static function install(Migration $migration) $_SESSION["formcreator_tmp"]["ticket_template"]["$id"] = $template_id; } + // Install or upgrade of TargetTicket is a prerequisite + $version = plugin_version_formcreator(); + $migration = new Migration($version['version']); + require_once ('targetticket.class.php'); + PluginFormcreatorTargetTicket::install($migration); + $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); + // Convert targets to ticket templates only if at least one target extsis if ($i > 0) { // Prepare Mysql CASE For each ticket template @@ -330,11 +337,6 @@ public static function install(Migration $migration) $mysql_case_template .= "END AS `tickettemplates_id`"; // Create Target ticket - $version = plugin_version_formcreator(); - $migration = new Migration($version['version']); - require_once ('targetticket.class.php'); - PluginFormcreatorTargetTicket::install($migration); - $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); $query = "SELECT `id`, `name`, $mysql_case_template, `content` FROM `$table`;"; $result = $DB->query($query); while ($line = $DB->fetch_array($result)) { From 01c1d18dc38437be059a8b7708ec3efd2636c913 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 30 Jan 2017 14:43:25 +0100 Subject: [PATCH 061/178] remove direct SQL query --- inc/targetticket.class.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 9dc88fd4b..7f50f83d4 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1511,20 +1511,20 @@ public function save(PluginFormcreatorForm_Answer $formanswer) { $message.= "\n".addslashes($formanswer->fields['comment']); } - // avoid double notification on ticket creation and add followup - $use_mailing = $CFG_GLPI['use_mailing']; - $CFG_GLPI['use_mailing'] = '0'; + // Disable email notification when adding a followup + $use_mailing = $CFG_GLPI['use_mailing']; + $CFG_GLPI['use_mailing'] = '0'; - $ticketFollowup = new TicketFollowup(); - $ticketFollowup->add(array( + $ticketFollowup = new TicketFollowup(); + $ticketFollowup->add(array( 'tickets_id' => $ticketID, - 'date' => date('Y-m-d H:i:s'), + 'date' => $_SESSION['glpi_currenttime'], 'users_id' => $_SESSION['glpiID'], 'content' => $message - )); + )); - // Restore mail notification setting - $CFG_GLPI['use_mailing'] = $use_mailing; + // Restore mail notification setting + $CFG_GLPI['use_mailing'] = $use_mailing; } return true; @@ -1772,22 +1772,22 @@ protected function addActor($role, $user, $notify) { switch ($role) { case 'requester': $this->requesters['_users_id_requester'][] = $userId; - $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify == true); + $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify === true); $this->requesters['_users_id_requester_notif']['alternative_email'][] = $alternativeEmail; break; case 'observer' : $this->observers['_users_id_observer'][] = $userId; - $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify == true); + $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify === true); $this->observers['_users_id_observer_notif']['alternative_email'][] = $alternativeEmail; break; case 'assigned' : $this->assigned['_users_id_assign'][] = $userId; - $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify == true); + $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify === true); $this->assigned['_users_id_assign_notif']['alternative_email'][] = $alternativeEmail; break; case 'supplier' : $this->assignedSuppliers['_suppliers_id_assign'][] = $userId; - $this->assignedSuppliers['_suppliers_id_assign']['use_notification'][] = ($notify == true); + $this->assignedSuppliers['_suppliers_id_assign']['use_notification'][] = ($notify === true); $this->assignedSuppliers['_suppliers_id_assign']['alternative_email'][] = $alternativeEmail; break; } From 509d5ee959fa32ec4f2c97a96311c23c78dcda88 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 31 Jan 2017 16:04:17 +0100 Subject: [PATCH 062/178] fix locales --- inc/targetticket.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 7f50f83d4..4e502e4d4 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -50,7 +50,7 @@ static function getEnumDueDateRule() { static function getEnumUrgencyRule() { return array( - 'none' => __('Urgency from template or Medium'), + 'none' => __('Urgency from template or Medium', 'formcreator'), 'answer' => __('Equals to the answer to the question', 'formcreator'), ); } From c0f0040d003b2e02ddebd03d170de95808867679 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Feb 2017 16:53:19 +0100 Subject: [PATCH 063/178] Feature/multiple conditions (#383) Allow multiple conditions for questions --- ajax/question.php | 579 +----------------- ajax/question_condition.php | 23 + css/styles.css | 35 +- inc/fields.class.php | 113 +++- inc/form.class.php | 14 +- inc/question.class.php | 666 ++++++++++++++++++++- inc/question_condition.class.php | 143 ++++- inc/section.class.php | 15 + tests/0005_Unit/Question_ConditionTest.php | 273 +++++++++ 9 files changed, 1234 insertions(+), 627 deletions(-) create mode 100644 ajax/question_condition.php create mode 100644 tests/0005_Unit/Question_ConditionTest.php diff --git a/ajax/question.php b/ajax/question.php index 9e9ff81a6..c9af6b635 100644 --- a/ajax/question.php +++ b/ajax/question.php @@ -11,581 +11,4 @@ $question->getFromDB($question_id); } $form_id = (int) $_REQUEST['form_id']; - -$rand = mt_rand(); -?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - $question->fields['fieldtype'], - 'on_change' => 'changeQuestionType();', - 'rand' => $rand, - )); - ?> -
    - - - query($sql); - while ($section = $DB->fetch_array($result)) { - $sections[$section['id']] = $section['name']; - } - Dropdown::showFromArray('plugin_formcreator_sections_id', $sections, array( - 'value' => ($question->fields['plugin_formcreator_sections_id']) ?:intval($_REQUEST['section_id']), - 'rand' => $rand, - )); - ?> - - - - - - -
    - array( - 'Computer' => _n("Computer", "Computers", 2), - 'Monitor' => _n("Monitor", "Monitors", 2), - 'Software' => _n("Software", "Software", 2), - 'Networkequipment' => _n("Network", "Networks", 2), - 'Peripheral' => _n("Device", "Devices", 2), - 'Printer' => _n("Printer", "Printers", 2), - 'Cartridgeitem' => _n("Cartridge", "Cartridges", 2), - 'Consumableitem' => _n("Consumable", "Consumables", 2), - 'Phone' => _n("Phone", "Phones", 2)), - __("Assistance") => array( - 'Ticket' => _n("Ticket", "Tickets", 2), - 'Problem' => _n("Problem", "Problems", 2), - 'TicketRecurrent' => __("Recurrent tickets")), - __("Management") => array( - 'Budget' => _n("Budget", "Budgets", 2), - 'Supplier' => _n("Supplier", "Suppliers", 2), - 'Contact' => _n("Contact", "Contacts", 2), - 'Contract' => _n("Contract", "Contracts", 2), - 'Document' => _n("Document", "Documents", 2)), - __("Tools") => array( - 'Reminder' => __("Notes"), - 'RSSFeed' => __("RSS feed")), - __("Administration") => array( - 'User' => _n("User", "Users", 2), - 'Group' => _n("Group", "Groups", 2), - 'Entity' => _n("Entity", "Entities", 2), - 'Profile' => _n("Profile", "Profiles", 2)) - );; - array_unshift($optgroup, '---'); - Dropdown::showFromArray('glpi_objects', $optgroup, array( - 'value' => $question->fields['values'], - 'rand' => $rand, - 'on_change' => 'change_glpi_objects();', - )); - ?> -
    -
    - fields['values'])); - Dropdown::show('AuthLDAP', array( - 'name' => 'ldap_auth', - 'rand' => $rand, - 'value' => (isset($ldap_values->ldap_auth)) ? $ldap_values->ldap_auth : '', - 'on_change' => 'change_LDAP(this)', - )); - ?> -
    -
    - - - fields['required'], -1, array( - 'rand' => $rand, - )); - ?> - - - -
    - fields['show_empty'], -1, array( - 'rand' => $rand, - )); - ?> -
    -
    - - - - - - - - - -
    - - - - - - - 'ldap_attribute', - 'rand' => $rand2, - 'value' => (isset($ldap_values->ldap_attribute)) ? $ldap_values->ldap_attribute : '', - )); - ?> -
    - -  
    - - - - -   - - -  
    - - - - -
    - - - - -
    - -
    - __('Always displayed', 'formcreator'), - 'hidden' => __('Hidden unless', 'formcreator'), - 'shown' => __('Displayed unless', 'formcreator'), - ), array( - 'value' => $question->fields['show_rule'], - 'on_change' => 'toggleCondition(this);', - 'rand' => $rand, - )); - $hide = (empty($question->fields['show_rule']) || ($question->fields['show_rule'] == 'always')) ? ' style="display:none"' : ''; - ?> - -
    > - find("`plugin_formcreator_questions_id` = '$question_id'"); - if (count($rows) < 1) { - $show_field = ''; - $show_condition = '=='; - $show_value = ''; - } else { - $row = array_shift($rows); - $show_field = $row['show_field']; - $show_condition = $row['show_condition']; - $show_value = $row['show_value']; - } - // =============================================================== - - $table_question = getTableForItemtype('PluginFormcreatorQuestion'); - $table_section = getTableForItemtype('PluginFormcreatorSection'); - $questions_tab = array(); - $sql = "SELECT q.`id`, q.`name` - FROM $table_question q - LEFT JOIN $table_section s ON q.`plugin_formcreator_sections_id` = s.`id` - WHERE s.`plugin_formcreator_forms_id` = $form_id - AND q.`id` != $question_id - ORDER BY s.`order`, q.`order`"; - $result = $DB->query($sql); - while ($line = $DB->fetch_array($result)) { - $questions_tab[$line['id']] = (strlen($line['name']) < 30) - ? $line['name'] - : substr($line['name'], 0, strrpos(substr($line['name'], 0, 30), ' ')) . '...'; - } - echo '
    '; - Dropdown::showFromArray('show_field', $questions_tab, array( - 'value' => $show_field - )); - echo '
    '; - - echo '
    '; - Dropdown::showFromArray('show_condition', array( - '==' => '=', - '!=' => '≠', - '<' => '<', - '>' => '>', - '<=' => '≤', - '>=' => '≥', - ), array( - 'value' => $show_condition, - 'rand' => $rand, - )); - echo '
    '; - ?> - -
    - -
    -
    -
    - - - - - - - - -
    - - - -showForm($question_id); diff --git a/ajax/question_condition.php b/ajax/question_condition.php new file mode 100644 index 000000000..661f08f2d --- /dev/null +++ b/ajax/question_condition.php @@ -0,0 +1,23 @@ +getByQuestionId($questionId); + $formId = $form->getID(); +} + +if (isset($_REQUEST['_empty'])) { + // get an empty condition HTML table row + $form = new PluginFormcreatorForm(); + $form->getByQuestionId($questionId); + $questionCondition = new PluginFormcreatorQuestion_Condition(); + echo $questionCondition->getConditionHtml($formId, $questionId); +} \ No newline at end of file diff --git a/css/styles.css b/css/styles.css index 3c182e700..5b4f9b360 100644 --- a/css/styles.css +++ b/css/styles.css @@ -428,30 +428,41 @@ form.formcreator_form { font-style: italic; margin: 0 4px; } -#div_show_condition_field, #div_show_condition_operator, #div_show_condition_value { - float: left; +.div_show_condition_field, .div_show_condition_operator, +.div_show_condition_value, .div_show_condition_logic, +.div_show_condition_add, .div_show_condition_remove { + //float: left; + display: inline-block; } -#div_show_condition_field .select2-container, -#div_show_condition_operator .select2-container { +.div_show_condition_field .select2-container, +.div_show_condition_operator .select2-container, +.div_show_condition_logic .select2-container { width: 95% !important; margin: 5px 0 0 !important; } -#div_show_condition_value input { - width: 100% !important; + +.div_show_condition_value input { + width: 90% !important; margin: 5px 0 0 5px !important; padding: 2px 5px !important; } -#div_show_condition_field { +.div_show_condition_field { width: 300px !important; } -#div_show_condition_operator { - width: 50px !important; +.div_show_condition_operator { + width: 70px !important; } -#div_show_condition_value { - width: 400px !important; +.div_show_condition_value { + width: 300px !important; +} +.div_show_condition_logic { + width: 70px !important; +} +.div_show_condition_add img, .div_show_condition_remove img { + width: 12px; + vertical-align: middle; } - /* jQuery UI Combobox*/ .custom-combobox { position: relative; diff --git a/inc/fields.class.php b/inc/fields.class.php index 7fbcbab4b..7f0f1669c 100644 --- a/inc/fields.class.php +++ b/inc/fields.class.php @@ -79,6 +79,7 @@ public static function getValue($field, $value) public static function printAllTabFieldsForJS() { + $tabFieldsForJS = ''; // Get field types and file path $tab_field_types = self::getTypes(); @@ -87,9 +88,10 @@ public static function printAllTabFieldsForJS() $classname = 'PluginFormcreator' . ucfirst($field_type) . 'Field'; if(method_exists($classname, 'getJSFields')) { - echo PHP_EOL.' '.$classname::getJSFields(); + $tabFieldsForJS .= PHP_EOL.' '.$classname::getJSFields(); } } + return $tabFieldsForJS; } public static function showField($field, $datas = null, $edit = true) @@ -121,32 +123,67 @@ public static function isVisible($id, $values) { global $DB; + /** + * Keep track of questions being evaluated to detect infinite loops + */ + static $evalQuestion = array(); + if (isset($evalQuestion[$id])) { + // TODO : how to deal a infinite loop while evaulating visibility of question ? + return true; + } + $evalQuestion[$id] = $id; + $question = new PluginFormcreatorQuestion(); $question->getFromDB($id); - $fields = $question->fields; $conditions = array(); - $return = false; // If the field is always shown - if ($fields['show_rule'] == 'always') return true; + if ($question->getField('show_rule') == 'always') { + unset($evalQuestion[$id]); + return true; + } // Get conditions to show or hide field - $questionId = $fields['id']; + $questionId = $question->getID(); $question_condition = new PluginFormcreatorQuestion_Condition(); - $rows = $question_condition->find("`plugin_formcreator_questions_id` = '$questionId'"); - foreach ($rows as $line) { + $questionConditions = $question_condition->getConditionsFromQuestion($questionId); + if (count($questionConditions) < 1) { + // No condition defined, then always show the question + unset($evalQuestion[$id]); + return true; + } + + foreach ($questionConditions as $question_condition) { $conditions[] = array( - 'multiple' => in_array($fields['fieldtype'], array('checkboxes', 'multiselect')), - 'logic' => $line['show_logic'], - 'field' => $line['show_field'], - 'operator' => $line['show_condition'], - 'value' => $line['show_value'] + 'logic' => $question_condition->getField('show_logic'), + 'field' => $question_condition->getField('show_field'), + 'operator' => $question_condition->getField('show_condition'), + 'value' => $question_condition->getField('show_value') ); } - foreach ($conditions as $condition) { - if (!isset($values[$condition['field']])) return false; - if (!self::isVisible($condition['field'], $values)) return false; + // Force the first logic operator to OR + $conditions[0]['logic'] = 'OR'; + + $return = false; + $lowPrecedenceReturnPart = false; + $lowPrecedenceLogic = 'OR'; + foreach ($conditions as $order => $condition) { + $currentLogic = $condition['logic']; + if (isset($conditions[$order + 1])) { + $nextLogic = $conditions[$order + 1]['logic']; + } else { + // To ensure the low precedence return part is used at the end of the whole evaluation + $nextLogic = 'OR'; + } + if (!isset($values[$condition['field']])) { + unset($evalQuestion[$id]); + return false; + } + if (!self::isVisible($condition['field'], $values)) { + unset($evalQuestion[$id]); + return false; + } switch ($condition['operator']) { case '!=' : @@ -163,6 +200,7 @@ public static function isVisible($id, $values) } } break; + case '==' : if (empty($condition['value'])) { $value = false; @@ -177,6 +215,7 @@ public static function isVisible($id, $values) } } break; + default: $decodedConditionField = json_decode($values[$condition['field']]); if (is_array($values[$condition['field']])) { @@ -190,14 +229,48 @@ public static function isVisible($id, $values) .$condition['operator'].' "'.$condition['value'].'";'); } } - switch ($condition['logic']) { - case 'AND' : $return &= $value; break; - case 'OR' : $return |= $value; break; - case 'XOR' : $return ^= $value; break; - default : $return = $value; + + // Combine all condition with respect of operator precedence + // AND has precedence over OR and XOR + if ($currentLogic != 'AND' && $nextLogic == 'AND') { + // next condition has a higher precedence operator + // Save the current computed return and operator to use later + $lowPrecedenceReturnPart = $return; + $lowPrecedenceLogic = $currentLogic; + $return = $value; + } else { + switch ($currentLogic) { + case 'AND' : + $return &= $value; + break; + + case 'OR' : + $return |= $value; + break; + + default : + $return = $value; + } + } + + if ($currentLogic == 'AND' && $nextLogic != 'AND') { + if ($lowPrecedenceLogic == 'OR') { + $return |= $lowPrecedenceReturnPart; + } else { + $return ^= $lowPrecedenceReturnPart; + } } } + // Ensure the low precedence part is used if last condition has logic == AND + if ($lowPrecedenceLogic == 'OR') { + $return |= $lowPrecedenceReturnPart; + } else { + $return ^= $lowPrecedenceReturnPart; + } + + unset($evalQuestion[$id]); + // If the field is hidden by default, show it if condition is true if ($question->fields['show_rule'] == 'hidden') { return $return; diff --git a/inc/form.class.php b/inc/form.class.php index 8f3b23c30..8868a21d6 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -433,7 +433,6 @@ function changeValidators(value) { $this->showFormButtons($options); } - /** * Return the name of the tab for item including forms like the config page * @@ -1292,6 +1291,19 @@ public static function install(Migration $migration) return true; } + public function getByQuestionId($questionId) { + $table_sections = PluginFormcreatorSection::getTable(); + $table_questions = PluginFormcreatorQuestion::getTable(); + $this->getFromDBByQuery( + "WHERE `id` = ( + SELECT `plugin_formcreator_forms_id` FROM `$table_sections` + INNER JOIN `$table_questions` + ON `$table_questions`.`plugin_formcreator_sections_id` = `$table_sections`.`id` + WHERE `$table_questions`.`id` = '$questionId' + )" + ); + } + /** * Database table uninstallation for the item type * diff --git a/inc/question.class.php b/inc/question.class.php index a54c4bc67..0d69ad290 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -472,6 +472,14 @@ public function prepareInputForAdd($input) $input = $this->serializeDefaultValue($input); } + + if (!empty($input)) { + if (!isset($input['show_logic']) || !isset($input['show_field']) + || !isset($input['show_condition']) || !isset($input['show_value'])) { + $input['show_rule'] = 'always'; + } + } + return $input; } @@ -530,6 +538,13 @@ public function prepareInputForUpdate($input) $input = $this->serializeDefaultValue($input); } + if (!empty($input)) { + if (!isset($input['show_logic']) || !isset($input['show_field']) + || !isset($input['show_condition']) || !isset($input['show_value'])) { + $input['show_rule'] = 'always'; + } + } + return $input; } @@ -601,24 +616,39 @@ public function moveDown() { public function updateConditions($input) { global $DB; + // Delete all existing conditions for the question $question_condition = new PluginFormcreatorQuestion_Condition(); $question_condition->deleteByCriteria(array('plugin_formcreator_questions_id' => $input['id'])); - if ($input['show_rule'] != 'always') { - // =============================================================== - // TODO : Mettre en place l'interface multi-conditions - // Ci-dessous une solution temporaire qui affiche uniquement la 1ere condition - $value = plugin_formcreator_encode($input['show_value']); - $show_field = empty($input['show_field']) ? 'NULL' : (int) $input['show_field']; - $show_condition = plugin_formcreator_decode($input['show_condition']); - $question_condition = new PluginFormcreatorQuestion_Condition(); - $question_condition->add([ - 'plugin_formcreator_questions_id' => $input['id'], - 'show_field' => $show_field, - 'show_condition' => $show_condition, - 'show_value' => $value, - ]); - // =============================================================== + if (isset($input['show_field']) && isset($input['show_condition']) + && isset($input['show_value']) && isset($input['show_logic'])) { + // All arrays of condition exists + if ($input['show_rule'] != 'always') { + if (! (count($input['show_field']) == count($input['show_condition']) + && count($input['show_value']) == count($input['show_logic']) + && count($input['show_field']) == count($input['show_value']))) { + // TODO : add error message ? + } else { + // Arrays all have the same count and ahve at least one item + $order = 0; + while (count($input['show_field']) > 0) { + $order++; + $value = plugin_formcreator_encode(array_shift($input['show_value'])); + $showField = (int) array_shift($input['show_field']); + $showCondition = plugin_formcreator_decode(array_shift($input['show_condition'])); + $showLogic = array_shift($input['show_logic']); + $question_condition = new PluginFormcreatorQuestion_Condition(); + $question_condition->add([ + 'plugin_formcreator_questions_id' => $input['id'], + 'show_field' => $showField, + 'show_condition' => $showCondition, + 'show_value' => $value, + 'show_logic' => $showLogic, + 'order' => $order, + ]); + } + } + } } } @@ -656,6 +686,575 @@ public function post_purgeItem() $DB->query($query); } + public function showForm($ID, $options=array()) { + global $DB, $CFG_GLPI; + + $rootDoc = $CFG_GLPI['root_doc']; + $form_id = (int) $_REQUEST['form_id']; + $rand = mt_rand(); + $action = Toolbox::getItemTypeFormURL('PluginFormcreatorQuestion'); + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + // get All questions of the form and prepare their label for display in a dropdown + $question = new static(); + $questionsInForm = $question->getQuestionsFromForm($form_id); + foreach($questionsInForm as $question) { + if (strlen($question->getField('name')) > 30) { + $questions_tab[$question->getID()] = substr($question->getField('name'), + 0, + strrpos(substr($question->getField('name'), 0, 30), ' ')) . '...'; + } else { + $questions_tab[$question->getID()] = $question->getField('name'); + } + } + + echo ''; + echo ''; + echo ''; + $questionCondition = new PluginFormcreatorQuestion_Condition(); + $questionConditions = $questionCondition->getConditionsFromQuestion($ID); + reset($questionConditions); + $questionCondition = array_shift($questionConditions); + if ($questionCondition !== null) { + echo $questionCondition->getConditionHtml($form_id, 0, true); + } + foreach ($questionConditions as $questionCondition) { + echo $questionCondition->getConditionHtml($form_id); + } + echo ''; + echo ''; + echo ''; + $rootDoc = $CFG_GLPI['root_doc']; + $allTabFields = PluginFormcreatorFields::printAllTabFieldsForJS(); + echo << + function changeQuestionType() { + var value = document.getElementById('dropdown_fieldtype$rand').value; + + if(value != "") { + var tab_fields_fields = []; + $allTabFields + + eval(tab_fields_fields[value]); + } else { + showFields(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + } + } + changeQuestionType(); + + function showFields(required, default_values, values, range, show_empty, regex, show_type, dropdown_value, glpi_object, ldap_values) { + if(required) { + document.getElementById('dropdown_required$rand').style.display = 'inline'; + document.getElementById('label_required').style.display = 'inline'; + } else { + document.getElementById('dropdown_required$rand').style.display = 'none'; + document.getElementById('label_required').style.display = 'none'; + } + if(default_values) { + document.getElementById('default_values').style.display = 'inline'; + document.getElementById('label_default_values').style.display = 'inline'; + } else { + document.getElementById('default_values').style.display = 'none'; + document.getElementById('label_default_values').style.display = 'none'; + } + if(show_type) { + document.getElementById('dropdown_show_rule$rand').style.display = 'inline'; + document.getElementById('label_show_type').style.display = 'inline'; + } else { + document.getElementById('dropdown_show_rule$rand').style.display = 'none'; + document.getElementById('label_show_type').style.display = 'none'; + } + if(values) { + document.getElementById('values').style.display = 'inline'; + document.getElementById('label_values').style.display = 'inline'; + } else { + document.getElementById('values').style.display = 'none'; + document.getElementById('label_values').style.display = 'none'; + } + if(dropdown_value) { + document.getElementById('dropdown_values_field').style.display = 'inline'; + document.getElementById('label_dropdown_values').style.display = 'inline'; + } else { + document.getElementById('dropdown_values_field').style.display = 'none'; + document.getElementById('label_dropdown_values').style.display = 'none'; + } + if(glpi_object) { + document.getElementById('glpi_objects_field').style.display = 'inline'; + document.getElementById('label_glpi_objects').style.display = 'inline'; + } else { + document.getElementById('glpi_objects_field').style.display = 'none'; + document.getElementById('label_glpi_objects').style.display = 'none'; + } + if (dropdown_value || glpi_object) { + document.getElementById('dropdown_default_value_field').style.display = 'inline'; + document.getElementById('label_dropdown_default_value').style.display = 'inline'; + } else { + document.getElementById('dropdown_default_value_field').style.display = 'none'; + document.getElementById('label_dropdown_default_value').style.display = 'none'; + } + if(range) { + document.getElementById('range_min').style.display = 'inline'; + document.getElementById('range_max').style.display = 'inline'; + document.getElementById('label_range_min').style.display = 'inline'; + document.getElementById('label_range_max').style.display = 'inline'; + document.getElementById('label_range').style.display = 'inline'; + document.getElementById('range_tr').style.display = 'table-row'; + } else { + document.getElementById('range_min').style.display = 'none'; + document.getElementById('range_max').style.display = 'none'; + document.getElementById('label_range_min').style.display = 'none'; + document.getElementById('label_range_max').style.display = 'none'; + document.getElementById('label_range').style.display = 'none'; + document.getElementById('range_tr').style.display = 'none'; + } + if(show_empty) { + document.getElementById('show_empty').style.display = 'inline'; + document.getElementById('label_show_empty').style.display = 'inline'; + } else { + document.getElementById('show_empty').style.display = 'none'; + document.getElementById('label_show_empty').style.display = 'none'; + } + if(regex) { + document.getElementById('regex').style.display = 'inline'; + document.getElementById('label_regex').style.display = 'inline'; + document.getElementById('regex_tr').style.display = 'table-row'; + } else { + document.getElementById('regex').style.display = 'none'; + document.getElementById('label_regex').style.display = 'none'; + document.getElementById('regex_tr').style.display = 'none'; + } + if(values || default_values || dropdown_value || glpi_object) { + document.getElementById('values_tr').style.display = 'table-row'; + } else { + document.getElementById('values_tr').style.display = 'none'; + } + if(required || show_empty) { + document.getElementById('required_tr').style.display = 'table-row'; + } else { + document.getElementById('required_tr').style.display = 'none'; + } + if(ldap_values) { + document.getElementById('glpi_ldap_field').style.display = 'inline'; + document.getElementById('label_glpi_ldap').style.display = 'inline'; + document.getElementById('ldap_tr').style.display = 'table-row'; + } else { + document.getElementById('glpi_ldap_field').style.display = 'none'; + document.getElementById('label_glpi_ldap').style.display = 'none'; + document.getElementById('ldap_tr').style.display = 'none'; + } + } + + function toggleCondition(field) { + if (field.value == "always") { + $(".plugin_formcreator_logicRow").hide(); + } else { + if ($(".plugin_formcreator_logicRow").length < 1) { + addEmptyCondition(field); + } + $(".plugin_formcreator_logicRow").show(); + } + } + + function toggleLogic(field) { + if (field.value == '0') { + $('#'+field.id).parents('tr').next().remove(); + } else { + addEmptyCondition(field); + } + } + + function addEmptyCondition(target) { + $.ajax({ + url: '$rootDoc/plugins/formcreator/ajax/question_condition.php', + data: { + plugin_formcreator_questions_id: $ID, + plugin_formcreator_forms_id: $form_id, + _empty: '' + } + }).done(function (data) { + $(target).parents('tr').after(data); + $(".plugin_formcreator_logicRow .div_show_condition_logic").first().hide(); + }); + } + + function removeNextCondition(target) { + $(target).parents('tr').remove(); + $(".plugin_formcreator_logicRow .div_show_condition_logic").first().hide(); + } + + function change_dropdown() { + dropdown_type = document.getElementById('dropdown_dropdown_values$rand').value; + + jQuery.ajax({ + url: "$rootDoc/plugins/formcreator/ajax/dropdown_values.php", + type: "GET", + data: { + dropdown_itemtype: dropdown_type, + rand: "$rand" + }, + }).done(function(response){ + jQuery("#dropdown_default_value_field").html(response); + }); + } + + function change_glpi_objects() { + glpi_object = document.getElementById('dropdown_glpi_objects$rand').value; + + jQuery.ajax({ + url: "$rootDoc/plugins/formcreator/ajax/dropdown_values.php", + type: "GET", + data: { + dropdown_itemtype: glpi_object, + rand: "$rand" + }, + }).done(function(response){ + jQuery("#dropdown_default_value_field").html(response); + }); + } + + function change_LDAP(ldap) { + var ldap_directory = ldap.value; + + jQuery.ajax({ + url: "$rootDoc/plugins/formcreator/ajax/ldap_filter.php", + type: "POST", + data: { + value: ldap_directory, + _glpi_csrf_token: "" + }, + }).done(function(response){ + document.getElementById('ldap_filter').value = response; + }); + } + +JS; + echo '
    '; + echo (0 == $ID) ? __('Add a question', 'formcreator') : __('Edit a question', 'formcreator'); + echo '
    '; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + $fieldtypes = PluginFormcreatorFields::getNames(); + Dropdown::showFromArray('fieldtype', $fieldtypes, array( + 'value' => $this->fields['fieldtype'], + 'on_change' => 'changeQuestionType();', + 'rand' => $rand, + )); + echo '
    '; + echo ''; + echo ''; + $table = getTableForItemtype('PluginFormcreatorSection'); + $sections = array(); + $sql = "SELECT `id`, `name` + FROM $table + WHERE `plugin_formcreator_forms_id` = $form_id + ORDER BY `order`"; + $result = $DB->query($sql); + while ($section = $DB->fetch_array($result)) { + $sections[$section['id']] = $section['name']; + } + Dropdown::showFromArray('plugin_formcreator_sections_id', $sections, array( + 'value' => ($this->fields['plugin_formcreator_sections_id']) ?:intval($_REQUEST['section_id']), + 'rand' => $rand, + )); + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    '; + $optgroup = array( + __("Assets") => array( + 'Computer' => _n("Computer", "Computers", 2), + 'Monitor' => _n("Monitor", "Monitors", 2), + 'Software' => _n("Software", "Software", 2), + 'Networkequipment' => _n("Network", "Networks", 2), + 'Peripheral' => _n("Device", "Devices", 2), + 'Printer' => _n("Printer", "Printers", 2), + 'Cartridgeitem' => _n("Cartridge", "Cartridges", 2), + 'Consumableitem' => _n("Consumable", "Consumables", 2), + 'Phone' => _n("Phone", "Phones", 2)), + __("Assistance") => array( + 'Ticket' => _n("Ticket", "Tickets", 2), + 'Problem' => _n("Problem", "Problems", 2), + 'TicketRecurrent' => __("Recurrent tickets")), + __("Management") => array( + 'Budget' => _n("Budget", "Budgets", 2), + 'Supplier' => _n("Supplier", "Suppliers", 2), + 'Contact' => _n("Contact", "Contacts", 2), + 'Contract' => _n("Contract", "Contracts", 2), + 'Document' => _n("Document", "Documents", 2)), + __("Tools") => array( + 'Reminder' => __("Notes"), + 'RSSFeed' => __("RSS feed")), + __("Administration") => array( + 'User' => _n("User", "Users", 2), + 'Group' => _n("Group", "Groups", 2), + 'Entity' => _n("Entity", "Entities", 2), + 'Profile' => _n("Profile", "Profiles", 2)) + );; + array_unshift($optgroup, '---'); + Dropdown::showFromArray('glpi_objects', $optgroup, array( + 'value' => $this->fields['values'], + 'rand' => $rand, + 'on_change' => 'change_glpi_objects();', + )); + echo '
    '; + echo '
    '; + $ldap_values = json_decode(plugin_formcreator_decode($this->fields['values']), JSON_OBJECT_AS_ARRAY); + if ($ldap_values === null) { + $ldap_values = array(); + } + Dropdown::show('AuthLDAP', array( + 'name' => 'ldap_auth', + 'rand' => $rand, + 'value' => (isset($ldap_values['ldap_auth'])) ? $ldap_values['ldap_auth'] : '', + 'on_change' => 'change_LDAP(this)', + )); + echo '
    '; + echo '
    '; + echo ''; + echo ''; + dropdown::showYesNo('required', $this->fields['required'], -1, array( + 'rand' => $rand, + )); + echo ''; + echo ''; + echo ''; + echo '
    '; + dropdown::showYesNo('show_empty', $this->fields['show_empty'], -1, array( + 'rand' => $rand, + )); + echo '
    '; + echo '
    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $rand2 = mt_rand(); + Dropdown::show('RuleRightParameter', array( + 'name' => 'ldap_attribute', + 'rand' => $rand2, + 'value' => (isset($ldap_values['ldap_attribute'])) ? $ldap_values['ldap_attribute'] : '', + )); + echo '
    '; + echo ''; + echo ' 
    '; + echo ''.__('Range', 'formcreator').''; + echo ''; + echo ''; + echo ''; + echo ' '; + echo ''; + echo ''; + echo ' 
    '; + echo ''; + echo ''; + echo ''; + Html::initEditorSystem('description'); + echo '
    '; + echo ''; + echo ''; + echo ''; + echo ''; + echo __('Specify the additional validation conditions in the description of the question to help users.', 'formcreator'); + echo ''; + echo '
    '; + echo ''; + echo '
    '; + Dropdown::showFromArray('show_rule', array( + 'always' => __('Always displayed', 'formcreator'), + 'hidden' => __('Hidden unless', 'formcreator'), + 'shown' => __('Displayed unless', 'formcreator'), + ), array( + 'value' => $this->fields['show_rule'], + 'on_change' => 'toggleCondition(this);', + 'rand' => $rand, + )); + + echo '
    '; + echo ''; + echo ''; + echo ''; + if (0 == $ID) { + echo ''; + } else { + echo ''; + } + echo '
    '; + Html::closeForm(); + } + /** * Database table installation for the item type * @@ -1029,4 +1628,41 @@ public function export($remove_uuid = false) { return $question; } + + public function getForm() { + + } + + public function getQuestionsFromForm($formId) { + global $DB; + + $questions = array(); + $table_question = getTableForItemtype('PluginFormcreatorQuestion'); + $table_section = getTableForItemtype('PluginFormcreatorSection'); + $result = $DB->query("SELECT `q`.* + FROM $table_question `q` + LEFT JOIN $table_section `s` ON `q`.`plugin_formcreator_sections_id` = `s`.`id` + WHERE `s`.`plugin_formcreator_forms_id` = '$formId' + ORDER BY `s`.`order`, `q`.`order`" + ); + while ($row = $DB->fetch_assoc($result)) { + $question = new self(); + $question->getFromDB($row['id']); + $questions[] = $question; + } + + return $questions; + } + + public function getQuestionsFromSection($sectionId) { + $questions = array(); + $rows = $this->find("`plugin_formcreator_sections_id` = '$sectionId'", "`order` ASC"); + foreach ($rows as $questionId => $row) { + $question = new self(); + $question->getFromDB($questionId); + $questions[] = $question; + } + + return $questions; + } } diff --git a/inc/question_condition.class.php b/inc/question_condition.class.php index f49b18e12..8a65b2010 100644 --- a/inc/question_condition.class.php +++ b/inc/question_condition.class.php @@ -4,6 +4,23 @@ class PluginFormcreatorQuestion_Condition extends CommonDBChild static public $itemtype = "PluginFormcreatorQuestion"; static public $items_id = "plugin_formcreator_questions_id"; + public function prepareInputForAdd($input) { + // generate a uniq id + if (!isset($input['uuid']) + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } + + return $input; + } + + public static function getEnumShowLogic() { + return array( + 'AND' => 'AND', + 'OR' => 'OR', + ); + } + /** * Import a question's condition into the db * @see PluginFormcreatorQuestion::import @@ -75,6 +92,7 @@ public static function install(Migration $migration) { global $DB; + $enum_logic = "'".implode("', '", array_keys(self::getEnumShowLogic()))."'"; $table = self::getTable(); if (!TableExists($table)) { $query = "CREATE TABLE IF NOT EXISTS `$table` ( @@ -83,7 +101,8 @@ public static function install(Migration $migration) `show_field` int(11) NULL DEFAULT NULL, `show_condition` enum('==','!=','<','>','<=','>=') NULL DEFAULT NULL, `show_value` varchar(255) NULL DEFAULT NULL , - `show_logic` enum('AND','OR','XOR') NULL DEFAULT NULL, + `show_logic` enum($enum_logic) NULL DEFAULT NULL, + `order` int(11) NOT NULL DEFAULT '1', `uuid` varchar(255) NULL DEFAULT NULL PRIMARY KEY (`id`) ) @@ -161,6 +180,11 @@ public static function install(Migration $migration) $migration->migrationOneTable($table); } + if (!FieldExists($table, 'order', false)) { + $migration->addField($table, 'order', 'integer', array('after' => 'show_logic', 'value' => '1')); + $migration->migrationOneTable($table); + } + // fill missing uuid (force update of questions, see self::prepareInputForUpdate) $condition_obj = new self(); $all_conditions = $condition_obj->find("uuid IS NULL"); @@ -169,9 +193,126 @@ public static function install(Migration $migration) 'uuid' => plugin_formcreator_getUuid())); } + $current_enum_show_logic = PluginFormcreatorCommon::getEnumValues($table, 'show_logic'); + if (count($current_enum_show_logic) != count(self::getEnumShowLogic())) { + $query = "ALTER TABLE `$table` + CHANGE COLUMN `show_logic` `show_logic` + ENUM($enum_logic) + NULL DEFAULT NULL"; + $DB->query($query) or die($DB->error()); + } + + return true; } + public function getConditionsFromQuestion($questionId) { + $questionConditions = array(); + $rows = $this->find("`plugin_formcreator_questions_id` = '$questionId'", "`order` ASC"); + foreach ($rows as $questionConditionId => $row) { + $questionCondition = new static(); + $questionCondition->getFromDB($questionConditionId); + $questionConditions[] = $questionCondition; + } + + return $questionConditions; + } + + /** + * + * return HTML to show a condition line for a question + * + * @param integer $formId ID of the form of the condition + * @param integer $questionId ID of the question (or 0 for a new question) + * @param string $isFirst true if this is the first condition à all conditions aplied to a question + * + * @return string + */ + public function getConditionHtml($form_id, $questionId = 0, $isFirst = false) { + global $CFG_GLPI; + + if ($this->isNewItem()) { + $show_field = ''; + $show_condition = '=='; + $show_value = ''; + $show_logic = ''; + } else { + $show_field = $this->fields['show_field']; + $show_condition = $this->fields['show_condition']; + $show_value = $this->fields['show_value']; + $show_logic = $this->fields['show_logic']; + $questionId = $this->fields['plugin_formcreator_questions_id']; + } + $rootDoc = $CFG_GLPI['root_doc']; + $rand = mt_rand(); + + $question = new PluginFormcreatorQuestion(); + $questionsInForm = $question->getQuestionsFromForm($form_id); + $questions_tab = array(); + foreach($questionsInForm as $question) { + if (strlen($question->getField('name')) > 30) { + $questions_tab[$question->getID()] = substr($question->getField('name'), + 0, + strrpos(substr($question->getField('name'), 0, 30), ' ')) . '...'; + } else { + $questions_tab[$question->getID()] = $question->getField('name'); + } + } + + $html = ''; + $html.= ''; + $html.= ''; + $html.= '
    '; + + $showLogic = $isFirst ? 'style="display: none"' : ''; + $html.= '
    '; + $html.= Dropdown::showFromArray('show_logic[]', + PluginFormcreatorQuestion_Condition::getEnumShowLogic(), + array( + 'display' => false, + 'value' => $show_logic, + 'display_emptychoice' => false, + 'rand' => $rand, + )); + $html.= '
    '; + $html.= '
    '; + $html.= Dropdown::showFromArray('show_field[]', $questions_tab, array( + 'display' => false, + 'used' => array($questionId => ''), + 'value' => $show_field, + 'rand' => $rand, + )); + $html.= '
    '; + + $html.= '
    '; + $html.= Dropdown::showFromArray('show_condition[]', array( + '==' => '=', + '!=' => '≠', + '<' => '<', + '>' => '>', + '<=' => '≤', + '>=' => '≥', + ), array( + 'display' => false, + 'value' => $show_condition, + 'rand' => $rand, + )); + $html.= '
    '; + $html.= '
    '; + $html.= ''; + $html.= '
    '; + $html.= '
    '; + $html.= ' 
    '; + $html.= '
    '; + $html.= '
    '; + $html.= '
    '; + $html.= ''; + $html.= ''; + + return $html; + } + public static function uninstall() { global $DB; diff --git a/inc/section.class.php b/inc/section.class.php index b430cea98..b592a4bbc 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -417,4 +417,19 @@ public function export($remove_uuid = false) { return $section; } + + /** + * get all sections in a form + */ + public function getSectionsFromForm($formId) { + $sections = array(); + $rows = $this->find("`plugin_formcreator_forms_id` = '$formId'", "`order` ASC"); + foreach ($rows as $sectionId => $row) { + $section = new self(); + $section->getFromDB($sectionId); + $sections[] = $section; + } + + return $sections; + } } diff --git a/tests/0005_Unit/Question_ConditionTest.php b/tests/0005_Unit/Question_ConditionTest.php new file mode 100644 index 000000000..71d47db7c --- /dev/null +++ b/tests/0005_Unit/Question_ConditionTest.php @@ -0,0 +1,273 @@ +add(array( + 'entities_id' => '0', + 'name' => 'a form', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 0 + )); + + // Create section + $section = new PluginFormcreatorSection(); + $section->add(array( + 'name' => 'a section', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + + // Create a question + self::$question = new PluginFormcreatorQuestion(); + self::$question->add(array( + 'name' => 'text question', + 'fieldtype' => 'text', + 'plugin_formcreator_sections_id' => $section->getID(), + )); + + for ($i = 0; $i < 4; $i++) { + $item = new PluginFormcreatorQuestion(); + $item->add(array( + 'fieldtype' => 'text', + 'name' => "question $i", + 'plugin_formcreator_sections_id' => $section->getID(), + )); + self::$questionPool[$i] = $item->getID(); + } + } + + public function answersProvider() { + $test = 0; + return array( + 'no condition' => array( + 'always', + array( + 'show_logic' => array( + ), + 'show_field' => array( + ), + 'show_condition' => array( + ), + 'show_value' => array( + ), + ), + array(), + true, + ), + 'simple condition' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + ), + 'show_field' => array( + 0, + ), + 'show_condition' => array( + '==', + ), + 'show_value' => array( + 'foo', + ), + ), + array( + 0 => 'foo', + ), + true, + ), + 'failed condition' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + ), + 'show_field' => array( + 0, + ), + 'show_condition' => array( + '==', + ), + 'show_value' => array( + 'bar', + ), + ), + array( + 0 => 'foo', + ), + false, + ), + 'multiple condition OR' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + 'OR', + ), + 'show_field' => array( + 0, + 1, + ), + 'show_condition' => array( + '==', + '==', + ), + 'show_value' => array( + 'val1', + 'val2', + ), + ), + array( + 0 => 'val1', + 1 => 'val2', + ), + true, + ), + 'failed multiple condition OR' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + 'OR', + ), + 'show_field' => array( + 0, + 1, + ), + 'show_condition' => array( + '==', + '==', + ), + 'show_value' => array( + 'val1', + 'val2', + ), + ), + array( + 0 => 'val1', + 1 => 'not val2', + ), + true, + ), + 'multiple condition AND' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + 'AND', + ), + 'show_field' => array( + 0, + 1, + ), + 'show_condition' => array( + '==', + '==', + ), + 'show_value' => array( + 'val1', + 'val2', + ), + ), + array( + 0 => 'val1', + 1 => 'val2', + ), + true, + ), + 'failed multiple condition AND' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + 'AND', + ), + 'show_field' => array( + 0, + 1, + ), + 'show_condition' => array( + '==', + '==', + ), + 'show_value' => array( + 'val1', + 'val2', + ), + ), + array( + 0 => 'val1', + 1 => 'not val2', + ), + false, + ), + 'operator priority' => array( + 'hidden', + array( + 'show_logic' => array( + 'OR', + 'AND', + 'OR', + 'AND', + ), + 'show_field' => array( + 0, + 1, + 2, + 3, + ), + 'show_condition' => array( + '==', + '==', + '==', + '==', + ), + 'show_value' => array( + 'val1', + 'val2', + 'val3', + 'val4', + ), + ), + array( + 0 => 'val1', + 1 => 'val2', + 2 => 'val8', + 3 => 'val9', + ), + true, + ), + ); + } + + /** + * @dataProvider answersProvider + */ + public function testConditionsEvaluation($show_rule, $conditions, $answers, $expectedVisibility) { + foreach ($conditions['show_field'] as $id => &$showField) { + $showField = self::$questionPool[$showField]; + } + $realAnswers = array(); + foreach ($answers as $id => $answer) { + $realAnswers[self::$questionPool[$id]] = $answers[$id]; + } + $input = $conditions + array( + 'id' => self::$question->getID(), + 'fieldtype' => 'text', + 'show_rule' => $show_rule, + ); + self::$question->update($input); + self::$question->updateConditions($input); + $isVisible = PluginFormcreatorFields::isVisible(self::$question->getID(), $realAnswers); + $this->assertEquals($expectedVisibility, $isVisible); + } + +} From ad3465fb84be48330768f141611823ffe14add9a Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Feb 2017 16:34:41 +0100 Subject: [PATCH 064/178] full rewrite of install / upgrade process --- hook.php | 24 +- inc/answer.class.php | 75 -- inc/category.class.php | 74 -- inc/entityconfig.class.php | 62 -- inc/form.class.php | 175 +--- inc/form_answer.class.php | 110 --- inc/form_profile.class.php | 64 -- inc/form_validator.class.php | 61 -- inc/issue.class.php | 89 -- inc/notificationtargetform_answer.class.php | 118 --- inc/question.class.php | 274 ------ inc/question_condition.class.php | 113 --- inc/section.class.php | 119 --- inc/target.class.php | 181 ---- inc/targetchange.class.php | 46 - inc/targetchange_actor.class.php | 38 - inc/targetticket.class.php | 95 -- inc/targetticket_actor.class.php | 64 -- install/install.php | 381 ++++++++ install/mysql/plugin_formcreator_empty.sql | 253 ++++++ install/update_0.0_2.5.php | 955 ++++++++++++++++++++ setup.php | 2 +- 22 files changed, 1603 insertions(+), 1770 deletions(-) create mode 100644 install/install.php create mode 100644 install/mysql/plugin_formcreator_empty.sql create mode 100644 install/update_0.0_2.5.php diff --git a/hook.php b/hook.php index 26f310159..8361bf1bf 100644 --- a/hook.php +++ b/hook.php @@ -6,26 +6,16 @@ */ function plugin_formcreator_install() { - $version = plugin_version_formcreator(); - $migration = new Migration($version['version']); - spl_autoload_register('plugin_formcreator_autoload'); - // Parse inc directory - foreach (glob(dirname(__FILE__).'/inc/*') as $filepath) { - // Load *.class.php files and get the class name - if (preg_match("#inc/(.+)\.class.php$#", $filepath, $matches)) { - $classname = 'PluginFormcreator' . ucfirst($matches[1]); - include_once($filepath); - // If the install method exists, load it - if (method_exists($classname, 'install')) { - $classname::install($migration); - } - } + $version = plugin_version_formcreator(); + $migration = new Migration($version['version']); + require_once(__DIR__ . '/install/install.php'); + $install = new PluginFormcreatorInstall(); + if (!$install->isPluginInstalled()) { + return $install->install($migration); } - $migration->executeMigration(); - - return true; + return $install->upgrade($migration); } /** diff --git a/inc/answer.class.php b/inc/answer.class.php index 9393c0492..6ce377954 100644 --- a/inc/answer.class.php +++ b/inc/answer.class.php @@ -83,79 +83,4 @@ public function prepareInputForUpdate($input) { return $this->prepareInputForAdd($input); } - - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create questions table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_forms_answers_id` int(11) NOT NULL, - `plugin_formcreator_question_id` int(11) NOT NULL, - `answer` text NOT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - } else { - // Update field type from previous version (Need answer to be text since text can be WYSIWING). - $query = "ALTER TABLE `$table` CHANGE `answer` `answer` text;"; - $DB->query($query) or die ($DB->error()); - - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `answer` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `answer` = '".plugin_formcreator_encode($line['answer'])."' - WHERE `id` = ".$line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - //rename foreign key, to match table plugin_formcreator_forms_answers name - $migration->changeField($table, - 'plugin_formcreator_formanwers_id', - 'plugin_formcreator_forms_answers_id', - 'integer'); - $migration->migrationOneTable($table); - } - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - // Delete logs of the plugin - $DB->query("DELETE FROM `glpi_logs` WHERE itemtype = '".__CLASS__."'"); - - return true; - } } diff --git a/inc/category.class.php b/inc/category.class.php index c957e8a65..9ecda163d 100644 --- a/inc/category.class.php +++ b/inc/category.class.php @@ -128,78 +128,4 @@ public static function getCategoryTree($rootId = 0, $helpdeskHome = false) { return $children; } - - public static function install(Migration $migration) - { - global $DB; - - $table = getTableForItemType(__CLASS__); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL auto_increment, - `name` varchar(255) NOT NULL DEFAULT '', - `comment` text collate utf8_unicode_ci, - `completename` VARCHAR(255) NULL DEFAULT NULL, - `plugin_formcreator_categories_id` INT(11) NOT NULL DEFAULT '0', - `level` INT(11) NOT NULL DEFAULT '1', - `sons_cache` LONGTEXT NULL COLLATE 'utf8_unicode_ci', - `ancestors_cache` LONGTEXT NULL COLLATE 'utf8_unicode_ci', - `knowbaseitemcategories_id` INT(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`), - KEY `name` (`name`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } - - // Migration from previous version - if (TableExists('glpi_plugin_formcreator_cats')) { - $query = "INSERT IGNORE INTO `$table` (`id`, `name`) - SELECT `id`,`name` FROM glpi_plugin_formcreator_cats"; - $DB->query($query); - $DB->query("DROP TABLE glpi_plugin_formcreator_cats"); - } - - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `name`, `comment` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `name` = '".plugin_formcreator_encode($line['name'])."', - `comment` = '".plugin_formcreator_encode($line['comment'])."' - WHERE `id` = ".$line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - /** - * Migrate categories to tree structure - * - * @since 0.90-1.4 - */ - if (!FieldExists($table, "knowbaseitemcategories_id")) { - $migration->addField($table, 'completename', 'string', array('after' => 'comment')); - $migration->addField($table, 'plugin_formcreator_categories_id', 'integer', array('after' => 'completename')); - $migration->addField($table, 'level', 'integer', array('value' => 1, - 'after' => 'plugin_formcreator_categories_id')); - $migration->addField($table, 'sons_cache', 'longtext', array('after' => 'level')); - $migration->addField($table, 'ancestors_cache', 'longtext', array('after' => 'sons_cache')); - $migration->addField($table, 'knowbaseitemcategories_id', 'integer', array('after' => 'ancestors_cache')); - $migration->migrationOneTable($table); - $query = "UPDATE $table SET `completename`=`name` WHERE `completename`=''"; - $DB->query($query); - } - return true; - } - - public static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `".getTableForItemType(__CLASS__)."`"; - return $DB->query($query) or die($DB->error()); - } } diff --git a/inc/entityconfig.class.php b/inc/entityconfig.class.php index eac1dfe8b..dafa467e2 100644 --- a/inc/entityconfig.class.php +++ b/inc/entityconfig.class.php @@ -156,66 +156,4 @@ static function getUsedConfig($fieldref, $entities_id, $fieldval='', $default_va */ return $default_value; } - - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create Forms table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL PRIMARY KEY, - `replace_helpdesk` int(11) NOT NULL DEFAULT '0' - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci;"; - $DB->query($query) or die ($DB->error()); - } else { - - } - - $migration->displayMessage("Configuration of existing entities"); - $query = "SELECT `id` FROM `glpi_entities` - WHERE `id` NOT IN ( - SELECT `id` FROM `$table` - )"; - $result = $DB->query($query) or die ($DB->error()); - while ($row = $DB->fetch_assoc($result)) { - $entityConfig = new self(); - $entityConfig->add([ - 'id' => $row['id'], - 'replace_helpdesk' => ($row['id'] == 0) ? 0 : self::CONFIG_PARENT - ]); - } - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - // Delete logs of the plugin - $DB->query("DELETE FROM `glpi_logs` WHERE itemtype = '".__CLASS__."'"); - - return true; - } - } diff --git a/inc/form.class.php b/inc/form.class.php index 8f3b23c30..c58148d8e 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -959,6 +959,12 @@ public function prepareInputForAdd($input) $input['content'] = addslashes($input['content']); } + if (!isset($input['requesttype'])) { + $requestType = new RequestType(); + $requestType->getFromDBByQuery("WHERE `name` LIKE 'Formcreator'"); + $input['requesttype'] = $requestType->getID(); + } + return $input; } @@ -1145,175 +1151,6 @@ public function increaseUsageCount() { ]); } - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - // Create default request type - $query = "SELECT id FROM `glpi_requesttypes` WHERE `name` LIKE 'Formcreator';"; - $result = $DB->query($query) or die ($DB->error()); - if ($DB->numrows($result) > 0) { - list($requesttype) = $DB->fetch_array($result); - } else { - $query = "INSERT INTO `glpi_requesttypes` SET `name` = 'Formcreator';"; - $DB->query($query) or die ($DB->error()); - $requesttype = $DB->insert_id(); - } - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create Forms table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `entities_id` int(11) NOT NULL DEFAULT '0', - `is_recursive` tinyint(1) NOT NULL DEFAULT '0', - `access_rights` tinyint(1) NOT NULL DEFAULT '1', - `requesttype` int(11) NOT NULL DEFAULT '$requesttype', - `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `description` varchar(255) COLLATE utf8_unicode_ci, - `content` longtext COLLATE utf8_unicode_ci, - `plugin_formcreator_categories_id` int(11) UNSIGNED NOT NULL DEFAULT '0', - `is_active` tinyint(1) NOT NULL DEFAULT '0', - `language` varchar(5) COLLATE utf8_unicode_ci NOT NULL, - `helpdesk_home` tinyint(1) NOT NULL DEFAULT '0', - `is_deleted` tinyint(1) NOT NULL DEFAULT '0', - `validation_required` tinyint(1) NOT NULL DEFAULT '0', - `usage_count` int(11) NOT NULL DEFAULT '0', - `is_default` tinyint(1) NOT NULL DEFAULT '0', - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci;"; - $DB->query($query) or die ($DB->error()); - } - - // Migration from previous version - if (FieldExists($table, 'cat', false) - || !FieldExists($table, 'plugin_formcreator_categories_id', false)) { - $migration->addField($table, 'plugin_formcreator_categories_id', - 'integer', array('value' => '0')); - } - - // Migration from previous version - if (!FieldExists($table, 'validation_required', false)) { - $migration->addField($table, 'validation_required', 'bool', array('value' => '0')); - } - - // Migration from previous version - if (!FieldExists($table, 'requesttype', false)) { - $migration->addField($table, 'access_rights', 'bool', array('value' => '1')); - $migration->addField($table, 'requesttype', 'integer', array('value' => '1')); - $migration->addField($table, 'description', 'string'); - $migration->addField($table, 'helpdesk_home', 'bool', array('value' => '0')); - $migration->addField($table, 'is_deleted', 'bool', array('value' => '0')); - } - $migration->migrationOneTable($table); - - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `name`, `description`, `content` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `name` = '" . plugin_formcreator_encode($line['name']) . "', - `description` = '" . plugin_formcreator_encode($line['description']) . "', - `content` = '" . plugin_formcreator_encode($line['content']) . "' - WHERE `id` = " . (int) $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - /** - * Add natural language search - * Add form usage counter - * - * @since 0.90-1.4 - */ - // An error may occur if the Search index does not exists - // This is not critical as we need to (re) create it - If (isIndex('glpi_plugin_formcreator_forms', 'Search')) { - $query = "ALTER TABLE `glpi_plugin_formcreator_forms` DROP INDEX `Search`"; - $DB->query($query); - } - - // Re-add FULLTEXT index - $query = "ALTER TABLE `glpi_plugin_formcreator_forms` ADD FULLTEXT INDEX `Search` (`name`, `description`)"; - $DB->query($query) or die ($DB->error()); - - $migration->addField($table, 'usage_count', 'integer', array('after' => 'validation_required', - 'value' => '0')); - $migration->addField($table, 'is_default', 'bool', array('after' => 'usage_count', - 'value' => '0')); - - - // Create standard search options - $displayPreference = new DisplayPreference(); - $displayPreference->deleteByCriteria(array('itemtype' => 'PluginFormcreatorForm')); - - $query = "INSERT IGNORE INTO `glpi_displaypreferences` - (`id`, `itemtype`, `num`, `rank`, `users_id`) - VALUES - (NULL, '" . __CLASS__ . "', 30, 1, 0), - (NULL, '" . __CLASS__ . "', 3, 2, 0), - (NULL, '" . __CLASS__ . "', 10, 3, 0), - (NULL, '" . __CLASS__ . "', 7, 4, 0), - (NULL, '" . __CLASS__ . "', 8, 5, 0), - (NULL, '" . __CLASS__ . "', 9, 6, 0);"; - $DB->query($query) or die ($DB->error()); - - - // add uuid to forms - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string', array('after' => 'is_default')); - } - - $migration->migrationOneTable($table); - - // fill missing uuid (force update of forms, see self::prepareInputForUpdate) - $obj = new self(); - $all_forms = $obj->find("uuid IS NULL"); - foreach($all_forms as $forms_id => $form) { - $obj->update(array('id' => $forms_id)); - } - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - $DB->query('DROP TABLE IF EXISTS `'.self::getTable().'`'); - $DB->query('DROP TABLE IF EXISTS `glpi_plugin_formcreator_questions_conditions`'); - - // Delete logs of the plugin - $log = new Log(); - $log->deleteByCriteria(array('itemtype' => __CLASS__)); - - $displayPreference = new DisplayPreference(); - $displayPreference->deleteByCriteria(array('itemtype' => 'PluginFormcreatorForm')); - - return true; - } - /** * Duplicate a from. Execute duplicate action for massive action. * diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 82070def2..799977724 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -892,114 +892,4 @@ public function post_purgeItem() NotificationEvent::raiseEvent('plugin_formcreator_deleted', $this); } } - - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (TableExists("glpi_plugin_formcreator_formanswers")) { - $migration->renameTable('glpi_plugin_formcreator_formanswers', $table); - $itemTicket_table = Item_Ticket::getTable(); - $itemtype = __CLASS__; - $query = "UPDATE `$itemTicket_table` SET `itemtype` = '$itemtype' WHERE `itemtype` = 'PluginFormcreatorFormanswer'"; - $DB->query($query) or die ($DB->error()); - } - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create questions table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `name` varchar(255) NOT NULL DEFAULT '', - `entities_id` int(11) NOT NULL DEFAULT '0', - `is_recursive` tinyint(1) NOT NULL DEFAULT '0', - `plugin_formcreator_forms_id` int(11) NOT NULL, - `requester_id` int(11) NULL, - `validator_id` int(11) NULL, - `request_date` datetime NOT NULL, - `status` enum('waiting', 'refused', 'accepted') NOT NULL DEFAULT 'waiting', - `comment` text NULL DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - } else { - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `comment` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `comment` = '" . plugin_formcreator_encode($line['comment']) . "' - WHERE `id` = " . $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - if (!FieldExists($table, 'name')) { - $query_update = 'ALTER TABLE `$table` ADD `name` VARCHAR(255) NOT NULL AFTER `id`;'; - $DB->query($query_update) or die ($DB->error()); - } - - // valdiator_id should not be set for waiting form answers - $query = "UPDATE $table - SET `validator_id` = '0' WHERE `status`='waiting'"; - $DB->query($query) or die ($DB->error()); - } - - // Create standard search options - $query = "INSERT IGNORE INTO `glpi_displaypreferences` (`id`, `itemtype`, `num`, `rank`, `users_id`) VALUES - (NULL, '" . __CLASS__ . "', 2, 2, 0), - (NULL, '" . __CLASS__ . "', 3, 3, 0), - (NULL, '" . __CLASS__ . "', 4, 4, 0), - (NULL, '" . __CLASS__ . "', 5, 5, 0), - (NULL, '" . __CLASS__ . "', 6, 6, 0);"; - $DB->query($query) or die ($DB->error()); - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB, $CFG_GLPI; - - // Delete logs of the plugin - $log = new Log(); - $log->deleteByCriteria(array('itemtype' => __CLASS__)); - - // Delete display preferences - $displayPreference = new DisplayPreference(); - $displayPreference->deleteByCriteria(array('itemtype' => __CLASS__)); - - // Delete relations with tickets with email notifications disabled - $use_mailing = $CFG_GLPI['use_mailing']; - $CFG_GLPI['use_mailing'] = '0'; - $item_ticket = new Item_Ticket(); - $item_ticket->deleteByCriteria(array('itemtype' => 'PluginFormcreatorForm_Answer')); - $CFG_GLPI['use_mailing'] = $use_mailing; - - // Remove table - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - return true; - } } diff --git a/inc/form_profile.class.php b/inc/form_profile.class.php index fb02755fb..13e74f40d 100644 --- a/inc/form_profile.class.php +++ b/inc/form_profile.class.php @@ -86,70 +86,6 @@ static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtempl Html::closeForm(); } - static function install(Migration $migration) - { - global $DB; - - $obj = new self(); - $table = getTableForItemType(__CLASS__); - - if (TableExists('glpi_plugin_formcreator_formprofiles')) { - $migration->renameTable('glpi_plugin_formcreator_formprofiles', $table); - } - - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` INT(11) NOT NULL AUTO_INCREMENT, - `plugin_formcreator_forms_id` INT(11) NOT NULL , - `profiles_id` INT(11) NOT NULL, - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `unicity` (`plugin_formcreator_forms_id`, - `profiles_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } - - // change fk for profiles - if (FieldExists($table, 'plugin_formcreator_profiles_id', false)) { - $migration->changeField($table, 'plugin_formcreator_profiles_id', 'profiles_id', 'integer'); - } - - // redo an id key - if (!FieldExists($table, 'id', false)) { - $DB->query("ALTER TABLE $table DROP PRIMARY KEY"); - $migration->addField($table, 'id', 'autoincrement'); - $migration->addKey($table, 'id', 'id', 'PRIMARY KEY'); - $migration->addKey($table, array('plugin_formcreator_forms_id', - 'profiles_id'), - 'unicity', - 'UNIQUE KEY'); - } - - // add uuid to validator - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - } - $migration->migrationOneTable($table); - - // fill missing uuid - $all_form_profiles = $obj->find("uuid IS NULL"); - foreach($all_form_profiles as $form_profiles_id => $form_profile) { - $obj->update(array('id' => $form_profiles_id, - 'uuid' => plugin_formcreator_getUuid())); - } - - return true; - } - - static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `".getTableForItemType(__CLASS__)."`"; - return $DB->query($query) or die($DB->error()); - } - /** * Import a form's profile into the db * @see PluginFormcreatorForm::importJson diff --git a/inc/form_validator.class.php b/inc/form_validator.class.php index 882a872a6..05f3084ab 100644 --- a/inc/form_validator.class.php +++ b/inc/form_validator.class.php @@ -34,67 +34,6 @@ public function prepareInputForAdd($input) { return $input; } - - public static function install(Migration $migration) - { - global $DB; - - $obj = new self(); - $table = self::getTable(); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `plugin_formcreator_forms_id` int(11) NOT NULL, - `itemtype` varchar(255) NOT NULL DEFAULT '', - `items_id` int(11) NOT NULL, - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `unicity` (`plugin_formcreator_forms_id`, `itemtype`, `items_id`) - ) - ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;"; - $DB->query($query) or die ($DB->error()); - } - - // Convert the old relation in glpi_plugin_formcreator_formvalidators table - if (TableExists('glpi_plugin_formcreator_formvalidators')) { - $table_form = PluginFormcreatorForm::getTable(); - $old_table = 'glpi_plugin_formcreator_formvalidators'; - $query = "INSERT INTO `$table` (`plugin_formcreator_forms_id`, `itemtype`, `items_id`) - SELECT - `$old_table`.`forms_id`, - IF(`validation_required` = '".self::VALIDATION_USER."', 'User', 'Group'), - `$old_table`.`users_id` - FROM `$old_table` - LEFT JOIN `$table_form` ON (`$table_form`.`id` = `$old_table`.`forms_id`) - WHERE `validation_required` > 1"; - $DB->query($query) or die ($DB->error()); - $migration->displayMessage('Backing up table glpi_plugin_formcreator_formvalidators'); - $migration->renameTable('glpi_plugin_formcreator_formvalidators', 'glpi_plugin_formcreator_formvalidators_backup'); - } - - // add uuid to validator - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid - $all_validators = $obj->find("uuid IS NULL"); - foreach($all_validators as $validators_id => $validator) { - $obj->update(array('id' => $validators_id, - 'uuid' => plugin_formcreator_getUuid())); - } - } - - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $query = "DROP TABLE IF EXISTS `$table`"; - return $DB->query($query) or die($DB->error()); - } - /** * Import a form's validator into the db * @see PluginFormcreatorForm::importJson diff --git a/inc/issue.class.php b/inc/issue.class.php index 340cd869e..d7718f2cf 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -6,78 +6,6 @@ public static function getTypeName($nb = 0) { return _n('Issue', 'Issues', $nb, 'formcreator'); } - public static function install(Migration $migration) { - global $DB; - - // Create standard search options - $cls = __CLASS__; - $displayprefs = new DisplayPreference; - $found_dprefs = $displayprefs->find("`itemtype` = '$cls'"); - if (count($found_dprefs) == 0) { - $query = "INSERT IGNORE INTO `glpi_displaypreferences` - (`id`, `itemtype`, `num`, `rank`, `users_id`) - VALUES - (NULL, '$cls', 1, 1, 0), - (NULL, '$cls', 2, 2, 0), - (NULL, '$cls', 4, 3, 0), - (NULL, '$cls', 5, 4, 0), - (NULL, '$cls', 6, 5, 0), - (NULL, '$cls', 7, 6, 0), - (NULL, '$cls', 8, 7, 0) - "; - $DB->query($query) or die ($DB->error()); - } - - // create view who merge tickets and formanswers - $query = "CREATE OR REPLACE VIEW `glpi_plugin_formcreator_issues` AS - - SELECT DISTINCT - CONCAT('f_',`fanswer`.`id`) AS `id`, - `fanswer`.`id` AS `original_id`, - 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, - `f`.`name` AS `name`, - `fanswer`.`status` AS `status`, - `fanswer`.`request_date` AS `date_creation`, - `fanswer`.`request_date` AS `date_mod`, - `fanswer`.`entities_id` AS `entities_id`, - `fanswer`.`is_recursive` AS `is_recursive`, - `fanswer`.`requester_id` AS `requester_id`, - `fanswer`.`validator_id` AS `validator_id`, - `fanswer`.`comment` AS `comment` - FROM `glpi_plugin_formcreator_forms_answers` AS `fanswer` - LEFT JOIN `glpi_plugin_formcreator_forms` AS `f` - ON`f`.`id` = `fanswer`.`plugin_formcreator_forms_id` - LEFT JOIN `glpi_items_tickets` AS `itic` - ON `itic`.`items_id` = `fanswer`.`id` - AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' - GROUP BY `original_id` - HAVING COUNT(`itic`.`tickets_id`) != 1 - - UNION - - SELECT DISTINCT - CONCAT('t_',`tic`.`id`) AS `id`, - `tic`.`id` AS `original_id`, - 'Ticket' AS `sub_itemtype`, - `tic`.`name` AS `name`, - `tic`.`status` AS `status`, - `tic`.`date` AS `date_creation`, - `tic`.`date_mod` AS `date_mod`, - `tic`.`entities_id` AS `entities_id`, - 0 AS `is_recursive`, - `tic`.`users_id_recipient` AS `requester_id`, - '' AS `validator_id`, - `tic`.`content` AS `comment` - FROM `glpi_tickets` AS `tic` - LEFT JOIN `glpi_items_tickets` AS `itic` - ON `itic`.`tickets_id` = `tic`.`id` - AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' - WHERE `tic`.`is_deleted` = 0 - GROUP BY `original_id` - HAVING COUNT(`itic`.`items_id`) <= 1"; - $DB->query($query) or die ($DB->error()); - } - /** * {@inheritDoc} * @see CommonGLPI::display() @@ -506,21 +434,4 @@ static function getTicketSummary() { return $status; } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - $DB->query('DROP VIEW IF EXISTS `glpi_plugin_formcreator_issues`'); - $displayPreference = new DisplayPreference(); - $displayPreference->deleteByCriteria(array('itemtype' => 'PluginFormCreatorIssue')); - - return true; - } - } diff --git a/inc/notificationtargetform_answer.class.php b/inc/notificationtargetform_answer.class.php index ed18889b2..3585c53aa 100644 --- a/inc/notificationtargetform_answer.class.php +++ b/inc/notificationtargetform_answer.class.php @@ -88,122 +88,4 @@ public function getSpecificTargets($data, $options) break; } } - - public static function install() - { - $notifications = array( - 'plugin_formcreator_form_created' => array( - 'name' => __('A form has been created', 'formcreator'), - 'subject' => __('Your request has been saved', 'formcreator'), - 'content' => __('Hi,\nYour request from GLPI has been successfully saved with number ##formcreator.request_id## and transmitted to the helpdesk team.\nYou can see your answers onto the following link:\n##formcreator.validation_link##', 'formcreator'), - 'notified' => self::AUTHOR, - ), - 'plugin_formcreator_need_validation' => array( - 'name' => __('A form need to be validate', 'formcreator'), - 'subject' => __('A form from GLPI need to be validate', 'formcreator'), - 'content' => __('Hi,\nA form from GLPI need to be validate and you have been choosen as the validator.\nYou can access it by clicking onto this link:\n##formcreator.validation_link##', 'formcreator'), - 'notified' => self::APPROVER, - ), - 'plugin_formcreator_refused' => array( - 'name' => __('The form is refused', 'formcreator'), - 'subject' => __('Your form has been refused by the validator', 'formcreator'), - 'content' => __('Hi,\nWe are sorry to inform you that your form has been refused by the validator for the reason below:\n##formcreator.validation_comment##\n\nYou can still modify and resubmit it by clicking onto this link:\n##formcreator.validation_link##', 'formcreator'), - 'notified' => self::AUTHOR, - ), - 'plugin_formcreator_accepted' => array( - 'name' => __('The form is accepted', 'formcreator'), - 'subject' => __('Your form has been accepted by the validator', 'formcreator'), - 'content' => __('Hi,\nWe are pleased to inform you that your form has been accepted by the validator.\nYour request will be considered soon.', 'formcreator'), - 'notified' => self::AUTHOR, - ), - 'plugin_formcreator_deleted' => array( - 'name' => __('The form is deleted', 'formcreator'), - 'subject' => __('Your form has been deleted by an administrator', 'formcreator'), - 'content' => __('Hi,\nWe are sorry to inform you that your request cannot be considered and has been deleted by an administrator.', 'formcreator'), - 'notified' => self::AUTHOR, - ), - ); - - // Create the notification template - $notification = new Notification(); - $notification_target = new NotificationTarget(); - $template = new NotificationTemplate(); - $translation = new NotificationTemplateTranslation(); - foreach ($notifications as $event => $datas) - { - // Check if notification allready exists - $exists = $notification->find("itemtype = 'PluginFormcreatorForm_Answer' AND event = '$event'"); - - // If it doesn't exists, create it - if (count($exists) == 0) { - $template_id = $template->add(array( - 'name' => Toolbox::addslashes_deep($datas['name']), - 'comment' => '', - 'itemtype' => 'PluginFormcreatorForm_Answer', - )); - - // Add a default translation for the template - $translation->add(array( - 'notificationtemplates_id' => $template_id, - 'language' => '', - 'subject' => Toolbox::addslashes_deep($datas['subject']), - 'content_text' => Toolbox::addslashes_deep($datas['content']), - 'content_html' => '

    '.str_replace('\n', '
    ', Toolbox::addslashes_deep($datas['content'])).'

    ', - )); - - // Create the notification - $notification_id = $notification->add(array( - 'name' => Toolbox::addslashes_deep($datas['name']), - 'comment' => '', - 'entities_id' => 0, - 'is_recursive' => 1, - 'is_active' => 1, - 'itemtype' => 'PluginFormcreatorForm_Answer', - 'notificationtemplates_id' => $template_id, - 'event' => $event, - 'mode' => 'mail', - )); - - // Add default notification targets - $notification_target->add(array( - "items_id" => $datas['notified'], - "type" => Notification::USER_TYPE, - "notifications_id" => $notification_id, - )); - } - } - } - - public static function uninstall() - { - global $DB; - - // Define DB tables - $table_targets = getTableForItemType('NotificationTarget'); - $table_notification = getTableForItemType('Notification'); - $table_translations = getTableForItemType('NotificationTemplateTranslation'); - $table_templates = getTableForItemType('NotificationTemplate'); - - // Delete translations - $query = "DELETE FROM `$table_translations` - WHERE `notificationtemplates_id` IN ( - SELECT `id` FROM $table_templates WHERE `itemtype` = 'PluginFormcreatorForm_Answer')"; - $DB->query($query); - - // Delete notification templates - $query = "DELETE FROM `$table_templates` - WHERE `itemtype` = 'PluginFormcreatorForm_Answer'"; - $DB->query($query); - - // Delete notification targets - $query = "DELETE FROM `$table_targets` - WHERE `notifications_id` IN ( - SELECT `id` FROM $table_notification WHERE `itemtype` = 'PluginFormcreatorForm_Answer')"; - $DB->query($query); - - // Delete notifications - $query = "DELETE FROM `$table_notification` - WHERE `itemtype` = 'PluginFormcreatorForm_Answer'"; - $DB->query($query); - } } diff --git a/inc/question.class.php b/inc/question.class.php index a54c4bc67..eb4415788 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -656,280 +656,6 @@ public function post_purgeItem() $DB->query($query); } - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create questions table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `plugin_formcreator_sections_id` int(11) NOT NULL, - `fieldtype` varchar(30) NOT NULL DEFAULT 'text', - `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `required` boolean NOT NULL DEFAULT FALSE, - `show_empty` boolean NOT NULL DEFAULT FALSE, - `default_values` text NULL, - `values` text NULL, - `range_min` varchar(10) NULL DEFAULT NULL, - `range_max` varchar(10) NULL DEFAULT NULL, - `description` text NOT NULL, - `regex` varchar(255) NULL DEFAULT NULL, - `order` int(11) NOT NULL DEFAULT '0', - `show_rule` enum('always','hidden','shown') NOT NULL DEFAULT 'always', - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`), - FULLTEXT INDEX `Search` (`description`, `name`) - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - - // Create questions conditions table (since 0.85-1.1) - $query = "CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions_conditions` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_questions_id` int(11) NOT NULL, - `show_field` int(11) DEFAULT NULL, - `show_condition` enum('==','!=','<','>','<=','>=') DEFAULT NULL, - `show_value` varchar(255) DEFAULT NULL, - `show_logic` enum('AND','OR','XOR') DEFAULT NULL, - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - - } else { - // Migration 0.83-1.0 => 0.85-1.0 - if(!FieldExists($table, 'fieldtype', false)) { - // Migration from previous version - $query = "ALTER TABLE `$table` - ADD `fieldtype` varchar(30) NOT NULL DEFAULT 'text', - ADD `show_type` enum ('show', 'hide') NOT NULL DEFAULT 'show', - ADD `show_field` int(11) DEFAULT NULL, - ADD `show_condition` enum('equal','notequal','lower','greater') COLLATE utf8_unicode_ci DEFAULT NULL, - ADD `show_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - ADD `required` tinyint(1) NOT NULL DEFAULT '0', - ADD `show_empty` tinyint(1) NOT NULL DEFAULT '0', - ADD `default_values` text COLLATE utf8_unicode_ci, - ADD `values` text COLLATE utf8_unicode_ci, - ADD `range_min` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - ADD `range_max` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, - ADD `regex` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - CHANGE `content` `description` text COLLATE utf8_unicode_ci NOT NULL, - CHANGE `position` `order` int(11) NOT NULL DEFAULT '0';"; - $DB->query($query) or die ($DB->error()); - - // order start from 1 instead of 0 - $DB->query("UPDATE `$table` SET `order` = `order` + 1;") or die ($DB->error()); - - // Match new type - $query = "SELECT `id`, `type`, `data`, `option` - FROM $table"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $datas = json_decode($line['data']); - $options = json_decode($line['option']); - - $fieldtype = 'text'; - $values = ''; - $default = ''; - $regex = ''; - $required = 0; - - if (isset($datas->value) && !empty($datas->value)) { - if(is_object($datas->value)) { - foreach($datas->value as $value) { - if (!empty($value)) $values .= urldecode($value) . "\r\n"; - } - } else { - $values .= urldecode($datas->value); - } - } - - switch ($line['type']) { - case '1': - $fieldtype = 'text'; - - if (isset($options->type)) { - switch ($options->type) { - case '2': - $required = 1; - break; - case '3': - $regex = '[[:alpha:]]'; - break; - case '4': - $fieldtype = 'float'; - break; - case '5': - $regex = urldecode($options->value); - // Add leading and trailing regex marker (automaticaly added in V1) - if (substr($regex, 0, 1) != '/') $regex = '/' . $regex; - if (substr($regex, -1, 1) != '/') $regex = $regex . '/'; - break; - case '6': - $fieldtype = 'email'; - break; - case '7': - $fieldtype = 'date'; - break; - } - } - $default_values = $values; - $values = ''; - break; - - case '2': - $fieldtype = 'select'; - break; - - case '3': - $fieldtype = 'checkboxes'; - break; - - case '4': - $fieldtype = 'textarea'; - if (isset($options->type) && ($options->type == 2)) { - $required = 1; - } - $default_values = $values; - $values = ''; - break; - - case '5': - $fieldtype = 'file'; - break; - - case '8': - $fieldtype = 'select'; - break; - - case '9': - $fieldtype = 'select'; - break; - - case '10': - $fieldtype = 'dropdown'; - break; - - default : - $data = null; - break; - } - - $query_udate = "UPDATE `$table` SET - `fieldtype` = '" . $fieldtype . "', - `values` = '" . htmlspecialchars($values) . "', - `default_values` = '" . htmlspecialchars($default) . "', - `regex` = '" . $regex . "', - `required` = " . (int) $required . " - WHERE `id` = " . $line['id']; - $DB->query($query_udate) or die ($DB->error()); - } - - $query = "ALTER TABLE `$table` - DROP `type`, - DROP `data`, - DROP `option`, - DROP `plugin_formcreator_forms_id`;"; - $DB->query($query) or die ($DB->error()); - } - - // Migration 0.85-1.0 => 0.85-1.1 - if (FieldExists($table, 'show_type', false)) { - - // Fix type of section ID - if (!FieldExists('glpi_plugin_formcreator_questions', 'show_rule')) { - $query = "ALTER TABLE `glpi_plugin_formcreator_questions` - CHANGE `plugin_formcreator_sections_id` `plugin_formcreator_sections_id` INT NOT NULL, - ADD `show_rule` enum('always','hidden','shown') NOT NULL DEFAULT 'always'"; - $DB->query($query) or die ($DB->error()); - } - } - - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - // Migrate "questions" table - $query = "SELECT `id`, `name`, `values`, `default_values`, `description` - FROM `glpi_plugin_formcreator_questions`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `glpi_plugin_formcreator_questions` SET - `name` = '" . addslashes(plugin_formcreator_encode($line['name'])) . "', - `values` = '" . addslashes(plugin_formcreator_encode($line['values'])) . "', - `default_values` = '" . addslashes(plugin_formcreator_encode($line['default_values'])) . "', - `description` = '" . addslashes(plugin_formcreator_encode($line['description'])) . "' - WHERE `id` = " . $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - /** - * Add natural language search - * - * @since 0.90-1.4 - */ - // An error may occur if the Search index does not exists - // This is not critical as we need to (re) create it - If (isIndex($table, 'Search')) { - $query = "ALTER TABLE `$table` DROP INDEX `Search`"; - $DB->query($query); - } - - // Re-add FULLTEXT index - $query = "ALTER TABLE `$table` ADD FULLTEXT INDEX `Search` (`name`, `description`)"; - $DB->query($query) or die ($DB->error()); - - // add uuid to questions - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid (force update of questions, see self::prepareInputForUpdate) - $obj = new self(); - $all_questions = $obj->find("uuid IS NULL"); - foreach($all_questions as $questions_id => $question) { - $obj->update(array('id' => $questions_id)); - } - } - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - // Delete logs of the plugin - $DB->query("DELETE FROM `glpi_logs` WHERE itemtype = '" . __CLASS__ . "'"); - - return true; - } - /** * Duplicate a question * diff --git a/inc/question_condition.class.php b/inc/question_condition.class.php index f49b18e12..c98d1725b 100644 --- a/inc/question_condition.class.php +++ b/inc/question_condition.class.php @@ -70,117 +70,4 @@ public function export($remove_uuid = false) { return $condition; } - - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `plugin_formcreator_questions_id` int(11) NOT NULL DEFAULT '0', - `show_field` int(11) NULL DEFAULT NULL, - `show_condition` enum('==','!=','<','>','<=','>=') NULL DEFAULT NULL, - `show_value` varchar(255) NULL DEFAULT NULL , - `show_logic` enum('AND','OR','XOR') NULL DEFAULT NULL, - `uuid` varchar(255) NULL DEFAULT NULL - PRIMARY KEY (`id`) - ) - ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;"; - $DB->query($query) or die ($DB->error()); - } - - // Migration 0.85-1.0 => 0.85-1.1 - $question_table = 'glpi_plugin_formcreator_questions'; - if (FieldExists($question_table, 'show_type', false)) { - // Migrate date from "questions" table to "questions_conditions" table - $query = "SELECT `id`, `show_type`, `show_field`, `show_condition`, `show_value` - FROM $question_table"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - switch ($line['show_type']) { - case 'hide' : - $show_rule = 'hidden'; - break; - default: - $show_rule = 'always'; - } - switch ($line['show_condition']) { - case 'notequal' : - $show_condition = '!='; - break; - case 'lower' : - $show_condition = '<'; - break; - case 'greater' : - $show_condition = '>'; - break; - default: - $show_condition = '=='; - } - - $show_field = empty($line['show_field']) ? 'NULL' : $line['show_field']; - - $query_udate = "UPDATE `$question_table` SET - `show_rule` = '$show_rule' - WHERE `id` = " . $line['id']; - $DB->query($query_udate) or die ($DB->error()); - - $query_udate = "INSERT INTO `$table` SET - `plugin_formcreator_questions_id` = {$line['id']}, - `show_field` = $show_field, - `show_condition` = '$show_condition', - `show_value` = '" . Toolbox::addslashes_deep($line['show_value']) . "'"; - $DB->query($query_udate) or die ($DB->error()); - } - - // Delete old fields - $query = "ALTER TABLE `$table` - DROP `show_type`, - DROP `show_field`, - DROP `show_condition`, - DROP `show_value`;"; - $DB->query($query) or die ($DB->error()); - } - - // Migrate "question_conditions" table - $query = "SELECT `id`, `show_value` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `show_value` = '" . plugin_formcreator_encode($line['show_value']) . "' - WHERE `id` = " . $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - // add uuid to questions conditions - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid (force update of questions, see self::prepareInputForUpdate) - $condition_obj = new self(); - $all_conditions = $condition_obj->find("uuid IS NULL"); - foreach($all_conditions as $conditions_id => $condition) { - $condition_obj->update(array('id' => $conditions_id, - 'uuid' => plugin_formcreator_getUuid())); - } - - return true; - } - - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $query = "DROP TABLE IF EXISTS `$table`"; - $DB->query($query) or die($DB->error()); - - return true; - } - } \ No newline at end of file diff --git a/inc/section.class.php b/inc/section.class.php index b430cea98..f0eb032c7 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -35,125 +35,6 @@ public static function getTypeName($nb = 0) return _n('Section', 'Sections', $nb, 'formcreator'); } - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - // Create new table - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create questions table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_forms_id` int(11) NOT NULL, - `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - `order` int(11) NOT NULL DEFAULT '0', - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci;"; - $DB->query($query) or die ($DB->error()); - } else { - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `name` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `name` = '".plugin_formcreator_encode($line['name'])."' - WHERE `id` = ".$line['id']; - $DB->query($query_update) or die ($DB->error()); - } - } - - // Migration from previous version => Remove useless target field - if(FieldExists($table, 'plugin_formcreator_targets_id', false)) { - $DB->query("ALTER TABLE `$table` DROP `plugin_formcreator_targets_id`;"); - } - - // Migration from previous version => Rename "position" into "order" and start order from 1 instead of 0 - if(FieldExists($table, 'position', false)) { - $DB->query("ALTER TABLE `$table` CHANGE `position` `order` INT(11) NOT NULL DEFAULT '0';"); - $DB->query("UPDATE `$table` SET `order` = `order` + 1;"); - } - - // Migration from previous version => Update Question table, then create a "description" question from content - if(FieldExists($table, 'content', false)) { - $version = plugin_version_formcreator(); - $migration = new Migration($version['version']); - PluginFormcreatorQuestion::install($migration); - $table_questions = getTableForItemType('PluginFormcreatorQuestion'); - - // Increment the order of questions which are in a section with a description - $query = "UPDATE `$table_questions` - SET `order` = `order` + 1 - WHERE `plugin_formcreator_sections_id` IN ( - SELECT `id` - FROM $table - WHERE `content` != '' - );"; - $DB->query($query); - - // Create description from content - $query = "INSERT INTO `$table_questions` (`plugin_formcreator_sections_id`, `fieldtype`, `name`, `description`, `order`) - SELECT `id`, 'description' AS fieldtype, CONCAT('Description ', `id`) AS name, `content`, 1 AS `order` - FROM $table - WHERE `content` != ''"; - $DB->query($query); - - // Delete content column - $DB->query("ALTER TABLE `$table` DROP `content`;"); - } - - // add uuid to sections - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid (force update of sections, see self::prepareInputForUpdate) - $obj = new self(); - $all_sections = $obj->find("uuid IS NULL"); - foreach($all_sections as $sections_id => $section) { - $obj->update(array('id' => $sections_id)); - } - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB; - - // Delete logs of the plugin - $log = new Log; - $log->deleteByCriteria(array('itemtype' => __CLASS__)); - - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - return true; - } - /** * Prepare input datas for adding the section * Check fields values and get the order for the new section diff --git a/inc/target.class.php b/inc/target.class.php index 07e55f327..c38aea015 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -221,187 +221,6 @@ public function pre_deleteItem() { return $item->delete(array('id' => $this->getField('items_id'))); } - public static function install(Migration $migration) - { - global $DB; - - $table = getTableForItemType(__CLASS__); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_forms_id` int(11) NOT NULL, - `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', - `items_id` int(11) NOT NULL DEFAULT 0, - `name` varchar(255) NOT NULL DEFAULT '', - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - - // Migration from previous version - } else{ - // Migration to 0.85-1.2.5 - if (FieldExists($table, 'plugin_formcreator_forms_id', false)) { - $query = "ALTER TABLE `glpi_plugin_formcreator_targets` - CHANGE `plugin_formcreator_forms_id` `plugin_formcreator_forms_id` INT NOT NULL;"; - $DB->query($query); - } - - if(!FieldExists($table, 'itemtype', false)) { - // Migration from version 1.5 to 1.6 - if (!FieldExists($table, 'type', false)) { - $query = "ALTER TABLE `$table` - ADD `type` tinyint(1) NOT NULL default '2';"; - $DB->query($query); - } - - // Add new column for link with target items - $query = "ALTER TABLE `$table` - ADD `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', - ADD `items_id` int(11) NOT NULL DEFAULT 0;"; - $DB->query($query); - - // Create ticket template for each configuration in DB - $query = "SELECT t.`urgency`, t.`priority`, t.`itilcategories_id`, t.`type`, f.`entities_id` - FROM `glpi_plugin_formcreator_targets` t, `glpi_plugin_formcreator_forms` f - WHERE f.`id` = t.`plugin_formcreator_forms_id` - GROUP BY t.`urgency`, t.`priority`, t.`itilcategories_id`, t.`type`, f.`entities_id`"; - $result = $DB->query($query) or die($DB->error()); - - $i = 0; - while ($ligne = $DB->fetch_array($result)) { - $i++; - $id = $ligne['urgency'].$ligne['priority'].$ligne['itilcategories_id'].$ligne['type']; - - $template = new TicketTemplate(); - $template_id = $template->add(array( - 'name' => 'Template Formcreator '.$i, - 'entities_id' => $ligne['entities_id'], - 'is_recursive' => 1, - )); - - $predefinedField = new TicketTemplatePredefinedField(); - - // Urgency - if(!empty($ligne['urgency'])) { - $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 10, - 'value' => $ligne['urgency'], - )); - } - - // Priority - if(!empty($ligne['priority'])) { - $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 3, - 'value' => $ligne['priority'], - )); - } - - // Category - if(!empty($ligne['itilcategories_id'])) { - $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 7, - 'value' => $ligne['itilcategories_id'], - )); - } - - // Type - if(!empty($ligne['type'])) { - $predefinedField->add(array( - 'tickettemplates_id' => $template_id, - 'num' => 14, - 'value' => $ligne['type'], - )); - } - - $_SESSION["formcreator_tmp"]["ticket_template"]["$id"] = $template_id; - } - - // Install or upgrade of TargetTicket is a prerequisite - $version = plugin_version_formcreator(); - $migration = new Migration($version['version']); - require_once ('targetticket.class.php'); - PluginFormcreatorTargetTicket::install($migration); - $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); - - // Convert targets to ticket templates only if at least one target extsis - if ($i > 0) { - // Prepare Mysql CASE For each ticket template - $mysql_case_template = "CASE CONCAT(`urgency`, `priority`, `itilcategories_id`, `type`)"; - foreach ($_SESSION["formcreator_tmp"]["ticket_template"] as $id => $value) { - $mysql_case_template .= " WHEN $id THEN $value "; - } - $mysql_case_template .= "END AS `tickettemplates_id`"; - - // Create Target ticket - $query = "SELECT `id`, `name`, $mysql_case_template, `content` FROM `$table`;"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - // Insert target ticket - $query_insert = "INSERT INTO `$table_targetticket` SET - `name` = '".htmlspecialchars($line['name'])."', - `tickettemplates_id` = ".$line['tickettemplates_id'].", - `comment` = '".htmlspecialchars($line['content'])."'"; - $DB ->query($query_insert); - $targetticket_id = $DB->insert_id(); - - // Update target with target ticket id - $query_update = "UPDATE `$table` - SET `items_id` = ".$targetticket_id." - WHERE `id` = ".$line['id']; - $DB->query($query_update); - } - } - - // Remove useless column content - $DB->query("ALTER TABLE `$table` DROP `content`;"); - - - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - if (FieldExists($table_targetticket, 'comment')) { - $query = "SELECT `id`, `comment` - FROM `$table_targetticket`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table_targetticket` SET - `comment` = '".plugin_formcreator_encode($line['comment'])."' - WHERE `id` = ".$line['id']; - $DB->query($query_update) or die ($DB->error()); - } - } - } - - // add uuid to targets - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid (force update of targets, see self::prepareInputForUpdate) - $obj = new self(); - $all_targets = $obj->find("uuid IS NULL"); - foreach($all_targets as $targets_id => $target) { - $obj->update(array('id' => $targets_id)); - } - } - - return true; - } - - public static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `".getTableForItemType(__CLASS__)."`"; - return $DB->query($query) or die($DB->error()); - } /** * Import a form's target into the db diff --git a/inc/targetchange.class.php b/inc/targetchange.class.php index ba9089dba..48ab6e8a5 100644 --- a/inc/targetchange.class.php +++ b/inc/targetchange.class.php @@ -1445,52 +1445,6 @@ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $ return $content; } - public static function install(Migration $migration) - { - global $DB; - - $enum_destination_entity = "'".implode("', '", array_keys(self::getEnumDestinationEntity()))."'"; - $enum_tag_type = "'".implode("', '", array_keys(self::getEnumTagType()))."'"; - $enum_due_date_rule = "'".implode("', '", array_keys(self::getEnumDueDateRule()))."'"; - $table = getTableForItemType(__CLASS__); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `name` varchar(255) NOT NULL DEFAULT '', - `changetemplates_id` int(11) NULL DEFAULT NULL, - `comment` text collate utf8_unicode_ci, - `impactcontent` text collate utf8_unicode_ci, - `controlistcontent` text collate utf8_unicode_ci, - `rolloutplancontext` text collate utf8_unicode_ci, - `backoutplancontext` text collate utf8_unicode_ci, - `checklistcontent` text collate utf8_unicode_ci, - `due_date_rule` ENUM($enum_due_date_rule) NULL DEFAULT NULL, - `due_date_question` INT NULL DEFAULT NULL, - `due_date_value` TINYINT NULL DEFAULT NULL, - `due_date_period` ENUM('minute', 'hour', 'day', 'month') NULL DEFAULT NULL, - `validation_followup` BOOLEAN NOT NULL DEFAULT TRUE, - `destination_entity` ENUM($enum_destination_entity) NOT NULL DEFAULT 'requester', - `destination_entity_value` int(11) NULL DEFAULT NULL, - `tag_type` ENUM($enum_tag_type) NOT NULL DEFAULT 'none', - `tag_questions` VARCHAR(255) NOT NULL, - `tag_specifics` VARCHAR(255) NOT NULL - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } else { - - } - - return true; - } - - public static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `" . getTableForItemType(__CLASS__) . "`"; - return $DB->query($query) or die($DB->error()); - } - private static function getDeleteImage($id) { global $CFG_GLPI; diff --git a/inc/targetchange_actor.class.php b/inc/targetchange_actor.class.php index 5e66b6889..ad300ef69 100644 --- a/inc/targetchange_actor.class.php +++ b/inc/targetchange_actor.class.php @@ -2,35 +2,6 @@ class PluginFormcreatorTargetChange_Actor extends CommonDBTM { - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_targetchanges_id` int(11) NOT NULL, - `actor_role` enum('requester','observer','assigned') NOT NULL, - `actor_type` enum('creator','validator','person','question_person','group','question_group','supplier','question_supplier') NOT NULL, - `actor_value` int(11) DEFAULT NULL, - `use_notification` BOOLEAN NOT NULL DEFAULT TRUE, - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - KEY `plugin_formcreator_targetchanges_id` (`plugin_formcreator_targetchanges_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } - - // fill missing uuid - $obj = new self(); - $all_actor = $obj->find("uuid IS NULL"); - foreach($all_actor as $actors_id => $actor) { - $obj->update(array('id' => $actors_id, - 'uuid' => plugin_formcreator_getUuid())); - } - } - public function prepareInputForAdd($input) { // generate a uniq id @@ -42,15 +13,6 @@ public function prepareInputForAdd($input) { return $input; } - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $query = "DROP TABLE IF EXISTS `$table`"; - return $DB->query($query) or die($DB->error()); - } - /** * Import a form's targetticket's actor into the db * @see PluginFormcreatorTargetTicket::import diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 4e502e4d4..6f79506d7 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1582,101 +1582,6 @@ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $ return $content; } - public static function install(Migration $migration) - { - global $DB; - - $enum_destination_entity = "'".implode("', '", array_keys(self::getEnumDestinationEntity()))."'"; - $enum_tag_type = "'".implode("', '", array_keys(self::getEnumTagType()))."'"; - $enum_due_date_rule = "'".implode("', '", array_keys(self::getEnumDueDateRule()))."'"; - $enum_urgency_rule = "'".implode("', '", array_keys(self::getEnumUrgencyRule()))."'"; - - $table = getTableForItemType(__CLASS__); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `name` varchar(255) NOT NULL DEFAULT '', - `tickettemplates_id` int(11) NULL DEFAULT NULL, - `comment` text collate utf8_unicode_ci, - `due_date_rule` ENUM($enum_due_date_rule) NULL DEFAULT NULL, - `due_date_question` INT NULL DEFAULT NULL, - `due_date_value` TINYINT NULL DEFAULT NULL, - `due_date_period` ENUM('minute', 'hour', 'day', 'month') NULL DEFAULT NULL, - `urgency_rule` ENUM($enum_urgency_rule) NOT NULL DEFAULT 'none', - `urgency_question` int(11) NOT NULL DEFAULT '0', - `validation_followup` BOOLEAN NOT NULL DEFAULT TRUE, - `destination_entity` ENUM($enum_destination_entity) NOT NULL DEFAULT 'requester', - `destination_entity_value` int(11) NULL DEFAULT NULL, - `tag_type` ENUM($enum_tag_type) NOT NULL DEFAULT 'none', - `tag_questions` VARCHAR(255) NOT NULL, - `tag_specifics` VARCHAR(255) NOT NULL - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } else { - if(!FieldExists($table, 'due_date_rule', false)) { - $query = "ALTER TABLE `$table` - ADD `due_date_rule` ENUM($enum_due_date_rule) NULL DEFAULT NULL, - ADD `due_date_question` INT NULL DEFAULT NULL, - ADD `due_date_value` TINYINT NULL DEFAULT NULL, - ADD `due_date_period` ENUM('minute', 'hour', 'day', 'month') NULL DEFAULT NULL, - ADD `validation_followup` BOOLEAN NOT NULL DEFAULT TRUE;"; - $DB->query($query) or die($DB->error()); - } - - // Migration to Formcreator 0.90-1.4 - if(!FieldExists($table, 'destination_entity', false)) { - $query = "ALTER TABLE `$table` - ADD `destination_entity` ENUM($enum_destination_entity) NOT NULL DEFAULT 'requester', - ADD `destination_entity_value` int(11) NULL DEFAULT NULL;"; - $DB->query($query) or die($DB->error()); - } else { - $current_enum_destination_entity = PluginFormcreatorCommon::getEnumValues($table, 'destination_entity'); - if (count($current_enum_destination_entity) != count(self::getEnumDestinationEntity())) { - $query = "ALTER TABLE `$table` - CHANGE COLUMN `destination_entity` `destination_entity` - ENUM($enum_destination_entity) - NOT NULL DEFAULT 'requester'"; - $DB->query($query) or die($DB->error()); - } - } - - if(!FieldExists($table, 'tag_type', false)) { - $query = "ALTER TABLE `$table` - ADD `tag_type` ENUM($enum_tag_type) NOT NULL DEFAULT 'none', - ADD `tag_questions` VARCHAR(255) NOT NULL, - ADD `tag_specifics` VARCHAR(255) NOT NULL;"; - $DB->query($query) or die($DB->error()); - } - - if (!FieldExists($table, 'urgency_rule', false)) { - $query = "ALTER TABLE `$table` - ADD `urgency_rule` ENUM($enum_urgency_rule) NOT NULL DEFAULT 'none' AFTER `due_date_period`;"; - $DB->query($query) or die($DB->error()); - - } else { - $current_enum_destination_entity = PluginFormcreatorCommon::getEnumValues($table, 'urgency_rule'); - if (count($current_enum_destination_entity) != count(self::getEnumUrgencyRule())) { - $query = "ALTER TABLE `$table` - CHANGE COLUMN `urgency_rule` `urgency_rule` - ENUM($enum_urgency_rule) - NOT NULL DEFAULT 'requester'"; - $DB->query($query) or die($DB->error()); - } - } - $migration->addField($table, 'urgency_question', 'integer', array('after' => 'urgency_rule')); - } - - return true; - } - - public static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `" . getTableForItemType(__CLASS__) . "`"; - return $DB->query($query) or die($DB->error()); - } - /** * find all actors and prepare data for the ticket being created */ diff --git a/inc/targetticket_actor.class.php b/inc/targetticket_actor.class.php index 2dd747992..de8b314c4 100644 --- a/inc/targetticket_actor.class.php +++ b/inc/targetticket_actor.class.php @@ -24,61 +24,6 @@ static function getEnumRole() { ); } - public static function install(Migration $migration) - { - global $DB; - - $enum_actor_type = "'".implode("', '", array_keys(self::getEnumActorType()))."'"; - $enum_actor_role = "'".implode("', '", array_keys(self::getEnumRole()))."'"; - - $table = self::getTable(); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `plugin_formcreator_targettickets_id` int(11) NOT NULL, - `actor_role` enum($enum_actor_role) NOT NULL, - `actor_type` enum($enum_actor_type) NOT NULL, - `actor_value` int(11) DEFAULT NULL, - `use_notification` BOOLEAN NOT NULL DEFAULT TRUE, - `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - KEY `plugin_formcreator_targettickets_id` (`plugin_formcreator_targettickets_id`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } else { - $current_enum_actor_type = PluginFormcreatorCommon::getEnumValues($table, 'actor_type'); - if (count($current_enum_actor_type) != count(self::getEnumActorType())) { - $query = "ALTER TABLE `$table` - CHANGE COLUMN `actor_type` `actor_type` - ENUM($enum_actor_type) - NOT NULL"; - $DB->query($query) or die($DB->error()); - } - - $current_enum_role = PluginFormcreatorCommon::getEnumValues($table, 'actor_role'); - if (count($current_enum_role) != count(self::getEnumRole())) { - $query = "ALTER TABLE `$table` - CHANGE COLUMN `actor_role` `actor_role` - ENUM($enum_actor_role) - NOT NULL"; - $DB->query($query) or die($DB->error()); - } - } - - // add uuid to actor - if (!FieldExists($table, 'uuid', false)) { - $migration->addField($table, 'uuid', 'string'); - $migration->migrationOneTable($table); - } - - // fill missing uuid - $obj = new self(); - $all_actor = $obj->find("uuid IS NULL"); - foreach($all_actor as $actors_id => $actor) { - $obj->update(array('id' => $actors_id, - 'uuid' => plugin_formcreator_getUuid())); - } - } - public function prepareInputForAdd($input) { // generate a uniq id @@ -90,15 +35,6 @@ public function prepareInputForAdd($input) { return $input; } - public static function uninstall() - { - global $DB; - - $table = self::getTable(); - $query = "DROP TABLE IF EXISTS `$table`"; - return $DB->query($query) or die($DB->error()); - } - /** * Import a form's targetticket's actor into the db * @see PluginFormcreatorTargetTicket::import diff --git a/install/install.php b/install/install.php new file mode 100644 index 000000000..19ae1f8bb --- /dev/null +++ b/install/install.php @@ -0,0 +1,381 @@ +migration = $migration; + $this->installSchema(); + + $this->configureExistingEntities(); + $this->createRequestType(); + $this->createDefaultDisplayPreferences(); + + return true; + } + + /** + * Upgrade the plugin + */ + public function upgrade(Migration $migration) { + $this->migration = $migration; + $fromVersion = $this->getSchemaVersion(); + + $this->installSchema(); + + switch ($fromVersion) { + case '0.0': + //Any schema version below 2.5 + require_once(__DIR__ . '/update_0.0_2.5.php'); + plugin_formcreator_update_2_5($migration); + + default: + $this->migration->executeMigration(); + } + $this->configureExistingEntities(); + $this->createRequestType(); + $this->createDefaultDisplayPreferences(); + + return true; + } + + /** + * Find the version of the plugin + * + * @return string|NULL + */ + protected function getSchemaVersion() { + if ($this->isPluginInstalled()) { + return $this->getSchemaVersionFromGlpiConfig(); + } + + return null; + } + + /** + * Find version of the plugin in GLPI's config + * + * @return string + */ + protected function getSchemaVersionFromGlpiConfig() { + $config = Config::getConfigurationValues('formcreator', array('schema_version')); + if (!isset($config['schema_version'])) { + // No schema version in GLPI config, then this is older than 2.5 + return '0.0'; + } + + // Version found in GLPI config + return $config['schema_version']; + } + + /** + * is the plugin already isntalled ? + * + * @return boolean + */ + public function isPluginInstalled() { + global $DB; + + $result = $DB->query("SHOW TABLES LIKE 'glpi_plugin_formcreator_%'"); + if ($result) { + if ($DB->numrows($result) > 0) { + return true; + } + } + + return false; + } + + protected function installSchema() { + global $DB; + + $this->migration->displayMessage("create database schema"); + + $dbFile = __DIR__ . '/mysql/plugin_formcreator_empty.sql'; + if (!$DB->runFile($dbFile)) { + $this->migration->displayWarning("Error creating tables : " . $DB->error(), true); + die('Giving up'); + } + } + + protected function configureExistingEntities() { + global $DB; + + $this->migration->displayMessage("Configure existing entities"); + + $query = "SELECT `id` FROM `glpi_entities` + WHERE `id` NOT IN ( + SELECT `id` FROM `glpi_plugin_formcreator_entityconfigs` + )"; + $result = $DB->query($query); + if (!$result) { + Toolbox::logInFile('sql-errors', $DB->error()); + die ($DB->error()); + } + while ($row = $DB->fetch_assoc($result)) { + $entityConfig = new self(); + $entityConfig->add([ + 'id' => $row['id'], + 'replace_helpdesk' => ($row['id'] == 0) ? 0 : PluginFormcreatorEntityconfig::CONFIG_PARENT + ]); + } + } + + protected function createRequestType() { + global $DB; + + $this->migration->displayMessage("create request type"); + + $query = "SELECT id FROM `glpi_requesttypes` WHERE `name` LIKE 'Formcreator';"; + $result = $DB->query($query) or die ($DB->error()); + + if ($DB->numrows($result) > 0) { + list($requesttype) = $DB->fetch_array($result); + } else { + $query = "INSERT INTO `glpi_requesttypes` SET `name` = 'Formcreator';"; + $DB->query($query) or die ($DB->error()); + $requesttype = $DB->insert_id(); + } + } + + protected function createDefaultDisplayPreferences() { + $this->migration->displayMessage("create default display preferences"); + + // Create standard display preferences + $displayprefs = new DisplayPreference(); + $found_dprefs = $displayprefs->find("`itemtype` = 'PluginFormcreatorForm_Answer'"); + if (count($found_dprefs) == 0) { + $query = "INSERT IGNORE INTO `glpi_displaypreferences` + (`id`, `itemtype`, `num`, `rank`, `users_id`) VALUES + (NULL, 'PluginFormcreatorForm_Answer', 2, 2, 0), + (NULL, 'PluginFormcreatorForm_Answer', 3, 3, 0), + (NULL, 'PluginFormcreatorForm_Answer', 4, 4, 0), + (NULL, 'PluginFormcreatorForm_Answer', 5, 5, 0), + (NULL, 'PluginFormcreatorForm_Answer', 6, 6, 0)"; + $DB->query($query) or die ($DB->error()); + } + + $displayprefs = new DisplayPreference; + $found_dprefs = $displayprefs->find("`itemtype` = 'PluginFormcreatorForm'"); + if (count($found_dprefs) == 0) { + $query = "INSERT IGNORE INTO `glpi_displaypreferences` + (`id`, `itemtype`, `num`, `rank`, `users_id`) VALUES + (NULL, 'PluginFormcreatorForm', 30, 1, 0), + (NULL, 'PluginFormcreatorForm', 3, 2, 0), + (NULL, 'PluginFormcreatorForm', 10, 3, 0), + (NULL, 'PluginFormcreatorForm', 7, 4, 0), + (NULL, 'PluginFormcreatorForm', 8, 5, 0), + (NULL, 'PluginFormcreatorForm', 9, 6, 0);"; + $DB->query($query) or die ($DB->error()); + } + + $displayprefs = new DisplayPreference; + $found_dprefs = $displayprefs->find("`itemtype` = 'PluginFormcreatorIssue'"); + if (count($found_dprefs) == 0) { + $query = "INSERT IGNORE INTO `glpi_displaypreferences` + (`id`, `itemtype`, `num`, `rank`, `users_id`) VALUES + (NULL, 'PluginFormcreatorIssue', 1, 1, 0), + (NULL, 'PluginFormcreatorIssue', 2, 2, 0), + (NULL, 'PluginFormcreatorIssue', 4, 3, 0), + (NULL, 'PluginFormcreatorIssue', 5, 4, 0), + (NULL, 'PluginFormcreatorIssue', 6, 5, 0), + (NULL, 'PluginFormcreatorIssue', 7, 6, 0), + (NULL, 'PluginFormcreatorIssue', 8, 7, 0)"; + $DB->query($query) or die ($DB->error()); + } + } + + protected function createNotifications() { + $this->migration->displayMessage("create notifications"); + + $notifications = array( + 'plugin_formcreator_form_created' => array( + 'name' => __('A form has been created', 'formcreator'), + 'subject' => __('Your request has been saved', 'formcreator'), + 'content' => __('Hi,\nYour request from GLPI has been successfully saved with number ##formcreator.request_id## and transmitted to the helpdesk team.\nYou can see your answers onto the following link:\n##formcreator.validation_link##', 'formcreator'), + 'notified' => self::AUTHOR, + ), + 'plugin_formcreator_need_validation' => array( + 'name' => __('A form need to be validate', 'formcreator'), + 'subject' => __('A form from GLPI need to be validate', 'formcreator'), + 'content' => __('Hi,\nA form from GLPI need to be validate and you have been choosen as the validator.\nYou can access it by clicking onto this link:\n##formcreator.validation_link##', 'formcreator'), + 'notified' => self::APPROVER, + ), + 'plugin_formcreator_refused' => array( + 'name' => __('The form is refused', 'formcreator'), + 'subject' => __('Your form has been refused by the validator', 'formcreator'), + 'content' => __('Hi,\nWe are sorry to inform you that your form has been refused by the validator for the reason below:\n##formcreator.validation_comment##\n\nYou can still modify and resubmit it by clicking onto this link:\n##formcreator.validation_link##', 'formcreator'), + 'notified' => self::AUTHOR, + ), + 'plugin_formcreator_accepted' => array( + 'name' => __('The form is accepted', 'formcreator'), + 'subject' => __('Your form has been accepted by the validator', 'formcreator'), + 'content' => __('Hi,\nWe are pleased to inform you that your form has been accepted by the validator.\nYour request will be considered soon.', 'formcreator'), + 'notified' => self::AUTHOR, + ), + 'plugin_formcreator_deleted' => array( + 'name' => __('The form is deleted', 'formcreator'), + 'subject' => __('Your form has been deleted by an administrator', 'formcreator'), + 'content' => __('Hi,\nWe are sorry to inform you that your request cannot be considered and has been deleted by an administrator.', 'formcreator'), + 'notified' => self::AUTHOR, + ), + ); + + // Create the notification template + $notification = new Notification(); + $notification_target = new NotificationTarget(); + $template = new NotificationTemplate(); + $translation = new NotificationTemplateTranslation(); + foreach ($notifications as $event => $datas) + { + // Check if notification already exists + $exists = $notification->find("itemtype = 'PluginFormcreatorForm_Answer' AND event = '$event'"); + + // If it doesn't exists, create it + if (count($exists) == 0) { + $template_id = $template->add(array( + 'name' => Toolbox::addslashes_deep($datas['name']), + 'comment' => '', + 'itemtype' => 'PluginFormcreatorForm_Answer', + )); + + // Add a default translation for the template + $translation->add(array( + 'notificationtemplates_id' => $template_id, + 'language' => '', + 'subject' => Toolbox::addslashes_deep($datas['subject']), + 'content_text' => Toolbox::addslashes_deep($datas['content']), + 'content_html' => '

    '.str_replace('\n', '
    ', Toolbox::addslashes_deep($datas['content'])).'

    ', + )); + + // Create the notification + $notification_id = $notification->add(array( + 'name' => Toolbox::addslashes_deep($datas['name']), + 'comment' => '', + 'entities_id' => 0, + 'is_recursive' => 1, + 'is_active' => 1, + 'itemtype' => 'PluginFormcreatorForm_Answer', + 'notificationtemplates_id' => $template_id, + 'event' => $event, + 'mode' => 'mail', + )); + + // Add default notification targets + $notification_target->add(array( + "items_id" => $datas['notified'], + "type" => Notification::USER_TYPE, + "notifications_id" => $notification_id, + )); + } + } + } + + protected function deleteNotifications() { + global $DB; + + $this->migration->displayMessage("Delete notifications"); + + // Define DB tables + $table_targets = getTableForItemType('NotificationTarget'); + $table_notification = getTableForItemType('Notification'); + $table_translations = getTableForItemType('NotificationTemplateTranslation'); + $table_templates = getTableForItemType('NotificationTemplate'); + + // Delete translations + $query = "DELETE FROM `$table_translations` + WHERE `notificationtemplates_id` IN ( + SELECT `id` FROM $table_templates WHERE `itemtype` = 'PluginFormcreatorForm_Answer')"; + $DB->query($query); + + // Delete notification templates + $query = "DELETE FROM `$table_templates` + WHERE `itemtype` = 'PluginFormcreatorForm_Answer'"; + $DB->query($query); + + // Delete notification targets + $query = "DELETE FROM `$table_targets` + WHERE `notifications_id` IN ( + SELECT `id` FROM $table_notification WHERE `itemtype` = 'PluginFormcreatorForm_Answer')"; + $DB->query($query); + + // Delete notifications + $query = "DELETE FROM `$table_notification` + WHERE `itemtype` = 'PluginFormcreatorForm_Answer'"; + $DB->query($query); + } + + protected function deleteTicketRelation() { + global $DB, $CFG_GLPI; + + $this->migration->displayMessage("Delete Ticket / Form_Answer relation"); + + // Delete relations with tickets with email notifications disabled + $use_mailing = $CFG_GLPI['use_mailing']; + $CFG_GLPI['use_mailing'] = '0'; + + $item_ticket = new Item_Ticket(); + $item_ticket->deleteByCriteria(array('itemtype' => 'PluginFormcreatorForm_Answer')); + + $CFG_GLPI['use_mailing'] = $use_mailing; + } + + protected function deleteTables() { + global $DB; + + // Drop tables + $itemtypes = array( + 'PluginFormcreatorAnswer', + 'PluginFormcreatorCategory', + 'PluginFormcreatorEntityconfig', + 'PluginFormcreatorForm_Answer', + 'PluginFormcreatorForm_Profile', + 'PluginFormcreatorForm_Validator', + 'PluginFormcreatorForm', + 'PluginFormcreatorQuestion_Condition', + 'PluginFormcreatorQuestion', + 'PluginFormcreatorSection', + 'PluginFormcreatorTarget', + 'PluginFormcreatorTargetChange_Actor', + 'PluginFormcreatorTargetChange', + 'PluginFormcreatorTargetTicket_Actor', + 'PluginFormcreatorTargetTicket', + ); + + foreach ($itemtypes as $itemtype) { + $table = getTableForItemType($itemtype); + $this->migration->displayMessage("Drop $table"); + $log = new Log(); + $log->deleteByCriteria(array('itemtype' => $itemtype)); + + $displayPreference = new DisplayPreference(); + $displayPreference->deleteByCriteria(array('itemtype' => $itemtype)); + + $DB->query("DROP TABLE IF EXISTS `$table`"); + } + + // Drop views + $this->migration->displayMessage("Drop glpi_plugin_formcreator_issues"); + $DB->query('DROP VIEW IF EXISTS `glpi_plugin_formcreator_issues`'); + + $displayPreference = new DisplayPreference(); + $displayPreference->deleteByCriteria(array('itemtype' => 'PluginFormCreatorIssue')); + } + + /** + * + */ + public function uninstall() { + $this->deleteTicketRelation(); + $this->deleteTables(); + } +} \ No newline at end of file diff --git a/install/mysql/plugin_formcreator_empty.sql b/install/mysql/plugin_formcreator_empty.sql new file mode 100644 index 000000000..f3abece75 --- /dev/null +++ b/install/mysql/plugin_formcreator_empty.sql @@ -0,0 +1,253 @@ +-- Database schema +-- Do NOT drop anything here + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_answers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_forms_answers_id` int(11) NOT NULL, + `plugin_formcreator_question_id` int(11) NOT NULL, + `answer` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_categories` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `comment` text COLLATE utf8_unicode_ci, + `completename` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `plugin_formcreator_categories_id` int(11) NOT NULL DEFAULT '0', + `level` int(11) NOT NULL DEFAULT '1', + `sons_cache` longtext COLLATE utf8_unicode_ci, + `ancestors_cache` longtext COLLATE utf8_unicode_ci, + `knowbaseitemcategories_id` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `name` (`name`) +) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_entityconfigs` ( + `id` int(11) NOT NULL, + `replace_helpdesk` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `entities_id` int(11) NOT NULL DEFAULT '0', + `is_recursive` tinyint(1) NOT NULL DEFAULT '0', + `access_rights` tinyint(1) NOT NULL DEFAULT '1', + `requesttype` int(11) NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `content` longtext COLLATE utf8_unicode_ci, + `plugin_formcreator_categories_id` int(11) unsigned NOT NULL DEFAULT '0', + `is_active` tinyint(1) NOT NULL DEFAULT '0', + `language` varchar(5) COLLATE utf8_unicode_ci NOT NULL, + `helpdesk_home` tinyint(1) NOT NULL DEFAULT '0', + `is_deleted` tinyint(1) NOT NULL DEFAULT '0', + `validation_required` tinyint(1) NOT NULL DEFAULT '0', + `usage_count` int(11) NOT NULL DEFAULT '0', + `is_default` tinyint(1) NOT NULL DEFAULT '0', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `Search` (`name`,`description`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_answers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `entities_id` int(11) NOT NULL DEFAULT '0', + `is_recursive` tinyint(1) NOT NULL DEFAULT '0', + `plugin_formcreator_forms_id` int(11) NOT NULL, + `requester_id` int(11) DEFAULT NULL, + `validator_id` int(11) DEFAULT NULL, + `request_date` datetime NOT NULL, + `status` enum('waiting','refused','accepted') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'waiting', + `comment` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_profiles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_forms_id` int(11) NOT NULL, + `profiles_id` int(11) NOT NULL, + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unicity` (`plugin_formcreator_forms_id`,`profiles_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_validators` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_forms_id` int(11) NOT NULL, + `itemtype` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `items_id` int(11) NOT NULL, + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unicity` (`plugin_formcreator_forms_id`,`itemtype`,`items_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_headers` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `entities_id` int(11) NOT NULL DEFAULT '0', + `is_recursive` tinyint(1) NOT NULL DEFAULT '1', + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `comment` text COLLATE utf8_unicode_ci, + PRIMARY KEY (`id`), + KEY `name` (`name`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_sections_id` int(11) NOT NULL, + `fieldtype` varchar(30) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text', + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `required` tinyint(1) NOT NULL DEFAULT '0', + `show_empty` tinyint(1) NOT NULL DEFAULT '0', + `default_values` text COLLATE utf8_unicode_ci, + `values` text COLLATE utf8_unicode_ci, + `range_min` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `range_max` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8_unicode_ci NOT NULL, + `regex` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `order` int(11) NOT NULL DEFAULT '0', + `show_rule` enum('always','hidden','shown') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'always', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + FULLTEXT KEY `Search` (`name`,`description`) +) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions_conditions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_questions_id` int(11) NOT NULL, + `show_field` int(11) DEFAULT NULL, + `show_condition` enum('==','!=','<','>','<=','>=') COLLATE utf8_unicode_ci DEFAULT NULL, + `show_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + `show_logic` enum('AND','OR','XOR') COLLATE utf8_unicode_ci DEFAULT NULL, + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_sections` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_forms_id` int(11) NOT NULL, + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `order` int(11) NOT NULL DEFAULT '0', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `changetemplates_id` int(11) DEFAULT NULL, + `comment` text COLLATE utf8_unicode_ci, + `impactcontent` text COLLATE utf8_unicode_ci, + `controlistcontent` text COLLATE utf8_unicode_ci, + `rolloutplancontext` text COLLATE utf8_unicode_ci, + `backoutplancontext` text COLLATE utf8_unicode_ci, + `checklistcontent` text COLLATE utf8_unicode_ci, + `due_date_rule` enum('answer','change','calcul') COLLATE utf8_unicode_ci DEFAULT NULL, + `due_date_question` int(11) DEFAULT NULL, + `due_date_value` tinyint(4) DEFAULT NULL, + `due_date_period` enum('minute','hour','day','month') COLLATE utf8_unicode_ci DEFAULT NULL, + `validation_followup` tinyint(1) NOT NULL DEFAULT '1', + `destination_entity` enum('current','requester','requester_dynamic_first','requester_dynamic_last','form','validator','specific','user','entity') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'requester', + `destination_entity_value` int(11) DEFAULT NULL, + `tag_type` enum('none','questions','specifics','questions_and_specific','questions_or_specific') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', + `tag_questions` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `tag_specifics` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges_actors` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_targetchanges_id` int(11) NOT NULL, + `actor_role` enum('requester','observer','assigned') COLLATE utf8_unicode_ci NOT NULL, + `actor_type` enum('creator','validator','person','question_person','group','question_group','supplier','question_supplier') COLLATE utf8_unicode_ci NOT NULL, + `actor_value` int(11) DEFAULT NULL, + `use_notification` tinyint(1) NOT NULL DEFAULT '1', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `plugin_formcreator_targetchanges_id` (`plugin_formcreator_targetchanges_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targets` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_forms_id` int(11) NOT NULL, + `itemtype` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', + `items_id` int(11) NOT NULL DEFAULT '0', + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', + `tickettemplates_id` int(11) DEFAULT NULL, + `comment` text COLLATE utf8_unicode_ci, + `due_date_rule` enum('answer','ticket','calcul') COLLATE utf8_unicode_ci DEFAULT NULL, + `due_date_question` int(11) DEFAULT NULL, + `due_date_value` tinyint(4) DEFAULT NULL, + `due_date_period` enum('minute','hour','day','month') COLLATE utf8_unicode_ci DEFAULT NULL, + `urgency_rule` enum('none','answer') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', + `urgency_question` int(11) NOT NULL DEFAULT '0', + `validation_followup` tinyint(1) NOT NULL DEFAULT '1', + `destination_entity` enum('current','requester','requester_dynamic_first','requester_dynamic_last','form','validator','specific','user','entity') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'requester', + `destination_entity_value` int(11) DEFAULT NULL, + `tag_type` enum('none','questions','specifics','questions_and_specific','questions_or_specific') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', + `tag_questions` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `tag_specifics` varchar(255) COLLATE utf8_unicode_ci NOT NULL, + `category_rule` enum('none','answer') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', + `category_question` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets_actors` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `plugin_formcreator_targettickets_id` int(11) NOT NULL, + `actor_role` enum('requester','observer','assigned') COLLATE utf8_unicode_ci NOT NULL, + `actor_type` enum('creator','validator','person','question_person','group','question_group','supplier','question_supplier','question_actors') COLLATE utf8_unicode_ci NOT NULL, + `actor_value` int(11) DEFAULT NULL, + `use_notification` tinyint(1) NOT NULL DEFAULT '1', + `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `plugin_formcreator_targettickets_id` (`plugin_formcreator_targettickets_id`) +) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +CREATE OR REPLACE VIEW `glpi_plugin_formcreator_issues` AS + select + distinct concat('f_',`fanswer`.`id`) AS `id`, + `fanswer`.`id` AS `original_id`, + 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, + `f`.`name` AS `name`, + `fanswer`.`status` AS `status`, + `fanswer`.`request_date` AS `date_creation`, + `fanswer`.`request_date` AS `date_mod`, + `fanswer`.`entities_id` AS `entities_id`, + `fanswer`.`is_recursive` AS `is_recursive`, + `fanswer`.`requester_id` AS `requester_id`, + `fanswer`.`validator_id` AS `validator_id`, + `fanswer`.`comment` AS `comment` + from ((`glpi_plugin_formcreator_forms_answers` `fanswer` + left join `glpi_plugin_formcreator_forms` `f` on((`f`.`id` = `fanswer`.`plugin_formcreator_forms_id`))) + left join `glpi_items_tickets` `itic` on(((`itic`.`items_id` = `fanswer`.`id`) and (`itic`.`itemtype` = 'PluginFormcreatorForm_Answer')))) + group by `fanswer`.`id` + having (count(`itic`.`tickets_id`) <> 1) + union + select + distinct concat('t_',`tic`.`id`) AS `id`, + `tic`.`id` AS `original_id`, + 'Ticket' AS `sub_itemtype`, + `tic`.`name` AS `name`, + `tic`.`status` AS `status`, + `tic`.`date` AS `date_creation`, + `tic`.`date_mod` AS `date_mod`, + `tic`.`entities_id` AS `entities_id`, + 0 AS `is_recursive`, + `tic`.`users_id_recipient` AS `requester_id`, + '' AS `validator_id`, + `tic`.`content` AS `comment` + from (`glpi_tickets` `tic` + left join `glpi_items_tickets` `itic` on(((`itic`.`tickets_id` = `tic`.`id`) and (`itic`.`itemtype` = 'PluginFormcreatorForm_Answer')))) + where (`tic`.`is_deleted` = 0) + group by `tic`.`id` + having (count(`itic`.`items_id`) <= 1); diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php new file mode 100644 index 000000000..d4e034e0a --- /dev/null +++ b/install/update_0.0_2.5.php @@ -0,0 +1,955 @@ +displayMessage("Upgrading glpi_plugin_formcreator_answers"); + // Update field type from previous version (Need answer to be text since text can be WYSIWING). + $query = "ALTER TABLE `glpi_plugin_formcreator_answers` CHANGE `answer` `answer` text;"; + $DB->query($query) or die ($DB->error()); + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + $query = "SELECT `id`, `answer` FROM `glpi_plugin_formcreator_answers`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_answers` SET + `answer` = '".plugin_formcreator_encode($line['answer'])."' + WHERE `id` = ".$line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + //rename foreign key, to match table plugin_formcreator_forms_answers name + $migration->changeField('glpi_plugin_formcreator_answers', + 'plugin_formcreator_formanwers_id', + 'plugin_formcreator_forms_answers_id', + 'integer'); + $migration->migrationOneTable('glpi_plugin_formcreator_answers'); +} + +function plugin_formcreator_updateCategory(Migration $migration) { + global $DB; + + // Legacy upgrade of Categories + $migration->displayMessage("Upgrading glpi_plugin_formcreator_categories"); + + if (TableExists('glpi_plugin_formcreator_cats')) { + $query = "INSERT IGNORE INTO `glpi_plugin_formcreator_categories` (`id`, `name`) + SELECT `id`,`name` FROM glpi_plugin_formcreator_cats"; + $DB->query($query); + $DB->query("DROP TABLE glpi_plugin_formcreator_cats"); + } + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + $query = "SELECT `id`, `name`, `comment` FROM `glpi_plugin_formcreator_categories`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_categories` SET + `name` = '".plugin_formcreator_encode($line['name'])."', + `comment` = '".plugin_formcreator_encode($line['comment'])."' + WHERE `id` = ".$line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + /** + * Migrate categories to tree structure + * + * @since 0.90-1.4 + */ + if (!FieldExists('glpi_plugin_formcreator_categories', "knowbaseitemcategories_id")) { + $migration->addField('glpi_plugin_formcreator_categories', 'completename', 'string', array( + 'after' => 'comment' + )); + $migration->addField('glpi_plugin_formcreator_categories', 'plugin_formcreator_categories_id', 'integer', array( + 'after' => 'completename' + )); + $migration->addField('glpi_plugin_formcreator_categories', 'level', 'integer', array( + 'value' => 1, + 'after' => 'plugin_formcreator_categories_id' + )); + $migration->addField('glpi_plugin_formcreator_categories', 'sons_cache', 'longtext', array( + 'after' => 'level' + )); + $migration->addField('glpi_plugin_formcreator_categories', 'ancestors_cache', 'longtext', array( + 'after' => 'sons_cache' + )); + $migration->addField('glpi_plugin_formcreator_categories', 'knowbaseitemcategories_id', 'integer', array( + 'after' => 'ancestors_cache' + )); + $migration->migrationOneTable('glpi_plugin_formcreator_categories'); + $query = "UPDATE `glpi_plugin_formcreator_categories` SET `completename` = `name` WHERE `completename` = ''"; + $DB->query($query); + } + + // Legacy upgrade of Form_Answers + $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_answers"); + + if (TableExists("glpi_plugin_formcreator_formanswers")) { + $migration->renameTable('glpi_plugin_formcreator_formanswers', 'glpi_plugin_formcreator_forms_answers'); + $itemTicket_table = Item_Ticket::getTable(); + $query = "UPDATE `$itemTicket_table` SET `itemtype` = 'PluginFormcreatorForm_Answer' WHERE `itemtype` = 'PluginFormcreatorFormanswer'"; + $DB->query($query) or die ($DB->error()); + } + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + $query = "SELECT `id`, `comment` FROM `glpi_plugin_formcreator_forms_answers`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_forms_answers` SET + `comment` = '" . plugin_formcreator_encode($line['comment']) . "' + WHERE `id` = " . $line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + if (!FieldExists('glpi_plugin_formcreator_forms_answers', 'name')) { + $query_update = 'ALTER TABLE `glpi_plugin_formcreator_forms_answers` ADD `name` VARCHAR(255) NOT NULL AFTER `id`'; + $DB->query($query_update) or die ($DB->error()); + } + + // valdiator_id should not be set for waiting form answers + $query = "UPDATE `glpi_plugin_formcreator_forms_answers` + SET `validator_id` = '0' WHERE `status`='waiting'"; + $DB->query($query) or die ($DB->error()); + + // Legacy upgrade of Form_Answers + $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_profiles"); + + if (TableExists('glpi_plugin_formcreator_formprofiles')) { + $migration->renameTable('glpi_plugin_formcreator_formprofiles', 'glpi_plugin_formcreator_forms_profiles'); + } + + // change fk for profiles + if (FieldExists('glpi_plugin_formcreator_forms_profiles', 'plugin_formcreator_profiles_id', false)) { + $migration->changeField('glpi_plugin_formcreator_forms_profiles', 'plugin_formcreator_profiles_id', 'profiles_id', 'integer'); + } + + // redo an id key + if (!FieldExists('glpi_plugin_formcreator_forms_profiles', 'id', false)) { + $DB->query("ALTER TABLE 'glpi_plugin_formcreator_forms_profiles' DROP PRIMARY KEY"); + $migration->addField('glpi_plugin_formcreator_forms_profiles', 'id', 'autoincrement'); + $migration->addKey('glpi_plugin_formcreator_forms_profiles', 'id', 'id', 'PRIMARY KEY'); + $migration->addKey('glpi_plugin_formcreator_forms_profiles', array('plugin_formcreator_forms_id', + 'profiles_id'), + 'unicity', + 'UNIQUE KEY'); + } + + // add uuid to validator + if (!FieldExists('glpi_plugin_formcreator_forms_profiles', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_forms_profiles', 'uuid', 'string'); + } + $migration->migrationOneTable('glpi_plugin_formcreator_forms_profiles'); + + // fill missing uuid + $obj = new PluginFormcreatorForm_Profile(); + $all_form_profiles = $obj->find("uuid IS NULL"); + foreach($all_form_profiles as $form_profiles_id => $form_profile) { + $obj->update(array( + 'id' => $form_profiles_id, + 'uuid' => plugin_formcreator_getUuid() + )); + } +} + +function plugin_formcreator_updateFormValidator(Migration $migration) { + global $DB; + + // Legacy upgrade of Form_Validators + $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_validators"); + + // Convert the old relation in glpi_plugin_formcreator_formvalidators table + if (TableExists('glpi_plugin_formcreator_formvalidators')) { + $table_form = PluginFormcreatorForm::getTable(); + $old_table = 'glpi_plugin_formcreator_formvalidators'; + $query = "INSERT INTO `glpi_plugin_formcreator_forms_validators` (`plugin_formcreator_forms_id`, `itemtype`, `items_id`) + SELECT + `$old_table`.`forms_id`, + IF(`validation_required` = '".PluginFormcreatorForm_Validator::VALIDATION_USER."', 'User', 'Group'), + `$old_table`.`users_id` + FROM `$old_table` + LEFT JOIN `$table_form` ON (`$table_form`.`id` = `$old_table`.`forms_id`) + WHERE `validation_required` > 1"; + $DB->query($query) or die ($DB->error()); + $migration->displayMessage('Backing up table glpi_plugin_formcreator_formvalidators'); + $migration->renameTable('glpi_plugin_formcreator_formvalidators', 'glpi_plugin_formcreator_formvalidators_backup'); + } + + // add uuid to validator + if (!FieldExists('glpi_plugin_formcreator_forms_validators', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_forms_validators', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_forms_validators'); + } + + // fill missing uuid + $obj = new PluginFormcreatorForm_Validator(); + $all_validators = $obj->find("uuid IS NULL"); + foreach($all_validators as $validators_id => $validator) { + $obj->update(array('id' => $validators_id, + 'uuid' => plugin_formcreator_getUuid())); + } +} + +function plugin_formcreator_updateForm(Migration $migration) { + global $DB; + + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms"); + + // Migration from previous version + if (FieldExists('glpi_plugin_formcreator_forms', 'cat', false) + || !FieldExists('glpi_plugin_formcreator_forms', 'plugin_formcreator_categories_id', false)) { + $migration->addField('glpi_plugin_formcreator_forms', 'plugin_formcreator_categories_id', + 'integer', array('value' => '0')); + } + + // Migration from previous version + if (!FieldExists('glpi_plugin_formcreator_forms', 'validation_required', false)) { + $migration->addField('glpi_plugin_formcreator_forms', 'validation_required', 'bool', array('value' => '0')); + } + + // Migration from previous version + if (!FieldExists('glpi_plugin_formcreator_forms', 'requesttype', false)) { + $migration->addField('glpi_plugin_formcreator_forms', 'access_rights', 'bool', array('value' => '1')); + $migration->addField('glpi_plugin_formcreator_forms', 'requesttype', 'integer', array('value' => '0')); + $migration->addField('glpi_plugin_formcreator_forms', 'description', 'string'); + $migration->addField('glpi_plugin_formcreator_forms', 'helpdesk_home', 'bool', array('value' => '0')); + $migration->addField('glpi_plugin_formcreator_forms', 'is_deleted', 'bool', array('value' => '0')); + } + $migration->migrationOneTable('glpi_plugin_formcreator_forms'); + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + $query = "SELECT `id`, `name`, `description`, `content` FROM `glpi_plugin_formcreator_forms`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_forms` SET + `name` = '" . plugin_formcreator_encode($line['name']) . "', + `description` = '" . plugin_formcreator_encode($line['description']) . "', + `content` = '" . plugin_formcreator_encode($line['content']) . "' + WHERE `id` = " . (int) $line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + /** + * Add natural language search + * Add form usage counter + * + * @since 0.90-1.4 + */ + // An error may occur if the Search index does not exists + // This is not critical as we need to (re) create it + If (isIndex('glpi_plugin_formcreator_forms', 'Search')) { + $query = "ALTER TABLE `glpi_plugin_formcreator_forms` DROP INDEX `Search`"; + $DB->query($query); + } + + // Re-add FULLTEXT index + $query = "ALTER TABLE `glpi_plugin_formcreator_forms` ADD FULLTEXT INDEX `Search` (`name`, `description`)"; + $DB->query($query) or die ($DB->error()); + + $migration->addField('glpi_plugin_formcreator_forms', 'usage_count', 'integer', array( + 'after' => 'validation_required', + 'value' => '0' + )); + $migration->addField('glpi_plugin_formcreator_forms', 'is_default', 'bool', array( + 'after' => 'usage_count', + 'value' => '0' + )); + + // add uuid to forms + if (!FieldExists('glpi_plugin_formcreator_forms', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_forms', 'uuid', 'string', array('after' => 'is_default')); + } + + $migration->migrationOneTable('glpi_plugin_formcreator_forms'); + + // fill missing uuid (force update of forms, see PluginFormcreatorForm::prepareInputForUpdate) + $obj = new PluginFormcreatorForm(); + $all_forms = $obj->find("uuid IS NULL"); + foreach($all_forms as $forms_id => $form) { + $obj->update(array('id' => $forms_id)); + } + unset($obj); +} + +function plugin_formcreator_updateHeader(Migration $migration) { + global $DB; + + // Drop Headers table + $migration->displayMessage("Drop glpi_plugin_formcreator_headers"); + $migration->dropTable('glpi_plugin_formcreator_headers'); +} + +function plugin_formcreator_updateQuestionCondition(Migration $migration) { + global $DB; + + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_questions_conditions"); + + // Migration 0.85-1.0 => 0.85-1.1 + if (FieldExists('glpi_plugin_formcreator_questions', 'show_type', false)) { + // Migrate date from "questions" table to "questions_conditions" table + $query = "SELECT `id`, `show_type`, `show_field`, `show_condition`, `show_value` + FROM `glpi_plugin_formcreator_questions`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $questionId = $line['id']; + switch ($line['show_type']) { + case 'hide' : + $show_rule = 'hidden'; + break; + default: + $show_rule = 'always'; + } + switch ($line['show_condition']) { + case 'notequal' : + $show_condition = '!='; + break; + case 'lower' : + $show_condition = '<'; + break; + case 'greater' : + $show_condition = '>'; + break; + default: + $show_condition = '=='; + } + + $show_field = empty($line['show_field']) ? 'NULL' : $line['show_field']; + + $query_udate = "UPDATE `glpi_plugin_formcreator_questions` SET + `show_rule` = '$show_rule' + WHERE `id` = '$questionId'"; + $DB->query($query_udate) or die ($DB->error()); + + $query_udate = "INSERT INTO `glpi_plugin_formcreator_questions_conditions` SET + `plugin_formcreator_questions_id` = '$questionId', + `show_field` = '$show_field', + `show_condition` = '$show_condition', + `show_value` = '" . Toolbox::addslashes_deep($line['show_value']) . "'"; + $DB->query($query_udate) or die ($DB->error()); + } + + // Delete old fields + $migration->dropField('glpi_plugin_formcreator_questions', 'show_type'); + $migration->dropField('glpi_plugin_formcreator_questions', 'show_field'); + $migration->dropField('glpi_plugin_formcreator_questions', 'show_condition'); + $migration->dropField('glpi_plugin_formcreator_questions', 'show_value'); + } + + // Migrate "question_conditions" table + $query = "SELECT `id`, `show_value` + FROM `glpi_plugin_formcreator_questions_conditions`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_questions_conditions` SET + `show_value` = '" . plugin_formcreator_encode($line['show_value']) . "' + WHERE `id` = " . $line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + // add uuid to questions conditions + if (!FieldExists('glpi_plugin_formcreator_questions_conditions', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_questions_conditions', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_questions_conditions'); + } + + // fill missing uuid (force update of questions, see PluginFormcreatorQuestoin_Condition::prepareInputForUpdate) + $condition_obj = new PluginFormcreatorQuestion_Condition(); + $all_conditions = $condition_obj->find("uuid IS NULL"); + foreach($all_conditions as $conditions_id => $condition) { + $condition_obj->update(array('id' => $conditions_id, + 'uuid' => plugin_formcreator_getUuid())); + } +} + +function plugin_formcreator_updateQuestion(Migration $migration) { + global $DB; + + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_questions"); + + // Migration 0.83-1.0 => 0.85-1.0 + if(!FieldExists('glpi_plugin_formcreator_questions', 'fieldtype', false)) { + // Migration from previous version + $query = "ALTER TABLE `glpi_plugin_formcreator_questions` + ADD `fieldtype` varchar(30) NOT NULL DEFAULT 'text', + ADD `show_type` enum ('show', 'hide') NOT NULL DEFAULT 'show', + ADD `show_field` int(11) DEFAULT NULL, + ADD `show_condition` enum('equal','notequal','lower','greater') COLLATE utf8_unicode_ci DEFAULT NULL, + ADD `show_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + ADD `required` tinyint(1) NOT NULL DEFAULT '0', + ADD `show_empty` tinyint(1) NOT NULL DEFAULT '0', + ADD `default_values` text COLLATE utf8_unicode_ci, + ADD `values` text COLLATE utf8_unicode_ci, + ADD `range_min` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + ADD `range_max` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, + ADD `regex` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, + CHANGE `content` `description` text COLLATE utf8_unicode_ci NOT NULL, + CHANGE `position` `order` int(11) NOT NULL DEFAULT '0';"; + $DB->query($query) or die ($DB->error()); + + // order start from 1 instead of 0 + $DB->query("UPDATE `glpi_plugin_formcreator_questions` SET `order` = `order` + 1;") or die ($DB->error()); + + // Match new type + $query = "SELECT `id`, `type`, `data`, `option` + FROM `glpi_plugin_formcreator_questions`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $datas = json_decode($line['data']); + $options = json_decode($line['option']); + + $fieldtype = 'text'; + $values = ''; + $default = ''; + $regex = ''; + $required = 0; + + if (isset($datas->value) && !empty($datas->value)) { + if(is_object($datas->value)) { + foreach($datas->value as $value) { + if (!empty($value)) $values .= urldecode($value) . "\r\n"; + } + } else { + $values .= urldecode($datas->value); + } + } + + switch ($line['type']) { + case '1': + $fieldtype = 'text'; + + if (isset($options->type)) { + switch ($options->type) { + case '2': + $required = 1; + break; + case '3': + $regex = '[[:alpha:]]'; + break; + case '4': + $fieldtype = 'float'; + break; + case '5': + $regex = urldecode($options->value); + // Add leading and trailing regex marker (automaticaly added in V1) + if (substr($regex, 0, 1) != '/') $regex = '/' . $regex; + if (substr($regex, -1, 1) != '/') $regex = $regex . '/'; + break; + case '6': + $fieldtype = 'email'; + break; + case '7': + $fieldtype = 'date'; + break; + } + } + $default_values = $values; + $values = ''; + break; + + case '2': + $fieldtype = 'select'; + break; + + case '3': + $fieldtype = 'checkboxes'; + break; + + case '4': + $fieldtype = 'textarea'; + if (isset($options->type) && ($options->type == 2)) { + $required = 1; + } + $default_values = $values; + $values = ''; + break; + + case '5': + $fieldtype = 'file'; + break; + + case '8': + $fieldtype = 'select'; + break; + + case '9': + $fieldtype = 'select'; + break; + + case '10': + $fieldtype = 'dropdown'; + break; + + default : + $data = null; + break; + } + + $query_udate = "UPDATE `glpi_plugin_formcreator_questions` SET + `fieldtype` = '" . $fieldtype . "', + `values` = '" . htmlspecialchars($values) . "', + `default_values` = '" . htmlspecialchars($default) . "', + `regex` = '" . $regex . "', + `required` = " . (int) $required . " + WHERE `id` = " . $line['id']; + $DB->query($query_udate) or die ($DB->error()); + } + + $migration->dropField('glpi_plugin_formcreator_questions', 'type'); + $migration->dropField('glpi_plugin_formcreator_questions', 'data'); + $migration->dropField('glpi_plugin_formcreator_questions', 'option'); + $migration->dropField('glpi_plugin_formcreator_questions', 'plugin_formcreator_forms_id'); + } + + // Migration 0.85-1.0 => 0.85-1.1 + if (FieldExists('glpi_plugin_formcreator_questions', 'show_type', false)) { + + // Fix type of section ID + if (!FieldExists('glpi_plugin_formcreator_questions', 'show_rule')) { + $query = "ALTER TABLE `glpi_plugin_formcreator_questions` + CHANGE `plugin_formcreator_sections_id` `plugin_formcreator_sections_id` INT NOT NULL, + ADD `show_rule` enum('always','hidden','shown') NOT NULL DEFAULT 'always'"; + $DB->query($query) or die ($DB->error()); + } + } + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + // Migrate "questions" table + $query = "SELECT `id`, `name`, `values`, `default_values`, `description` + FROM `glpi_plugin_formcreator_questions`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_questions` SET + `name` = '" . addslashes(plugin_formcreator_encode($line['name'])) . "', + `values` = '" . addslashes(plugin_formcreator_encode($line['values'])) . "', + `default_values` = '" . addslashes(plugin_formcreator_encode($line['default_values'])) . "', + `description` = '" . addslashes(plugin_formcreator_encode($line['description'])) . "' + WHERE `id` = " . $line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + /** + * Add natural language search + * + * @since 0.90-1.4 + */ + // An error may occur if the Search index does not exists + // This is not critical as we need to (re) create it + If (isIndex('glpi_plugin_formcreator_questions', 'Search')) { + $query = "ALTER TABLE `glpi_plugin_formcreator_questions` DROP INDEX `Search`"; + $DB->query($query); + } + + // Re-add FULLTEXT index + $query = "ALTER TABLE `glpi_plugin_formcreator_questions` ADD FULLTEXT INDEX `Search` (`name`, `description`)"; + $DB->query($query) or die ($DB->error()); + + // add uuid to questions + if (!FieldExists('glpi_plugin_formcreator_questions', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_questions', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_questions'); + } + + // fill missing uuid (force update of questions, see PlugiinFormcreatorQuestion::prepareInputForUpdate) + $obj = new PluginFormcreatorQuestion(); + $all_questions = $obj->find("uuid IS NULL"); + foreach($all_questions as $questions_id => $question) { + $obj->update(array('id' => $questions_id)); + } +} + +function plugin_formcreator_updateSection(Migration $migration) { + global $DB; + + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_sections"); + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + $query = "SELECT `id`, `name` + FROM `glpi_plugin_formcreator_sections`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `glpi_plugin_formcreator_sections` SET + `name` = '".plugin_formcreator_encode($line['name'])."' + WHERE `id` = ".$line['id']; + $DB->query($query_update) or die ($DB->error()); + } + + // Migration from previous version => Remove useless target field + if(FieldExists('', 'plugin_formcreator_targets_id', false)) { + $migration->dropField('glpi_plugin_formcreator_sections', 'plugin_formcreator_targets_id'); + } + + // Migration from previous version => Rename "position" into "order" and start order from 1 instead of 0 + if(FieldExists('glpi_plugin_formcreator_sections', 'position', false)) { + $DB->query("ALTER TABLE `glpi_plugin_formcreator_sections` CHANGE `position` `order` INT(11) NOT NULL DEFAULT '0';"); + $DB->query("UPDATE `glpi_plugin_formcreator_sections` SET `order` = `order` + 1;"); + } + + // Migration from previous version => Update Question table, then create a "description" question from content + if(FieldExists('glpi_plugin_formcreator_sections', 'content', false)) { + // Increment the order of questions which are in a section with a description + $query = "UPDATE `PluginFormcreatorQuestion` + SET `order` = `order` + 1 + WHERE `plugin_formcreator_sections_id` IN ( + SELECT `id` + FROM `glpi_plugin_formcreator_sections` + WHERE `content` != '' + )"; + $DB->query($query); + + // Create description from content + $query = "INSERT INTO `PluginFormcreatorQuestion` ( + `plugin_formcreator_sections_id`, + `fieldtype`, + `name`, + `description`, + `order` + ) + SELECT + `id`, + 'description' AS fieldtype, + CONCAT('Description ', `id`) AS name, + `content`, + 1 AS `order` + FROM `glpi_plugin_formcreator_sections` + WHERE `content` != ''"; + $DB->query($query); + + // Delete content column + $DB->query("ALTER TABLE `glpi_plugin_formcreator_sections` DROP `content`;"); + } + + // add uuid to sections + if (!FieldExists('glpi_plugin_formcreator_sections', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_sections', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_sections'); + } + + // fill missing uuid (force update of sections, see PluginFormcreatorSection::prepareInputForUpdate) + $obj = new PluginFormcreatorSection(); + $all_sections = $obj->find("uuid IS NULL"); + foreach($all_sections as $sections_id => $section) { + $obj->update(array('id' => $sections_id)); + } +} + +function plugin_formcreator_updateTarget(Migration $migration) { + global $DB; + + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_targets"); + + // Migration to 0.85-1.2.5 + if (FieldExists('glpi_plugin_formcreator_targets', 'plugin_formcreator_forms_id', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targets` + CHANGE `plugin_formcreator_forms_id` `plugin_formcreator_forms_id` INT NOT NULL;"; + $DB->query($query); + } + + if(!FieldExists('glpi_plugin_formcreator_targets', 'itemtype', false)) { + // Migration from version 1.5 to 1.6 + if (!FieldExists('glpi_plugin_formcreator_targets', 'type', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targets` + ADD `type` tinyint(1) NOT NULL default '2';"; + $DB->query($query); + } + + // Add new column for link with target items + $query = "ALTER TABLE `glpi_plugin_formcreator_targets` + ADD `itemtype` varchar(100) NOT NULL DEFAULT 'PluginFormcreatorTargetTicket', + ADD `items_id` int(11) NOT NULL DEFAULT 0;"; + $DB->query($query); + + // Create ticket template for each configuration in DB + $query = "SELECT t.`urgency`, t.`priority`, t.`itilcategories_id`, t.`type`, f.`entities_id` + FROM `glpi_plugin_formcreator_targets` t, `glpi_plugin_formcreator_forms` f + WHERE f.`id` = t.`plugin_formcreator_forms_id` + GROUP BY t.`urgency`, t.`priority`, t.`itilcategories_id`, t.`type`, f.`entities_id`"; + $result = $DB->query($query) or die($DB->error()); + + $i = 0; + while ($ligne = $DB->fetch_array($result)) { + $i++; + $id = $ligne['urgency'].$ligne['priority'].$ligne['itilcategories_id'].$ligne['type']; + + $template = new TicketTemplate(); + $template_id = $template->add(array( + 'name' => 'Template Formcreator '.$i, + 'entities_id' => $ligne['entities_id'], + 'is_recursive' => 1, + )); + + $predefinedField = new TicketTemplatePredefinedField(); + + // Urgency + if(!empty($ligne['urgency'])) { + $predefinedField->add(array( + 'tickettemplates_id' => $template_id, + 'num' => 10, + 'value' => $ligne['urgency'], + )); + } + + // Priority + if(!empty($ligne['priority'])) { + $predefinedField->add(array( + 'tickettemplates_id' => $template_id, + 'num' => 3, + 'value' => $ligne['priority'], + )); + } + + // Category + if(!empty($ligne['itilcategories_id'])) { + $predefinedField->add(array( + 'tickettemplates_id' => $template_id, + 'num' => 7, + 'value' => $ligne['itilcategories_id'], + )); + } + + // Type + if(!empty($ligne['type'])) { + $predefinedField->add(array( + 'tickettemplates_id' => $template_id, + 'num' => 14, + 'value' => $ligne['type'], + )); + } + + $_SESSION["formcreator_tmp"]["ticket_template"]["$id"] = $template_id; + } + + // Install or upgrade of TargetTicket is a prerequisite + $version = plugin_version_formcreator(); + $migration = new Migration($version['version']); + require_once ('targetticket.class.php'); + PluginFormcreatorTargetTicket::install($migration); + $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); + + // Convert targets to ticket templates only if at least one target extsis + if ($i > 0) { + // Prepare Mysql CASE For each ticket template + $mysql_case_template = "CASE CONCAT(`urgency`, `priority`, `itilcategories_id`, `type`)"; + foreach ($_SESSION["formcreator_tmp"]["ticket_template"] as $id => $value) { + $mysql_case_template .= " WHEN $id THEN $value "; + } + $mysql_case_template .= "END AS `tickettemplates_id`"; + + // Create Target ticket + $query = "SELECT `id`, `name`, $mysql_case_template, `content` FROM `glpi_plugin_formcreator_targets`;"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + // Insert target ticket + $query_insert = "INSERT INTO `$table_targetticket` SET + `name` = '".htmlspecialchars($line['name'])."', + `tickettemplates_id` = ".$line['tickettemplates_id'].", + `comment` = '".htmlspecialchars($line['content'])."'"; + $DB ->query($query_insert); + $targetticket_id = $DB->insert_id(); + + // Update target with target ticket id + $query_update = "UPDATE `glpi_plugin_formcreator_targets` + SET `items_id` = ".$targetticket_id." + WHERE `id` = ".$line['id']; + $DB->query($query_update); + } + } + + // Remove useless column content + $DB->query("ALTER TABLE `glpi_plugin_formcreator_targets` DROP `content`;"); + + /** + * Migration of special chars from previous versions + * + * @since 0.85-1.2.3 + */ + if (FieldExists($table_targetticket, 'comment')) { + $query = "SELECT `id`, `comment` + FROM `$table_targetticket`"; + $result = $DB->query($query); + while ($line = $DB->fetch_array($result)) { + $query_update = "UPDATE `$table_targetticket` SET + `comment` = '".plugin_formcreator_encode($line['comment'])."' + WHERE `id` = ".$line['id']; + $DB->query($query_update) or die ($DB->error()); + } + } + } + + // add uuid to targets + if (!FieldExists('glpi_plugin_formcreator_targets', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_targets', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_targets'); + } + + // fill missing uuid (force update of targets, see PluginFormcreatorTarget::prepareInputForUpdate) + $obj = new PluginFormcreatorTarget(); + $all_targets = $obj->find("uuid IS NULL"); + foreach($all_targets as $targets_id => $target) { + $obj->update(array('id' => $targets_id)); + } +} + +function plugin_formcreator_updateTargetChange_Actor(Migration $migration) { + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_targetchanges_actors"); + + // fill missing uuid + $obj = new PluginFormcreatorTargetChange_Actor(); + $all_actor = $obj->find("uuid IS NULL"); + foreach($all_actor as $actors_id => $actor) { + $obj->update(array('id' => $actors_id, + 'uuid' => plugin_formcreator_getUuid())); + } +} + +function plugin_formcreator_updateTargetTicket_Actor(Migration $migration) { + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_targettickets_actors"); + + $enum_actor_type = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket_Actor::getEnumActorType()))."'"; + $enum_actor_role = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket_Actor::getEnumRole()))."'"; + + $current_enum_actor_type = PluginFormcreatorCommon::getEnumValues('glpi_plugin_formcreator_targettickets_actors', 'actor_type'); + if (count($current_enum_actor_type) != count(PluginFormcreatorTargetTicket_Actor::getEnumActorType())) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets_actors` + CHANGE COLUMN `actor_type` `actor_type` + ENUM($enum_actor_type) + NOT NULL"; + $DB->query($query) or die($DB->error()); + } + + $current_enum_role = PluginFormcreatorCommon::getEnumValues('glpi_plugin_formcreator_targettickets_actors', 'actor_role'); + if (count($current_enum_role) != count(PluginFormcreatorTargetTicket_Actor::getEnumRole())) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets_actors` + CHANGE COLUMN `actor_role` `actor_role` + ENUM($enum_actor_role) + NOT NULL"; + $DB->query($query) or die($DB->error()); + } + + // add uuid to actor + if (!FieldExists('glpi_plugin_formcreator_targettickets_actors', 'uuid', false)) { + $migration->addField('glpi_plugin_formcreator_targettickets_actors', 'uuid', 'string'); + $migration->migrationOneTable('glpi_plugin_formcreator_targettickets_actors'); + } + + // fill missing uuid + $obj = new PluginFormcreatorTargetTicket_Actor(); + $all_actor = $obj->find("uuid IS NULL"); + foreach($all_actor as $actors_id => $actor) { + $obj->update(array('id' => $actors_id, + 'uuid' => plugin_formcreator_getUuid())); + } +} + +function plugin_formcreator_updateTargetTicket(Migration $migration) { + // Legacy upgrade of Forms + $migration->displayMessage("Upgrading glpi_plugin_formcreator_targettickets"); + + $enum_destination_entity = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumDestinationEntity()))."'"; + $enum_tag_type = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumTagType()))."'"; + $enum_due_date_rule = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumDueDateRule()))."'"; + $enum_urgency_rule = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumUrgencyRule()))."'"; + + if(!FieldExists('glpi_plugin_formcreator_targettickets', 'due_date_rule', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + ADD `due_date_rule` ENUM($enum_due_date_rule) NULL DEFAULT NULL, + ADD `due_date_question` INT NULL DEFAULT NULL, + ADD `due_date_value` TINYINT NULL DEFAULT NULL, + ADD `due_date_period` ENUM('minute', 'hour', 'day', 'month') NULL DEFAULT NULL, + ADD `validation_followup` BOOLEAN NOT NULL DEFAULT TRUE;"; + $DB->query($query) or die($DB->error()); + } + + // Migration to Formcreator 0.90-1.4 + if(!FieldExists('glpi_plugin_formcreator_targettickets', 'destination_entity', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + ADD `destination_entity` ENUM($enum_destination_entity) NOT NULL DEFAULT 'requester', + ADD `destination_entity_value` int(11) NULL DEFAULT NULL;"; + $DB->query($query) or die($DB->error()); + } else { + $current_enum_destination_entity = PluginFormcreatorCommon::getEnumValues('glpi_plugin_formcreator_targettickets', 'destination_entity'); + if (count($current_enum_destination_entity) != count(PluginFormcreatorTargetTicket::getEnumDestinationEntity())) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + CHANGE COLUMN `destination_entity` `destination_entity` + ENUM($enum_destination_entity) + NOT NULL DEFAULT 'requester'"; + $DB->query($query) or die($DB->error()); + } + } + + if(!FieldExists('glpi_plugin_formcreator_targettickets', 'tag_type', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + ADD `tag_type` ENUM($enum_tag_type) NOT NULL DEFAULT 'none', + ADD `tag_questions` VARCHAR(255) NOT NULL, + ADD `tag_specifics` VARCHAR(255) NOT NULL;"; + $DB->query($query) or die($DB->error()); + } + + if (!FieldExists('glpi_plugin_formcreator_targettickets', 'urgency_rule', false)) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + ADD `urgency_rule` ENUM($enum_urgency_rule) NOT NULL DEFAULT 'none' AFTER `due_date_period`;"; + $DB->query($query) or die($DB->error()); + + } else { + $current_enum_destination_entity = PluginFormcreatorCommon::getEnumValues('glpi_plugin_formcreator_targettickets', 'urgency_rule'); + if (count($current_enum_destination_entity) != count(PluginFormcreatorTargetTicket::getEnumUrgencyRule())) { + $query = "ALTER TABLE `glpi_plugin_formcreator_targettickets` + CHANGE COLUMN `urgency_rule` `urgency_rule` + ENUM($enum_urgency_rule) + NOT NULL DEFAULT 'requester'"; + $DB->query($query) or die($DB->error()); + } + } + $migration->addField('glpi_plugin_formcreator_targettickets', 'urgency_question', 'integer', array('after' => 'urgency_rule')); +} diff --git a/setup.php b/setup.php index dcc36a2f7..3fdc3c50c 100644 --- a/setup.php +++ b/setup.php @@ -1,7 +1,7 @@ Date: Tue, 7 Feb 2017 20:52:10 +0100 Subject: [PATCH 065/178] save schema version to glpi_configs, handle upgrade to development version --- install/install.php | 30 ++++++++++++++++++++++++++---- install/update_0.0_2.5.php | 30 +++++++++++++++++------------- setup.php | 3 +++ 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/install/install.php b/install/install.php index 773d7af8c..0417a56e2 100644 --- a/install/install.php +++ b/install/install.php @@ -28,22 +28,34 @@ public function install(Migration $migration) { */ public function upgrade(Migration $migration) { $this->migration = $migration; - $fromVersion = $this->getSchemaVersion(); + $fromSchemaVersion = $this->getSchemaVersion(); $this->installSchema(); - switch ($fromVersion) { + // All cases are run starting from the one matching the current schema version + switch ($fromSchemaVersion) { case '0.0': //Any schema version below 2.5 require_once(__DIR__ . '/update_0.0_2.5.php'); - plugin_formcreator_update_2_5($migration); + plugin_formcreator_update_2_5($this->migration); default: - $this->migration->executeMigration(); + // Must be the last case + if ($this->endsWith(PLUGIN_FORMCREATOR_VERSION, "-dev")) { + if (is_readable(__DIR__ . "/update_dev.php") && is_file(__DIR__ . "/update_dev.php")) { + include_once __DIR__ . "/update_dev.php"; + $updateDevFunction = 'plugin_formcreator_update_dev'; + if (function_exists($updateDevFunction)) { + $updateDevFunction($this->migration); + } + } + } } + $this->migration->executeMigration(); $this->configureExistingEntities(); $this->createRequestType(); $this->createDefaultDisplayPreferences(); + Config::setConfigurationValues('formcreator', array('schema_version' => PLUGIN_FORMCREATOR_SCHEMA_VERSION)); return true; } @@ -372,6 +384,16 @@ protected function deleteTables() { $displayPreference->deleteByCriteria(array('itemtype' => 'PluginFormCreatorIssue')); } + /** + * http://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php + * @param unknown $haystack + * @param unknown $needle + */ + protected function endsWith($haystack, $needle) { + // search forward starting from end minus needle length characters + return $needle === '' || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false); + } + /** * */ diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index 1bb15e123..6ab031235 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -8,6 +8,8 @@ function plugin_formcreator_update_2_5(Migration $migration) { global $DB; + $migration->displayMessage("Upgrade to schema version 2.5"); + plugin_formcreator_updateAnswer($migration); plugin_formcreator_updateCategory($migration); plugin_formcreator_updateFormValidator($migration); @@ -20,13 +22,15 @@ function plugin_formcreator_update_2_5(Migration $migration) { plugin_formcreator_updateTargetChange_Actor($migration); plugin_formcreator_updateTargetTicket_Actor($migration); plugin_formcreator_updateTargetTicket($migration); + + $migration->executeMigration(); } function plugin_formcreator_updateAnswer(Migration $migration) { global $DB; // Legacy upgrade of Answers - $migration->displayMessage("Upgrading glpi_plugin_formcreator_answers"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_answers"); // Update field type from previous version (Need answer to be text since text can be WYSIWING). $query = "ALTER TABLE `glpi_plugin_formcreator_answers` CHANGE `answer` `answer` text;"; $DB->query($query) or die ($DB->error()); @@ -57,7 +61,7 @@ function plugin_formcreator_updateCategory(Migration $migration) { global $DB; // Legacy upgrade of Categories - $migration->displayMessage("Upgrading glpi_plugin_formcreator_categories"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_categories"); if (TableExists('glpi_plugin_formcreator_cats')) { $query = "INSERT IGNORE INTO `glpi_plugin_formcreator_categories` (`id`, `name`) @@ -112,7 +116,7 @@ function plugin_formcreator_updateCategory(Migration $migration) { } // Legacy upgrade of Form_Answers - $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_answers"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_answers"); if (TableExists("glpi_plugin_formcreator_formanswers")) { $migration->renameTable('glpi_plugin_formcreator_formanswers', 'glpi_plugin_formcreator_forms_answers'); @@ -146,7 +150,7 @@ function plugin_formcreator_updateCategory(Migration $migration) { $DB->query($query) or die ($DB->error()); // Legacy upgrade of Form_Answers - $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_profiles"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_profiles"); if (TableExists('glpi_plugin_formcreator_formprofiles')) { $migration->renameTable('glpi_plugin_formcreator_formprofiles', 'glpi_plugin_formcreator_forms_profiles'); @@ -189,7 +193,7 @@ function plugin_formcreator_updateFormValidator(Migration $migration) { global $DB; // Legacy upgrade of Form_Validators - $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms_validators"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_validators"); // Convert the old relation in glpi_plugin_formcreator_formvalidators table if (TableExists('glpi_plugin_formcreator_formvalidators')) { @@ -227,7 +231,7 @@ function plugin_formcreator_updateForm(Migration $migration) { global $DB; // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_forms"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms"); // Migration from previous version if (FieldExists('glpi_plugin_formcreator_forms', 'cat', false) @@ -321,7 +325,7 @@ function plugin_formcreator_updateQuestionCondition(Migration $migration) { global $DB; // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_questions_conditions"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_questions_conditions"); // Migration 0.85-1.0 => 0.85-1.1 if (FieldExists('glpi_plugin_formcreator_questions', 'show_type', false)) { @@ -419,7 +423,7 @@ function plugin_formcreator_updateQuestion(Migration $migration) { global $DB; // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_questions"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_questions"); // Migration 0.83-1.0 => 0.85-1.0 if(!FieldExists('glpi_plugin_formcreator_questions', 'fieldtype', false)) { @@ -620,7 +624,7 @@ function plugin_formcreator_updateSection(Migration $migration) { global $DB; // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_sections"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_sections"); /** * Migration of special chars from previous versions @@ -700,7 +704,7 @@ function plugin_formcreator_updateTarget(Migration $migration) { global $DB; // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_targets"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_targets"); // Migration to 0.85-1.2.5 if (FieldExists('glpi_plugin_formcreator_targets', 'plugin_formcreator_forms_id', false)) { @@ -856,7 +860,7 @@ function plugin_formcreator_updateTarget(Migration $migration) { function plugin_formcreator_updateTargetChange_Actor(Migration $migration) { // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_targetchanges_actors"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_targetchanges_actors"); // fill missing uuid $obj = new PluginFormcreatorTargetChange_Actor(); @@ -869,7 +873,7 @@ function plugin_formcreator_updateTargetChange_Actor(Migration $migration) { function plugin_formcreator_updateTargetTicket_Actor(Migration $migration) { // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_targettickets_actors"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_targettickets_actors"); $enum_actor_type = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket_Actor::getEnumActorType()))."'"; $enum_actor_role = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket_Actor::getEnumRole()))."'"; @@ -909,7 +913,7 @@ function plugin_formcreator_updateTargetTicket_Actor(Migration $migration) { function plugin_formcreator_updateTargetTicket(Migration $migration) { // Legacy upgrade of Forms - $migration->displayMessage("Upgrading glpi_plugin_formcreator_targettickets"); + $migration->displayMessage("Upgrade glpi_plugin_formcreator_targettickets"); $enum_destination_entity = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumDestinationEntity()))."'"; $enum_tag_type = "'".implode("', '", array_keys(PluginFormcreatorTargetTicket::getEnumTagType()))."'"; diff --git a/setup.php b/setup.php index 3fdc3c50c..af6655acd 100644 --- a/setup.php +++ b/setup.php @@ -2,6 +2,9 @@ global $CFG_GLPI; // Version of the plugin define('PLUGIN_FORMCREATOR_VERSION', "2.5.0"); +// Schema version of this version +define('PLUGIN_FORMCREATOR_SCHEMA_VERSION', "2.5"); + // Minimal GLPI version, inclusive define ("PLUGIN_FORMCREATOR_GLPI_MIN_VERSION", "9.1"); // Maximum GLPI version, exclusive From c7b64b984765ccb1c7fe4e837f18fca5b05b7a4c Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Wed, 8 Feb 2017 10:10:32 +0100 Subject: [PATCH 066/178] review homepage loading --- ajax/homepage_forms.php | 2 +- scripts/scripts.js.php | 29 +++++++++++++++++++---------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ajax/homepage_forms.php b/ajax/homepage_forms.php index 099c460cc..359f80244 100644 --- a/ajax/homepage_forms.php +++ b/ajax/homepage_forms.php @@ -43,7 +43,7 @@ ORDER BY $cat_table.`name` ASC"; $result = $DB->query($query); if ($DB->numrows($result) > 0 || $DB->numrows($result_forms) > 0) { - echo ''; + echo '
    '; echo ''; echo ''; echo ''; diff --git a/scripts/scripts.js.php b/scripts/scripts.js.php index ee764caf3..41a28169d 100644 --- a/scripts/scripts.js.php +++ b/scripts/scripts.js.php @@ -60,16 +60,19 @@ } ?> - var NomDuFichier = document.location.href.substring(document.location.href.lastIndexOf("/") + 1); + if (location.pathname.indexOf("central.php") != -1 + || location.pathname.indexOf("helpdesk.public.php") != -1) { - if (NomDuFichier == "central.php") { - $('#tabspanel + div.ui-tabs').on("tabsload", function( event, ui ) { - if ($('#homepage_forms_container').length < 1){ - showFormList() - } + $('.ui-tabs-panel:visible').ready(function() { + showHomepageFormList(); }); - } else if (NomDuFichier == "helpdesk.public.php") { - showFormList(); + + $('#tabspanel + div.ui-tabs').on("tabsload", function(event, ui) { + showHomepageFormList(); + }); + + showHomepageFormList(); + } else if ($('#plugin_formcreator_wizard_categories').length > 0) { updateCategoriesView(); updateWizardFormsView(0); @@ -149,12 +152,18 @@ function fcInitMultiSelect() { }); } -function showFormList() { +function showHomepageFormList() { + if ($('.homepage_forms_container').length) { + return; + } + $.ajax({ url: rootDoc + '/plugins/formcreator/ajax/homepage_forms.php', type: "GET" }).done(function(response){ - $('.central > tbody:first').first().prepend(response); + if (!$('.homepage_forms_container').length) { + $('.central > tbody:first').first().prepend(response); + } }); } From b3c29bb55cd3165f7f57cbc743ed73519d503ccd Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 8 Feb 2017 12:08:26 +0100 Subject: [PATCH 067/178] add indexes, and fix not splitted functions --- install/update_0.0_2.5.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index 6ab031235..65e184ae0 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -12,6 +12,8 @@ function plugin_formcreator_update_2_5(Migration $migration) { plugin_formcreator_updateAnswer($migration); plugin_formcreator_updateCategory($migration); + plugin_formcreator_updateForm_Answer($migration); + plugin_formcreator_updateForm_Profile($migration); plugin_formcreator_updateFormValidator($migration); plugin_formcreator_updateForm($migration); plugin_formcreator_updateHeader($migration); @@ -54,6 +56,9 @@ function plugin_formcreator_updateAnswer(Migration $migration) { 'plugin_formcreator_formanwers_id', 'plugin_formcreator_forms_answers_id', 'integer'); + + $migration->addKey('glpi_plugin_formcreator_answers', 'plugin_formcreator_forms_answers_id'); + $migration->migrationOneTable('glpi_plugin_formcreator_answers'); } @@ -114,7 +119,9 @@ function plugin_formcreator_updateCategory(Migration $migration) { $query = "UPDATE `glpi_plugin_formcreator_categories` SET `completename` = `name` WHERE `completename` = ''"; $DB->query($query); } +} +function plugin_formcreator_updateForm_Answer(Migration $migration) { // Legacy upgrade of Form_Answers $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_answers"); @@ -149,7 +156,11 @@ function plugin_formcreator_updateCategory(Migration $migration) { SET `validator_id` = '0' WHERE `status`='waiting'"; $DB->query($query) or die ($DB->error()); - // Legacy upgrade of Form_Answers + $migration->addKey('glpi_plugin_formcreator_forms_answers', 'plugin_formcreator_forms_id'); + } + +function plugin_formcreator_updateForm_Profile(Migration $migration) { + // Legacy upgrade of Form_Answers $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_profiles"); if (TableExists('glpi_plugin_formcreator_formprofiles')) { From 21a55bc87ee4870194607bd05018d1e34285232a Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 13:31:02 +0100 Subject: [PATCH 068/178] add indexes --- install/install.php | 6 ++-- install/mysql/plugin_formcreator_empty.sql | 32 +++++++++++++++------- setup.php | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/install/install.php b/install/install.php index 0417a56e2..70b93a1c5 100644 --- a/install/install.php +++ b/install/install.php @@ -125,9 +125,9 @@ protected function configureExistingEntities() { $this->migration->displayMessage("Configure existing entities"); $query = "SELECT `id` FROM `glpi_entities` - WHERE `id` NOT IN ( - SELECT `id` FROM `glpi_plugin_formcreator_entityconfigs` - )"; + WHERE `id` NOT IN ( + SELECT `id` FROM `glpi_plugin_formcreator_entityconfigs` + )"; $result = $DB->query($query); if (!$result) { Toolbox::logInFile('sql-errors', $DB->error()); diff --git a/install/mysql/plugin_formcreator_empty.sql b/install/mysql/plugin_formcreator_empty.sql index 76bdc9d88..d59d5cf7c 100644 --- a/install/mysql/plugin_formcreator_empty.sql +++ b/install/mysql/plugin_formcreator_empty.sql @@ -6,7 +6,9 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_answers` ( `plugin_formcreator_forms_answers_id` int(11) NOT NULL, `plugin_formcreator_question_id` int(11) NOT NULL, `answer` text COLLATE utf8_unicode_ci, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `plugin_formcreator_forms_answers_id` (`plugin_formcreator_forms_answers_id`), + INDEX `plugin_formcreator_question_id` (`plugin_formcreator_question_id`) ) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_categories` ( @@ -20,7 +22,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_categories` ( `ancestors_cache` longtext COLLATE utf8_unicode_ci, `knowbaseitemcategories_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), - KEY `name` (`name`) + INDEX `knowbaseitemcategories_id` (`knowbaseitemcategories_id`), + INDEX `name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_entityconfigs` ( @@ -48,6 +51,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms` ( `is_default` tinyint(1) NOT NULL DEFAULT '0', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), + INDEX `entities_id` (`entities_id`), + INDEX `plugin_formcreator_categories_id` (`plugin_formcreator_categories_id`), FULLTEXT KEY `Search` (`name`,`description`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; @@ -62,7 +67,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_answers` ( `request_date` datetime NOT NULL, `status` enum('waiting','refused','accepted') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'waiting', `comment` text COLLATE utf8_unicode_ci, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `plugin_formcreator_forms_id` (`plugin_formcreator_forms_id`) ) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_profiles` ( @@ -91,7 +97,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_headers` ( `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `comment` text COLLATE utf8_unicode_ci, PRIMARY KEY (`id`), - KEY `name` (`name`) + INDEX `name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions` ( @@ -111,6 +117,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions` ( `show_rule` enum('always','hidden','shown') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'always', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), + INDEX `plugin_formcreator_sections_id` (`plugin_formcreator_sections_id`), FULLTEXT KEY `Search` (`name`,`description`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; @@ -123,7 +130,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_questions_conditions` ( `show_logic` enum('AND','OR','XOR') COLLATE utf8_unicode_ci DEFAULT NULL, `order` int(11) NOT NULL DEFAULT '1', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `plugin_formcreator_questions_id` (`plugin_formcreator_questions_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_sections` ( @@ -132,7 +140,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_sections` ( `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `order` int(11) NOT NULL DEFAULT '0', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `plugin_formcreator_forms_id` (`plugin_formcreator_forms_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges` ( @@ -156,6 +165,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges` ( `tag_questions` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `tag_specifics` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) + INDEX `changetemplates_id` (`changetemplates_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges_actors` ( @@ -167,7 +177,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges_actors` ( `use_notification` tinyint(1) NOT NULL DEFAULT '1', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), - KEY `plugin_formcreator_targetchanges_id` (`plugin_formcreator_targetchanges_id`) + INDEX `plugin_formcreator_targetchanges_id` (`plugin_formcreator_targetchanges_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targets` ( @@ -177,7 +187,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targets` ( `items_id` int(11) NOT NULL DEFAULT '0', `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `plugin_formcreator_forms_id` (`plugin_formcreator_forms_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets` ( @@ -199,7 +210,8 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets` ( `tag_specifics` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `category_rule` enum('none','answer') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', `category_question` int(11) NOT NULL DEFAULT '0', - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), + INDEX `tickettemplates_id` (`tickettemplates_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets_actors` ( @@ -211,7 +223,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets_actors` ( `use_notification` tinyint(1) NOT NULL DEFAULT '1', `uuid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), - KEY `plugin_formcreator_targettickets_id` (`plugin_formcreator_targettickets_id`) + INDEX `plugin_formcreator_targettickets_id` (`plugin_formcreator_targettickets_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE OR REPLACE VIEW `glpi_plugin_formcreator_issues` AS diff --git a/setup.php b/setup.php index af6655acd..34f66c238 100644 --- a/setup.php +++ b/setup.php @@ -299,4 +299,4 @@ function plugin_formcreator_autoload($classname) { return true; } } -} \ No newline at end of file +} From 10e20298ba56378e856fd779d704dc9b09bfe52d Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 15:30:03 +0100 Subject: [PATCH 069/178] update indexes --- install/update_0.0_2.5.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index 65e184ae0..865fb7cad 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -58,6 +58,7 @@ function plugin_formcreator_updateAnswer(Migration $migration) { 'integer'); $migration->addKey('glpi_plugin_formcreator_answers', 'plugin_formcreator_forms_answers_id'); + $migration->addKey('glpi_plugin_formcreator_answers', 'plugin_formcreator_question_id'); $migration->migrationOneTable('glpi_plugin_formcreator_answers'); } @@ -70,7 +71,7 @@ function plugin_formcreator_updateCategory(Migration $migration) { if (TableExists('glpi_plugin_formcreator_cats')) { $query = "INSERT IGNORE INTO `glpi_plugin_formcreator_categories` (`id`, `name`) - SELECT `id`,`name` FROM glpi_plugin_formcreator_cats"; + SELECT `id`,`name` FROM glpi_plugin_formcreator_cats"; $DB->query($query); $DB->query("DROP TABLE glpi_plugin_formcreator_cats"); } @@ -115,6 +116,8 @@ function plugin_formcreator_updateCategory(Migration $migration) { $migration->addField('glpi_plugin_formcreator_categories', 'knowbaseitemcategories_id', 'integer', array( 'after' => 'ancestors_cache' )); + + $migration->addKey('glpi_plugin_formcreator_categories', 'knowbaseitemcategories_id'); $migration->migrationOneTable('glpi_plugin_formcreator_categories'); $query = "UPDATE `glpi_plugin_formcreator_categories` SET `completename` = `name` WHERE `completename` = ''"; $DB->query($query); @@ -157,6 +160,7 @@ function plugin_formcreator_updateForm_Answer(Migration $migration) { $DB->query($query) or die ($DB->error()); $migration->addKey('glpi_plugin_formcreator_forms_answers', 'plugin_formcreator_forms_id'); + $migration->addKey('glpi_plugin_formcreator_forms_answers', 'plugin_formcreator_categories_id'); } function plugin_formcreator_updateForm_Profile(Migration $migration) { @@ -313,6 +317,8 @@ function plugin_formcreator_updateForm(Migration $migration) { $migration->addField('glpi_plugin_formcreator_forms', 'uuid', 'string', array('after' => 'is_default')); } + $migration->addKey('glpi_plugin_formcreator_forms', 'entities_id'); + $migration->addKey('glpi_plugin_formcreator_forms', 'plugin_formcreator_categories_id'); $migration->migrationOneTable('glpi_plugin_formcreator_forms'); // fill missing uuid (force update of forms, see PluginFormcreatorForm::prepareInputForUpdate) @@ -421,6 +427,8 @@ function plugin_formcreator_updateQuestionCondition(Migration $migration) { $migration->migrationOneTable('glpi_plugin_formcreator_questions_conditions'); } + $migration->addKey('glpi_plugin_formcreator_questions_conditions', 'plugin_formcreator_questions_id'); + // fill missing uuid (force update of questions, see PluginFormcreatorQuestoin_Condition::prepareInputForUpdate) $condition_obj = new PluginFormcreatorQuestion_Condition(); $all_conditions = $condition_obj->find("uuid IS NULL"); @@ -623,6 +631,8 @@ function plugin_formcreator_updateQuestion(Migration $migration) { $migration->migrationOneTable('glpi_plugin_formcreator_questions'); } + $migration->addKey('glpi_plugin_formcreator_questions', 'plugin_formcreator_sections_id'); + // fill missing uuid (force update of questions, see PlugiinFormcreatorQuestion::prepareInputForUpdate) $obj = new PluginFormcreatorQuestion(); $all_questions = $obj->find("uuid IS NULL"); @@ -703,6 +713,8 @@ function plugin_formcreator_updateSection(Migration $migration) { $migration->migrationOneTable('glpi_plugin_formcreator_sections'); } + $migration->addKey('glpi_plugin_formcreator_sections', 'plugin_formcreator_forms_id'); + // fill missing uuid (force update of sections, see PluginFormcreatorSection::prepareInputForUpdate) $obj = new PluginFormcreatorSection(); $all_sections = $obj->find("uuid IS NULL"); @@ -855,6 +867,8 @@ function plugin_formcreator_updateTarget(Migration $migration) { } } + $migration->addKey($table, 'plugin_formcreator_forms_id'); + // add uuid to targets if (!FieldExists('glpi_plugin_formcreator_targets', 'uuid', false)) { $migration->addField('glpi_plugin_formcreator_targets', 'uuid', 'string'); @@ -982,4 +996,5 @@ function plugin_formcreator_updateTargetTicket(Migration $migration) { } } $migration->addField('glpi_plugin_formcreator_targettickets', 'urgency_question', 'integer', array('after' => 'urgency_rule')); + $migration->addKey($table, 'tickettemplates_id'); } From f827e141aeffb7ffd476f2df5e6ce15249123414 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 15:53:38 +0100 Subject: [PATCH 070/178] fix indexes --- install/mysql/plugin_formcreator_empty.sql | 5 +++-- install/update_0.0_2.5.php | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/install/mysql/plugin_formcreator_empty.sql b/install/mysql/plugin_formcreator_empty.sql index d59d5cf7c..941e25a5c 100644 --- a/install/mysql/plugin_formcreator_empty.sql +++ b/install/mysql/plugin_formcreator_empty.sql @@ -22,8 +22,9 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_categories` ( `ancestors_cache` longtext COLLATE utf8_unicode_ci, `knowbaseitemcategories_id` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), + INDEX `name` (`name`), INDEX `knowbaseitemcategories_id` (`knowbaseitemcategories_id`), - INDEX `name` (`name`) + INDEX `plugin_formcreator_categories_id` (`plugin_formcreator_categories_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_entityconfigs` ( @@ -164,7 +165,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targetchanges` ( `tag_type` enum('none','questions','specifics','questions_and_specific','questions_or_specific') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'none', `tag_questions` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `tag_specifics` varchar(255) COLLATE utf8_unicode_ci NOT NULL, - PRIMARY KEY (`id`) + PRIMARY KEY (`id`), INDEX `changetemplates_id` (`changetemplates_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index 865fb7cad..d142295d3 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -118,6 +118,7 @@ function plugin_formcreator_updateCategory(Migration $migration) { )); $migration->addKey('glpi_plugin_formcreator_categories', 'knowbaseitemcategories_id'); + $migration->addKey('glpi_plugin_formcreator_categories', 'plugin_formcreator_categories_id'); $migration->migrationOneTable('glpi_plugin_formcreator_categories'); $query = "UPDATE `glpi_plugin_formcreator_categories` SET `completename` = `name` WHERE `completename` = ''"; $DB->query($query); @@ -125,6 +126,8 @@ function plugin_formcreator_updateCategory(Migration $migration) { } function plugin_formcreator_updateForm_Answer(Migration $migration) { + global $DB; + // Legacy upgrade of Form_Answers $migration->displayMessage("Upgrade glpi_plugin_formcreator_forms_answers"); @@ -156,11 +159,10 @@ function plugin_formcreator_updateForm_Answer(Migration $migration) { // valdiator_id should not be set for waiting form answers $query = "UPDATE `glpi_plugin_formcreator_forms_answers` - SET `validator_id` = '0' WHERE `status`='waiting'"; + SET `validator_id` = '0' WHERE `status`='waiting'"; $DB->query($query) or die ($DB->error()); $migration->addKey('glpi_plugin_formcreator_forms_answers', 'plugin_formcreator_forms_id'); - $migration->addKey('glpi_plugin_formcreator_forms_answers', 'plugin_formcreator_categories_id'); } function plugin_formcreator_updateForm_Profile(Migration $migration) { @@ -867,7 +869,7 @@ function plugin_formcreator_updateTarget(Migration $migration) { } } - $migration->addKey($table, 'plugin_formcreator_forms_id'); + $migration->addKey('glpi_plugin_formcreator_targets', 'plugin_formcreator_forms_id'); // add uuid to targets if (!FieldExists('glpi_plugin_formcreator_targets', 'uuid', false)) { @@ -996,5 +998,5 @@ function plugin_formcreator_updateTargetTicket(Migration $migration) { } } $migration->addField('glpi_plugin_formcreator_targettickets', 'urgency_question', 'integer', array('after' => 'urgency_rule')); - $migration->addKey($table, 'tickettemplates_id'); + $migration->addKey('glpi_plugin_formcreator_targettickets', 'tickettemplates_id'); } From ead3da42922f84f3417d034be7e7bed3cbded7b6 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 16:31:33 +0100 Subject: [PATCH 071/178] WIP - drop header feature (#479) drop header feature and obsolete tables --- hook.php | 6 +- inc/header.class.php | 155 ------------------------------------------- 2 files changed, 5 insertions(+), 156 deletions(-) delete mode 100644 inc/header.class.php diff --git a/hook.php b/hook.php index 26f310159..526ed80ac 100644 --- a/hook.php +++ b/hook.php @@ -23,6 +23,11 @@ function plugin_formcreator_install() } } } + + // Drop obsolete itemtype tables + $migration->dropTable('glpi_plugin_formcreator_titles'); + $migration->dropTable('glpi_plugin_formcreator_headers'); + $migration->executeMigration(); return true; @@ -56,7 +61,6 @@ function plugin_formcreator_uninstall() function plugin_formcreator_getDropdown() { return array( - 'PluginFormcreatorHeader' => _n('Header', 'Headers', 2, 'formcreator'), 'PluginFormcreatorCategory' => _n('Form category', 'Form categories', 2, 'formcreator'), ); } diff --git a/inc/header.class.php b/inc/header.class.php deleted file mode 100644 index d8e804a11..000000000 --- a/inc/header.class.php +++ /dev/null @@ -1,155 +0,0 @@ -getType()) { - case "PluginFormcreatorConfig": - $env = new self; - $found_env = $env->find(); - $nb = count($found_env); - return self::createTabEntry(self::getTypeName($nb), $nb); - } - return ''; - } - - public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) - { - global $CFG_GLPI; - - $header = new self(); - $found = $header->find('entities_id = '.$_SESSION['glpiactive_entity']); - if (count($found) > 0) { - echo '
    -

    - + - '.__('Add an header', 'formcreator').'

    - /!\  - '.__('An header already exists for this entity! You can have only one header per entity.', 'formcreator').' -

    -
    '; - } else { - - $table = getTableForItemType('PluginFormcreatorHeader'); - $where = getEntitiesRestrictRequest( "", $table, "", "", true, false); - $found = $header->find($where); - - if (count($found) > 0) { - echo '
    -

    - - + - '.__('Add an header', 'formcreator').' -

    - /!\  - '.__('An header exists for a parent entity! Another header will overwrite the previous one.', 'formcreator').' -

    -
    '; - } else { - echo ''; - } - } - $params['sort'] = (!empty($_POST['sort'])) ? (int) $_POST['sort'] : 0; - $params['order'] = (!empty($_POST['order']) && in_array($_POST['order'], array('ASC', 'DESC'))) - ? $_POST['order'] : 'ASC'; - $params['start'] = (!empty($_POST['start'])) ? (int) $_POST['start'] : 0; - Search::manageGetValues(__CLASS__); - //Search::showGenericSearch(__CLASS__, $_GET); - Search::showList(__CLASS__, $params); - } - - public function showForm($ID, $options = array()) - { - if (!$this->isNewID($ID)) { - $this->check($ID, READ); - } else { - $this->check(-1, UPDATE); - } - $options['colspan'] = 2; - $options['target'] = Toolbox::getItemTypeFormURL(__CLASS__); - $this->showFormHeader($options); - echo '
    ' . _n('Form', 'Forms', 2, 'formcreator') . '
    '; - - echo ""; - echo ""; - echo ""; - - echo ""; - echo ""; - echo ""; - - - $this->showFormButtons($options); - - return true; - } - - public function prepareInputForAdd($input) - { - $header = new self(); - $found = $header->find('entities_id = '.(int) $input['entities_id']); - if (count($found) > 0) { - Session::addMessageAfterRedirect(__('An header already exists for this entity! You can have only one header per entity.', 'formcreator'), false, ERROR); - return array(); - } - - return $input; - } - - public static function install(Migration $migration) - { - global $DB; - - $table = getTableForItemType(__CLASS__); - if (!TableExists($table)) { - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL auto_increment, - `entities_id` int(11) NOT NULL DEFAULT '0', - `is_recursive` tinyint(1) NOT NULL DEFAULT '1', - `name` varchar(255) NOT NULL DEFAULT '', - `comment` text collate utf8_unicode_ci, - PRIMARY KEY (`id`), - KEY `name` (`name`) - ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci"; - $DB->query($query) or die($DB->error()); - } - - // Migration from previous version - if (TableExists('glpi_plugin_formcreator_titles')) { - $query = "INSERT INTO `$table` (`id`, `name`, `comment`) - SELECT `id`, CONCAT('Header ', `id`) AS name, `name` AS comment - FROM glpi_plugin_formcreator_titles"; - $DB->query($query); - $DB->query("DROP TABLE glpi_plugin_formcreator_titles"); - } - - - return true; - } - - public static function uninstall() - { - global $DB; - - $query = "DROP TABLE IF EXISTS `".getTableForItemType(__CLASS__)."`"; - return $DB->query($query) or die($DB->error()); - } -} From 67c0e06e00e3e89c83de0dbdc5b5ee5b3a903b10 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 16:51:40 +0100 Subject: [PATCH 072/178] Display answers with conditions (#466) * if question is hidden, don't render its label and answer in ticket description --- inc/form_answer.class.php | 24 +++++++++++++++++------- inc/targetchange.class.php | 3 ++- inc/targetticket.class.php | 14 +++++++++++--- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 82070def2..3a0a69155 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -754,6 +754,21 @@ public function generateTarget() return true; } + /** + * + * @param unknown $formAnswerId + * @return string[] + */ + public function getAnswers($formAnswerId) { + $answer = new PluginFormcreatorAnswer(); + $answers = $answer->find("`plugin_formcreator_forms_answers_id` = '$formAnswerId'"); + $answers_values = array(); + foreach ($answers as $found_answer) { + $answers_values[$found_answer['plugin_formcreator_question_id']] = $found_answer['answer']; + } + return $answers_values; + } + /** * Get entire form to be inserted into a target content * @@ -775,14 +790,9 @@ public function getFullForm() } // retrieve answers - $answer = new PluginFormcreatorAnswer(); - $answers = $answer->find('`plugin_formcreator_forms_answers_id` = '.$this->getID()); - $answers_values = array(); - foreach ($answers as $found_answer) { - $answers_values[$found_answer['plugin_formcreator_question_id']] = $found_answer['answer']; - } + $answers_values = $this->getAnswers($this->getID()); - // computer all questions + // compute all questions $query_questions = "SELECT sections.`name` as section_name, questions.*, answers.`answer` diff --git a/inc/targetchange.class.php b/inc/targetchange.class.php index ba9089dba..9474b68cd 100644 --- a/inc/targetchange.class.php +++ b/inc/targetchange.class.php @@ -1397,7 +1397,8 @@ public function save(PluginFormcreatorForm_Answer $formanswer) * Parse target content to replace TAGS like ##FULLFORM## by the values * * @param String $content String to be parsed - * @param PluginFormcreatorForm_Answer $formanswer Formanswer object where answers are stored + * @param PluginFormcreatorForm_Answer $formanswer Formanswer object where answers are stored + * @param String * @return String Parsed string with tags replaced by form values */ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $fullform = "") { diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 4e502e4d4..62caf69ba 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1534,7 +1534,8 @@ public function save(PluginFormcreatorForm_Answer $formanswer) { * Parse target content to replace TAGS like ##FULLFORM## by the values * * @param String $content String to be parsed - * @param PluginFormcreatorForm_Answer $formanswer Formanswer object where answers are stored + * @param PluginFormcreatorForm_Answer $formanswer Formanswer object where answers are stored + * @param String * @return String Parsed string with tags replaced by form values */ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $fullform = "") { @@ -1543,6 +1544,8 @@ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $ if ($fullform == "") { $fullform = $formanswer->getFullForm(); } + // retrieve answers + $answers_values = $formanswer->getAnswers($formanswer->getID()); $content = str_replace('##FULLFORM##', $fullform, $content); $section = new PluginFormcreatorSection(); @@ -1564,8 +1567,13 @@ private function parseTags($content, PluginFormcreatorForm_Answer $formanswer, $ $res_questions = $DB->query($query_questions); while ($question_line = $DB->fetch_assoc($res_questions)) { $id = $question_line['id']; - $name = $question_line['name']; - $value = PluginFormcreatorFields::getValue($question_line, $question_line['answer']); + if (!PluginFormcreatorFields::isVisible($question_line['id'], $answers_values)) { + $name = ''; + $value = ''; + } else { + $name = $question_line['name']; + $value = PluginFormcreatorFields::getValue($question_line, $question_line['answer']); + } if (is_array($value)) { if ($CFG_GLPI['use_rich_text']) { $value = '
    ' . implode('
    ', $value); From 2f11334bff064fb73462598c39e7a8fb46ef6737 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 17:03:47 +0100 Subject: [PATCH 073/178] drop obsolete itemtype --- install/update_0.0_2.5.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index d142295d3..449d97872 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -24,6 +24,7 @@ function plugin_formcreator_update_2_5(Migration $migration) { plugin_formcreator_updateTargetChange_Actor($migration); plugin_formcreator_updateTargetTicket_Actor($migration); plugin_formcreator_updateTargetTicket($migration); + plugin_formcreator_updateTitles($migration); $migration->executeMigration(); } @@ -1000,3 +1001,11 @@ function plugin_formcreator_updateTargetTicket(Migration $migration) { $migration->addField('glpi_plugin_formcreator_targettickets', 'urgency_question', 'integer', array('after' => 'urgency_rule')); $migration->addKey('glpi_plugin_formcreator_targettickets', 'tickettemplates_id'); } + +function plugin_formcreator_updateTitle(Migration $migration) { + global $DB; + + // Drop Headers table + $migration->displayMessage("Drop glpi_plugin_formcreator_titles"); + $migration->dropTable('glpi_plugin_formcreator_titles'); +} From 24b44b9c69165373a545e8549450f7055f86b6a0 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Feb 2017 20:22:48 +0100 Subject: [PATCH 074/178] add category question (#477) * add category question * reorder target ticket edition form * split big method into smaller ones --- inc/targetticket.class.php | 1420 +++++++++++++----------- tests/0000_Install/SaveInstallTest.php | 2 +- tools/cliinstall.php | 2 +- 3 files changed, 803 insertions(+), 621 deletions(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 62caf69ba..4c6774437 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -51,6 +51,15 @@ static function getEnumDueDateRule() { static function getEnumUrgencyRule() { return array( 'none' => __('Urgency from template or Medium', 'formcreator'), + 'specific' => __('Specific urgency', 'formcreator'), + 'answer' => __('Equals to the answer to the question', 'formcreator'), + ); + } + + static function getEnumCategoryRule() { + return array( + 'none' => __('Category from template or none', 'formcreator'), + 'specific' => __('Specific category', 'formcreator'), 'answer' => __('Equals to the answer to the question', 'formcreator'), ); } @@ -136,534 +145,208 @@ public function showForm($options=array()) echo ''; echo ''; - // Ticket Template - echo '
    '; - echo ''; - echo ''; - echo ''; - echo ''; + echo ''; + echo ''; + } + + echo '
    ".__('Name').""; - Html::autocompletionTextField($this, "name"); - echo "
    ".__('Content').""; - echo ""; - Html::initEditorSystem('comment'); - echo "
    ' . _n('Ticket template', 'Ticket templates', 1) . ''; - Dropdown::show('TicketTemplate', array( - 'name' => 'tickettemplates_id', - 'value' => $this->fields['tickettemplates_id'] - )); - echo '' . __('Due date') . ''; + $rand = mt_rand(); + $this->showDestinationEntitySetings($rand); + + $this->showTemplateAndDueDateSettings($rand); // ------------------------------------------------------------------------------------------- - // Due date type selection + // category of the target // ------------------------------------------------------------------------------------------- - Dropdown::showFromArray('due_date_rule', self::getEnumDueDateRule(), - array( - 'value' => $this->fields['due_date_rule'], - 'on_change' => 'formcreatorChangeDueDate(this.value)', - 'display_emptychoice' => true - ) - ); + $this->showCategorySettings($rand); - // for each section ... - $questions_list = array(Dropdown::EMPTY_VALUE); + // ------------------------------------------------------------------------------------------- + // Urgency selection + // ------------------------------------------------------------------------------------------- + $this->showUrgencySettings($rand); + + // ------------------------------------------------------------------------------------------- + // Tags + // ------------------------------------------------------------------------------------------- + $this->showPluginTagsSettings($rand); + + // ------------------------------------------------------------------------------------------- + // Validation as ticket followup + // ------------------------------------------------------------------------------------------- + if ($form->fields['validation_required']) { + echo '
    '; + echo ''; + echo 'fields['validation_followup']) || ($this->fields['validation_followup'] == 1)) { + echo ' checked="checked"'; + } + echo '/>'; + echo ' '; + echo '
    '; + + + // Buttons + echo ''; + + echo ''; + echo ''; + echo ''; + + echo '
    '; + echo '   '; + echo ''; + echo ''; + echo '
    '; + Html::closeForm(); + + // Get available questions for actors lists + $questions_user_list = array(Dropdown::EMPTY_VALUE); + $questions_group_list = array(Dropdown::EMPTY_VALUE); + $questions_supplier_list = array(Dropdown::EMPTY_VALUE); + $questions_actors_list = array(Dropdown::EMPTY_VALUE); $query = "SELECT s.id, s.name FROM glpi_plugin_formcreator_targets t - INNER JOIN glpi_plugin_formcreator_sections s ON s.plugin_formcreator_forms_id = t.plugin_formcreator_forms_id - WHERE t.items_id = " . $this->getID() . " + INNER JOIN glpi_plugin_formcreator_sections s + ON s.plugin_formcreator_forms_id = t.plugin_formcreator_forms_id + WHERE t.items_id = ".$this->getID()." ORDER BY s.order"; $result = $DB->query($query); while ($section = $DB->fetch_array($result)) { - // select all date and datetime questions - $query2 = "SELECT q.id, q.name + // select all user, group or supplier questions (GLPI Object) + $query2 = "SELECT q.id, q.name, q.fieldtype, q.values FROM glpi_plugin_formcreator_questions q INNER JOIN glpi_plugin_formcreator_sections s ON s.id = q.plugin_formcreator_sections_id WHERE s.id = {$section['id']} - AND q.fieldtype IN ('date', 'datetime')"; + AND (q.fieldtype = 'glpiselect' + AND q.values IN ('User', 'Group', 'Supplier')) + OR (q.fieldtype = 'actor')"; $result2 = $DB->query($query2); - $section_questions = array(); + $section_questions_user = array(); + $section_questions_group = array(); + $section_questions_supplier = array(); + $section_questions_actors = array(); while ($question = $DB->fetch_array($result2)) { - $section_questions[$question['id']] = $question['name']; - } - if (count($section_questions) > 0) { - $questions_list[$section['name']] = $section_questions; + if ($question['fieldtype'] == 'glpiselect') { + switch ($question['values']) { + case 'User' : + $section_questions_user[$question['id']] = $question['name']; + break; + case 'Group' : + $section_questions_group[$question['id']] = $question['name']; + break; + case 'Supplier' : + $section_questions_supplier[$question['id']] = $question['name']; + break; + } + } else if ($question['fieldtype'] == 'actor') { + $section_questions_actors[$question['id']] = $question['name']; + } } + $questions_user_list[$section['name']] = $section_questions_user; + $questions_group_list[$section['name']] = $section_questions_group; + $questions_supplier_list[$section['name']] = $section_questions_supplier; + $questions_actors_list[$section['name']] = $section_questions_actors; } - // List questions - if ($this->fields['due_date_rule'] != 'answer' - && $this->fields['due_date_rule'] != 'calcul') { - echo ''; + } else { + echo ""; + + echo "
    "; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
    "; + echo __("Import forms"); + echo "
    "; + echo Html::file(array('name' => 'json_file')); + echo "
    "; + echo Html::submit(_x('button','Send'), array('name' => 'import_send')); + echo "
    "; + echo "
    "; + + Html::closeForm(); + } } /** @@ -1796,4 +1851,32 @@ public static function import($form = array()) { return $forms_id; } + + public function createDocumentType() { + $documentType = new DocumentType(); + $success = $documentType->add(array( + 'name' => 'JSON file', + 'ext' => 'json', + 'icon' => '', + 'is_uploadable' => '1' + )); + if (!$success) { + Session::addMessageAfterRedirect(__('Failed to create JSON document type', 'formcreator')); + } + } + + public function enableDocumentType() { + $documentType = new DocumentType(); + if (!$documentType->getFromDBByQuery("WHERE LOWER(`ext`)='json'")) { + Session::addMessageAfterRedirect(__('JSON document type not found', 'formcreator')); + } else { + $success = $documentType->update(array( + 'id' => $documentType->getID(), + 'is_uploadable' => '1' + )); + if (!$success) { + Session::addMessageAfterRedirect(__('Failed to update JSON document type', 'formcreator')); + } + } + } } From 05ae24e7ed8581b4ebd4f18c28e9b0ddf0d2e48e Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 14 Feb 2017 16:21:48 +0100 Subject: [PATCH 094/178] fix visibility when showing answered form with conditions from dropdowns see #500 --- inc/field.class.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/inc/field.class.php b/inc/field.class.php index bc6ebef03..0e3116529 100644 --- a/inc/field.class.php +++ b/inc/field.class.php @@ -34,8 +34,14 @@ public function show($canEdit = true) echo '
    '; $value = is_array($this->getAnswer()) ? json_encode($this->getAnswer()) : $this->getAnswer(); // $value = json_encode($this->getAnswer()); - echo ''; + if ($this->fields['fieldtype'] == 'dropdown') { + echo ''; + + } else { + echo ''; + } } public function displayField($canEdit = true) From 6711c45612e782726cb53dd8ea4282c437507e4c Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Feb 2017 09:21:13 +0100 Subject: [PATCH 095/178] fix missing class --- ajax/homepage_forms.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ajax/homepage_forms.php b/ajax/homepage_forms.php index 359f80244..f4dc980df 100644 --- a/ajax/homepage_forms.php +++ b/ajax/homepage_forms.php @@ -43,7 +43,7 @@ ORDER BY $cat_table.`name` ASC"; $result = $DB->query($query); if ($DB->numrows($result) > 0 || $DB->numrows($result_forms) > 0) { - echo ''; + echo '
    '; echo ''; echo ''; echo ''; From cddbdd7ed3df0427e33b26241e6017ace3d129cc Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 21 Feb 2017 15:51:02 +0100 Subject: [PATCH 096/178] restore supplier feature --- inc/targetticket.class.php | 32 +++++++++++++++++--------------- inc/targetticket_actor.class.php | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 4c6774437..5f7b262d5 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -313,6 +313,8 @@ public function showForm($options=array()) echo ''; $dropdownItems = array('' => Dropdown::EMPTY_VALUE) + PluginFormcreatorTargetTicket_Actor::getEnumActorType(); + unset($dropdownItems['supplier']); + unset($dropdownItems['question_supplier']); Dropdown::showFromArray('actor_type', $dropdownItems, array( 'on_change' => 'formcreatorChangeActorRequester(this.value)' @@ -529,8 +531,6 @@ public function showForm($options=array()) echo ''; $dropdownItems = array('' => Dropdown::EMPTY_VALUE) + PluginFormcreatorTargetTicket_Actor::getEnumActorType(); - unset($dropdownItems['supplier']); - unset($dropdownItems['question_supplier']); Dropdown::showFromArray('actor_type', $dropdownItems, array( 'on_change' => 'formcreatorChangeActorAssigned(this.value)' @@ -1515,7 +1515,9 @@ protected function prepareActors(PluginFormcreatorForm $form, PluginFormcreatorF break; case 'supplier' : case 'question_supplier' : - // TODO : + foreach ($userIds as $userId) { + $this->addActor('supplier', $userId, $notify); + } break; } } @@ -1532,24 +1534,24 @@ protected function addActor($role, $user, $notify) { switch ($role) { case 'requester': - $this->requesters['_users_id_requester'][] = $userId; - $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify === true); - $this->requesters['_users_id_requester_notif']['alternative_email'][] = $alternativeEmail; + $this->requesters['_users_id_requester'][] = $userId; + $this->requesters['_users_id_requester_notif']['use_notification'][] = ($notify == true); + $this->requesters['_users_id_requester_notif']['alternative_email'][] = $alternativeEmail; break; case 'observer' : - $this->observers['_users_id_observer'][] = $userId; - $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify === true); - $this->observers['_users_id_observer_notif']['alternative_email'][] = $alternativeEmail; + $this->observers['_users_id_observer'][] = $userId; + $this->observers['_users_id_observer_notif']['use_notification'][] = ($notify == true); + $this->observers['_users_id_observer_notif']['alternative_email'][] = $alternativeEmail; break; case 'assigned' : - $this->assigned['_users_id_assign'][] = $userId; - $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify === true); - $this->assigned['_users_id_assign_notif']['alternative_email'][] = $alternativeEmail; + $this->assigned['_users_id_assign'][] = $userId; + $this->assigned['_users_id_assign_notif']['use_notification'][] = ($notify == true); + $this->assigned['_users_id_assign_notif']['alternative_email'][] = $alternativeEmail; break; case 'supplier' : - $this->assignedSuppliers['_suppliers_id_assign'][] = $userId; - $this->assignedSuppliers['_suppliers_id_assign']['use_notification'][] = ($notify === true); - $this->assignedSuppliers['_suppliers_id_assign']['alternative_email'][] = $alternativeEmail; + $this->assignedSuppliers['_suppliers_id_assign'][] = $userId; + $this->assignedSuppliers['_suppliers_id_assign_notif']['use_notification'][] = ($notify == true); + $this->assignedSuppliers['_suppliers_id_assign_notif']['alternative_email'][] = $alternativeEmail; break; } } diff --git a/inc/targetticket_actor.class.php b/inc/targetticket_actor.class.php index 2dd747992..625c96a8c 100644 --- a/inc/targetticket_actor.class.php +++ b/inc/targetticket_actor.class.php @@ -10,7 +10,7 @@ static function getEnumActorType() { 'question_person' => __("Person from the question", 'formcreator'), 'group' => __('Specific group', 'formcreator'), 'question_group' => __('Group from the question', 'formcreator'), - 'supplier' => __('Specific entity', 'formcreator'), + 'supplier' => __('Specific supplier', 'formcreator'), 'question_supplier' => __('Supplier from the question', 'formcreator'), 'question_actors' => __('Actors from the question', 'formcreator'), ); From 5c77c61b435a1508087bc3380265c9ce96d484d3 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 21 Feb 2017 22:18:58 +0100 Subject: [PATCH 097/178] json_encode and json_decode for non latin answers --- inc/form.class.php | 2 +- inc/form_answer.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/form.class.php b/inc/form.class.php index 8868a21d6..db2fb7c04 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1073,7 +1073,7 @@ public function saveForm() // If field was not post, it's value is empty if (isset($_POST['formcreator_field_' . $id])) { $datas[$id] = is_array($_POST['formcreator_field_' . $id]) - ? json_encode($_POST['formcreator_field_' . $id]) + ? json_encode($_POST['formcreator_field_' . $id], JSON_UNESCAPED_UNICODE) : $_POST['formcreator_field_' . $id]; // Replace "," by "." if field is a float field and remove spaces diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 3a0a69155..804576d44 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -607,12 +607,12 @@ public function saveAnswers($datas) // If the answer is set, check if it is an array (then implode id). if (isset($datas[$question['id']])) { $question_answer = $datas[$question['id']]; - if (is_array(json_decode($question_answer))) { + if (is_array(json_decode($question_answer, JSON_UNESCAPED_UNICODE))) { $question_answer = json_decode($question_answer); foreach ($question_answer as $key => $value) { $question_answer[$key] = $value; } - $question_answer = json_encode($question_answer); + $question_answer = json_encode($question_answer, JSON_UNESCAPED_UNICODE); } else { $question_answer = $question_answer; } From 0e3c68f5697a22dd86ace6a66efe23cd180da53a Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 23 Feb 2017 09:41:28 +0100 Subject: [PATCH 098/178] code style --- ajax/homepage_forms.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ajax/homepage_forms.php b/ajax/homepage_forms.php index 359f80244..14a5421cc 100644 --- a/ajax/homepage_forms.php +++ b/ajax/homepage_forms.php @@ -5,7 +5,8 @@ $cat_table = getTableForItemType('PluginFormcreatorCategory'); $form_table = getTableForItemType('PluginFormcreatorForm'); $table_fp = getTableForItemType('PluginFormcreatorForm_Profile'); -$where = getEntitiesRestrictRequest( "", $form_table, "", "", true, false); +$where = getEntitiesRestrictRequest("", $form_table, "", "", true, false); +$language = $_SESSION['glpilanguage']; // Show form whithout table $query_forms = "SELECT $form_table.id, $form_table.name, $form_table.description @@ -14,7 +15,7 @@ AND $form_table.`is_active` = 1 AND $form_table.`is_deleted` = 0 AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '{$_SESSION['glpilanguage']}' OR $form_table.`language` = '') + AND ($form_table.`language` = '{$_SESSION['glpilanguage']}' OR $form_table.`language` IN (0, '', NULL)) AND $where AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( SELECT plugin_formcreator_forms_id @@ -33,7 +34,7 @@ AND $form_table.`is_active` = 1 AND $form_table.`is_deleted` = 0 AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '{$_SESSION['glpilanguage']}' OR $form_table.`language` = '') + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) AND $where AND ($form_table.`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( SELECT plugin_formcreator_forms_id @@ -74,14 +75,15 @@ // For each categories, show the list of forms the user can fill $i = 0; while ($category = $DB->fetch_array($result)) { + $categoryId = $category['id']; echo ''; $query_forms = "SELECT $form_table.id, $form_table.name, $form_table.description FROM $form_table - WHERE $form_table.`plugin_formcreator_categories_id` = {$category['id']} + WHERE $form_table.`plugin_formcreator_categories_id` = '$categoryId' AND $form_table.`is_active` = 1 AND $form_table.`is_deleted` = 0 AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '{$_SESSION['glpilanguage']}' OR $form_table.`language` = '') + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) AND $where AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( SELECT plugin_formcreator_forms_id From c417186722d45b881305f835ecee930b26bb3689 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 28 Feb 2017 10:17:57 +0100 Subject: [PATCH 099/178] Feature/move section form (#501) move section form --- ajax/section.php | 41 ++------------------------------------ ajax/target.php | 29 ++------------------------- inc/section.class.php | 46 +++++++++++++++++++++++++++++++++++++++++++ inc/target.class.php | 34 ++++++++++++++++++++++++++++++-- 4 files changed, 82 insertions(+), 68 deletions(-) diff --git a/ajax/section.php b/ajax/section.php index e48005cd1..02851c209 100644 --- a/ajax/section.php +++ b/ajax/section.php @@ -3,49 +3,12 @@ Session::checkRight("entity", UPDATE); +$section = new PluginFormcreatorSection(); if(empty($_REQUEST['section_id'])) { $section_id = 0; - $name = ''; - $uuid = ''; } else { $section_id = intval($_REQUEST['section_id']); - $section = new PluginFormcreatorSection(); $section->getFromDB($section_id); - $name = $section->fields['name']; - $uuid = $section->fields['uuid']; } -echo ''; -echo '
    ' . _n('Form', 'Forms', 2, 'formcreator') . '
    ' . $category['name'] . '
    '; -echo ''; -echo ''; -echo ''; - -echo ''; -echo ''; -echo ''; -echo ''; - -echo ''; -echo ''; -echo ''; - -echo '
    '; -if(0 == $section_id) { - echo __('Add a section', 'formcreator'); -} else { - echo __('Edit a section', 'formcreator'); -} -echo '
    '.__('Title').' *
    '; -echo ''; -echo ''; -echo ''; -if(0 == $section_id) { - echo ''; - echo ''; -} else { - echo ''; - echo ''; -} -echo '
    '; -Html::closeForm(); +$section->showSubForm($section_id); \ No newline at end of file diff --git a/ajax/target.php b/ajax/target.php index 3f93291a3..94df1132b 100644 --- a/ajax/target.php +++ b/ajax/target.php @@ -2,30 +2,5 @@ include ('../../../inc/includes.php'); Session::checkRight("entity", UPDATE); -echo ''; -echo ''; - -echo ''; - -echo ''; -echo ''; -echo ''; -echo ''; -echo ''; -echo ''; - -echo ''; -echo ''; -echo ''; - -echo '
    '.__('Add a destination', 'formcreator').'
    '.__('Name').' *'._n('Type', 'Types', 1).' *'; -Dropdown::showFromArray('itemtype', array( - '' => '-----', - 'PluginFormcreatorTargetTicket' => __('Ticket'), - 'PluginFormcreatorTargetChange' => __('Change'), -)); -echo '
    '; -echo ''; -echo ''; -echo '
    '; -Html::closeForm(); +$target = new PluginFormcreatorTarget(); +$target->showSubForm(0); diff --git a/inc/section.class.php b/inc/section.class.php index b592a4bbc..967c708ae 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -432,4 +432,50 @@ public function getSectionsFromForm($formId) { return $sections; } + + public function showSubForm($ID) { + global $CFG_GLPI; + + if ($ID == 0) { + $name = ''; + $uuid = ''; + } else { + $name = $this->fields['name']; + $uuid = $this->fields['uuid']; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo '
    '; + if($ID == 0) { + echo __('Add a section', 'formcreator'); + } else { + echo __('Edit a section', 'formcreator'); + } + echo '
    '.__('Title').' *
    '; + echo ''; + echo ''; + echo ''; + if($ID == 0) { + echo ''; + echo ''; + } else { + echo ''; + echo ''; + } + echo '
    '; + Html::closeForm(); + } } diff --git a/inc/target.class.php b/inc/target.class.php index 07e55f327..640810e6f 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -320,14 +320,14 @@ public static function install(Migration $migration) $_SESSION["formcreator_tmp"]["ticket_template"]["$id"] = $template_id; } - // Install or upgrade of TargetTicket is a prerequisite + // Install or upgrade of TargetTicket is a prerequisite $version = plugin_version_formcreator(); $migration = new Migration($version['version']); require_once ('targetticket.class.php'); PluginFormcreatorTargetTicket::install($migration); $table_targetticket = getTableForItemType('PluginFormcreatorTargetTicket'); - // Convert targets to ticket templates only if at least one target extsis + // Convert targets to ticket templates only if at least one target exists if ($i > 0) { // Prepare Mysql CASE For each ticket template $mysql_case_template = "CASE CONCAT(`urgency`, `priority`, `itilcategories_id`, `type`)"; @@ -480,4 +480,34 @@ public function export($remove_uuid = false) { return $target; } + + public function showSubForm($ID) { + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo '
    '.__('Add a destination', 'formcreator').'
    '.__('Name').' *'._n('Type', 'Types', 1).' *'; + Dropdown::showFromArray('itemtype', array( + '' => '-----', + 'PluginFormcreatorTargetTicket' => __('Ticket'), + 'PluginFormcreatorTargetChange' => __('Change'), + )); + echo '
    '; + echo ''; + echo ''; + echo '
    '; + Html::closeForm(); + } } From 94d139fd63d3c70c82990f9bf13daa69fa0f10bd Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 28 Feb 2017 14:55:07 +0100 Subject: [PATCH 100/178] code refactor --- inc/form_answer.class.php | 10 +++++----- inc/target.class.php | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 3a0a69155..87d41ff6c 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -739,14 +739,14 @@ public function acceptAnswers($datas) { public function generateTarget() { // Get all targets - $target_class = new PluginFormcreatorTarget(); - $found_targets = $target_class->find('plugin_formcreator_forms_id = ' . $this->fields['plugin_formcreator_forms_id']); + $form = new PluginFormcreatorForm(); + $form->getFromDB($this->fields['plugin_formcreator_forms_id']); + $target = new PluginFormcreatorTarget(); + $found_targets = $target->getTargetsForForm($form); // Generate targets foreach($found_targets as $target) { - $obj = new $target['itemtype']; - $obj->getFromDB($target['items_id']); - if (!$obj->save($this)) { + if (!$target->save($this)) { return false; } } diff --git a/inc/target.class.php b/inc/target.class.php index 07e55f327..73cd31ac9 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -480,4 +480,21 @@ public function export($remove_uuid = false) { return $target; } + + /** + * get all targets of a form + * @param PluginFormcreatorForm $form + */ + public function getTargetsForForm(PluginFormcreatorForm $form) { + $targets = array(); + $formId = $form->getID(); + $foundTargets = $this->find("plugin_formcreator_forms_id = '$formId'"); + foreach ($foundTargets as $id => $row) { + $target = getItemForItemtype($row['itemtype']); + $target->getFromDB($row['items_id']); + $targets[] = $target; + } + + return $targets; + } } From e55b0015aeedd80f0d269b8eb489b3176c8882b8 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 28 Feb 2017 17:53:14 +0100 Subject: [PATCH 101/178] Update homepage_forms.php use $language variable --- ajax/homepage_forms.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ajax/homepage_forms.php b/ajax/homepage_forms.php index 14a5421cc..ebed59712 100644 --- a/ajax/homepage_forms.php +++ b/ajax/homepage_forms.php @@ -15,7 +15,7 @@ AND $form_table.`is_active` = 1 AND $form_table.`is_deleted` = 0 AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '{$_SESSION['glpilanguage']}' OR $form_table.`language` IN (0, '', NULL)) + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) AND $where AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( SELECT plugin_formcreator_forms_id From 3c5a952faa9e93c783ac9be3fe0e6c1e31503f4c Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 6 Mar 2017 13:51:33 +0100 Subject: [PATCH 102/178] drop deprecated methods --- inc/issue.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/issue.class.php b/inc/issue.class.php index d7718f2cf..e37184955 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -36,7 +36,7 @@ public function displayExtended($options = array()) { $options['_item'] = $item; $item = $this->getTicketsForDisplay($options); - $item->addDivForTabs(); + $item->showTabsContent(); } @@ -99,7 +99,7 @@ public function displaySimplified($options = array()) { // No ticket asociated to this issue or multiple tickets // Show the form answers echo '
    '; - $item->addDivForTabs(); + $item->showTabsContent(); echo '
    '; } From 27bdda6afb47876939de492ee3c78e772cdf8c56 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 6 Mar 2017 16:08:36 +0100 Subject: [PATCH 103/178] Feature/drop view for develop (#517) drop view of issues and use a real table. adds glpi conding standard tools --- README.md | 1 - RoboFile.php | 11 + RoboFilePlugin.php | 142 +++ composer.json | 8 + hook.php | 71 ++ inc/form_answer.class.php | 150 ++- inc/issue.class.php | 136 ++- inc/target.class.php | 152 +-- inc/targetticket.class.php | 2 +- install/install.php | 1 + install/mysql/plugin_formcreator_empty.sql | 59 +- install/update_0.0_2.5.php | 39 + locales/ca_ES.mo | Bin 13149 -> 13086 bytes locales/ca_ES.po | 1074 ++++++++-------- locales/cs_CZ.mo | Bin 12973 -> 14928 bytes locales/cs_CZ.po | 1124 +++++++++-------- locales/de_AT.mo | Bin 538 -> 524 bytes locales/de_AT.po | 261 ++-- locales/de_DE.mo | Bin 9181 -> 14978 bytes locales/de_DE.po | 1156 ++++++++++-------- locales/en_GB.mo | Bin 9876 -> 11316 bytes locales/en_GB.po | 1076 ++++++++-------- locales/en_US.mo | Bin 545 -> 531 bytes locales/en_US.po | 261 ++-- locales/es_419.mo | Bin 547 -> 533 bytes locales/es_419.po | 261 ++-- locales/es_AR.mo | Bin 5174 -> 5160 bytes locales/es_AR.po | 261 ++-- locales/es_CL.mo | Bin 537 -> 523 bytes locales/es_CL.po | 261 ++-- locales/es_ES.mo | Bin 13302 -> 13239 bytes locales/es_ES.po | 1076 ++++++++-------- locales/es_MX.mo | Bin 538 -> 524 bytes locales/es_MX.po | 261 ++-- locales/fr_FR.mo | Bin 15351 -> 17508 bytes locales/fr_FR.po | 1113 +++++++++-------- locales/glpi.pot | 991 ++++++++------- locales/hu_HU.mo | Bin 13017 -> 14502 bytes locales/hu_HU.po | 1076 ++++++++-------- locales/it_IT.mo | Bin 537 -> 3354 bytes locales/it_IT.po | 386 +++--- locales/lv_LV.mo | Bin 573 -> 12714 bytes locales/lv_LV.po | 1249 ++++++++++--------- locales/nl_NL.mo | Bin 541 -> 527 bytes locales/nl_NL.po | 261 ++-- locales/pl_PL.mo | Bin 9086 -> 9072 bytes locales/pl_PL.po | 261 ++-- locales/pt_BR.mo | Bin 14011 -> 16473 bytes locales/pt_BR.po | 1117 +++++++++-------- locales/ro_RO.mo | Bin 4839 -> 4825 bytes locales/ro_RO.po | 261 ++-- locales/ru_RU.mo | Bin 16732 -> 21193 bytes locales/ru_RU.po | 1187 ++++++++++-------- locales/tr_TR.mo | Bin 13776 -> 15981 bytes locales/tr_TR.po | 1088 +++++++++-------- locales/uk_UA.mo | Bin 615 -> 19244 bytes locales/uk_UA.po | 1281 +++++++++++--------- plugin.xml | 5 + setup.php | 14 + tests/0000_Install/SaveInstallTest.php | 1 - tests/0010_Integration/IssueTest.php | 407 +++++++ tools/extract_template.sh | 18 +- tools/move_to_po.php | 307 ----- tools/release | 684 +++++++++++ 64 files changed, 11380 insertions(+), 8171 deletions(-) create mode 100644 RoboFile.php create mode 100644 RoboFilePlugin.php create mode 100644 composer.json create mode 100644 tests/0010_Integration/IssueTest.php delete mode 100644 tools/move_to_po.php create mode 100755 tools/release diff --git a/README.md b/README.md index a569e5a4b..5b0f11224 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,6 @@ Upgrade from 1.x to 2.4.0 or later ---------------------------------- After upgrade of FormCreator to version 2.4.0 or later, users may encounteer display issues. This is due to major changes on CSS of the plugin. You may need to refresh the cache of your browser with Ctrl+R or Ctrl+F5. If you plan to communicate about the new presentation of the plugin or the service catalog, introduce this simple manipulation to ensure all your users have a clean cache. - ------------------------------------------------------------------------------------------------------------------------ Introduction diff --git a/RoboFile.php b/RoboFile.php new file mode 100644 index 000000000..ba0dcf47e --- /dev/null +++ b/RoboFile.php @@ -0,0 +1,11 @@ +minifyCSS() + ->minifyJS(); + } + + /** + * Minify CSS stylesheets + * + * @return void + */ + public function minifyCSS() { + $css_dir = __DIR__ . '/css'; + if (is_dir($css_dir)) { + foreach (glob("$css_dir/*.css") as $css_file) { + if (!$this->endsWith($css_file, 'min.css')) { + $this->taskMinify($css_file) + ->to(str_replace('.css', '.min.css', $css_file)) + ->type('css') + ->run(); + } + } + } + return $this; + } + + /** + * Minify JavaScript files stylesheets + * + * @return void + */ + public function minifyJS() { + $js_dir = __DIR__ . '/js'; + if (is_dir($js_dir)) { + foreach (glob("$js_dir/*.js") as $js_file) { + if (!$this->endsWith($js_file, 'min.js')) { + $this->taskMinify($js_file) + ->to(str_replace('.js', '.min.js', $js_file)) + ->type('js') + ->run(); + } + } + } + return $this; + } + + /** + * Extract translatable strings + * + * @return void + */ + public function localesExtract() { + $this->_exec('tools/extract_template.sh'); + return $this; + } + + /** + * Push locales to transifex + * + * @return void + */ + public function localesPush() { + $this->_exec('tx push -s'); + return $this; + } + + /** + * Pull locales from transifex. + * + * @param integer $percent Completeness percentage + * + * @return void + */ + public function localesPull($percent = 70) { + $this->_exec('tx pull -a --minimum-perc=' .$percent); + return $this; + } + + /** + * Build MO files + * + * @return void + */ + public function localesMo() { + $this->_exec('./tools/release --compile-mo'); + return $this; + } + + /** + * Extract and send locales + * + * @return void + */ + public function localesSend() { + $this->localesExtract() + ->localesPush(); + return $this; + } + + /** + * Retrieve locales and generate mo files + * + * @param integer $percent Completeness percentage + * + * @return void + */ + public function localesGenerate($percent = 70) { + $this->localesPull($percent) + ->localesMo(); + return $this; + } + + /** + * Checks if a string ends with another string + * + * @param string $haystack Full string + * @param string $needle Ends string + * + * @return boolean + * @see http://stackoverflow.com/a/834355 + */ + private function endsWith($haystack, $needle) { + $length = strlen($needle); + if ($length == 0) { + return true; + } + + return (substr($haystack, -$length) === $needle); + } +} \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..cd119c088 --- /dev/null +++ b/composer.json @@ -0,0 +1,8 @@ +{ + "require-dev": { + "consolidation/robo": "dev-master@dev", + "patchwork/jsqueeze": "~1.0", + "natxet/CssMin": "~3.0", + "glpi-project/coding-standard": "0.5" + } +} \ No newline at end of file diff --git a/hook.php b/hook.php index 6c6b75579..7a6bacd21 100644 --- a/hook.php +++ b/hook.php @@ -241,6 +241,77 @@ function plugin_formcreator_giveItem($itemtype, $ID, $data, $num) { return ""; } +function plugin_formcreator_hook_add_ticket(CommonDBTM $item) { + global $CFG_GLPI; + + if ($item instanceof Ticket) { + if (!isset($CFG_GLPI['plugin_formcreator_disable_hook_create_ticket'])) { + // run this hok only if the plugin is not generating tickets + $issue = new PluginFormcreatorIssue(); + $issue->add(array( + 'original_id' => $item->getID(), + 'sub_itemtype' => 'Ticket', + 'name' => $item->fields['name'], + 'status' => $item->fields['status'], + 'date_creation' => $item->fields['date'], + 'date_mod' => $item->fields['date_mod'], + 'entities_id' => $item->fields['entities_id'], + 'is_recursive' => '0', + 'requester_id' => $item->fields['users_id_recipient'], + 'validator_id' => '0', + 'comment' => '', + )); + } + } +} + +function plugin_formcreator_hook_update_ticket(CommonDBTM $item) { + if ($item instanceof Ticket) { + $id = $item->getID(); + + $issue = new PluginFormcreatorIssue(); + $issue->getFromDBByQuery("WHERE `sub_itemtype` = 'Ticket' AND `original_id` = '$id'"); + $issue->update(array( + 'id' => $issue->getID(), + 'original_id' => $id, + 'display_id' => "t_$id", + 'sub_itemtype' => 'Ticket', + 'name' => $item->fields['name'], + 'status' => $item->fields['status'], + 'date_creation' => $item->fields['date'], + 'date_mod' => $item->fields['date_mod'], + 'entities_id' => $item->fields['entities_id'], + 'is_recursive' => '0', + 'requester_id' => $item->fields['users_id_recipient'], + 'validator_id' => '0', + 'comment' => $item->fields['content'], + )); + } +} + +function plugin_formcreator_hook_delete_ticket(CommonDBTM $item) { + if ($item instanceof Ticket) { + $id = $item->getID(); + + $issue = new PluginFormcreatorIssue(); + $issue->deleteByCriteria(array( + 'display_id' => "t_$id", + 'sub_itemtype' => 'Ticket' + ), 1); + } +} + +function plugin_formcreator_hook_purge_ticket(CommonDBTM $item) { + if ($item instanceof Ticket) { + $id = $item->getID(); + + $issue = new PluginFormcreatorIssue(); + $issue->deleteByCriteria(array( + 'display_id' => "t_$id", + 'sub_itemtype' => 'Ticket' + ), 1); + } +} function plugin_formcreator_dynamicReport($params) { switch ($params['item_type']) { diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index aa125f1c7..03c07bc52 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -487,6 +487,23 @@ public function prepareInputForUpdate($input) return $input; } + /** + * ACtions done before deleting an item. In case of failure, prevents + * actual deletion of the item + * + * @return boolean true if pre_delete actions succeeded, false if not + */ + public function pre_deleteItem() { + $issue = new PluginFormcreatorIssue(); + $issue->deleteByCriteria(array( + 'original_id' => $this->getID(), + 'sub_itemtype' => self::getType(), + )); + + return true; + } + + public function saveAnswers($datas) { global $DB; @@ -576,9 +593,11 @@ public function saveAnswers($datas) } } } + $is_newFormAnswer = false; - // Create new form answer object } else { + // Create new form answer object + // Does the form need to be validate ? if ($form->fields['validation_required']) { $status = 'waiting'; @@ -661,6 +680,8 @@ public function saveAnswers($datas) } } } + + $is_newFormAnswer = true; } if ($form->fields['validation_required'] || ($status == 'accepted')) { @@ -694,6 +715,94 @@ public function saveAnswers($datas) } break; } + + // Update issues table + if ($status != 'refused') { + + // If cannot get itemTicket from DB it happens either + // when no item exist + // when several rows matches + // Both are processed the same way + $formAnswerId = $this->getID(); + $itemTicket = new Item_Ticket(); + $rows = $itemTicket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formAnswerId'"); + if (count($rows) != 1) { + if ($is_newFormAnswer) { + // This is a new answer for the form. Create an issue + $issue = new PluginFormcreatorIssue(); + $issue->add(array( + 'original_id' => $id, + 'sub_itemtype' => 'PluginFormcreatorForm_Answer', + 'name' => $this->fields['name'], + 'status' => $status, + 'date_creation' => $this->fields['request_date'], + 'date_mod' => $this->fields['request_date'], + 'entities_id' => $this->fields['entities_id'], + 'is_recursive' => $this->fields['is_recursive'], + 'requester_id' => $this->fields['requester_id'], + 'validator_id' => $this->fields['validator_id'], + 'comment' => '', + )); + } else { + $issue = new PluginFormcreatorIssue(); + $issue->getFromDBByQuery("WHERE `sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formAnswerId'"); + $id = $this->getID(); + $issue->update(array( + 'id' => $issue->getID(), + 'original_id' => $id, + 'sub_itemtype' => 'PluginFormcreatorForm_Answer', + 'name' => $this->fields['name'], + 'status' => $status, + 'date_creation' => $this->fields['request_date'], + 'date_mod' => $this->fields['request_date'], + 'entities_id' => $this->fields['entities_id'], + 'is_recursive' => $this->fields['is_recursive'], + 'requester_id' => $this->fields['requester_id'], + 'validator_id' => $this->fields['validator_id'], + 'comment' => '', + )); + } + } else { + $ticket = new Ticket(); + reset($rows); + $itemTicket->getFromDB(key($rows)); + $ticket->getFromDB($itemTicket->getField('tickets_id')); + $ticketId = $ticket->getID(); + if ($is_newFormAnswer) { + $issue = new PluginFormcreatorIssue(); + $issue->add(array( + 'original_id' => $ticketId, + 'sub_itemtype' => 'Ticket', + 'name' => $ticket->getField('name'), + 'status' => $ticket->getField('status'), + 'date_creation' => $ticket->getField('date'), + 'date_mod' => $ticket->getField('date_mod'), + 'entities_id' => $ticket->getField('entities_id'), + 'is_recursive' => '0', + 'requester_id' => $ticket->getField('users_id_recipient'), + 'validator_id' => '', + 'comment' => $ticket->getField('content'), + )); + } else { + $issue = new PluginFormcreatorIssue(); + $issue->getFromDBByQuery("WHERE `sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formAnswerId'"); + $issue->update(array( + 'id' => $issue->getID(), + 'original_id' => $ticketId, + 'sub_itemtype' => 'Ticket', + 'name' => $ticket->getField('name'), + 'status' => $ticket->getField('status'), + 'date_creation' => $ticket->getField('date'), + 'date_mod' => $ticket->getField('date_mod'), + 'entities_id' => $ticket->getField('entities_id'), + 'is_recursive' => '0', + 'requester_id' => $ticket->getField('users_id_recipient'), + 'validator_id' => '', + 'comment' => $ticket->getField('content'), + )); + } + } + } } Session::addMessageAfterRedirect(__('The form has been successfully saved!', 'formcreator'), true, INFO); @@ -738,24 +847,31 @@ public function acceptAnswers($datas) { public function generateTarget() { + global $CFG_GLPI; + + $success = true; + // Get all targets $target_class = new PluginFormcreatorTarget(); $found_targets = $target_class->find('plugin_formcreator_forms_id = ' . $this->fields['plugin_formcreator_forms_id']); + $CFG_GLPI['plugin_formcreator_disable_hook_create_ticket'] = '1'; // Generate targets foreach($found_targets as $target) { $obj = new $target['itemtype']; $obj->getFromDB($target['items_id']); if (!$obj->save($this)) { - return false; + $success = false; + break; } } Session::addMessageAfterRedirect(__('The form has been successfully saved!', 'formcreator'), true, INFO); - return true; + unset($CFG_GLPI['plugin_formcreator_disable_hook_create_ticket']); + return $success; } /** - * + * * @param unknown $formAnswerId * @return string[] */ @@ -902,4 +1018,30 @@ public function post_purgeItem() NotificationEvent::raiseEvent('plugin_formcreator_deleted', $this); } } + + /** + * Actions done after update of an item + * + * @return void + */ + public function post_updateItem($history = 1) { + $id = $this->getID(); + + $issue = new PluginFormcreatorISsue(); + $issue->update(array( + 'id' => 'f_' . $id, + 'original_id' => $id, + 'sub_itemtype' => 'PluginFormcreatorForm_Answer', + 'name' => $this->fields['name'], + 'status' => $this->fields['status'], + 'date_creation' => $this->fields['request_date'], + 'date_mod' => $this->fields['request_date'], + 'entities_id' => $this->fields['entities_id'], + 'is_recursive' => $this->fields['is_recursive'], + 'requester_id' => $this->fields['requester_id'], + 'validator_id' => $this->fields['validator_id'], + 'comment' => $this->fields['comment'], + )); + } + } diff --git a/inc/issue.class.php b/inc/issue.class.php index e37184955..3be6df8fd 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -6,6 +6,105 @@ public static function getTypeName($nb = 0) { return _n('Issue', 'Issues', $nb, 'formcreator'); } + /** + * get Cron description parameter for this class + * + * @param $name string name of the task + * + * @return array of string + */ + static function cronInfo($name) { + switch ($name) { + case 'SyncIssues': + return array('description' => __('Update issue data from tickets and form answers', 'formcreator')); + } + } + + /** + * + * @param unknown $task + * + * @return number + */ + public static function cronSyncIssues($task) { + global $DB; + + $task->log("Disable expired trial accounts"); + $volume = 0; + + // Request which merges tickets and formanswers + // 1 ticket not linked to a form_answer => 1 issue which is the ticket sub_itemtype + // 1 form_answer not linked to a ticket => 1 issue which is the form_answer sub_itemtype + // 1 ticket linked to 1 form_answer => 1 issue which is the ticket sub_itemtype + // several tickets linked to the same form_answer => 1 issue which is the form_answer sub_itemtype + $query = "SELECT DISTINCT + NULL AS `id`, + CONCAT('f_',`fanswer`.`id`) AS `display_id`, + `fanswer`.`id` AS `original_id`, + 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, + `f`.`name` AS `name`, + `fanswer`.`status` AS `status`, + `fanswer`.`request_date` AS `date_creation`, + `fanswer`.`request_date` AS `date_mod`, + `fanswer`.`entities_id` AS `entities_id`, + `fanswer`.`is_recursive` AS `is_recursive`, + `fanswer`.`requester_id` AS `requester_id`, + `fanswer`.`validator_id` AS `validator_id`, + `fanswer`.`comment` AS `comment` + FROM `glpi_plugin_formcreator_forms_answers` AS `fanswer` + LEFT JOIN `glpi_plugin_formcreator_forms` AS `f` + ON`f`.`id` = `fanswer`.`plugin_formcreator_forms_id` + LEFT JOIN `glpi_items_tickets` AS `itic` + ON `itic`.`items_id` = `fanswer`.`id` + AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' + GROUP BY `original_id` + HAVING COUNT(`itic`.`tickets_id`) != 1 + + UNION + + SELECT DISTINCT + NULL AS `id`, + CONCAT('t_',`tic`.`id`) AS `display_id`, + `tic`.`id` AS `original_id`, + 'Ticket' AS `sub_itemtype`, + `tic`.`name` AS `name`, + `tic`.`status` AS `status`, + `tic`.`date` AS `date_creation`, + `tic`.`date_mod` AS `date_mod`, + `tic`.`entities_id` AS `entities_id`, + 0 AS `is_recursive`, + `tic`.`users_id_recipient` AS `requester_id`, + 0 AS `validator_id`, + `tic`.`content` AS `comment` + FROM `glpi_tickets` AS `tic` + LEFT JOIN `glpi_items_tickets` AS `itic` + ON `itic`.`tickets_id` = `tic`.`id` + AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' + WHERE `tic`.`is_deleted` = 0 + GROUP BY `original_id` + HAVING COUNT(`itic`.`items_id`) <= 1"; + + $countQuery = "SELECT COUNT(*) AS `cpt` FROM ($query) AS `issues`"; + $result = $DB->query($countQuery); + if ($result !== false) { + $count = $DB->fetch_assoc($result); + $table = static::getTable(); + if (countElementsInTable($table) != $count['cpt']) { + if ($DB->query("TRUNCATE `$table`")) { + $DB->query("INSERT INTO `$table` SELECT * FROM ($query) as `dt`"); + $volume = 1; + } + } + } + $task->setVolume($volume); + + return 1; + } + + public static function hook_update_ticket(CommonDBTM $item) { + + } + /** * {@inheritDoc} * @see CommonGLPI::display() @@ -149,7 +248,7 @@ public function getSearchOptions() { ), '2' => array( 'table' => self::getTable(), - 'field' => 'id', + 'field' => 'display_id', 'name' => __('ID'), 'datatype' => 'itemlink', 'forcegroupby' => true, @@ -434,4 +533,39 @@ static function getTicketSummary() { return $status; } + + /** + * + */ + public function prepareInputForAdd($input) { + if (!isset($input['original_id']) || !isset($input['sub_itemtype'])) { + return false; + } + + if ($input['sub_itemtype'] == 'PluginFormcreatorForm_Answer') { + $input['display_id'] = 'f_' . $input['original_id']; + } else if ($input['sub_itemtype'] == 'Ticket') { + $input['display_id'] = 't_' . $input['original_id']; + } else { + return false; + } + + return $input; + } + + public function prepareInputForUpdate($input) { + if (!isset($input['original_id']) || !isset($input['sub_itemtype'])) { + return false; + } + + if ($input['sub_itemtype'] == 'PluginFormcreatorForm_Answer') { + $input['display_id'] = 'f_' . $input['original_id']; + } else if ($input['sub_itemtype'] == 'Ticket') { + $input['display_id'] = 't_' . $input['original_id']; + } else { + return false; + } + + return $input; + } } diff --git a/inc/target.class.php b/inc/target.class.php index ffe944768..828a5ec94 100644 --- a/inc/target.class.php +++ b/inc/target.class.php @@ -103,7 +103,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ * @param $input datas used to add the item * * @return the modified $input array - **/ + **/ public function prepareInputForAdd($input) { global $DB; @@ -116,80 +116,80 @@ public function prepareInputForAdd($input) // Control fields values : // - name is required if(isset($input['name']) - && empty($input['name'])) { - Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); - return array(); - } - // - field type is required - if(isset($input['itemtype'])) { - if (empty($input['itemtype'])) { - Session::addMessageAfterRedirect(__('The type cannot be empty!', 'formcreator'), false, ERROR); - return array(); - } + && empty($input['name'])) { + Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } + // - field type is required + if(isset($input['itemtype'])) { + if (empty($input['itemtype'])) { + Session::addMessageAfterRedirect(__('The type cannot be empty!', 'formcreator'), false, ERROR); + return array(); + } - switch ($input['itemtype']) { - case 'PluginFormcreatorTargetTicket': - $targetticket = new PluginFormcreatorTargetTicket(); - $id_targetticket = $targetticket->add(array( - 'name' => $input['name'], - 'comment' => '##FULLFORM##' - )); - $input['items_id'] = $id_targetticket; - - if (!isset($input['_skip_create_actors']) - || !$input['_skip_create_actors']) { - $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); - $targetTicket_actor->add(array( - 'plugin_formcreator_targettickets_id' => $id_targetticket, - 'actor_role' => 'requester', - 'actor_type' => 'creator', - 'use_notification' => '1' - )); - $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); - $targetTicket_actor->add(array( - 'plugin_formcreator_targettickets_id' => $id_targetticket, - 'actor_role' => 'observer', - 'actor_type' => 'validator', - 'use_notification' => '1' - )); - } - break; - case 'PluginFormcreatorTargetChange': - $targetchange = new PluginFormcreatorTargetChange(); - $id_targetchange = $targetchange->add(array( - 'name' => $input['name'], - 'comment' => '##FULLFORM##' - )); - $input['items_id'] = $id_targetchange; - - if (!isset($input['_skip_create_actors']) - || !$input['_skip_create_actors']) { - $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); - $targetChange_actor->add(array( - 'plugin_formcreator_targetchanges_id' => $id_targetchange, - 'actor_role' => 'requester', - 'actor_type' => 'creator', - 'use_notification' => '1', - )); - $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); - $targetChange_actor->add(array( - 'plugin_formcreator_targetchanges_id' => $id_targetchange, - 'actor_role' => 'observer', - 'actor_type' => 'validator', - 'use_notification' => '1', - )); - } - break; + switch ($input['itemtype']) { + case 'PluginFormcreatorTargetTicket': + $targetticket = new PluginFormcreatorTargetTicket(); + $id_targetticket = $targetticket->add(array( + 'name' => $input['name'], + 'comment' => '##FULLFORM##' + )); + $input['items_id'] = $id_targetticket; + + if (!isset($input['_skip_create_actors']) + || !$input['_skip_create_actors']) { + $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); + $targetTicket_actor->add(array( + 'plugin_formcreator_targettickets_id' => $id_targetticket, + 'actor_role' => 'requester', + 'actor_type' => 'creator', + 'use_notification' => '1' + )); + $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); + $targetTicket_actor->add(array( + 'plugin_formcreator_targettickets_id' => $id_targetticket, + 'actor_role' => 'observer', + 'actor_type' => 'validator', + 'use_notification' => '1' + )); } - } + break; + case 'PluginFormcreatorTargetChange': + $targetchange = new PluginFormcreatorTargetChange(); + $id_targetchange = $targetchange->add(array( + 'name' => $input['name'], + 'comment' => '##FULLFORM##' + )); + $input['items_id'] = $id_targetchange; + + if (!isset($input['_skip_create_actors']) + || !$input['_skip_create_actors']) { + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->add(array( + 'plugin_formcreator_targetchanges_id' => $id_targetchange, + 'actor_role' => 'requester', + 'actor_type' => 'creator', + 'use_notification' => '1', + )); + $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); + $targetChange_actor->add(array( + 'plugin_formcreator_targetchanges_id' => $id_targetchange, + 'actor_role' => 'observer', + 'actor_type' => 'validator', + 'use_notification' => '1', + )); + } + break; + } + } - // generate a uniq id - if (!isset($input['uuid']) - || empty($input['uuid'])) { - $input['uuid'] = plugin_formcreator_getUuid(); - } + // generate a uniq id + if (!isset($input['uuid']) + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } - return $input; + return $input; } /** @@ -198,7 +198,7 @@ public function prepareInputForAdd($input) * @param $input datas used to add the item * * @return the modified $input array - **/ + **/ public function prepareInputForUpdate($input) { // Decode (if already encoded) and encode strings to avoid problems with quotes @@ -208,11 +208,11 @@ public function prepareInputForUpdate($input) // generate a uniq id if (!isset($input['uuid']) - || empty($input['uuid'])) { - $input['uuid'] = plugin_formcreator_getUuid(); - } + || empty($input['uuid'])) { + $input['uuid'] = plugin_formcreator_getUuid(); + } - return $input; + return $input; } public function pre_deleteItem() { diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index e8864d1eb..36c247350 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -797,7 +797,7 @@ public function pre_deleteItem() { * @param PluginFormcreatorForm_Answer $formanswer Answers previously saved */ public function save(PluginFormcreatorForm_Answer $formanswer) { - global $DB; + global $DB, $CFG_GLPI; // Prepare actors structures for creation of the ticket $this->requesters = array( diff --git a/install/install.php b/install/install.php index 797b964f0..5b8d2d29d 100644 --- a/install/install.php +++ b/install/install.php @@ -360,6 +360,7 @@ protected function deleteTables() { 'PluginFormcreatorTargetChange', 'PluginFormcreatorTargetTicket_Actor', 'PluginFormcreatorTargetTicket', + 'PluginFormcreatorIssue', ); foreach ($itemtypes as $itemtype) { diff --git a/install/mysql/plugin_formcreator_empty.sql b/install/mysql/plugin_formcreator_empty.sql index 1a1a1686d..26972dc59 100644 --- a/install/mysql/plugin_formcreator_empty.sql +++ b/install/mysql/plugin_formcreator_empty.sql @@ -221,42 +221,23 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_targettickets_actors` ( INDEX `plugin_formcreator_targettickets_id` (`plugin_formcreator_targettickets_id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -DROP VIEW IF EXISTS `glpi_plugin_formcreator_issues`; -CREATE VIEW `glpi_plugin_formcreator_issues` AS - select - distinct concat('f_',`fanswer`.`id`) AS `id`, - `fanswer`.`id` AS `original_id`, - 'PluginFormcreatorForm_Answer' AS `sub_itemtype`, - `f`.`name` AS `name`, - `fanswer`.`status` AS `status`, - `fanswer`.`request_date` AS `date_creation`, - `fanswer`.`request_date` AS `date_mod`, - `fanswer`.`entities_id` AS `entities_id`, - `fanswer`.`is_recursive` AS `is_recursive`, - `fanswer`.`requester_id` AS `requester_id`, - `fanswer`.`validator_id` AS `validator_id`, - `fanswer`.`comment` AS `comment` - from ((`glpi_plugin_formcreator_forms_answers` `fanswer` - left join `glpi_plugin_formcreator_forms` `f` on((`f`.`id` = `fanswer`.`plugin_formcreator_forms_id`))) - left join `glpi_items_tickets` `itic` on(((`itic`.`items_id` = `fanswer`.`id`) and (`itic`.`itemtype` = 'PluginFormcreatorForm_Answer')))) - group by `fanswer`.`id` - having (count(`itic`.`tickets_id`) <> 1) - union - select - distinct concat('t_',`tic`.`id`) AS `id`, - `tic`.`id` AS `original_id`, - 'Ticket' AS `sub_itemtype`, - `tic`.`name` AS `name`, - `tic`.`status` AS `status`, - `tic`.`date` AS `date_creation`, - `tic`.`date_mod` AS `date_mod`, - `tic`.`entities_id` AS `entities_id`, - 0 AS `is_recursive`, - `tic`.`users_id_recipient` AS `requester_id`, - '' AS `validator_id`, - `tic`.`content` AS `comment` - from (`glpi_tickets` `tic` - left join `glpi_items_tickets` `itic` on(((`itic`.`tickets_id` = `tic`.`id`) and (`itic`.`itemtype` = 'PluginFormcreatorForm_Answer')))) - where (`tic`.`is_deleted` = 0) - group by `tic`.`id` - having (count(`itic`.`items_id`) <= 1); +CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_issues` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `display_id` varchar(255) NOT NULL, + `original_id` int(11) NOT NULL DEFAULT '0', + `sub_itemtype` varchar(100) NOT NULL DEFAULT '', + `name` varchar(255) NOT NULL DEFAULT '', + `status` varchar(255) NOT NULL DEFAULT '', + `date_creation` datetime NOT NULL, + `date_mod` datetime NOT NULL, + `entities_id` int(11) NOT NULL DEFAULT '0', + `is_recursive` tinyint(1) NOT NULL DEFAULT '0', + `requester_id` int(11) NOT NULL DEFAULT '0', + `validator_id` int(11) NOT NULL DEFAULT '0', + `comment` text, + PRIMARY KEY (`id`), + INDEX `original_id_sub_itemtype` (`original_id`, `sub_itemtype`), + INDEX `entities_id` (`entities_id`), + INDEX `requester_id` (`requester_id`), + INDEX `validator_id` (`validator_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index 706cfc456..e11d07f7b 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -17,6 +17,7 @@ function plugin_formcreator_update_2_5(Migration $migration) { plugin_formcreator_updateFormValidator($migration); plugin_formcreator_updateForm($migration); plugin_formcreator_updateHeader($migration); + plugin_formcreator_updateIssue($migration); plugin_formcreator_updateQuestionCondition($migration); plugin_formcreator_updateQuestion($migration); plugin_formcreator_updateSection($migration); @@ -346,6 +347,44 @@ function plugin_formcreator_updateHeader(Migration $migration) { $migration->dropTable('glpi_plugin_formcreator_headers'); } +function plugin_formcreator_updateIssue(Migratiohn $migration) { + global $DB; + + $DB->query("DROP VIEW IF EXISTS `glpi_plugin_formcreator_issues`"); + + $query = "CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_issues` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `display_id` VARCHAR(255) NOT NULL, + `original_id` INT(11) NOT NULL DEFAULT '0', + `sub_itemtype` VARCHAR(100) NOT NULL DEFAULT '', + `name` VARCHAR(244) NOT NULL DEFAULT '', + `status` VARCHAR(244) NOT NULL DEFAULT '', + `date_creation` DATETIME NOT NULL, + `date_mod` DATETIME NOT NULL, + `entities_id` INT(11) NOT NULL DEFAULT '0', + `is_recursive` TINYINT(1) NOT NULL DEFAULT '0', + `requester_id` INT(11) NOT NULL DEFAULT '0', + `validator_id` INT(11) NOT NULL DEFAULT '0', + `comment` TEXT NULL COLLATE 'utf8_unicode_ci', + PRIMARY KEY (`id`), + INDEX `original_id_sub_itemtype` (`original_id`, `sub_itemtype`), + INDEX `entities_id` (`entities_id`), + INDEX `requester_id` (`requester_id`), + INDEX `validator_id` (`validator_id`) + ) + COLLATE='utf8_unicode_ci' + ENGINE=MyISAM"; + $DB->query($query) or die ($DB->error()); + CronTask::Register('PluginFormcreatorIssue', 'SyncIssues', HOUR_TIMESTAMP, + array( + 'comment' => __('Formcreator - Sync service catalog issues', 'formcreator'), + 'mode' => CronTask::MODE_EXTERNAL + ) + ); + $task = new CronTask(); + static::cronSyncIssues($task); +} + function plugin_formcreator_updateQuestionCondition(Migration $migration) { global $DB; diff --git a/locales/ca_ES.mo b/locales/ca_ES.mo index 7709d95b345d775b44f71555ee058c04c936da39..19b31cacb829fbd9cb71448ea89330eaf0ff1def 100644 GIT binary patch delta 3058 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 diff --git a/locales/ca_ES.po b/locales/ca_ES.po index 6ec87b22e..24d613d59 100644 --- a/locales/ca_ES.po +++ b/locales/ca_ES.po @@ -1,6 +1,6 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Nuria Costa , 2016 @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:51+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Catalan (Spain) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/ca_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,167 +18,71 @@ msgstr "" "Language: ca_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Capçalera" -msgstr[1] "Capçaleres" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Categoria del formulari" -msgstr[1] "Categories dels formularis" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Sol·licitud" msgstr[1] "Sol·licituds" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Sol·licituds pendents de validació" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formularis sense categoria" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Afegir una pregunta" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Editar una pregunta" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Secció" -msgstr[1] "Seccions" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Objecte GLPI" -msgstr[1] "Objectes GLPI" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Obligatori" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Mostrar buit" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Una per línia de llistes" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Valors" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Un per línia" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filtre" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Atribut" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Interval" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Mín" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Validació addicional" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Expressió regular" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Especifica les condicions de validació addicionals a la descripció de la pregunta per ajudar als usuaris." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Mostrar camp" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Mostrar sempre" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Ocult llevat que" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Segur que vols eliminar aquesta pregunta?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Mostra llevat que" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Segur que vols eliminar aquesta secció?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Afegir una secció" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Segur que vols eliminar aquest destí?" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Editar una secció" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Mostrar tots els ítems" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Afegir un destí" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "no s'ha trobat cap ítem" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "Ja existeix una categoria amb aquest nom! No s'ha pogut crear." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Un camp obligatori està buit:" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Creador de formularis" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Llista de formularis" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Ja existeix una capçalera per a aquesta entitat! Només es pot incloure una capçalera per entitat." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Creador de formularis" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -188,332 +92,283 @@ msgstr "La pregunta s'ha guardat amb èxit!" msgid "The question has been successfully updated!" msgstr "La pregunta s'ha actualitzat amb èxit!" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Resposta" -msgstr[1] "Respostes" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Ja existeix una capçalera per a aquesta entitat! Només es pot incloure una capçalera per entitat." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "Ja existeix una categoria amb aquest nom! No s'ha pogut crear." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Sol·licituds pendents de validació" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Capçalera" +msgstr[1] "Capçaleres" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Categoria del formulari" +msgstr[1] "Categories dels formularis" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Objectiu" +msgstr[1] "Objectius" + +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Tipus d'accés" + +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Accés públic" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Accés privat" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Accés restringit" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" msgstr "" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" msgstr "" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Un camp obligatori està buit:" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Afegir capçalera" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Ja hi ha una capçalera per a una entitat matriu! Una altra capçalera sobreescriurà l'anterior." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Resposta del formulari" msgstr[1] "Sol·licituds" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Sol·licitant" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Validador" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "esperant" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "acceptat" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "denegat" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Sol·licitud acceptada pel validador." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Sol·licitud guardada correctament." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Comentari" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Es requereix si es va denegar" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Denegar" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Acceptat" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Cal un comentari de denegació!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "No es poden generar objectius!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "S'ha guardat el formulari correctament!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Dades de la sol·licitud" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Descripció" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Pàgina d'inici" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Accés" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Totes les llengües" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Accés públic" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Accés privat" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Accés restringit" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Accés directe a la pàgina d'inici" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Necessita validació?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" - -#: inc/form.class.php:528 -msgid "see all" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:545 -msgid "Popularity sort" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" msgstr "" -#: inc/form.class.php:549 -msgid "Alphabetic sort" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" msgstr "" -#: inc/form.class.php:710 -msgid "Please, describe your need here" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Les meves darreres sol·licituds (sol·licitant)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Destí" +msgstr[1] "Destins" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Formulari no publicat" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Destí" +msgstr[1] "Destins" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Totes les meves sol·licituds (sol·licitant)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Les meves darreres sol·licituds (validador)" - -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "No hi ha sol·licituds pendents de validació" - -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Totes les meves sol·licituds (validador)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Eliminar" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Escull un validador" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Afegir un destí" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "No es pot deixar el nom en blanc!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Has de seleccionar un validador!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Duplicada" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Sol·licitud duplicada: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Sol·licitud transferida: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Objectiu" -msgstr[1] "Objectius" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Tipus d'accés" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Afegir capçalera" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "El Tipus no pot ser buit." -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Ja hi ha una capçalera per a una entitat matriu! Una altra capçalera sobreescriurà l'anterior." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Secció" +msgstr[1] "Seccions" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "El títol és obligatori" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "S'ha guardat la sol·licitud" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "La sol·licitud ha de ser validada" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Sol·licitud denegada" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Sol·licitud acceptada" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Sol·licitud eliminada" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formulari #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Nom del formulari" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Totes les sol·licituds completes" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Comentari denegat" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Enllaç de validació" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Sol·licitud #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "S'ha creat el formulari" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "La teva sol·licitud s'ha guardat" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Benvolgut/da,\\n La teva sol·licitud s'ha guardat correctament amb el número ##formcreator.request_id## i s'ha tramès a l'equip de suport. \\nPots veure les seves respostes a l'enllaç : \\n ##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Hi ha una sol·licitud pendent de validació" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Benvolgut/da, \\n Hi ha una sol·licitud per validar i has estat seleccionat com a validador. \\ nPots accedir-hi fent clic en aquest enllaç :.\\n ##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "La teva sol·licitud ha estat denegada pel validador" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -521,288 +376,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Hola, \\nLa teva sol·licitud ha estat denegada pel validador a causa de: \\n ##formcreator.validation_comment##.\\n\\nEncara la pot modificar i tornar a enviar fent clic en aquest enllaç: \\n ##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "La teva sol·licitud ha estat acceptada pel validador" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Hola, \\nEns complau informar-te que la seva sol·licitud ha estat acceptada pel validador. \\nLa sol·licitud serà tramitada en breu." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "La teva sol·licitud ha estat eliminada per un administrador" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." msgstr "Hola, \\n Malauradament la teva sol·licitud no pot ser considerada i s'ha suprimit per un administrador." -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Pregunta" -msgstr[1] "Preguntes" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Eliminar" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "El títol és obligatori" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "El camp Tipus és obligatori" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "Cal una secció" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "El camp Valor és obligatori" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "El camp Descripció hauria de contenir una descripció:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "No es pot recuperar la informació de LDAP!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Destí" -msgstr[1] "Destins" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Destí" -msgstr[1] "Destins" - -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "El Tipus no pot ser buit." +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Resposta" +msgstr[1] "Respostes" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Entitat activa actual" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Entitat per defecte del sol·licitant" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Primera entitat dinàmica del sol·licitant (alfabètic)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Darrera entitat dinàmica del sol·licitant (alfabètic)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Entitat del formulari" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Entitat per defecte del validador" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Entitat específica" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Entitat per defecte de la resposta de la pregunta tipus Usuari" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Object GLPI > Resporta d'una pregunta de tipus Entitat" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Etiquetes de les preguntes" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Etiquetes específiques" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Etiquetes de preguntes i etiquetes específiques" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Etiquetes de preguntes o etiquetes específiques" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "és igual la resposta a la pregunta" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "calculada a partir de la data de creació del tiquet" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "calculada a partir de la data de resposta" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Objectiu del tiquet" msgstr[1] "Objectius dels tiquets" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Edita el destí" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Títol del tiquet" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Pregunta" +msgstr[1] "Preguntes" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Pregunta de tipus Usuari" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Pregunta de tipus Entitat" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Etiquetes del tiquet" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Etiquetes" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Afegir un missatge de validació al primer seguiment" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Cancel·lar" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Autors del tiquet" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Sol·licitant de la sol·licitud" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Validador de la sol·licitud" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Persona específica" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Persona d'una pregunta" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Grup específic" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Grup de la pregunta" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Proveïdor específic" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Proveïdor d'una pregunta" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Sol·licitud completa" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "Cal que posis un títol!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "Cal que posis una descripció!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Objecte GLPI" +msgstr[1] "Objectes GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Mostrar tots els ítems" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "no s'ha trobat cap ítem" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Persona específica" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Grup específic" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/category.class.php:39 +msgid "Knowbase category" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Obligatori" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Afegir una pregunta" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Afegir una secció" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "El camp Tipus és obligatori" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Cal una secció" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "El camp Valor és obligatori" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "El camp Descripció hauria de contenir una descripció:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "No es pot recuperar la informació de LDAP!" + +#: inc/form.class.php:60 +msgid "Import forms" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/form.class.php:94 +msgid "Description" +msgstr "Descripció" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Pàgina d'inici" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Accés" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Totes les llengües" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Accés directe a la pàgina d'inici" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Necessita validació?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "" +msgstr[1] "" + +#: inc/form.class.php:536 +msgid "see all" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Segur que vols eliminar aquesta pregunta?" +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Segur que vols eliminar aquesta secció?" +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Segur que vols eliminar aquest destí?" +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Les meves darreres sol·licituds (sol·licitant)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Formulari no publicat" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Totes les meves sol·licituds (sol·licitant)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Les meves darreres sol·licituds (validador)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "No hi ha sol·licituds pendents de validació" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Totes les meves sol·licituds (validador)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Escull un validador" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Has de seleccionar un validador!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Duplicada" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Sol·licitud duplicada: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Sol·licitud transferida: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "" +msgstr[1] "" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Editar una pregunta" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Mostrar buit" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Una per línia de llistes" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Valors" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Un per línia" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtre" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Atribut" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Interval" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Mín" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Validació addicional" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Expressió regular" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Especifica les condicions de validació addicionals a la descripció de la pregunta per ajudar als usuaris." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Mostrar camp" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Mostrar sempre" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Ocult llevat que" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Mostra llevat que" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Editar una secció" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formularis sense categoria" diff --git a/locales/cs_CZ.mo b/locales/cs_CZ.mo index 823761509f6cf945c27894ac77088a88cb8aefb8..f0b1fa83365ce86507cecee378ea8cbfbda5adc2 100644 GIT binary patch delta 5751 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 delta 3744 zcmYk;dvKK18OQOnBoIi*g@kJ^@)8IM#0|S7;SvHNjf!%U00yxTeaS8~X5GZyO-Mr9 zO|?J)LG4?Dh*~J{N1efGU3DzwQU;x&(vE1`F>Obx)JjKfY3q!(PCNAb+kIg;!?U0B zzWZLzdCqe-T#B6t#xLim?>Dq(iDKfjbYp&lr$+HX8<}m)5*&q9*o@O~04LyaEX32U zLpXxt&t1R5ERH=n#*D#i~EF?aj0 z8uh>cGA0v7-8X=$g@dU3e~QQP7q|^KGplQO1-tNF(mI4qGYhZFmutnNLsy{}MI896mI#a@70gpzgb4BKaRqXB{V$+Kot^ zm;fpRG55l!Q8Pd0`VwluuOpK*=TI5>9crzwqF(rK)Y4@zdYO-UehKP(Z`?gmk9xpz z)CgO#6+@`)brIQ_=3~?gKgBYDi&Fp`ulxFf{qL~+> zmb3!rV;w5>G1PT?a4PRNhv<~!S@(;psI~tR*I-L&YCpe-n$ZQEj(>BH$1-}&a6YP- z8&NM>f;_^sqB1gon!q4x$&O%LsXawUGyK&3B7?VRDN0cfoPnz9S+0vwscv?U`%w?x zgUZApYKBKqnMj}pbPn~rA)Jkur;&dqVaAlDZmdBSVI#84rUmt)C^q7Au9r~*vPc7~ zXZ)z5ZAKMW5H;goWKL!uYDr&qk1wK%^xAat@1-+}{Of^pk-9K;2E~aA8<4ksoJ=T8qgP5i=(LEG;DBfiqjz*W(jJhAyn%2qcU?G zxz}7k4e)bRD%05-x~>Q{^GeqS)V5rMBe4TBF^0M?j>^a&YGCn`?ghU_-7w_(AzB=N zg1Rt^G$|9ep^C?cI=>9FvDG~ep#~I3UGJcl;y7voKgad>E9APknN9_!bD|EFvIbPu zu0&;~3u|ycF2J`?OEh9us#d0tqL={&j>VZ$9itIpNto9VKkBHyR zhtjF0*;3famj-l#7A0Dez0}9TTl(rgNjy%lqi(jX^t6N#BAXaNFsI})?nE^Wm=-sC z_*8|e)f4T>Uh4mXz4TQ)j}d!`ZxS)$9>OLbCDfG8ZbCm|`u)fu)V2`A2#d%kItaB@ z#GS-U{nz#`I@;@MYl$BaO7lG8M$4u1J>p?vkWdAy1&N0U$FZ{uf=lVu5nm_f5?>=4 z2(?WqlAon~?k83f-$|ZHeW(buchYV-r#<u_jzogtm}R%c+IxZ)-S$|Y^W%bb32W@(Va}!T<%ygLku>Lrg*DDch4s#Y zq7r9!(M;!^qD9V@;&&XUWW&g4cUM=aJs3&+rKHf4NT2+gC-Iqe(&M~T+LkxR>-Ty6 zHI{FFU2RRJZ?-dK>cmwyPtHxA^!a?5%k5~)yEbBnqai!i8L6}EP_Wky2O>c$5DeMf zVY|<&ztO9@`Q_p*kJ#;@#A8z@3`@LPmgC87dGk!5&+6~o6tVk*;m$-s`7)35Xhnl_ zrD959V@Is}{E<-j{0YnMV7}@kXKXtQXS5_d&R)2Nw%I;XW)9UPbkN^Mx diff --git a/locales/cs_CZ.po b/locales/cs_CZ.po index 393cf4ad6..5aec77847 100644 --- a/locales/cs_CZ.po +++ b/locales/cs_CZ.po @@ -1,6 +1,6 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # David Stepan , 2015-2016 @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Czech (Czech Republic) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/cs_CZ/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,512 +18,365 @@ msgstr "" "Language: cs_CZ\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Hlavička" -msgstr[1] "Hlavičky" -msgstr[2] "Hlavičky" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Kategorie formuláře" -msgstr[1] "Kategorie formuláře" -msgstr[2] "Kategorie formuláře" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formulář" msgstr[1] "Formuláře" msgstr[2] "Formuláře" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Formuláře čekající na validaci" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formuláře bez kategorie" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Přidat otázku" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Upravit otázku" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Sekce" -msgstr[1] "Sekce" -msgstr[2] "Sekce" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Žádná formulář nebyl nalezen. Prosím vyberte formulář níže" -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Objekt GLPI" -msgstr[1] "Objekty GLPI" -msgstr[2] "Objekty GLPI" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Došlo k chybě při dotazování formuláře" -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Povinné" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Žádný formulář v této kategorii" -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Zobrazit prázdné" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Skutečně chcete smazat tuto otázku?" -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Jeden řádek na listy" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Skutečně chcete smazat tuto sekci?" -#: ajax/question.php:223 -msgid "Values" -msgstr "Hodnoty" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Skutečně chcete smazat tento cíl?" -#: ajax/question.php:224 -msgid "One per line" -msgstr "Jeden na řádek" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Zobrazit všechny položky" -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filtr" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "neodpovídá žádné položce" -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Atribut" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Povinné pole je prázdné:" -#: ajax/question.php:269 -msgid "Range" -msgstr "Rozmezí" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" +msgstr "Katalog služeb" -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" +msgstr "Seznam formulářů" -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Tvúrce formulářů" -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Dodatečné ověření" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" +msgstr "Otázka byla úspěšně uložena!" -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Regulární výraz" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" +msgstr "Otázka byla úspěšně aktualizována!" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Specifikujte další validační podmínky v popisu otázky, které pomohou uživatelům." - -#: ajax/question.php:320 -msgid "Show field" -msgstr "Zobrazit pole" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Vždy zobrazeno" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Skrýt ledaže" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Zobrazit ledaže" - -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Přidat sekci" - -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Upravit sekci" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Přidat cíl" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Hlavička pro tuto entitu již existuje! Můžete mít pouze jednu hlavičku pro danou entitu." #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." msgstr "Kategorie se stejným jménem již existuje! Vytvoření kategorie selhalo." -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Tvúrce formulářů" - -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "Seznam formulářů" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formuláře čekající na validaci" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Hlavička pro tuto entitu již existuje! Můžete mít pouze jednu hlavičku pro danou entitu." +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Hlavička" +msgstr[1] "Hlavičky" +msgstr[2] "Hlavičky" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "Otázka byla úspěšně uložena!" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Kategorie formuláře" +msgstr[1] "Kategorie formuláře" +msgstr[2] "Kategorie formuláře" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "Otázka byla úspěšně aktualizována!" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Cíl - přístup" +msgstr[1] "Cíle - přístup" +msgstr[2] "Cíle - přístup" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Odpověď" -msgstr[1] "Odpovědi" -msgstr[2] "Odpovědi" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Typ přístupu" -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Veřejný přístup" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Soukromý přístup" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Omezený přístup" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Odkaz na formulář" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Prosím aktivujte si formulář pro zobrazení odkazu" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Přidat hlavičku" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Povinné pole je prázdné:" +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Hlavička existuje pro nadřízenou entitu! Jiná hlavička přepíše předchozí." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Odpověď formuláře" msgstr[1] "Odpovědi formuláře" msgstr[2] "Odpovědi formuláře" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Žadatel" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Ověřovatel" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "čekající" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "schválen" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "zamítnut" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formulář byl schválen ověřovatelem." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formulář byl úspěšně uložen." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Komentář" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Požadováno pokud je zamítnuto" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Zamítnuto" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Schváleno" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Komentář zamítnutí je povinný!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Nelze generovat cíle!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Formulář byl úspěšně uložen!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Data formuláře" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Popis" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Helpdesk" -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Domovská stránka" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Helpdesk GLPI" -#: inc/form.class.php:128 -msgid "Access" -msgstr "Přístup" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Katalog služeb zjednodušený" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Všechny jazyky" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Katalog služeb rozšířený" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Veřejný přístup" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Mód helpdesku" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Soukromý přístup" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Cíl" +msgstr[1] "Cíle" +msgstr[2] "Cíle" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Omezený přístup" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Cíl" +msgstr[1] "Cíle" +msgstr[2] "Cíle" -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Přímý přístup na domovskou stránku" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Smazat" -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Nutno ověřit?" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Přidat cíl" -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "" +#: inc/target.class.php:119 inc/form.class.php:939 +msgid "The name cannot be empty!" +msgstr "Jméno nemůže být prázdné!" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Typ nemůže být prázdný!" -#: inc/form.class.php:528 -msgid "see all" -msgstr "" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "" - -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "" - -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "" - -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Mé poslední formuláře (žadatel)" - -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Nebyl odeslán žádný formulář" - -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Všechny mé formuláře (žadatel)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Mé poslední formuláře (ověřovatel)" - -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Žádný formulář nečeká na ověření" - -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Všechny mé formuláře (ověřovatel)" - -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Vyberte ověřovatele" - -#: inc/form.class.php:910 inc/target.class.php:118 -msgid "The name cannot be empty!" -msgstr "Jméno nemůže být prázdné!" - -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Musíte vybrat ověřovatele !" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Kopírovat" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Formulář byl zkopírován: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Formulář byl přesunut: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Cíl - přístup" -msgstr[1] "Cíle - přístup" -msgstr[2] "Cíle - přístup" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Typ přístupu" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Přidat hlavičku" - -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Hlavička existuje pro nadřízenou entitu! Jiná hlavička přepíše předchozí." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Sekce" +msgstr[1] "Sekce" +msgstr[2] "Sekce" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Název je povinný" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Formulář byl uložen" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Formulář musí být ověřen" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Formuláž byl zamítnut" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Formulář byl přijat" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Formulář byl smazán" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formulář #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Název formuláře" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Úplné odpovědi formuláře" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Zamítnutý komentář" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Odkaz ověření" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Žádost #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Byl vytvořen formulář" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "Vaše žádost byla uložena" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Dobrý den,\\n Váš požadavek z GLPI byl úspěšně uložen pod číslem ##formcreator.request_id## a předán týmu podpory. Své odpovědi můžete vidět na následujícím odkazu:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Formulář GLPI musí být ověřen" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Dobrý den,\\n formulář z GLPI musí být ověřen a vy jste byl vybrán jako ověřovatel.\\n K formuláři můžete přistoupit kliknutím na tento odkaz:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Váš formulář byl zamítnut ověřovatelem" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -531,292 +384,569 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Dobrý den,\\n váš formulář byl bohužel zamítnut ověřovatelem z tohoto důvodu: \\n##formcreator.validation_comment##\\n\\nFormulář můžete nadále upravovit kliknutím na tento odkaz:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Váš formulář byl ověřen ověřovatelem" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Dobrý den,\\n Váš formulář byl schválen ověřovatelem.\\n Váš požadavek bude brzy řešen." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "Váš formulář byl smazán administrátorem" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." msgstr "Dobrý den,\\n Váš formulář nebude řešen a byl smazán administrátorem." -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Otázka" -msgstr[1] "Otázky" -msgstr[2] "Otázky" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Smazat" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "Název je povinný" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "Typ pole je povinný" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "Sekce je povinná" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "Hodnota pole musí být vyplněna:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Popis pole by měl obsahovat popis:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Nemohu získat informace z LDAPu!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Cíl" -msgstr[1] "Cíle" -msgstr[2] "Cíle" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Cíl" -msgstr[1] "Cíle" -msgstr[2] "Cíle" - -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "Typ nemůže být prázdný!" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Odpověď" +msgstr[1] "Odpovědi" +msgstr[2] "Odpovědi" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Aktuální aktivní entita" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Výchozí entita žadatele" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "První dynamická entita žadatele (podle abecedy)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Poslední dynamická entita žadatele (podle abecedy)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Entita formuláře" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Výchozí entita kontrolora" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Specifická entita" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Výchozí entita dle typu odpovědi uživatele" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Z objektu GLPI > Typ entity otázka odpověď" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Tagy z otázek" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Specifické tagy" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Tagy z otázek a specifické tagy" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Tagy z otázek nebo specifické tagy" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "rovná se odpovědi na otázku" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "počítáno od data vytvoření požadavku" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "počítáno od odpovědi na otázku" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Cílový požadavek" msgstr[1] "Cílové požadavky" msgstr[2] "Cílové požadavky" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Upravit cíl" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Název požadavku" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Otázka" +msgstr[1] "Otázky" +msgstr[2] "Otázky" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Typ uživatele dle otázky" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Typ entity dle otázky" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Tagy požadavků" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Tagy" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Přidat kontrolní zprávu při první změně požadavku" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Zpět" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Účastníci požadavku" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Zadavatel formuláře" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Schvalovatel formuláře" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Specifická osoba" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Osoba z otázky" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Specifická skupina" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Skupina z otázky" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Specifický dodavatel" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Dodavatel z otázky" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Celý formulář" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "Název nemůže být prázdný!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "Popis nemůže být prázdný" -#: inc/wizard.class.php:83 -msgid "Seek assistance" +#: inc/fields/radios-field.class.php:48 +msgid "Radios" msgstr "" -#: inc/wizard.class.php:87 -msgid "My requests for assistance" +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Objekt GLPI" +msgstr[1] "Objekty GLPI" +msgstr[2] "Objekty GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Toto není číslo:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" msgstr "" -#: inc/wizard.class.php:98 -msgid "Book an asset" +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" msgstr "" -#: inc/wizard.class.php:105 -msgid "Consult feeds" +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Zobrazit všechny položky" +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "neodpovídá žádné položce" +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/fields/integer-field.class.php:38 +msgid "Integer" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Skutečně chcete smazat tuto otázku?" +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Text" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Skutečně chcete smazat tuto sekci?" +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "Toto není validní e-mailová adresa:" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Skutečně chcete smazat tento cíl?" +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Datum a čas" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Chybí požadovaný soubor:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Vybrat" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Zaškrtávací pole" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 +msgid "Seek assistance" +msgstr "Požádat o pomoc" + +#: inc/wizard.class.php:73 inc/wizard.class.php:74 +msgid "My requests for assistance" +msgstr "Moje žádosti o pomoc" + +#: inc/wizard.class.php:85 inc/wizard.class.php:86 +msgid "Book an asset" +msgstr "Rezervovat aktivum" + +#: inc/wizard.class.php:94 inc/wizard.class.php:95 +msgid "Consult feeds" +msgstr "Konzultovat zdroje" + +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Specifická osoba" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Specifická skupina" + +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Kategorie znalostní báze" + +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Povinné" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Přidat otázku" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Přidat sekci" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Typ pole je povinný" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Sekce je povinná" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Hodnota pole musí být vyplněna:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Popis pole by měl obsahovat popis:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Nemohu získat informace z LDAPu!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Popis" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Domovská stránka" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Přístup" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Všechny jazyky" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Přímý přístup na domovskou stránku" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Nutno ověřit?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Výchozí forma katalogu služeb" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Kategorie" +msgstr[1] "Kategorie" +msgstr[2] "Kategorie" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "zobrazit vše" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Řazení popularity" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Abecední řazení" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Prosím, popište své potřeby zde" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Mé poslední formuláře (žadatel)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Nebyl odeslán žádný formulář" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Všechny mé formuláře (žadatel)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Mé poslední formuláře (ověřovatel)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Žádný formulář nečeká na ověření" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Všechny mé formuláře (ověřovatel)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Vyberte ověřovatele" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Musíte vybrat ověřovatele !" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Kopírovat" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Formulář byl zkopírován: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Formulář byl přesunut: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Problém" +msgstr[1] "Problémy" +msgstr[2] "Problémy" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Upravit otázku" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Zobrazit prázdné" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Jeden řádek na listy" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Hodnoty" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Jeden na řádek" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtr" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Atribut" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Rozmezí" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Dodatečné ověření" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Regulární výraz" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Specifikujte další validační podmínky v popisu otázky, které pomohou uživatelům." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Zobrazit pole" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Vždy zobrazeno" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Skrýt ledaže" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Zobrazit ledaže" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Upravit sekci" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formuláře bez kategorie" diff --git a/locales/de_AT.mo b/locales/de_AT.mo index 1c3572e407a6a1fb873a37e25849173df4245218..e2d2ae522de691bc6935eaa3a6133de3b3ec9e68 100644 GIT binary patch delta 124 zcmbQm(!(-Ah4Iov)uL=eT_Z~cLjx-VLu~^?0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIWlIs;290|RXXAmH*zEH2RvDN4*M&PgoEFS1hb%Fjs5Q*bWN%+AToE6&bTuqi1@ XEY3(Ra;VTP$xG2oO5H5L$i)Z%pg$!2 delta 144 zcmeBSnZ+_eh4H~e)uMU>T|*NE14}DY6Kw+{0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIW7I&-i(1E4ye#Nra&kfOxA;+({i{30ub#GKTM#JrTERE3n(oW#<+#7YGl7)uW> Z>5!hAn3\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: German (Austria) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/de_AT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: de_AT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/de_DE.mo b/locales/de_DE.mo index 6d635dbc31fab39918f1a909a5853be59ffe37ba..57773ed7b697e591958aef0dc9e029fcf63dac64 100644 GIT binary patch literal 14978 zcmb`Ndyr&Rea8>sy%HZh1c~CAtjI2I&+dW(83detu?xE}?gJDz;_dF!-Ph^4-Q3%~ z!>liSK{P(l_&~)+3@AwyDNU%Dki@DnXj$=*GAbH1sc2bRnj-(iSVa=^`JQv`?e5uO zT~q0r)8G3z&)@s^>-qlaC%oJ6d4TqG+TAA_^Qf+$z!#rKo@mU~;J3kPaOz3MJPVuy z&jyF!x!_wP-Upt<{c^-FftuMES zxDfGnkRj&7Ab;jle4P(|4%`d=2s{A(4vT4>w}YF(4}seM*T5S1OYl^%c6!*yrJ(k` z9n^Ze!70#zXMlHr{Fx8%buxHAsQo_(YQLWcHSc%8XM(3NNVqQIPEhlAK+&TIYMobr zPXpf-@qSR}`XZ?PeH&y-^8--l{yC^~oph!#{F$@((!3Xf&jmMwYrs}~ehVl%-U>3* zyb=5@@O_}x|8wve;8#Gc_cKuaeje}Fa5z0b6V$rrff`qf_d7tz%>nSKU=D5q-vnyh zUxJX@d>+)eZ-P3+uNd@!**e&jER5o*wZMkUulW7bGzA;AZePP<;3_ zcpmt7pw9h6Q0pBBQQ4w-BB*no4_*LX2}%xHpw4|esPn!D)V}WpHScFYRL?vNil2WE zs{hwPt@8s={d6O`o)PgGpw4{(D86k1b?$AT&U*u>dD;;dLGAAjkgc1KfZESrfs&gq zMf?V+asLwE|9iauC8&Kr388r@_zY0oBPK-w7gW z=98fMFM~SA_dx06PeJkVKS9y?1RK^r8x*}S0L7QhAgnN#fg8a6;57JJQ0qPb>iu^? z@#Pobh2U`*lXc(*Q2RIliZ1h@?8%)G?~3>l@Y}~3b02t+_pe)vO#}ZK)Vfb&u-4fD z^2pRdt$#bH^L!fAynh2q9v%iI508MN%TGYj@i>Spc{mH)22O*bR{@GXZv(Z?-4Xu+ zRR4bj#h-rzp9}ssSb!Hj8yf?D4Ai&{D8UurPVg%5c5n;$Fev(*3Q%mLF-JtmXdQfz`3)KGakIx?lb*_H`wU3{Hu+U5)44P*)ViP=t`#V6bcPA)$|6s)X zKuB#q14{nB0g8@419i?{fI9anFjMrL0`>f2P;#*q6ko0ZB|nSc8t~2W{@oy=YVM2o zUjUiXd7d3g()59}-qt!$ zYf7&45kKBU+e`ZhO`liOr01WY-AcQWrjKZ)eahxOpY~>&K9aqAX&<8XX}?P=KlgBv z(L`T;o)*A-IHKe=q3OJTN_#I&H2OHLN7Lth0nBX?SHgk#U<-H`4KkRNb`$N7Y31ii zE+jWY+U>LxXs6O%MialqLw!VJNbf)I;ClyciguXxLRy3N0ora_`FS8-h_6lBOKHDB zdpk`&jW=(J_$T0g z+8piOG)vn`+e6c5fwqgbkM<(kxio!H1M`ReYVzv}ZacKgX}Cbsrb$09qn%BY%+_gl z&}27XNkbK@k8DHvc>x#m+%5^!z2{uo%$?xVejwvqOF+KDuMem{Ws+p-z& zqz!0qrAa6BIg_@I_8Qu&XeZO2Mbqb#wAcD8^c%dHww?Aa+8b!s(XOHC(+Xf-4jxat zI^LJ?elDIIZ*Bl{+6QT$qMbz3=XJCv(5|Pwn05+-yp+g_tF z6m=Fm@Xa!FzLaL|u$Fp-Q>~N*n1v{amf0X3EKS)L_l5`#-NoBp)?MPum4o{(j~$VV zYRV{9nkupVBxkB>y4kFUq~+xVizyW79dh|%o(`NB!hY@!rM+RHbu??SDB62~V7aqP z?5N;q{$epWyJH1{Z z1*_!2Z0#*9KwdB_hFydY<)Y&-_e4(+W4IPrX|}mmqCVl)_FBv|ELdKuAp!9!z#%-v zkL)cAFGs;yYL!s?wJs%!u!q3}m7AAEj4yFQz2Ts8Qf7xdMiP8Rul{ne`AWMQBT9+g z!3Ml}Gu2gmRT%Gi!Yt$0{zZyVc3iiQ*_bz1=e=P+cq_?!B@jD<4+v10on`;>!Y=fh z&g@J#9L$cz~5OP z&m7Fwu5CeY??Zd}besrE->mm**M?o*h#|o=_PZ`Af|4QX-pDNd#bn) ze4VF-JWg{V&CpUj4BQR`Mqoy~7=>Qd3`eSL2m-U=LLG-NDL`>!H>b_DYdvvTDk~t4 z?2s2d#REZq?7$@pV-j09@1_X^f&(vw)xkG~Ns`}VmfB{M&@fu_ou!@MRTM*K{C8ol z&3cP<1=#Jxhdc%%_Kw@!E8>Q>l(m}}48e+wyS&iuTxW}pxf0UCvj>Ros z)0J6*?Wml@^@Mkd>tKsB<2Qc$@&|>PbGekwOV)&$jN6TYhhF&&BPEAYx9AmB>^7m_ zhL|cK>)zP-IG^aynYmtn*iDED@hA#&=koNBBB)>i&D^k#^(*gQSVr&VMPc?5VLP+e z8;uA}j8O=d!sF`R5;BTK$|a`g+}6tEMg*ep3J0|}#N{~Yc!k&3l?GH7Hf=GBH&Q%9 z9n*%m5jVUqW)u+%v(Gu=#gQ!RTM<63xMw>9mo-^$<%=R+Ag&<=;#H@&Xq8gz8n^|P z(5+92!lh4>%)Y*B(7jPch1Gpqo^SLT5rD;``$5uXN-#pR*u)M+(+{Ew8WeuJp^RKJ!MZD9`CPzRF08GOp~T@SIhA zlpZmrb(4223k3)msyujPwLQhBe20*j`tW*8#>QS@Cx&iZ{$|2UDS7F0eMB{S9D{kS z?^Ww4Ha%`ald*j1yGK*`R7p{IbK+Sk#aco^-_se}#uik`#1N&sk{ z){6o6I7$3-a#51lRf!y4t)#Cf`jP!ZijH~e*x zOuQ#n=L-8{6r(K+aSjEE4Y4Y$Rc!+yo6@^uj-*!Wd=!VjTKC961&IS_TJ0qCm8ru% zjqyz(yQ##Zk#rkaKpC$}4TJYCePYQ_vs%|!1*ytLzP{5;o7n{eOLp7npq)#ERc^ts zk)%tstLPPb;vHJ$Jw-ch*0v1WMQwj?#;%#Wet*s9Tnw*m&|yLhwRe96pn zFMZCY&6_sSv9_18gqB&Q-}7dkxA{4n_^eU5QS*r#6zt_Qc7F$ZMwH8%GHi1=)nsU& zKdAfr7YrO>e0>_vbR}c6_K?)Iwx1Y^!#Jt|nOzrfX}w+784UU}8#gX4E>8OpEN!`4 zHFRT`Wn;VBPiy^1m%b-MO*SGDVWY}UT3}<--Mnr4#`SCV?Ao(^M7_<^o7PZAz|U|5 zN&+(kbGHsQQddf|%ZWgeoYKY>2lnr%T{h|$bJW`QtU>ggwP);Q^>k33Wd` z!0WI{3iOF~I*OBXmr_%)v!wY{TIidPjc&P4mr7fs)8*jgA53ny=$=vaVb&(WR{fG- zl<2}~z{;LNA*^11(pyU2FLvrkgRz{9$SWNEe&DY1q!wR;$E;AFvdd60bzbGgAKsO-=$%4HPaphQqccN{6lyUhB_LF8(sqYk+J-e)Bl0M*-OJHz zy(KF7>(RQ%1PtkPHFVh0AYbuhg-RTQC@nuUMmETvQ>S%gCs3_}&`w*1&Xexh4FABa z&Q1_I@7b$!LL#l-BFEGG6hk4TWN1a_Be&oe)L#9hZ3n3`oIPCWIu#A4v=7IO7-J|l zvGgLFMP}JIqR; zFO}Wp2azpQcVYQKB*A4@9n)wuK5*y%I6kwpb=J*DWbG~Z=0LP9h!tCFs*4}%ES z>r@;ij8WA>bvH_v7kp0PC3(uIu3OtRs_WYMUWR@3N=(A-5M8pJsD&kOr%Yx0Mpu~` z$+NV7arqwPFEf>m@FF`~@48MV`?EuJV0(CI_hLsaI_K4AelWxW*#rew+1czP55+$> zOM&zIsmp)jl9r+}%SMgnDDY-^&hwW699Zc*-)q_w()<&v|vft=zB@Cmpxtual z8e6Nd_PxTa=Ymd?tUf*N!*`ne73 zjGJaNegm({;nju8m_rKN{3?}M^4<;hV76Tzs}z`W9qRF`#V*s{K6^GoLY(-B#v$(T zwg=~RFtgi8Qmc8rCmUkllxHtiCXr=F>g#&I&eeQ8D_->y9+MkRaB|uH_%KI&o4ii@i2NK+|g+N zqKksZa$h%zyI8;1IxeaemH8D zAGw8ic?FfDc!k(Yn-gn-{?CqA(-DOb7{GMJ@GH0j9Y)fFhJ}P62Kyt!C26>B=p)TZ zYR61G6xPSgo2M74pQKajUE_z*`4D^s3-5LB*XIZ)EEEVFmG6=C#0Qw_#{6K?V^$uO z^qXK~L20>`ES2ADBg?wm4Gzm9jC;Y6rC;dFLwE~QU7!>GJ9h?GxfBP=bvYe(a{u-kgX2Nx6u->=u|nKvBYv0Vxb&jJjbmo zJ7^N4`cQjf663c{O~BqH6KJl9Nv^-MdcHjdT%&l$|Liku)6g%hw6^ti%6N!vxdZYUNQe+ z*R6sgiCVZ1F4N$FI3sBj+M@cqx!RF6hUj8E=j`JFTM)J2Uxg^`Xus%+^l3cyXJ4iK zmAQh7Kp{`x;$jvm&!>@IK;-ZFc>(#E9t-DT)Se`tM>NIA(Is1x&-5c@aLO*;F_bgP zSyYtB?Wh;z8{JF{;r{~s4-J8OE5@v-*MzjjhQhRwlE!QPeFc4*phq*wTd^D@#wn}O zIVluT?y(f%AUlt+$n1^Lg`!lIk*HE5ilYir8Elz}XfDL@V_wOW=732(|5xe$c=7rw zT}J`c>gz_wyV}c<2K#w+Ce;LEDMgVK9wJi2(`~|B1Xu2re3jH<>X-&#`6yje4yGg% zMwD5huhEr-JN|Jghk;~l`0_DsmCPEw_JJdeT7FPbU>FA%Cq|Vg3er)l;;TIVkWm{6 zVEM$aO$r@yYj3hjJIT{xuzU~8N%iFQ(a(@7q9HeOF#dY`@jJY3cFb6%~9jLFq=KB^7 zVSEe+;U_o{KgUdC66P|U0o>@sZ2ZS}XsR)T83#~btimAHpeB;Q03JuaVy>bdd;^u| zS4_vg{f$Y%VK@r&kUukcOv~62F5=bQ06>9BM+BQ4hR{Jj-4)At~1#UElWo<~iv1C{76|MNb~ zrVrz6R3&mz6&i<{_*7J$I@HQN-&WK_whp2G8FY4XgFmy63%SivR7pQVJ@^bN;kT$t z+`@5~LiV8;K;@a^y9~9Ur?3EbVIdwz9oj2M@ys9T)L%2c%MHyijVxNpFw`D8ScH{W zjA2xw{r=}?P%F8PI%Gfk{*Kps@V4M8?qA`kPseg*uY4O(`QJ#;8AIn|RN`yM`7xF)IxTnCbAbvVU8fXXFf$LoiG>Z zPgfQ{aB_dREjza%TO!!P!oxvDzXC|e8nH1L@nez>cPLD7Se|@X*?2d z=>0FFb3r#aVg1>&PJEg1-@LRPxQACjD{5o;s?;9TTeH{q0O}XGvd_x&c8U>~Pz z3(HUytww#m8dDQ=w$oAKXHhG85tZ;T>I>&kTXPLnp$^o_|3oEH-L;}zRB6jm6aQ<;#tp6T3)HEB+#4Mt_ji>V@G1ewEucNwC`#ST_jKZD*9{u@l@aGxYF;71%yhi zay~+o6KbmFS|UUg5f2jci0-CsTuvmKxajaKBf1+eMDkU82v-vxp?zjM&0^vKLi_m` z5g^p`<5fYF5i^NWq8Fi-PdrNK_dwgLEq4f7Rq}-ERO;uoQMddy8y68efckw^;UL5qVy_OcVHG}I1ZFaZDoW^i$L&V+cHQE=39JBM&^X$R&9NRBrwB4BTcJ_jB zB<@Acg4Sqr@)Ap4oiTR*&<2~9x!s=4oY+1iE7r>n&8f5}a!T#K;ooGhYu)TLg}q3l zsdu9xFYXhwYjdk?a8#cCI`?${aKm~p?!?3Kh-b5$pHreZ11TqZjqG-;J%bv2ku% zxVhPjI&MqI+vbHsaa%Z{!#epzc7J}c%`0&1O9hAfcGbylnwW1dOe{-_Hn&CG=z69Z zYK?|Hn^`!6Yb}QXo8}cIFx|X=v>_+2WOQZP@s#9Z} diff --git a/locales/de_DE.po b/locales/de_DE.po index 35e9301d0..dcb961ebd 100644 --- a/locales/de_DE.po +++ b/locales/de_DE.po @@ -1,17 +1,19 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Florian Ried , 2016 # Janosch, 2015 +# armin0103 , 2016 +# Robert Langenkamp , 2016 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:51+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: German (Germany) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,502 +21,357 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "" -msgstr[1] "" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Formularkategorie" -msgstr[1] "Fomularkategorien" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formular" msgstr[1] "Formulare" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Formulare (warten auf Genehmigung)" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formulare ohne Kategorie" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Fragestellung erstellen" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Fragestellung bearbeiten" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Sektion" -msgstr[1] "Sektionen" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Keine Treffer. Bitte nutzen SIe eins der folgenden Formulare" -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "GLPI Objekt" -msgstr[1] "GLPI Objekte" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Es trat bei der Abfrage der Formulare ein Fehler auf" -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "erforderlich" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "In dieser Kategorie befindet sich kein Formular" -#: ajax/question.php:178 -msgid "Show empty" -msgstr "" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Sind Sie sich sicher, dass Sie diese Anfrage löschen möchten?" -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Sind Sie sich sicher, dass Sie diesen Abschnitt löschen möchten?" -#: ajax/question.php:223 -msgid "Values" -msgstr "Werte" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Sind Sie sich sicher, dass Sie dieses Ziel löschen möchten?" -#: ajax/question.php:224 -msgid "One per line" -msgstr "" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Alle Elemente anzeigen" -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filter" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "keine Treffer" -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Merkmale" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Ein notwendiges Feld ist nicht ausgefüllt:" -#: ajax/question.php:269 -msgid "Range" -msgstr "Reichweite" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" +msgstr "Servicekatalog" -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" +msgstr "Formularliste" -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Formular erstellen" -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "nachträgliche Genehmigung" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" +msgstr "Die Fragestellung wurde erfolgreich gespeichert!" -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "reguläre Bezeichnung" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" +msgstr "Die Fragestellung wurde erfolgreich aktualisiert!" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "" - -#: ajax/question.php:320 -msgid "Show field" -msgstr "Feld anzeigen" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "immer angezeigt" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "versteckt, es sei denn" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "angezeigt, es sei denn" - -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Sektion hinzufügen" - -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Sektion editieren" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Ziel hinzufügen" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Es existiert bereits eine überschrift für diese Einheit. Es kann nur eine Überschrift ro Gruppe definiert werden" #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." msgstr "Eine Kategorie mit dem gleichen Namen besteht bereits! Anlegen der Kategorie fehlgeschlagen." -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "" - -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "Formularliste" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formulare (warten auf Genehmigung)" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Überschrift" +msgstr[1] "Überschriften" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "Die Fragestellung wurde erfolgreich gespeichert!" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Fomularkategorien" +msgstr[1] "Fomularkategorien" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "Die Fragestellung wurde erfolgreich aktualisiert!" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Zugriff" +msgstr[1] "Zugriffe" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Rückantwort" -msgstr[1] "Rückantworten" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Zugriffsmodus/typ" -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "öffentlicher Zugriff" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "privater Zugriff" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "eingeschränkter Zugriff" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Zum Formular verknüpfen" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Bitte Formular wählen um den Link zu aktivieren" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Überschrift hinzufügen" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Ein notwendiges Feld ist nicht ausgefüllt:" +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Eine Überschrift existiert bereits für ein Übergeordnetes Element! Eine weitere Überschrift würde die bestehende überschreiben." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Formularanforderung" msgstr[1] "Formularanforderungen" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Anforderer" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Genehmiger" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "wartend" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "akzeptiert" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "abgelehnt" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formular genehmigt" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formular erfolgreich gespeichert" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "notwendig bei Ablehnung" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Erforderlich, falls abgelehnt" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "ablehnen" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "akzeptieren" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Kommentar zur Ablehnung erforderlich" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Zugriff generieren nicht möglich!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Das Formular wurde erfolgreich gespeichert" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Formulardaten " -#: inc/form.class.php:92 -msgid "Description" -msgstr "Beschreibung" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Homepage" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Helpdesk" -#: inc/form.class.php:128 -msgid "Access" -msgstr "Zugriff" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Helpdesk von GLPI" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Alle Sprachen" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "vereinfachter Servicekatalog" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "öffentlicher Zugriff" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "erweiterter Servicekatalog" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "privater Zugriff" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Helpdesk modus" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "eingeschränkter Zugriff" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Ziel" +msgstr[1] "Ziele" -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "direkter Zugriff auf die Homepage" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Ziel" +msgstr[1] "Ziele" -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Löschen" -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Ziel hinzufügen" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" +#: inc/target.class.php:119 inc/form.class.php:939 +msgid "The name cannot be empty!" +msgstr "Das Feld Name kann nicht leer sein" -#: inc/form.class.php:528 -msgid "see all" -msgstr "" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Der Typ darf nicht leer sein" -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "" +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Sektion" +msgstr[1] "Sektionen" -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Der Titel wird benötigt" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "" +#: inc/notificationtargetform_answer.class.php:12 +msgid "The form as been saved" +msgstr "Das Formular wurde gespeichert" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Meine letzten Formulare (Anforderer)" +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 +msgid "A form need to be validate" +msgstr "Ein Formular wartet auf Genehmigung" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "bisher kein Formular angelegt" +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 +msgid "The form is refused" +msgstr "Das Formular wurde abgelehnt" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Alle Formulare (Anforderer)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Meine letzten Formulare (Genehmiger)" - -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "bisher wartet kein Formular auf eine Genehmigung" - -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Alle Formulare (Genehmiger)" - -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Genehmiger auswählen" - -#: inc/form.class.php:910 inc/target.class.php:118 -msgid "The name cannot be empty!" -msgstr "Das Feld Name kann nicht leer sein" - -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Du musst einen Genehmiger auswählen!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "duplizieren" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Zugriff" -msgstr[1] "Zugriffe" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "" - -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "" - -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" - -#: inc/notificationtargetformanswer.class.php:12 -msgid "The form as been saved" -msgstr "Das Formular wurde gespeichert" - -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 -msgid "A form need to be validate" -msgstr "Ein Formular wartet auf Genehmigung" - -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 -msgid "The form is refused" -msgstr "Das Formular wurde abgelehnt" - -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Das Formular wurde akzeptiert" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Das Formular wurde gelöscht" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formular #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Formularname" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Formular Rückantworten" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Kommentar abgelehnt" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Bestätigungslink" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Anfrage #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Ein Formular wurde erstellt" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "Ihre Anfrage wurde erfolgreich gespeichert" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Guten Tag, \\nIhr Formular in GLPI wurde erfolgreich mit Nummer ##formcreator.request_id## gespeichert und an das Help-Desk übertragen. \\n Sie können Ihre Anforderung unter folgendem Link einsehen: \\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Ein Formular von GLPI wartet auf Genehmigung" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Guten Tag, \\nEin Formular von GLPI wartet auf Genehmigung. Sie wurden als Genehmiger ausgewählt. \\n Das Formular kann unter folgendem Link aufgerufen werden, um genehmigt bzw. abgelehnt zu werden:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Ihr Formular wurde abgelehnt" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -522,288 +379,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Guten Tag, \\n Leider müssen wir Ihnen mitteilen, dass Ihre Anforderung aus folgendem Grund abgelehnt wurde: \\n##formcreator.validation_comment## \\n\\n Sie können Ihre Anforderung unter folgendem Link bearbeiten und erneut einreichen:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Ihr Formular wurde genehmigt." -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Guten Tag, \\nWir freuen uns, Ihnen mitteilen zu können, dass das Formular von der genehmigenden Person akzeptiert worden ist. \\nIhre Anfrage wird somit schnellstmöglich von der IT-Abteilung berücksichtigt." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "Ihr Formular wurde von einem Administrator gelöscht" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." msgstr "Guten Tag, \\nLeider müssen wir Ihnen mitteilen, dass Ihre Anfrage nicht berücksichtigt werden kann und von einem Administrator gelöscht wurde." -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Fragestellung" -msgstr[1] "Fragestellungen" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "Die Sektion ist notwendig" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "Dieses Feld muss ausgefüllt werden:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Ein Beschreibungsfeld sollte eine Beschreibung beinhalten" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Ziel" -msgstr[1] "Ziele" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Ziel" -msgstr[1] "Ziele" - -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Rückantwort" +msgstr[1] "Rückantworten" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" -msgstr "" +msgstr "Aktuell aktiver " -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" -msgstr "" +msgstr "Standardanforderer Benutzereintrag" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" -msgstr "" +msgstr "Zuerst dynamischer Usereintag (alphabetisch)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" -msgstr "" +msgstr "Letzter dynamischer Anforderer (alphabetisch)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" -msgstr "" +msgstr "Formulareinheit" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Standardeinheit des Genehmigers" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" -msgstr "" +msgstr "spezielle-Einheit" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" -msgstr "" +msgstr "Standatd Einheit einer Antwort einer Benutzeranfrage" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" -msgstr "" +msgstr "Aus einem GLPI-Objekt > Antwort auf eine Gruppen-Frage" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" -msgstr "" +msgstr "Markierungen aus Fragen" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" -msgstr "" +msgstr "ausgesuchte Tags" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" -msgstr "" +msgstr "Markierung einer Frage und spezieller Markierungen" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" -msgstr "" +msgstr "Markierung einer Frage oder spezieller Markierungen" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" -msgstr "" +msgstr "Entspricht der Anwort au die Frage" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" -msgstr "" +msgstr "aus dem Ticket-Erstelldatum berechnet" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" +msgstr "von der Antwirt wurdeauf die Frage geschlossen" + +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Ziel Ticket" +msgstr[1] "Zeil Tickets" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Ziel bearbeiten" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Ticket-Titel" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Fragestellung" +msgstr[1] "Fragestellungen" + +#: inc/targetticket.class.php:324 msgid "User type question" -msgstr "" +msgstr "Benutzerfragestellung" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" -msgstr "" +msgstr "Gruppen-Antwort" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" -msgstr "" +msgstr "Ticket-Markierung" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" -msgstr "" +msgstr "Markierung" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" -msgstr "" +msgstr "Eine Validierungsnachricht als Erstticket-identifizierer hinzufügen" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Abbrechen" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" -msgstr "" +msgstr "Ticket-bearbeiter" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Formular Anforderer" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Formular Genehmiger" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 +msgid "Person from the question" +msgstr "Fragesteller" + +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 +msgid "Group from the question" +msgstr "Gruppe der Frage" + +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 -msgid "Person from the question" +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 +msgid "Supplier from the question" +msgstr "Fragesteller" + +#: inc/targetticket.class.php:988 +msgid "Full form" +msgstr "Komplettes Formular" + +#: inc/targetticket.class.php:1035 +msgid "The title cannot be empty!" +msgstr "Der Titel darf nicht ler sein." + +#: inc/targetticket.class.php:1041 +msgid "The description cannot be empty!" +msgstr "Die Beschreibung darf nicht leer sein." + +#: inc/fields/radios-field.class.php:48 +msgid "Radios" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "GLPI Objekt" +msgstr[1] "GLPI Objekte" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 -msgid "Group from the question" +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" msgstr "" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 -msgid "Supplier from the question" +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" msgstr "" -#: inc/targetticket.class.php:883 -msgid "Full form" +#: inc/fields/float-field.class.php:38 +msgid "Float" msgstr "" -#: inc/targetticket.class.php:927 -msgid "The title cannot be empty!" +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" msgstr "" -#: inc/targetticket.class.php:933 -msgid "The description cannot be empty!" +#: inc/fields/integer-field.class.php:38 +msgid "Integer" msgstr "" -#: inc/wizard.class.php:83 -msgid "Seek assistance" +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" msgstr "" -#: inc/wizard.class.php:87 -msgid "My requests for assistance" +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" msgstr "" -#: inc/wizard.class.php:98 -msgid "Book an asset" +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" msgstr "" -#: inc/wizard.class.php:105 -msgid "Consult feeds" +#: inc/fields/text-field.class.php:32 +msgid "Text" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Sind Sie sich sicher, dass Sie diese Anfrage löschen möchten?" +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Sind Sie sich sicher, dass Sie diesen Abschnitt löschen möchten?" +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Sind Sie sich sicher, dass Sie dieses Ziel löschen möchten?" +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 +msgid "Seek assistance" +msgstr "Hilfe holen" + +#: inc/wizard.class.php:73 inc/wizard.class.php:74 +msgid "My requests for assistance" +msgstr "Meine Hilfsanfragen" + +#: inc/wizard.class.php:85 inc/wizard.class.php:86 +msgid "Book an asset" +msgstr "Asset buchen" + +#: inc/wizard.class.php:94 inc/wizard.class.php:95 +msgid "Consult feeds" +msgstr "Feeds zu Rate ziehen" + +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "einzelne Person" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "einzelne Gruppe" + +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Knowlagebase-Kategorie" + +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "erforderlich" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Fragestellung erstellen" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Sektion hinzufügen" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Feldtyp bitte eingeben" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Die Sektion ist notwendig" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Dieses Feld muss ausgefüllt werden:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Ein Beschreibungsfeld sollte eine Beschreibung beinhalten" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "LDAP-Information konnte nich wiederhergestellt werden!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Beschreibung" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Homepage" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Zugriff" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Alle Sprachen" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "direkter Zugriff auf die Homepage" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Muss validiert werden?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Standardformular im Servicesatalog" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Kategorie" +msgstr[1] "Kategorien" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "- Alle anzeigen -" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "sortieren nach: Beliebtheit" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "sortieren nach: Alphabet" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Bitte beschreiben Sie hier Ihre Anforderung" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Meine letzten Formulare (Anforderer)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "bisher kein Formular angelegt" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Alle Formulare (Anforderer)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Meine letzten Formulare (Genehmiger)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "bisher wartet kein Formular auf eine Genehmigung" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Alle Formulare (Genehmiger)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Genehmiger auswählen" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Du musst einen Genehmiger auswählen!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "duplizieren" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Furmular wurde dupliziert: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Formular wurde übertragen: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Problem" +msgstr[1] "Probleme" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Fragestellung bearbeiten" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "leere anzeigen" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Je eine Zeile pro Eintrag" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Werte" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "eine pro Zeile" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filter" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Merkmale" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Reichweite" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "nachträgliche Genehmigung" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "reguläre Bezeichnung" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Geben Sie weitere Überprüfungsparameter in der Beschreibung an um den Benutzern bei der Beantwortung der Frage zu helfen." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Feld anzeigen" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "immer angezeigt" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "versteckt, es sei denn" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "angezeigt, es sei denn" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Sektion editieren" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formulare ohne Kategorie" diff --git a/locales/en_GB.mo b/locales/en_GB.mo index 7e5577b48ed7e95438752c757444a1617fbde703..2bd91d1617d132692ec7f487b59de7c6bb61746a 100644 GIT binary patch literal 11316 zcmeI1dypMfoyU*LBMgct7!eiEBqU^#+_1bgo7xwo0V-IwmZ znHfYtT@@9LE5f=gE^bk4p=+({s_R->N=a$?!nak5l!^~5%V(*je~9Ae+kN`ZO)@C{ zqpLMt^Shru-KWp_o!{?we&=-0H=lmQZHD76T+Hsur^1rIph4v(e$R`@jd4#=PR5I;0&KJEB5I7Inj_zbx6 zsptYX!js^+j+5|s%Cm41UJv)e&qE$HYq&WA&wzt)23Fv0@ECX>lz#U^wfhy=4}StR z^rxca)8WbRXjp+O;F(bEoDZJ|L#TFcfg0bfQ0?6Xp9TNV@k@}V&5xn_{~c8ONArWq z=42?n*TWOxxlrxyhPcG+h0^N^cYOxRE-iQhybj9lZ-DCmo$$HvKB)d4f~xl;SANv- z7%r;c6QG`3<;t6(;^80QO4xwI@CK;%-VGUo`5@GDpMi>p??JWq2>cItEQ67M-ved8 zk3!k=lTh~h0(=sD(DB>u`uCvh_jAWSf`Lg+pzQEjs5p55%Fho& z`Q?{T`W(eW^3O^ryIZJsPUA=89);`SF1QZPLG}MOD7*bHR6Kse@w@P$CooT-^4|SS zBI*AOf=%_up!5qMDwvl!-U)fcd;m(1FFQT}rT;@vaq<%=KRpUHzT*f2@i}k^u7}d^ zMNs2yLtJ5A>UcX;oV^=P!h7Lfc!Dk34d4jnc__W#3FU{cL)qzQlAQE=8dSR{LH^7L zKZ?^mQ1;yiWtVHA^k0B#=arBy&3j=!PIvzSsP-Oqd=$#RC#@><-2~PDC{+97Q2u){ z)cD&_adiV!ySGBk&pV*>dYilcpHO!BAE@~ID3sm54AuY7pz_{|)kS}6q3R90@|fdp zC_h{V^<2Z1Z-SZ^2cY8qT~K-NJ}CWv1?9)zLp^sqL7{jUfNF0md^?P} zq5Srs;}4+v`2|$`Jn^)m-YTf;BT)Koh5O(oQ1k1*;1TdsQ2l-mG9>dIh-u9VCbjyj zK_A?J z%pv8`$H~iG;Y`OAZb$AyUV_Mv^T+^l4Wc-mMJ_OIuv|wNSpw zTzM1pk@bjtd@G`30#S_VxEZ-IKQrb^#}fa<$#Y#nbM-dl#mEezqaSG_${%k+o`>v5 zdJn})?{OW4OOex&+mRcP%}9A9oYY;RSzd(Ky7O1UYg_ zK+?P!Lrz1KFK$Arh=-hq=va%4AT8u<xGH$ z)fcQkAEa4o=Yp(hv!-uTujSi_pME=9)~!)B3*yMmctPmb2hCPn_tRPuw2P~OAJ%Q! zj60y|?f0$Md%sHcnK)_LnIvx6i*`-yw2|-EZ5G>U-|qLqpiW0+rKXp1*^g}Asb4Rz zFa1d3U)u>18k@;=2vX~}+S!7-?70>CmOHH=O@pYxy;{w0XF1Z;!Db6>bg0)0-LoLd zN9?X#+woHk)fH2}wpfa66GQq*e$S0Ywrcrl>NT)MigHPs*(|8d`WdDO!+5UKR{cQD zcwuRTyoWHfp%*oH6x}Ga7IN#QcAZ9q9)2=#$PL$PoZp!97E)Ue(st-A$b6-Khk6{B z;BZ+i%7Sd6-(DVf2oI{ugK-ot@Z-C|*|wj!ig>@Fx??eN4==#hXMn%4L|Y|!q;YA((tpizr2z7HI3Hp8rwQy zgGdt~k0{k>`nB2Vcpe9jHsd(eeCfK-jK-}Nb~IzOnguQ2jQKNOCoBzX;~A=VQkquC z+HyeFE9`f8ZO!V%=ErjL(P(%6>b$gK?|J&i3QW3MW<6$7D*xGL-16JRtQjjK&vv4a zn`W%j4g;kfvz>T9WO}(vk&R|jBSu%gNICl?~$+M{DN&#-ntCGb$cUBI$ zr^ApmTijK0EzY_Vx+tcd+?+F=khzyK3(2&3%ZuJqk!0b{yJ)5NoEu5pX%{J80oV2D#YJ)~ zkeZ8wjaNpGXFZ_DdY%CCbX2Se`DBTdQ4fmg!7HOOce#Kh&hTrExSN%o;)uMF=ejV6 zW~*05t5;*XR=&c-$)GbYCcIkrSFc9PdYvW6MexOCZ10R%JPEygPVZqN)iN{g&71Kc zGUH6qAa&OkNa19Bb#idt9zXa_*Rca;_u)(81!i}gw_)2cX&-a=S@+Uo#K0w_Y~^YO z;+x(=9xMvN)J*tEs>NJ!ageVjl3>4bSz$#p(V51AW$6Xw8d#pBX40z%u@EuwC;b_+ zl0)6rTpBAbcgtFc%aysG%8gFwv9ipw7O*-K#FND$$3%8#*jr~><+~>~n4uN*r)w#x zxhDHKz4y4~*)cWFRePH8oYj)LGxJ+qRWaW#6sP$X!t81LwP1!}lY?0n7t3;{m)Uyk zr&gJtLakX{yx-6SSS;cMjJ#ORyarw7jW6U@_m*1zF5)a48Q& zoz^tgX?2*JwB67mK{;!(>seF(6Sdj2J$BvFo{Qm8EHJhevnz2Obd#utTWkZRRrgtK zaal}R-!mKfN+4^9X}2FLo?$gB_s97H;ReWM7p~oEn5a;JDbjnf*ghS6t(;1#r`1W@ zz{BnD7UkX{^=nNp@tB-RI#AfRw>GZ~Nk;V`dhF^! z#_oMdeVCrb#=dlSp^Y|0OVmd}{xmAj#ewwcy_zRu>sMO5f`>&u!K*2tMk zcimZD#E7y%*1PmBRn@(Obl>RmSFd_dk4|$LjeuLQ?9f|=r0a!pYu@T(^ihV6TaL^` z5^IN1*;%h#iqjcvwb*$~gq;Q%tzxxHaVu}%q~9h2D&uJ*s8_ai8fj%JuG+qdOQtIM z4vxnw+6Pzdrs0vZE5jp|(?{&cS=BSn-Y`5eJWR#PB<~RFW{G-dR?pnDVVI+D7n7-y zZv(MhoK!8I_Y>ZN=~MY~g4NRN*z>aKynJEivv-&tWDPr?XQM`koo!{x_gYmpP7PMk zrd_u;!b)}fe5Ph4|-zYm7CVFLxAg@|Yr6FGPf@pI-&r(0zvUh4n z<($QOZs%Ls9@XMHnpW*O(?Ql9QO3xbj!NP_HVHx z1DpGJvo5#6hrUrRe?wUQhOqn%;joVsZr%KAeM7Ko*@FFl`HXPLCxySnR|K=vtM2kg zgumsF2zL1^Lhtv5eB-Kp&GJ`-<*x|&e`J=wBIqq^iMK%ByYqh({T+NoC|;-k%+Cnr aL(AV0^l!rAyVBqNcZ8n*F8%F%NcaPxkoI=~ literal 9876 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, 2014-2016 @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/en_GB/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,167 +19,71 @@ msgstr "" "Language: en_GB\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Header" -msgstr[1] "Headers" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Form category" -msgstr[1] "Form categories" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Form" msgstr[1] "Forms" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Forms waiting for validation" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Forms without category" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Add a question" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Edit a question" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Section" -msgstr[1] "Sections" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "GLPI object" -msgstr[1] "GLPI objects" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Required" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Show empty" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "One per line for lists" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Values" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "One per line" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filter" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Attribute" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Range" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Additional validation" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Regular expression" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Specify the additional validation conditions in the description of the question to help users." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Show field" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Always displayed" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Hidden unless" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Are you sure you want to delete this question?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Displayed unless" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Are you sure you want to delete this section?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Add a section" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Are you sure you want to delete this destination:" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Edit a sectio" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Show All Items" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Add a destination" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "didn't match any item" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "A category already exists with the same name! Category creation failed." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "A required field is empty:" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Form Creator" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Form list" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "An header already exists for this entity! You can have only one header per entity." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Form Creator" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -189,332 +93,283 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Answer" -msgstr[1] "Answers" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "An header already exists for this entity! You can have only one header per entity." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "A category already exists with the same name! Category creation failed." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Forms waiting for validation" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Header" +msgstr[1] "Headers" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Form category" +msgstr[1] "Form categories" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Target" +msgstr[1] "Targets" + +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Access type" + +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Public access" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Private access" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Restricted access" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" msgstr "" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" msgstr "" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "A required field is empty:" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Add an header" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "An header exists for a parent entity! Another header will overwrite the previous one." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Form answer" msgstr[1] "Form answers" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Requester" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Validator" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "waiting" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "accepted" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "refused" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Form accepted by validator." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Form successfully saved." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Comment" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Required if refused" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Refuse" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Accept" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Refused comment is required!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Cannot generate targets!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Form data" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Description" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Homepage" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Access" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "All langages" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Public access" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Private access" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Restricted access" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Direct access on homepage" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Need to be validate?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" - -#: inc/form.class.php:528 -msgid "see all" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:545 -msgid "Popularity sort" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" msgstr "" -#: inc/form.class.php:549 -msgid "Alphabetic sort" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" msgstr "" -#: inc/form.class.php:710 -msgid "Please, describe your need here" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "My last forms (requester)" - -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "No form posted yet" - -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "All my forms (requester)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "My last forms (validator)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Destination" +msgstr[1] "Destinations" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "No form waiting for validation" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Destination" +msgstr[1] "Destinations" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "All my forms (validator)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Delete" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Choose a validator" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Add a destination" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "The name cannot be empty!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "You must select a validator!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Duplicate" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Form duplicated: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Form Transfered: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Target" -msgstr[1] "Targets" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Access type" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Add an header" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "The type cannot be empty!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "An header exists for a parent entity! Another header will overwrite the previous one." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Section" +msgstr[1] "Sections" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "The title is required" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "The form as been saved" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "A form need to be validate" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "The form is refused" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "The form is accepted" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "The form is deleted" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Form #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Form name" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Full form answers" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Refused comment" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Validation link" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Request #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "A form has been created" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "A form from GLPI need to be validate" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr " Hi,\\nA form from GLPI need to be validate and you have been choosen as the validator.\\nYou can access it by clicking onto this link:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -522,288 +377,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "" -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." -msgstr "" - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Question" -msgstr[1] "Questions" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Delete" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "The title is required" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "The field type is required" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "The section is required" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "The field value is required:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "A description field should have a description:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Cannot recover LDAP informations!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Destination" -msgstr[1] "Destinations" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Destination" -msgstr[1] "Destinations" +msgstr "" -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "The type cannot be empty!" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Answer" +msgstr[1] "Answers" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "The form entity" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Default entity of the validator" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Specific entity" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Default entity of a user type question answer" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "From a GLPI object > Entity type question answer" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Tags from questions" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Specific tags" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Tags from questions and specific tags" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Tags from questions or specific tags" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "equals to the answer to the question" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "calculated from the ticket creation date" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "calculated from the answer to the question" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Target ticket" msgstr[1] "Target tickets" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Edit a destination" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Ticket title" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Question" +msgstr[1] "Questions" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "User type question" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Entity type question" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Ticket tags" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Tags" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Add validation message as first ticket followup" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Cancel" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Ticket actors" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Form requester" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Form validator" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Specific person" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Person from the question" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Specific group" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Group from the question" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Specific supplier" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Supplier from the question" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Full form" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "The title cannot be empty!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "The description cannot be empty!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Radios" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "GLPI object" +msgstr[1] "GLPI objects" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "This is not a number:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "The following number must be greater than %d:" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "The following number must be lower than %d:" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "Specific format does not match:" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Float" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "This is not an integer:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Integer" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "The text is too short (minimum %d characters):" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "The text is too long (maximum %d characters):" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Textarea" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Text" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "This is not a valid e-mail:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Date & time" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "The following question needs of at least %d answers:" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "The following question does not accept more than %d answers:" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Multiselect" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "A required file is missing:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "LDAP Select" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Select" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Checkboxes" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Show All Items" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "didn't match any item" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Specific person" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Specific group" + +#: inc/category.class.php:39 +msgid "Knowbase category" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Required" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Add a question" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Add a section" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "The field type is required" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "The section is required" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "The field value is required:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "A description field should have a description:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Cannot recover LDAP informations!" + +#: inc/form.class.php:60 +msgid "Import forms" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/form.class.php:94 +msgid "Description" +msgstr "Description" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Homepage" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Access" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "All langages" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Direct access on homepage" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Need to be validate?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "" +msgstr[1] "" + +#: inc/form.class.php:536 +msgid "see all" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Are you sure you want to delete this question?" +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Are you sure you want to delete this section?" +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Are you sure you want to delete this destination:" +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "My last forms (requester)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "No form posted yet" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "All my forms (requester)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "My last forms (validator)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "No form waiting for validation" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "All my forms (validator)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Choose a validator" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "You must select a validator!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Duplicate" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Form duplicated: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Form Transfered: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "" +msgstr[1] "" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Edit a question" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Show empty" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "One per line for lists" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Values" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "One per line" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filter" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Attribute" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Range" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Additional validation" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Regular expression" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Specify the additional validation conditions in the description of the question to help users." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Show field" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Always displayed" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Hidden unless" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Displayed unless" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Edit a sectio" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Forms without category" diff --git a/locales/en_US.mo b/locales/en_US.mo index 9317e0a0a561f31442f3587b1d7e83f18b5451c3..4ef6cdf8e1c2329b76d4ec97f2ee7d2d07149f80 100644 GIT binary patch delta 124 zcmZ3;GMQz93ggX*szup`x<-}?h6Yv!hS~;(1_oRK{<=Y_Wtqj9`FXl7i6yC43PuKo zX1a!8bq1DJ1_s&&K)~gbSX`nTQk0lioRe6RUu31=m7kHAr{G+knVplFSDc-xU{g|* XSe%hs?7o20(Q_iNz(lAw`LK#W{&3`9)R=i8-kiiFqkSsR}8nIf\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: English (United States) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/en_US/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: en_US\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/es_419.mo b/locales/es_419.mo index 9900b633926745a30baf295099b731e612696319..54cb3a2a416dad9be2050fe6061d3431b22e1392 100644 GIT binary patch delta 124 zcmZ3?GL>b53ghjGszup`x<-}?h6Yv!hS~;(1_oRK{<=Y_Wtqj9`FXl7i6yC43PuKo zX1a!8bq1DJ1_s&&K)~gbSX`nTQk0lioRe6RUu31=m7kHAr{G+knVplFSDc-xU{g|* XSe%hs?7o20(Q_iNz(lAw`LK#W{&3`9)R=i8-kiiFqkSsR}8nIf\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Spanish (Latin America) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/es_419/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: es_419\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/es_AR.mo b/locales/es_AR.mo index 30556bfc3e3ba8683819f6260ac1a2d51d3c59a9..5e0d83ae67a4714e86265ecaca7cf0b211571a83 100644 GIT binary patch delta 765 zcmXZaPe>F|9Ki8kmTm58yQP-)kEtZLWaN!YqD!e!kwj3$LI=A{xZt!hn>(Xfm$?dd z=-^qQ2)Zelp44Lp5pO{qiY_7Dg9sMt`?I$U@AH1Yeeccty*KOm_xY8DhUC)$k-dz_ z4H4OF5$VFe*oj?7MGoT-^2lwPHY{Nd1M5pXPCSq8xQG|=gY`3JiR-BIn+cBK`K%=S zohu}|Nfb~Q8bf_?h^KHGb>eGm!gt78vWz^kW!*)c_YF_r4{IF@#I5XF*STYToJ;<{ zV2XrJc!hai}LNzK(hV7=04Et;47%@W{r`P{+^V8C*gKH&846in`I?s0AG4y!Ea#s8`o!J%@aHtJ%i> zRK;`q1|827jn`v5W6}@qyAR7VK@?O&_m&@*i%y^M`dx2-oEa<{(_{Fh@A*;emTG<& uP5N=QR&?%GC;ZU4`8=ph24PeQoNIB-k0#2sky$qm$9tcYSGSsHQ~v-Zqg!ME delta 785 zcmX}qzfTlF6u|K(@jN}jJCI+8#;ic#5?t6j`Q^nJFB%&$8U*?gHe|`Mm+YMa31JHh z_yY(D7SLDb*8NgnfUYr zF$taU3Ul}dFXK1t#3TDY*(|~%*JwzIhi9>5eSm$$4^dAbLOsbXVb=fLHLm)RV{Vr2itQ29?mgZ)$$gDR}u&H-9>A>|~tBxCv9Oxl@q|t7TKG vL`BDx{bdu*MZPoVm(BCgtT?y-^#=dHygR>Wg7V;OW$_M6g!A=-#wht0%#>hh diff --git a/locales/es_AR.po b/locales/es_AR.po index 60ae82083..454b6360a 100644 --- a/locales/es_AR.po +++ b/locales/es_AR.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Spanish (Argentina) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/es_AR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,19 +19,19 @@ msgstr "" "Language: es_AR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "Encabezado" msgstr[1] "Encabezados" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "Categoría de formulario" msgstr[1] "Categorías de formularios" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -39,8 +39,8 @@ msgid_plural "Forms" msgstr[0] "Formulario" msgstr[1] "Formularios" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "Formulario en espera para la validación" @@ -57,7 +57,7 @@ msgid "Edit a question" msgstr "Editar pregunta" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "Sección" @@ -139,11 +139,11 @@ msgstr "Oculto amenos que" msgid "Displayed unless" msgstr "Mostrar al menos que" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "Agregar sección" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "Editar sección" @@ -156,7 +156,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "Una categoría ya existe con el mismo nombre! Falló la creación" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -164,8 +164,8 @@ msgstr "Una categoría ya existe con el mismo nombre! Falló la creación" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -189,7 +189,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "Respuesta" @@ -223,200 +223,213 @@ msgstr "" msgid "A required field is empty:" msgstr "Campo obligatorio vacío:" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "Solicitante" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "Autorizante" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "esperando" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "aceptado" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "rechazado" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Rechazo" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "Datos del formulario" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "Pagina de inicio" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "Acceso" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "Acceso público" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "Acceso privado" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "Acceso restringido" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "¿Necesita autorización?" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "Mis últimos formularios (solicitante)" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "Todos mis formularios (solicitante)" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "Todos mis formularios (autorizante)" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "Todos mis formularios (autorizante)" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "Elegir autorizante" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "Duplicado" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "Destino" msgstr[1] "Destinos" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "Tipo de acceso" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -430,7 +443,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -523,7 +536,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -543,8 +556,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "Pregunta" @@ -555,28 +568,28 @@ msgstr[1] "Preguntas" msgid "Delete" msgstr "Borrar" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "Se requiere el título" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "Se requiere campo tipo" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "Se requiere la sección" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "Valor de campo obligatorio:" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "No se puede recuperar información LDAP" @@ -592,7 +605,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "El tipo no puede esta vacío" @@ -660,118 +673,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Requerimiento destino" msgstr[1] "Requerimientos destinos" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "Editar destino" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "Título del requerimiento" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "Cancelar" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "Involucrados en el requerimiento" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "Solicitante del formulario" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "Autoriza el formulario" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "Persona específica" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "Grupo específico" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "Proveedor específico" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "Formulario completo" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -780,30 +805,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/es_CL.mo b/locales/es_CL.mo index 0a9f5ed6cdffeb88aafc9413a0efd4b3988946b0..063f38a74ae1e2b2239115d906fe5101768deaeb 100644 GIT binary patch delta 124 zcmbQq(#T|*NE14}DY6Kw+{0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIW7I&-i(1E4ye#Nra&kfOxA;+({i{30ub#GKTM#JrTERE3n(oW#<+#7YGl7)uW> Z>5!hAn3\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Spanish (Chile) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/es_CL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: es_CL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/es_ES.mo b/locales/es_ES.mo index 34d47ef55e1b13d64d395224f52b97fdcae42531..7ae455ddeffbcab93f625355d48578ad56516e36 100644 GIT binary patch delta 3064 zcmX}t4NR3)9LMp4pvL7QzJo8|MMO=wSFRUiGD~SX%V{c-X)hYk9bgHlU|mtKSfXYY z^+;&brkjCn`8KAN)>saES<7DR#aueg@FmyOwWV3KzCZ4KE66t8Zk*N2wlc;}p8q>I;(#}Noi77-?;A#6{9ctxUt#6?c-is{K z970v(1nOJ=h??*U>eJn_c4HM9KOXgaa@gL;L}fM+7vgl(v3dtNk)|Cr(dU?sXHmy6 znuj#dXjHfdN@N|XGTTtc_#^8HJRN1smpF&}&79?NI{&w6Xn+h)q=bc-Mt>>t z&ouH!6COb&+J;)eC)OWO6}*J{_J5-iaq}OQ$v7O@%xQ3W&-*~ zQGczlj2o&z2sQ9d)Gj}Q%Jd{2!w%FZ+s%fFjbajxMm7Bmc47zaLLJ9?c5GKds1>(h zGCcwe#1oK>ZVHgOOeJc-Ci{Cc>X^0J`#+&deFe4B+t?lBypd1Y z2bIWR)B-b6&&|d-442qOCF)z&qE@~h_25oai4WTQ?Wlx)wq8T+{yV6N5;(JZJ{48D z98`s7ppN&)sCmvJ3kjRcG{$iwYHY-8)WoHzZ@3bvw%LLDb|+93I*-~Tov4Y1vQZey z1W*+!Mm@g@Ir63nIXLDp@|DbK^y*_q`y-|Iqe?U#Re=ihU_C0K7Szg)+Wtw@?!JIZ z;1+6Sy;x08OhP5-L2@*cP{+3tncM8aCE^Kmp)uS%$ z4qY!fOI$;|&(YFUb;Qd=EwP+D@Z&= zyzcnpCdF>0^)Rv43B{#FZFhFY<%VCRzm3qv0Wq%;i-;IvGoh=3s3GR7!$r}${ztV2 zpCq(Lnh1SLRdWgP1o1qvo+u- ztGkH?Lf0JP4MN*5ho~g(UaM*F-MX%s{0+BuxU1Z)rGqZU#|NmT0UXI@hrzEBqmX!yWEem-bs41o4nO$BH lEUNKLtS;{APp%G@JX>DedOT%ELex~JVeG)x&Aw;4{|C)jNy-2K delta 3118 zcmX}tdr*{B7{~ELg1B6j5JXTG5h-<-<*FhUrshOi;$_qdm1Lz=1mc#8x|F4om!wSv zCudBd8Jkfn8nZOhadJ}sz%0wlOmrD9Q!+NycpDq~{@7RF;n~l5-+kY6p7WgZE}xg) zD)s&x6}Z)K>>v_|8-d1rk4J2LaP$c`W-{8)iG?^68!#5za3FqVc>#NK{*UE74COo^ z!kB&-j{KQKKKROOoc@N%!!*7q!2Y-b!*B}@z@3%{u`lNxI30h%S(q8=@3;}uId4WM zo<;}WMa?Odhm~MD4q$vUnnn^A3NZ?+F&NjP64{LEpcNDGoaNuBj-r^BW*CP`GzH`E z3ClUit)>cpl&n%CkR|9`bLl6FhI{yo`7rHS96L{K%nWzp+kep08>bVBgUT8r* z{|UC?F|5Z$%<3lohLw1ZvR=RmG1Q+;U=nz`4-Usn%*0+;YPkee(hAE)RHgPHIhsQ_ z7|)<8^9L&N+o%L1_)uc0sPS@8&rKXa{ex)C=7LIFgzOVjf~r7`bz>81=B<|dQ3)SH zCTWhNDsmpR*4I!2-a##0Fxkr}RR4oe-#fh4g*;RTQ&1Vs!+BVSdcDpdZ>G758t_j{ z!EV&+n8Ho!umF|#T(n~y@@KYN*FQy7rUR9T_bLr_bPH9|1a^`JNVlAXjA7>D<5-O& za3@k-a|(IX{EB*8?xXIHA`4AqB(KsM60s67ZTuG*sF;)DkoxeVBDP68E4J z&!PtIw!R<17S|F?#^E>(AH#Z7BCV*(e2IFUJ1wtaX8;=#3-$hY@KR@RLz3O!!AxWf zvkH@O2l8i*@}U7cQHfqhmGGuzH>!e>N&Y=B6qQIe=Hs*0`9@TQcVjZ+n}am?Gne>K zY3}0-7&*k4Ik*_r@d?bt3z&srWGBa?605WHqMh^gsMmHcs^3efP1uD>><)S-(ukl= zN?-gfdAzaiZjz-OJ7^*_Kr~wO5m0N)0ur!7G zYd5xWK?5DJZajtBRGp~z`W|W~al`z-?FFcctVG^0(}WuEBUA!Mt?$pGCUymtXmG0k zd?2d-yj1ExhQ@3zXogLw3hYL8d=jya@{GpfU5*7qH#*X+7={Sk-1 z)csI1O~N3|LM>%3Dv=4O3C=>@=Uq-Cl*UHOX4G1?qGrAyb>m4?i7#5$yHE)QIsHbX zmLwT9&}h{C1*o;3hpJ!=s!|(}*PJ4z`3Fou&1e{AV7_HFDuEACYxxCIb#ocDhJkDh zRVop+SMpE;y@-rqs!;uYfV%%M^6Hx(afrtMmxg{oV$=Qq=bu6?K_#kGji^fOLpy$h zO6V$ThIg&=aI)4+?WhEDP?emD!8jY0;Cv)^vl_Fe(AZCd9L(>i%%U^>YnFjj*^I>; z^q?Jgp%Ocez3~capc}ruw)p<#wDO6*gpMu5X5U3yazM53KU?DXcQ{`|XxBYBUZbJf zRuSQZdSzBUzb@-ghc=0h4Zfm~c*inYn(Q0ICSoO_WqpPyCSE0Uusuz!uPtP9zbHwXDPiS($4&SEGQQo&WZy|K>2AOw>`9vVG zknh7nXs=1VSiC9joC0-%4uci|^v}AAhwAeN(@0-L7 zLa)^-LPx!?C@gbQBdrxg3=u{&5jqNq?S!^pHc?4DI9AhO-Fl9xd^WV7533C8Q(aqG zS>|z9wU3SK3e3)Nq`MsHS$5Z$-0Z9ot_+teWZLtN>FzpDwWp%oF|oMDooml, 2016 +# Alexander J. Salas B. , 2016 # Nuria Costa , 2016 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:51+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Spanish (Spain) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/es_ES/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,167 +19,71 @@ msgstr "" "Language: es_ES\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Encabezado" -msgstr[1] "Encabezados" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Formulario de categoría" -msgstr[1] "Formulario de categorias" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formulario" msgstr[1] "Formularios" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Formularios esperando validación" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formularios sin categoría" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Agregar una pregunta" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Editar una pregunta" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Sección" -msgstr[1] "Secciones " - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Objeto GLPI" -msgstr[1] "Objetos GLPI" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Requerido" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Mostrar vacío" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Uno por línea de listas" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Valores" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Uno por línea" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filtro" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Atributo" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Rango" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Validación adicional" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Expresión regular" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Especificar las condiciones de validación adicionales en la descripción de la pregunta para ayudar a los usuarios." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Mostrar campo " +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Siempre desplegado" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Oculto a menos" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "¿Está seguro de que quiere eliminar esta pregunta?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Desplegado a menos" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "¿Está seguro de que quiere eliminar esta sección?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Agregar sección" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "¿Está seguro de que quiere eliminar este destino?" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Editar sección" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Mostrar todos los Items" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Agregar destino" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "No se encontró ningún elemento" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "¡Una categoría ya existe con el mismo nombre! Error en la creación categoría." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Un campo requerido está vacío:" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Creador de Formulario" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Lista de formulario" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "¡Una cabecera ya existe para esta entidad! Sólo puede incluir un encabezado por entidad." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Creador de Formulario" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -189,332 +93,283 @@ msgstr "¡La pregunta ha sido guardada con éxito!" msgid "The question has been successfully updated!" msgstr "¡La pregunta ha sido actualizada con éxito!" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Respuesta" -msgstr[1] "Respuestas" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "¡Una cabecera ya existe para esta entidad! Sólo puede incluir un encabezado por entidad." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "¡Una categoría ya existe con el mismo nombre! Error en la creación categoría." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formularios esperando validación" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Encabezado" +msgstr[1] "Encabezados" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Formulario de categoría" +msgstr[1] "Formulario de categorias" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Objetivo" +msgstr[1] "Objetivos" + +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Tipo de accesos" + +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Acceso público" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Acceso privado" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Acceso restringido" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" msgstr "" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" msgstr "" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Un campo requerido está vacío:" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Agregar un encabezado" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "¡Existe una cabecera para una entidad matriz! Otra cabecera sobrescribirá la anterior." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Formulario de respuesta" msgstr[1] "Formulario de respuestas" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Solicitante" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Validador" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "esperando" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "aceptado" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "negado" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formulario aceptado y validado" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formulario guardado exitosamente." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Comentario" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Se requiere si se negó" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Denegado" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Aceptado" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "¡Comentario denegado es requerido!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "¡No se puede generar objetivos!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "¡El formulario ha sido guardado exitosamente!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Datos del formulario" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Descripción" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Página principal" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Acceso" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Todos los lenguajes" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Acceso público" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Acceso privado" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Acceso restringido" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Acceso directo a la página principal" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "¿Necesita ser validado?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" - -#: inc/form.class.php:528 -msgid "see all" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:545 -msgid "Popularity sort" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" msgstr "" -#: inc/form.class.php:549 -msgid "Alphabetic sort" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" msgstr "" -#: inc/form.class.php:710 -msgid "Please, describe your need here" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Mis últimos formularios (solicitante)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Destino" +msgstr[1] "Destinos" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Formulario no publicado aún" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Destino" +msgstr[1] "Destinos" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Todos mis formularios (solicitante)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Mis últimos formularios (validador)" - -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "No formulario esperando por validación" - -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Todos mis formularios (validador)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Eliminar" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Elija un validador" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Agregar destino" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "¡El nombre no puede estar vacío!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "¡Debes seleccionar validador!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Duplicado" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Formulario duplicado: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Formulario Transferido: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Objetivo" -msgstr[1] "Objetivos" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Tipo de accesos" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Agregar un encabezado" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "¡El tipo no puede estar vacío!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "¡Existe una cabecera para una entidad matriz! Otra cabecera sobrescribirá la anterior." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Sección" +msgstr[1] "Secciones " -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "El título es requerido" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "El formulario ha sido guardado" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Un formulario necesita ser validado" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "El formulario está rechazado" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "El formulario es aceptado" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "El formulario es eliminado" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formulario #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Formulario nombre" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Respuestas del formulario completas" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Comentario negado" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Vinculo de validación" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Solicitud #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "El formulario ha sido creado" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "Tu solicitud ha sido guardada" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Hola,\\nTu solicitud desde GLPI haber sido guardada con éxito con el número ##formcreator.request_id## y transmitida al equipo de asistencia.\\nTu puedes ver sus respuestas en el siguiente enlace:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Un formulario GLPI necesita ser validado" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Hola,\\n Un formulario desde GLPI necesita ser validado y usted ha sido elegido como el validador.\\nUsted puede acceder a él haciendo clic en este enlace:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Su formulario ha sido rechazado por el validador" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -522,288 +377,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Hola,\\nSentimos informarle que su formulario ha sido rechazado por el validador por el motivo a continuación:\\n##formcreator.validation_comment##\\n\\nUsted puede todavía modificarlo y volver a enviarlo haciendo clic en este enlace:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Su formulario ha sido aceptado por el validador" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Hola,\\nNos complace informarle de que su formulario ha sido aceptado por el validador.\\n Su solicitud será considerada pronto." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "Tu formulario ha sido eliminado por un administrador" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." msgstr "Hola,\\nLamentamos informarle de que su solicitud no puede ser considerada, y ha sido eliminado por un administrador." -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Pregunta" -msgstr[1] "Preguntas" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Eliminar" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "El título es requerido" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "El campo tipo es requerido" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "La sección es requerida" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "El campo valor es requerido:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "El campo descripción debe tener una descripción:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "¡No se puede recuperar la información de LDAP!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Destino" -msgstr[1] "Destinos" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Destino" -msgstr[1] "Destinos" - -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "¡El tipo no puede estar vacío!" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Respuesta" +msgstr[1] "Respuestas" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Entidad activa actual" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Entidad por defecto del solicitante" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Primera entidad dinámica del solicitante (orden alfabético)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Última entidad dinámica del solicitante (orden alfabético)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Entidad del formulario" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Entidad por defecto del validador" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Entidad específica " -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Entidad por defecto de una pregunta de respuesta del tipo de usuario" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Desde un objeto GLPI > Tipo de entidad pregunta respuesta" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Etiquetas desde preguntas" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Etiquetas específicas" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Etiquetas desde preguntas y etiquetas específicas" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Etiquetas desde preguntas o etiquetas específicas" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "es igual la respuesta a la pregunta" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "calculada a partir de la fecha de creación del ticket" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "calculada a partir de la respuesta del ticket" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Ticket objetivo" msgstr[1] "Tickets objetivos" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Editar un destino" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Título del ticket" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Pregunta" +msgstr[1] "Preguntas" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Pregunta tipo usuario" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Pregunta tipo entidad" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Etiquetas de ticket" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Etiquetas" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Agregar validación de mensaje como primer ticker de seguimiento" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Cancelar" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Actores del ticket" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Desde el solicitante" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Desde el validador" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Persona específica" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Persona desde la pregunta" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Grupo específico" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Grupo desde la pregunta" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Proveedor específico" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Proveedor desde la pregunta" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Formulario lleno" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "¡El título no puede estar vacío!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "¡La descripción no puede estar vacía!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Objeto GLPI" +msgstr[1] "Objetos GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Mostrar todos los Items" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "No se encontró ningún elemento" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Persona específica" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Grupo específico" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/category.class.php:39 +msgid "Knowbase category" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Requerido" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Agregar una pregunta" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Agregar sección" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "El campo tipo es requerido" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "La sección es requerida" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "El campo valor es requerido:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "El campo descripción debe tener una descripción:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "¡No se puede recuperar la información de LDAP!" + +#: inc/form.class.php:60 +msgid "Import forms" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/form.class.php:94 +msgid "Description" +msgstr "Descripción" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Página principal" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Acceso" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Todos los lenguajes" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Acceso directo a la página principal" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "¿Necesita ser validado?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "" +msgstr[1] "" + +#: inc/form.class.php:536 +msgid "see all" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "¿Está seguro de que quiere eliminar esta pregunta?" +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "¿Está seguro de que quiere eliminar esta sección?" +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "¿Está seguro de que quiere eliminar este destino?" +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Mis últimos formularios (solicitante)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Formulario no publicado aún" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Todos mis formularios (solicitante)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Mis últimos formularios (validador)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "No formulario esperando por validación" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Todos mis formularios (validador)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Elija un validador" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "¡Debes seleccionar validador!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Duplicado" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Formulario duplicado: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Formulario Transferido: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "" +msgstr[1] "" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Editar una pregunta" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Mostrar vacío" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Uno por línea de listas" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Valores" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Uno por línea" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtro" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Atributo" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Rango" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Validación adicional" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Expresión regular" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Especificar las condiciones de validación adicionales en la descripción de la pregunta para ayudar a los usuarios." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Mostrar campo " + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Siempre desplegado" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Oculto a menos" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Desplegado a menos" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Editar sección" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formularios sin categoría" diff --git a/locales/es_MX.mo b/locales/es_MX.mo index 17fac5645c45ed0647e7c8f784c3bbdcd10ae8f5..e9c51ee3c484d50542901463a394f11b430a00a3 100644 GIT binary patch delta 124 zcmbQm(!(-Ah4Iov)uL=eT_Z~cLjx-VLu~^?0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIWlIs;290|RXXAmH*zEH2RvDN4*M&PgoEFS1hb%Fjs5Q*bWN%+AToE6&bTuqi1@ XEY3(Ra;VTP$xG2oO5H5L$i)Z%pg$!2 delta 144 zcmeBSnZ+_eh4H~e)uMU>T|*NE14}DY6Kw+{0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIW7I&-i(1E4ye#Nra&kfOxA;+({i{30ub#GKTM#JrTERE3n(oW#<+#7YGl7)uW> Z>5!hAn3\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Spanish (Mexico) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/es_MX/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: es_MX\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/fr_FR.mo b/locales/fr_FR.mo index 405de8d7dbd6834e01a4eb3f60f409ece7815dff..a3b64885f615b48f9a9ee9772e55e87da0ef89f5 100644 GIT binary patch delta 6285 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 delta 4244 zcmYk-3vg7`9mnyrd60w{Lmo>45wZz^0C}(p0YV6n5G9BpLIa9G>XNJw2q7dJo|Xkg zi6kiXf>0_7T0nUgcM5fwM*6UbR_sjbVC@V+N(a*Phd{Bf=T!i=GI!wmRw)>E4nD>!C^C>R_ z@dD1k9*i;*XQKu>ih02sQ9BOv6o>fQOJj zbBdP;Y)751d$c*azRUZAZ=UTa3aVkZYRA z#9#$dP&3Rz{!9@sy6`kCz**Q6TkQ8=MOAbcaw&5F{V8ifpo!@~}-+YBS?|Ucp*IFj>ZEdCu)P;*N5+6a8 zwgUI!d|ZQ(eEBMFz2ZEpeBA$_1BC~ zqVD`7)P+Aso<#EvYE7@BPPl~{D3TX_Zy>6)g|-t=GoON5x|yh%*Pv#+26dfQTmNfx zbcctKNth2%H*^8Dd9K>tL7f=R2GQqE)NuxCfCAJ6CSoO4psp7{JzZx}H`I=LTrVTP zBYqP@{dB>6WDHY^F04ddz;D056IId^sDaO-E_5EXG-1?L1N5=Y!LFsmA-q2av+#M; zUOR?;_57cq!-h1MP$%3$%_Pwk{N+kVt!XZ*nckno237@wOU;|?(4#Ux$ ztX*D%Lva@}C-Wg{;49d*r_is?EjlVmC#sZ5)K#U-wk^Ri99N*0WDBYi2hoLXr~x`q zd!ZAx+2RHT&r3%y$CaqZ^$)1?M`Tj}adal}Y>dE-Sb)Dl-RZxv2Y!!Q`w+?$fqhUj zOGDk*6x8RQWE1~xsoi*U?9eQzjg3CmEGoQZK7tzX465`UsHMD)IxmWysPE^Xjvqwb_(Igv=6`{X*5WPOfM$$eTFb9USoCyx@eNM#lA< zCOYgF(~K(35!4L6!B7lk+A;!Fk!aLR+^8F?K$W@$M}RWNst(Vg|6zF*pNN zfu}G<&;MFFdTe%LI(~!+_$}&-4tAt&C>7&z6lyIeqc-DoOvKr!0qal|+=0<}6r=DY z#^DF3B|aw^-`t?1(#G-#Xdo9RVj*gcrlNN1BKvp~YP0P}-Owr24Y%9Jmr>{6L0vC) zWbpf$*u-%O@}p^vqhELU866jXi7b-|85MLm-p6q@YO^gv?fzDDVF0xxf59}ojZRD{ z44$8d8fZRh0_#x~-D4lWUr7B``VQWZu{@j_XgunIPohfo47zX!s)X;M2KpFd@k`V| z*HIPeRTTXF7=T)$Y;<7(vaQTaWJt5Ii27^bQ@p`GG1o8>2k@(+FJ>cEG?nPWt*9CQ z3U%QxP-}Y;d*VOQfi9vOQMFbQHHzEyf8lA=vZfI2Kl2P}AwME-5;eWgPk=c>RuRok zO*fTA9wK8&D^b%;?^EqJ>n`LrwX+n#F55 z(et>5%plcd7nw?Ee)Bx9?{@Wri{z#MV-iAsN=nFHq8*}boJl5-Ektb_d6@i?B$IjM z-gZ9+uaMPb1>qO&o;J;xU)YB)*&f1~WIEYS(#V74QKD8yCX)&>oAf1W+KO*c*Cc-p zJ^cvs|H&*Q{4#X?!%9N!uPX8)$t6D_JaBiLe%!iSDV^Hx1ALuKv5)6shTVS~edGYy zp_=OP-$262&&g(@wvq6AXtt6j@-m4dYKdeBSx45A2r`hU9VO3p^^949Pmzh_Rq_I% zislibwxDb4&{<4E$s}@bdyRu$_8X65BYA@yBRz=Pb0nHPMxG=ML~WBbGwx<`Rh75i zXG)>5(Z=OlRqqY#i=P`3>Zw}%igSV0;EcCgoY{d>&S?&-AZe_%BI&!p%gM9CtUC{+ zIy~06q*!@0|y44cJvyVljqLKD{#3-7mX;$a_3v?Gm{^?`(|O0+nwd6^_=2q z^yO4EcO8Al#ofK!yC0S;SmLRv4P49|8PZ#` zt@n8wG~eI9-8F3ptQ`77NVwOxw5h@J<-FdzY~j+H#+t@P?`l_5ool(Lwx-(4MvSp3Ur~J0Dj$2oiXT^R1;!@?=8dPO&eA#7>C!^WJzz-jr)uKgdp C-vcNB diff --git a/locales/fr_FR.po b/locales/fr_FR.po index dc16f6a80..7c2c994b8 100644 --- a/locales/fr_FR.po +++ b/locales/fr_FR.po @@ -1,19 +1,20 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # alexandre delaunay , 2016 # alexandre delaunay , 2016 # Jérémy MOREAU , 2014-2016 # Jérémy MOREAU , 2014 +# Johan Cwiklinski , 2016 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 08:00+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 16:13+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: French (France) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/fr_FR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,167 +22,71 @@ msgstr "" "Language: fr_FR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Entête" -msgstr[1] "Entêtes" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Catégorie de formulaire" -msgstr[1] "Catégories de formulaire" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formulaire" msgstr[1] "Formulaires" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Formulaire en attente de validation" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formulaire(s) sans catégorie" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Ajouter une question" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Modifier une question" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Section" -msgstr[1] "Sections" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Objet GLPI" -msgstr[1] "Objets GLPI" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Champ obligatoire" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Afficher une valeur vide" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Une par ligne pour les listes" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Valeurs" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Une par ligne" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filtre" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Attribut" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Taille" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Validation supplémentaire" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Expression rationnelle" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Indiquez les conditions de validation supplémentaire dans la description de la question pour aider les utilisateurs." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Aucun formulaire trouvé. Merci de choisir à la place un formulaire ci dessous" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Affichage du champ" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Une erreur est survenue pendant la recherche de formulaires" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Toujours visible" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Pas encore de formulaire dans cette catégorie" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Masqué par défaut, sauf si" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Êtes-vous sûr de vouloir supprimer cette question ?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Affiché par défaut, sauf si" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Êtes-vous sûr de vouloir supprimer cette section ?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Ajouter une section" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Êtes-vous sûr de vouloir supprimer la destination suivante :" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Modifier une section" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Afficher tous les éléments" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Ajouter une destination" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "ne correspond à aucun élément" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "Une catégorie existe déjà avec ce nom ! Création impossible." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Un champ obligatoire est vide :" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "Catalogue de service" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Formcreator" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Liste des formulaires" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Une entête existe déjà pour cette entité ! Vous ne pouvez avoir qu'une seule entête par entité." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Formcreator" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -191,332 +96,283 @@ msgstr "La question a été sauvegardée avec succès !" msgid "The question has been successfully updated!" msgstr "La question a été mise à jour avec succès !" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Réponse" -msgstr[1] "Réponses" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Une entête existe déjà pour cette entité ! Vous ne pouvez avoir qu'une seule entête par entité." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "Catégorie de la base de connaissance" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "Une catégorie existe déjà avec ce nom ! Création impossible." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "Assistance" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formulaire en attente de validation" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "Assistance de glpi" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Entête" +msgstr[1] "Entêtes" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "Catalogue de service simplifié" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Catégorie de formulaire" +msgstr[1] "Catégories de formulaire" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "Catalogue de service étendu" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Cible" +msgstr[1] "Cibles" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "Mode d'assistance" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Accès" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Un champ obligatoire est vide :" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Accès public / anonyme" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Utilisateur GLPI authentifié" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Droits restreints (profils)" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Lien vers le formulaire" + +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Merci d'activer le formulaire pour voir le lien" + +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Ajouter une entête" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Une entête existe pour une entité parente ! Ajouter une entête remplacera la précédente pour cette entité." + +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Formulaire saisi" msgstr[1] "Formulaires saisis" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Demandeur" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Valideur" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "en attente" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "accepté" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "refusé" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formulaire accepté par le valideur." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formulaire sauvegardé avec succès" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Commentaire" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Obligatoire en cas de refus" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Refuser" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Accepter" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Le commentaire de refus est obligatoire !" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Impossible de générer les destinations !" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Le formulaire a été sauvegardé avec succès !" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "Vous n'êtes pas validateur pour ces réponses" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Données du formulaire" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Description" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Page d'accueil" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Accès" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Toutes les langues" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Accès public / anonyme" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Utilisateur GLPI authentifié" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Droits restreints (profils)" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Accès direct depuis la page d'accueil" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Validation requise ?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "Formulaire par défaut dans le catalogue de service" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "Catégorie" -msgstr[1] "Catégories" - -#: inc/form.class.php:528 -msgid "see all" -msgstr "Voir tous" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "Tri par popularité" - -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "Tri alphabétique" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Assistance" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "Merci de décrire votre besoin ici" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Assistance de glpi" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Mes derniers formulaires (Demandeur)" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Catalogue de service simplifié" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Aucun formulaire saisi pour le moment" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Catalogue de service étendu" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Tous mes formulaires (Demandeur)" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Mode d'assistance" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Mes derniers formulaires (Valideur)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Destination" +msgstr[1] "Destinations" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Aucun formulaire en attente de validation" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Destination" +msgstr[1] "Destinations" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Tous mes formulaires (Valideur)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Supprimer" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Choisissez un valideur" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Ajouter une destination" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "Le nom ne doit pas être vide !" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Vous devez choisir un valideur !" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "COPIE" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Formulaire duppliqué : %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Formulaire transféré : %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Cible" -msgstr[1] "Cibles" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Accès" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "Lien vers le formulaire" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "Merci d'activer le formulaire pour voir le lien" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Ajouter une entête" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Le type ne doit pas être vide !" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Une entête existe pour une entité parente ! Ajouter une entête remplacera la précédente pour cette entité." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Section" +msgstr[1] "Sections" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "Requête" -msgstr[1] "Requêtes" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "L'intitulé est obligatoire" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Le formulaire a été sauvegardé" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Un formulaire est en attente de validation" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Le formulaire a été refusé" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Le formulaire a été accepté" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Le formulaire a été supprimé" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formulaire N°" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Nom du formulaire" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Formulaire complet" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Commentaire de refus" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Lien de validation" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Demande N°" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Une demande a été faite à partir d'un formulaire" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" -msgstr "\"Votre demande a été sauvegardée avec succès !" +msgstr "Votre demande a été sauvegardée avec succès !" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Bonjour,\\\\nVotre formulaire de demande a été sauvegardé avec succès sous le numéro ##formcreator.request_id## et transmis à l’équipe support.\\\\nVous pouvez visualiser vos réponses à l'adresse suivante :\\\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Un formulaire GLPI est en attente de validation" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Bonjour,\\nUn formulaire GLPI est en attente de validation et vous avez été choisi comme valideur.\\nVous pouvez accéder à celui-ci en cliquant sur le lien ci-dessous :\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "otre formulaire a été refusé par le valideur" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -524,288 +380,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Bonjour,\\\\nNous somme désolé de vous informer que votre demande a été refusé par le valideur pour les raisons suivantes :\\\\n##formcreator.validation_comment##\\\\n\\\\nVous pouvez toutefois modifier et renvoyer votre demande en cliquant sur le lien ci-dessous :\\\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Votre formulaire a été accepté par le valideur" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Bonjour,\\\\nNous avons le plaisir de vous informer que votre demande a été accepté par le valideur.\\\\nVotre demande vas être traitées prochainement." -#: inc/notificationtargetformanswer.class.php:121 -msgid "Your form has been deleted by an administrator" -msgstr "Votre formulaire a été supprimé par un administrateur" - -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "Bonjour,\\\\nNous sommes au regret de vous informer que votre demande ne peut être traitée et a été supprimée par un administrateur." - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Question" -msgstr[1] "Questions" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Supprimer" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "L'intitulé est obligatoire" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "Le type de champ est obligatoire" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "La section est obligatoire" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "La valeur du champ est obligatoire :" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Un champ de type description doit avoir une description :" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Récupération des données de l'annuaire LDAP impossible !" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Destination" -msgstr[1] "Destinations" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Destination" -msgstr[1] "Destinations" +#: inc/notificationtargetform_answer.class.php:121 +msgid "Your form has been deleted by an administrator" +msgstr "Votre formulaire a été supprimé par un administrateur" -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "Le type ne doit pas être vide !" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Bonjour,\\\\nNous sommes au regret de vous informer que votre demande ne peut être traitée et a été supprimée par un administrateur." + +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Réponse" +msgstr[1] "Réponses" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Entité active" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Entité par défaut du demandeur" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Première entité dynamique du demandeur (alphabétiquement)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Dernière entité dynamique du demandeur (alphabétiquement)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Entité du formulaire" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Entité par défaut du valideur" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Entité spécifique" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Entité par défaut d'un utilisateur issue d'une question" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Entité issue d'une question" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Étiquettes depuis les questions" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Étiquettes spécifiques" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Étiquettes depuis les questions et spécifiques" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Étiquettes depuis les questions ou spécifiques" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "égale à la réponse à la question" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "calculée à partir de la date de création du ticket" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "calculée à partir de la réponse à la question" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "Urgence à partir du gabarit ou Moyen" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "Égale à la réponse à la question" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Ticket cible" msgstr[1] "Tickets cible" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Modifier une destination" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Titre du ticket" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Question" +msgstr[1] "Questions" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Question de type \"utilisateur\"" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Question de type \"entité\"" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Étiquettes du ticket" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Étiquettes" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Ajouter le message de validation en premier suivi du ticket" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Annuler" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Acteurs du ticket" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Demandeur du formulaire" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Valideur du formulaire" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Personne spécifique" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Personne depuis la question" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Groupe spécifique" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Groupe depuis la question" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Fournisseur spécifique" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "Acteurs depuis la question" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Fournisseur depuis la question" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Formulaire complet" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "Le titre ne doit pas être vide !" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "La desciption ne doit pas être vide !" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Boutons radio" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Objet GLPI" +msgstr[1] "Objets GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Ce n'est pas un nombre:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "Le nombre suivant doit être supérieur à %d" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "Le nombre suivant doit être inférieur à %d" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "Le format spécifique ne correspond pas:" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Flottant" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "Ce n'est pas un entier:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Entier" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "Le texte est trop court (minimum de %d caractères):" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "Le teste est trop long (maximum de %d caractères):" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Zone de texte" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Texte" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "Ce n'est pas une adresse email valide:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "Acteur" +msgstr[1] "Acteurs" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Date et heure" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "Etiquette" +msgstr[1] "Etiquettes" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "LA question suivante requiert au moins %d réponses" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "La question suivante n'accepte pas plus de %d réponses" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Sélection multiple" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Un fichier requis est manquant:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "Sélection LDAP" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Sélection" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Boites à cocher" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "Demander une assistance" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "Mes demandes d'assistance" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "Réserver un matériel" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "Consulter les flux RSS" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Afficher tous les éléments" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "À valider" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "ne correspond à aucun élément" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "Fermé" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "Retour" +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Personne spécifique" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" -msgstr "Aucun formulaire trouvé. Merci de choisir à la place un formulaire ci dessous" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Groupe spécifique" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" -msgstr "Une erreur est survenue pendant la recherche de formulaires" +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Catégorie de la base de connaissance" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" -msgstr "Pas encore de formulaire dans cette catégorie" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Champ obligatoire" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Êtes-vous sûr de vouloir supprimer cette question ?" +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Ajouter une question" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Êtes-vous sûr de vouloir supprimer cette section ?" +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Ajouter une section" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Êtes-vous sûr de vouloir supprimer la destination suivante :" +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Le type de champ est obligatoire" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "La section est obligatoire" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "La valeur du champ est obligatoire :" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Un champ de type description doit avoir une description :" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Récupération des données de l'annuaire LDAP impossible !" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "Import de formulaires" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Description" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Page d'accueil" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Accès" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Toutes les langues" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Accès direct depuis la page d'accueil" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Validation requise ?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Formulaire par défaut dans le catalogue de service" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Catégorie" +msgstr[1] "Catégories" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "Voir tous" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Tri par popularité" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Tri alphabétique" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Merci de décrire votre besoin ici" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Mes derniers formulaires (Demandeur)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Aucun formulaire saisi pour le moment" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Tous mes formulaires (Demandeur)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Mes derniers formulaires (Valideur)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Aucun formulaire en attente de validation" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Tous mes formulaires (Valideur)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Choisissez un valideur" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Vous devez choisir un valideur !" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "COPIE" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Formulaire duppliqué : %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Formulaire transféré : %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "Formulaire importé avec succès depuis %s" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Requête" +msgstr[1] "Requêtes" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Modifier une question" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Afficher une valeur vide" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Une par ligne pour les listes" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Valeurs" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Une par ligne" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtre" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Attribut" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Taille" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Validation supplémentaire" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Expression rationnelle" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Indiquez les conditions de validation supplémentaire dans la description de la question pour aider les utilisateurs." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Affichage du champ" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Toujours visible" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Masqué par défaut, sauf si" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Affiché par défaut, sauf si" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Modifier une section" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formulaire(s) sans catégorie" diff --git a/locales/glpi.pot b/locales/glpi.pot index 00ab5e520..2b7878ae0 100644 --- a/locales/glpi.pot +++ b/locales/glpi.pot @@ -1,14 +1,14 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: GLPI - Resources plugin 1.5.0\n" +"Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,219 +18,158 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "" -msgstr[1] "" - -#: hook.php:58 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "" -msgstr[1] "" - -#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 inc/form.class.php:50 -#: inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 -#: inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" msgstr "" -#: ajax/question.php:28 -msgid "Edit a question" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" msgstr "" -#: ajax/question.php:64 inc/section.class.php:35 inc/targetticket.class.php:941 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "" -msgstr[1] "" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "" -msgstr[1] "" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" msgstr "" -#: ajax/question.php:178 -msgid "Show empty" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" msgstr "" -#: ajax/question.php:196 -msgid "One per line for lists" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" msgstr "" -#: ajax/question.php:223 -msgid "Values" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" msgstr "" -#: ajax/question.php:224 -msgid "One per line" +#: scripts/combobox.js.php:54 +msgid "Show All Items" msgstr "" -#: ajax/question.php:236 -msgid "Filter" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" msgstr "" -#: ajax/question.php:245 -msgid "Attribute" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 inc/fields/date-field.class.php:50 +#: inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" msgstr "" -#: ajax/question.php:269 -msgid "Range" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" msgstr "" -#: ajax/question.php:273 -msgid "Min" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" msgstr "" -#: ajax/question.php:279 -msgid "Max" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" msgstr "" -#: ajax/question.php:303 -msgid "Additional validation" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" msgstr "" -#: ajax/question.php:306 -msgid "Regular expression" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" msgstr "" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "" - -#: ajax/question.php:320 -msgid "Show field" -msgstr "" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "" - -#: ajax/section.php:23 inc/question.class.php:222 -msgid "Add a section" -msgstr "" - -#: ajax/section.php:25 -msgid "Edit a section" -msgstr "" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" +"An header already exists for this entity! You can have only one header per " +"entity." msgstr "" #: front/category.form.php:13 msgid "A category already exists with the same name! Category creation failed." msgstr "" -#: front/form_answer.form.php:37 front/form_answer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/form_answer.form.php:41 front/form_answer.form.php:46 -#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "" - -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "" - -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" msgstr "" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "" +msgstr[1] "" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "" +msgstr[1] "" -#: inc/answer.class.php:35 inc/targetticket.class.php:940 -msgid "Answer" -msgid_plural "Answers" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/category.class.php:39 -msgid "Knowbase category" +#: inc/form_profile.class.php:29 +msgid "Access type" msgstr "" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" msgstr "" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" msgstr "" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" msgstr "" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" +#: inc/form_profile.class.php:44 +msgid "Link to the form" msgstr "" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" msgstr "" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." msgstr "" -#: inc/form_answer.class.php:39 inc/issue.class.php:301 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "" -#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "" @@ -274,554 +213,722 @@ msgstr "" msgid "Refused comment is required!" msgstr "" -#: inc/form_answer.class.php:612 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "" -#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "" -#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 msgid "You are not the validator of these answers" msgstr "" -#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "" -#: inc/form.class.php:60 -msgid "Import forms" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:94 -msgid "Description" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:122 -msgid "Homepage" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" msgstr "" -#: inc/form.class.php:130 -msgid "Access" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 -#: inc/form.class.php:311 -msgid "All langages" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 -msgid "Public access" -msgstr "" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "" +msgstr[1] "" -#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 -msgid "Private access" -msgstr "" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "" +msgstr[1] "" -#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 -msgid "Restricted access" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" msgstr "" -#: inc/form.class.php:296 -msgid "Direct access on homepage" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" msgstr "" -#: inc/form.class.php:323 -msgid "Need to be validate?" +#: inc/target.class.php:119 inc/form.class.php:939 +msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:427 -msgid "Default form in service catalog" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" msgstr "" -#: inc/form.class.php:535 -msgid "Category" -msgid_plural "Categories" +#: inc/section.class.php:35 inc/targetticket.class.php:984 ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:536 -msgid "see all" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" msgstr "" -#: inc/form.class.php:554 -msgid "Popularity sort" +#: inc/notificationtargetform_answer.class.php:12 +msgid "The form as been saved" msgstr "" -#: inc/form.class.php:558 -msgid "Alphabetic sort" +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 +msgid "A form need to be validate" msgstr "" -#: inc/form.class.php:732 -msgid "Please, describe your need here" +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 +msgid "The form is refused" msgstr "" -#: inc/form.class.php:741 -msgid "My last forms (requester)" +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 +msgid "The form is accepted" msgstr "" -#: inc/form.class.php:751 -msgid "No form posted yet" +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 +msgid "The form is deleted" msgstr "" -#: inc/form.class.php:763 -msgid "All my forms (requester)" +#: inc/notificationtargetform_answer.class.php:49 +msgid "Form #" msgstr "" -#: inc/form.class.php:773 -msgid "My last forms (validator)" +#: inc/notificationtargetform_answer.class.php:50 +msgid "Form name" msgstr "" -#: inc/form.class.php:793 -msgid "No form waiting for validation" +#: inc/notificationtargetform_answer.class.php:54 +msgid "Full form answers" msgstr "" -#: inc/form.class.php:805 -msgid "All my forms (validator)" +#: inc/notificationtargetform_answer.class.php:55 +msgid "Refused comment" msgstr "" -#: inc/form.class.php:897 -msgid "Choose a validator" +#: inc/notificationtargetform_answer.class.php:56 +msgid "Validation link" msgstr "" -#: inc/form.class.php:941 inc/target.class.php:119 -msgid "The name cannot be empty!" +#: inc/notificationtargetform_answer.class.php:57 +msgid "Request #" msgstr "" -#: inc/form.class.php:1093 -msgid "You must select validator !" +#: inc/notificationtargetform_answer.class.php:96 +msgid "A form has been created" msgstr "" -#: inc/form.class.php:1318 -msgid "Duplicate" +#: inc/notificationtargetform_answer.class.php:97 +msgid "Your request has been saved" msgstr "" -#: inc/form.class.php:1490 -#, php-format -msgid "Form duplicated: %s" +#: inc/notificationtargetform_answer.class.php:98 +msgid "" +"Hi,\\nYour request from GLPI has been successfully saved with number " +"##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " +"see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "" -#: inc/form.class.php:1501 -#, php-format -msgid "Form Transfered: %s" +#: inc/notificationtargetform_answer.class.php:103 +msgid "A form from GLPI need to be validate" msgstr "" -#: inc/form.class.php:1686 -#, php-format -msgid "Forms successfully imported from %s" +#: inc/notificationtargetform_answer.class.php:104 +msgid "" +"Hi,\\nA form from GLPI need to be validate and you have been choosen as the " +"validator.\\nYou can access it by clicking onto this link:\\n##formcreator." +"validation_link##" msgstr "" -#: inc/form_profile.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "" -msgstr[1] "" +#: inc/notificationtargetform_answer.class.php:109 +msgid "Your form has been refused by the validator" +msgstr "" -#: inc/form_profile.class.php:29 -msgid "Access type" +#: inc/notificationtargetform_answer.class.php:110 +msgid "" +"Hi,\\nWe are sorry to inform you that your form has been refused by the " +"validator for the reason below:\\n##formcreator.validation_comment##\\n" +"\\nYou can still modify and resubmit it by clicking onto this link:" +"\\n##formcreator.validation_link##" msgstr "" -#: inc/form_profile.class.php:44 -msgid "Link to the form" +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 +msgid "Your form has been accepted by the validator" msgstr "" -#: inc/form_profile.class.php:52 -msgid "Please active the form to view the link" +#: inc/notificationtargetform_answer.class.php:116 +msgid "" +"Hi,\\nWe are pleased to inform you that your form has been accepted by the " +"validator.\\nYour request will be considered soon." msgstr "" -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" +#: inc/notificationtargetform_answer.class.php:121 +msgid "Your form has been deleted by an administrator" msgstr "" -#: inc/header.class.php:51 +#: inc/notificationtargetform_answer.class.php:122 msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:187 -msgid "Issue" -msgid_plural "Issues" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" msgstr[0] "" msgstr[1] "" -#: inc/notificationtargetformanswer.class.php:12 -msgid "The form as been saved" +#: inc/targetticket.class.php:21 +msgid "Current active entity" msgstr "" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 -msgid "A form need to be validate" +#: inc/targetticket.class.php:22 +msgid "Default requester user's entity" msgstr "" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 -msgid "The form is refused" +#: inc/targetticket.class.php:23 +msgid "First dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 -msgid "The form is accepted" +#: inc/targetticket.class.php:24 +msgid "Last dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 -msgid "The form is deleted" +#: inc/targetticket.class.php:25 +msgid "The form entity" msgstr "" -#: inc/notificationtargetformanswer.class.php:49 -msgid "Form #" +#: inc/targetticket.class.php:26 +msgid "Default entity of the validator" msgstr "" -#: inc/notificationtargetformanswer.class.php:50 -msgid "Form name" +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 +msgid "Specific entity" msgstr "" -#: inc/notificationtargetformanswer.class.php:54 -msgid "Full form answers" +#: inc/targetticket.class.php:28 +msgid "Default entity of a user type question answer" msgstr "" -#: inc/notificationtargetformanswer.class.php:55 -msgid "Refused comment" +#: inc/targetticket.class.php:29 +msgid "From a GLPI object > Entity type question answer" msgstr "" -#: inc/notificationtargetformanswer.class.php:56 -msgid "Validation link" +#: inc/targetticket.class.php:36 +msgid "Tags from questions" msgstr "" -#: inc/notificationtargetformanswer.class.php:57 -msgid "Request #" +#: inc/targetticket.class.php:37 +msgid "Specific tags" msgstr "" -#: inc/notificationtargetformanswer.class.php:96 -msgid "A form has been created" +#: inc/targetticket.class.php:38 +msgid "Tags from questions and specific tags" msgstr "" -#: inc/notificationtargetformanswer.class.php:97 -msgid "Your request has been saved" +#: inc/targetticket.class.php:39 +msgid "Tags from questions or specific tags" msgstr "" -#: inc/notificationtargetformanswer.class.php:98 -msgid "" -"Hi,\\nYour request from GLPI has been successfully saved with number " -"##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " -"see your answers onto the following link:\\n##formcreator.validation_link##" +#: inc/targetticket.class.php:45 +msgid "equals to the answer to the question" msgstr "" -#: inc/notificationtargetformanswer.class.php:103 -msgid "A form from GLPI need to be validate" +#: inc/targetticket.class.php:46 +msgid "calculated from the ticket creation date" msgstr "" -#: inc/notificationtargetformanswer.class.php:104 -msgid "" -"Hi,\\nA form from GLPI need to be validate and you have been choosen as the " -"validator.\\nYou can access it by clicking onto this link:\\n##formcreator." -"validation_link##" +#: inc/targetticket.class.php:47 +msgid "calculated from the answer to the question" msgstr "" -#: inc/notificationtargetformanswer.class.php:109 -msgid "Your form has been refused by the validator" +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" msgstr "" -#: inc/notificationtargetformanswer.class.php:110 -msgid "" -"Hi,\\nWe are sorry to inform you that your form has been refused by the " -"validator for the reason below:\\n##formcreator.validation_comment##\\n" -"\\nYou can still modify and resubmit it by clicking onto this link:" -"\\n##formcreator.validation_link##" +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" msgstr "" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1421 -msgid "Your form has been accepted by the validator" +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 +msgid "Target ticket" +msgid_plural "Target tickets" +msgstr[0] "" +msgstr[1] "" + +#: inc/targetticket.class.php:110 +msgid "Edit a destination" msgstr "" -#: inc/notificationtargetformanswer.class.php:116 -msgid "" -"Hi,\\nWe are pleased to inform you that your form has been accepted by the " -"validator.\\nYour request will be considered soon." +#: inc/targetticket.class.php:125 +msgid "Ticket title" msgstr "" -#: inc/notificationtargetformanswer.class.php:121 -msgid "Your form has been deleted by an administrator" +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "" +msgstr[1] "" + +#: inc/targetticket.class.php:324 +msgid "User type question" msgstr "" -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." +#: inc/targetticket.class.php:325 +msgid "Entity type question" msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:236 -#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 -msgid "Question" -msgid_plural "Questions" +#: inc/targetticket.class.php:389 +msgid "Ticket tags" +msgstr "" + +#: inc/targetticket.class.php:432 +msgid "Tags" +msgstr "" + +#: inc/targetticket.class.php:498 +msgid "Add validation message as first ticket followup" +msgstr "" + +#: inc/targetticket.class.php:512 +msgid "Cancel" +msgstr "" + +#: inc/targetticket.class.php:594 +msgid "Ticket actors" +msgstr "" + +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 +msgid "Form requester" +msgstr "" + +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 +msgid "Form validator" +msgstr "" + +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 +msgid "Person from the question" +msgstr "" + +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 +msgid "Group from the question" +msgstr "" + +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" + +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 +msgid "Supplier from the question" +msgstr "" + +#: inc/targetticket.class.php:988 +msgid "Full form" +msgstr "" + +#: inc/targetticket.class.php:1035 +msgid "The title cannot be empty!" +msgstr "" + +#: inc/targetticket.class.php:1041 +msgid "The description cannot be empty!" +msgstr "" + +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" msgstr[0] "" msgstr[1] "" -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" msgstr "" -#: inc/question.class.php:257 inc/section.class.php:178 -msgid "The title is required" +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" msgstr "" -#: inc/question.class.php:264 -msgid "The field type is required" +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" msgstr "" -#: inc/question.class.php:271 -msgid "The section is required" +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" msgstr "" -#: inc/question.class.php:280 inc/question.class.php:292 -#: inc/question.class.php:306 -msgid "The field value is required:" +#: inc/fields/float-field.class.php:38 +msgid "Float" msgstr "" -#: inc/question.class.php:320 -msgid "A description field should have a description:" +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" msgstr "" -#: inc/question.class.php:375 -msgid "Cannot recover LDAP informations!" +#: inc/fields/integer-field.class.php:38 +msgid "Integer" msgstr "" -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:125 -msgid "The type cannot be empty!" +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" msgstr "" -#: inc/targetticket.class.php:7 -msgid "Current active entity" +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" msgstr "" -#: inc/targetticket.class.php:8 -msgid "Default requester user's entity" +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" msgstr "" -#: inc/targetticket.class.php:9 -msgid "First dynamic requester user's entity (alphabetical)" +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" msgstr "" -#: inc/targetticket.class.php:10 -msgid "Last dynamic requester user's entity (alphabetical)" +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" msgstr "" -#: inc/targetticket.class.php:11 -msgid "The form entity" +#: inc/fields/select-field.class.php:51 +msgid "Select" msgstr "" -#: inc/targetticket.class.php:12 -msgid "Default entity of the validator" +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" msgstr "" -#: inc/targetticket.class.php:13 -msgid "Specific entity" +#: inc/wizard.class.php:67 inc/wizard.class.php:68 +msgid "Seek assistance" msgstr "" -#: inc/targetticket.class.php:14 -msgid "Default entity of a user type question answer" +#: inc/wizard.class.php:73 inc/wizard.class.php:74 +msgid "My requests for assistance" msgstr "" -#: inc/targetticket.class.php:15 -msgid "From a GLPI object > Entity type question answer" +#: inc/wizard.class.php:85 inc/wizard.class.php:86 +msgid "Book an asset" msgstr "" -#: inc/targetticket.class.php:22 -msgid "Tags from questions" +#: inc/wizard.class.php:94 inc/wizard.class.php:95 +msgid "Consult feeds" msgstr "" -#: inc/targetticket.class.php:23 -msgid "Specific tags" +#: inc/wizard.class.php:227 +msgid "To validate" msgstr "" -#: inc/targetticket.class.php:24 -msgid "Tags from questions and specific tags" +#: inc/wizard.class.php:239 +msgid "Closed" msgstr "" -#: inc/targetticket.class.php:25 -msgid "Tags from questions or specific tags" +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:31 -msgid "equals to the answer to the question" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:32 -msgid "calculated from the ticket creation date" +#: inc/category.class.php:39 +msgid "Knowbase category" msgstr "" -#: inc/targetticket.class.php:33 -msgid "calculated from the answer to the question" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" msgstr "" -#: inc/targetticket.class.php:40 -msgid "Equals to the answer to the question" +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" msgstr "" -#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 -msgid "Target ticket" -msgid_plural "Target tickets" +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:96 -msgid "Edit a destination" +#: inc/form.class.php:536 +msgid "see all" msgstr "" -#: inc/targetticket.class.php:111 -msgid "Ticket title" +#: inc/form.class.php:554 +msgid "Popularity sort" msgstr "" -#: inc/targetticket.class.php:310 -msgid "User type question" +#: inc/form.class.php:558 +msgid "Alphabetic sort" msgstr "" -#: inc/targetticket.class.php:311 -msgid "Entity type question" +#: inc/form.class.php:730 +msgid "Please, describe your need here" msgstr "" -#: inc/targetticket.class.php:375 -msgid "Ticket tags" +#: inc/form.class.php:739 +msgid "My last forms (requester)" msgstr "" -#: inc/targetticket.class.php:418 -msgid "Tags" +#: inc/form.class.php:749 +msgid "No form posted yet" msgstr "" -#: inc/targetticket.class.php:484 -msgid "Add validation message as first ticket followup" +#: inc/form.class.php:761 +msgid "All my forms (requester)" msgstr "" -#: inc/targetticket.class.php:498 -msgid "Cancel" +#: inc/form.class.php:771 +msgid "My last forms (validator)" msgstr "" -#: inc/targetticket.class.php:572 -msgid "Ticket actors" +#: inc/form.class.php:791 +msgid "No form waiting for validation" msgstr "" -#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 -#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 -#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 -msgid "Form requester" +#: inc/form.class.php:803 +msgid "All my forms (validator)" msgstr "" -#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 -#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 -#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 -msgid "Form validator" +#: inc/form.class.php:895 +msgid "Choose a validator" msgstr "" -#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 -#: inc/targetticket.class.php:815 -msgid "Specific person" +#: inc/form.class.php:1102 +msgid "You must select validator !" msgstr "" -#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 -#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 -#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 -msgid "Person from the question" +#: inc/form.class.php:1336 +msgid "Duplicate" msgstr "" -#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 -#: inc/targetticket.class.php:817 -msgid "Specific group" +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" msgstr "" -#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 -#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 -#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 -msgid "Group from the question" +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" msgstr "" -#: inc/targetticket.class.php:819 -msgid "Specific supplier" +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" msgstr "" -#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 -msgid "Supplier from the question" +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "" +msgstr[1] "" + +#: ajax/question.php:27 +msgid "Edit a question" msgstr "" -#: inc/targetticket.class.php:945 -msgid "Full form" +#: ajax/question.php:177 +msgid "Show empty" msgstr "" -#: inc/targetticket.class.php:992 -msgid "The title cannot be empty!" +#: ajax/question.php:195 +msgid "One per line for lists" msgstr "" -#: inc/targetticket.class.php:998 -msgid "The description cannot be empty!" +#: ajax/question.php:222 +msgid "Values" msgstr "" -#: inc/wizard.class.php:67 inc/wizard.class.php:68 -msgid "Seek assistance" +#: ajax/question.php:223 +msgid "One per line" msgstr "" -#: inc/wizard.class.php:73 inc/wizard.class.php:74 -msgid "My requests for assistance" +#: ajax/question.php:235 +msgid "Filter" msgstr "" -#: inc/wizard.class.php:85 inc/wizard.class.php:86 -msgid "Book an asset" +#: ajax/question.php:244 +msgid "Attribute" msgstr "" -#: inc/wizard.class.php:94 inc/wizard.class.php:95 -msgid "Consult feeds" +#: ajax/question.php:268 +msgid "Range" msgstr "" -#: inc/wizard.class.php:253 -msgid "To validate" +#: ajax/question.php:272 +msgid "Min" msgstr "" -#: inc/wizard.class.php:266 -msgid "Closed" +#: ajax/question.php:278 +msgid "Max" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" +#: ajax/question.php:302 +msgid "Additional validation" msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" +#: ajax/question.php:305 +msgid "Regular expression" msgstr "" -#: scripts/scripts.js.php:250 -msgid "No form found. Please choose a form below instead" +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." msgstr "" -#: scripts/scripts.js.php:268 -msgid "An error occured while querying forms" +#: ajax/question.php:319 +msgid "Show field" msgstr "" -#: scripts/scripts.js.php:304 -msgid "No form yet in this category" +#: ajax/question.php:328 +msgid "Always displayed" msgstr "" -#: scripts/scripts.js.php:402 -msgid "Are you sure you want to delete this question?" +#: ajax/question.php:329 +msgid "Hidden unless" msgstr "" -#: scripts/scripts.js.php:437 -msgid "Are you sure you want to delete this section?" +#: ajax/question.php:330 +msgid "Displayed unless" msgstr "" -#: scripts/scripts.js.php:474 -msgid "Are you sure you want to delete this destination:" +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" msgstr "" diff --git a/locales/hu_HU.mo b/locales/hu_HU.mo index 49834e6c5e486fcc2c6458aedd1d850ae4da3640..c3369acd1fc707a0aa532e79f2430a372daffe76 100644 GIT binary patch delta 5111 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 MmI9e~Yds+{?Z9oO>P%&n`My z89nW7yTwqRA?f7Tw#FR8ciZzpN$zCKSZt4ZI2n6m6W)k>u?N0qJ%Q~wK5xB@9Xa-- z8q*a!AwMRQ4}KLjd2Yp&Vm`kZhd1B@n1WAWcids!k6k$a0;k}2I1NLc-3M>LAjjJ< z509W9|3SS|4mYcVLF`WZW)PK|IWZZ%*nmm+2&yBSQ4iRInRwLt7wSP?UQ2J7hU#cG zrr}WQ4CGQ%kLti$R6ConGwqvQRCo#VDqfEVQ4c-!j0!yi-8jo+Y-|3IyUE7%RwxjTR%)B`J!KABq7eNCvf zupM>(Yq%Fbzz1<2Z}mI=fD7>`!+HWoc4Pcm1SXxkld(UBFobQe%36aO(mLw~)JW|{ z`e+W|P53ElWX_>FehJmVR6f+P98`P7sQX5BXZ#bXOy`7#b~dt3Oa*EL8tsKoqTYOu z^%Ycy4R~ySV+6ImK1Ft> zIg4uW7tF>hsO^}|MS9>kRL5tc50@Z6rrDl<9W^pvpgIygOGOX5h#Jy#R+1VBT1O*o zn3>oQ8!#7lAfszOL2fnQqjt-`sO!D-LN77^wL3~sQ!@rN^mig1h?;p+G_*@lQ_zGw z!>q#rxEu5EOH{*G?C*0~;+lf7*dNQVFFuIs$R5Mo$}OXAB!W}rqigp=?#d)$l~iI*`$ z`~Ph!TD{+(9&{0>V{(@3T-5mk$jh4}=))FkaxZs?`=Lg#2zi7lwU#66&@`c@VmoTe z_F{BAl@F+B=u#N3A}m6^VU4vBb>m9ZoNho3c{6IYA4aY2W2m`3jap=XT9a8|S`(S5 z5gd#qI6Ry2*ATAYgc^Jd^`=`;i|aY;g9njWGG~z=(~gtz#f2K`64a2Ep*lJn)sbq{ z)U7}*>TRg!yo^l0`K%A)ub!OagdUik`tKWO($v)LeIj(y^3dKeoa7*4ii)A1CTjbLODt=1o)wzC>on{D#`!UbY0IYHmi2 z&=}Mdl%qOWhkDc1s43Zk+FiR)*T0DL)f`5RT=W+zy3pfyhb{$m+#R(jd!a5Iff~{o zs3EPf=hsvK%!j&uD5hW;Y6@l}%gj_+H)AgCn>VTOlIDBtid_oaDab<2 zy&p9qlhKP0qvmiMs)0kODf=8fIE{=VDtewuEg43-5S1s$W)i)P4=pqmZ4DN7ywM7s zpfr%X;x+eU$Tf9UA17;x-mJAOrJ}`LPdbrygm;Ti=Q>pB=n^%LQc>?!v_-1pHTQqP zWz@C!){sqP1!*L=lQ3CCR9M4iG0}W$YEp?x6-gjI;w3dirHqUw{Wbq%sOU>YWh!}^ zXyp$gt)(-S^<+NTN@fz3N-~!?^+8Rv#VY1zxJV3e;?SdzX%4E_^(nt|mNLq`&vbB>`CXyztmT;c*^MFOR*I(beN*XO4~S&&)`O7W;z%f3VOO7+g|Rm>Vbv1Ui)6;h$2u zq`INHuGT*)+*n!SD+mOyUN=Ce*ApAo@3lmy xWB%w^B)^x(*%A2K*%X}PcneArUZ{$d7R>TE`$AKlmcn11yy6kDeZ`kN{{g!3fa?GN diff --git a/locales/hu_HU.po b/locales/hu_HU.po index 1c1ba9089..f3915baca 100644 --- a/locales/hu_HU.po +++ b/locales/hu_HU.po @@ -1,6 +1,6 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Jérémy MOREAU , 2014 @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Hungarian (Hungary) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/hu_HU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,167 +20,71 @@ msgstr "" "Language: hu_HU\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Fejléc" -msgstr[1] "Fejlécek" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Űrlap kategória" -msgstr[1] "Űrlap kategóriák" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Űrlap" msgstr[1] "Űrlapok" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Jóváhagyásra váró űrlapok" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Kategória nélküli űrlapok" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Kérdés hozzáadása" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Kérdés szerkesztése" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Szekció" -msgstr[1] "Szekciók" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "GLPI Objektum" -msgstr[1] "GLPI Objektumok" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Kötelező" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Üres megjelenítése" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Soronként egy érték a listákból" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Értékek" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Soronként egy" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Szűrő" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Attribútum" - -#: ajax/question.php:269 -msgid "Range" -msgstr "tartomány" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Min" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Max" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "További validálás" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Reguláris kifejezés" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "További jóváhagyási feltételek megadása a kérdés leírásában, melyek segíthetik a felhasználókt" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Mező megjelenítése" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Mindig megjelenik" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Rejtett amíg" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Biztosan törli ezt a kérdést?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Megjelenik amíg" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Biztosan törli ezt a szekciót?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Szekció hozzáadása" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Biztosan törli ezt a célt:" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Szekció szerkesztése" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Minden elem megjelenítése" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Cél hozzáadása" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "nincs egyező elem" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "Ezen a néven már létezik kategória! A kategória létrehozása sikertelen." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Egy kötelező mező üres:" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Űrlap Készítő" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Űrlap lista" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "A fejléc már létezik ebben a szervezetben, szervezetenként egy fejléc adható meg." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Űrlap Készítő" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -190,332 +94,283 @@ msgstr "A kérdés sikeresen mentve!" msgid "The question has been successfully updated!" msgstr "A kérdés sikeresen frissítve!" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Válasz" -msgstr[1] "Válaszok" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "A fejléc már létezik ebben a szervezetben, szervezetenként egy fejléc adható meg." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "Ezen a néven már létezik kategória! A kategória létrehozása sikertelen." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Jóváhagyásra váró űrlapok" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Fejléc" +msgstr[1] "Fejlécek" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Űrlap kategória" +msgstr[1] "Űrlap kategóriák" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Célpont" +msgstr[1] "Célpontok" + +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Elérés típus" + +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Publikus elérés" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Privát elérés" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Korlátozott elérés" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" msgstr "" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" msgstr "" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Egy kötelező mező üres:" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Fejléc hozzáadása" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Egy fejléc már létezik a szülő szervezetben, mely felül fogja írni a megadottat." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Űrlap válasz" msgstr[1] "Űrlap válaszok" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Kérelmező" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Jóváhagyó" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "várakozó" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "elfogadott" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "elutasított" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Az űrlapját elfogadta a jóváhagyó" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Az űrlap sikeresen mentve!" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Megjegyzés" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Elutasítás estén kötelező" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Elutasít" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Elfogad" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Az elutasítás megjegyzése kötelező!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Nem generálhatóak a célpontok!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Az űrlap sikeresen mentve!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Űrlap adatok" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Leírás" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Kezdőképernyő" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Elérés" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Minden nyelv" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Publikus elérés" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Privát elérés" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Korlátozott elérés" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Közvetlen elérés a kezdőképernyőről" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Szükséges jóváhagyás?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" - -#: inc/form.class.php:528 -msgid "see all" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:545 -msgid "Popularity sort" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" msgstr "" -#: inc/form.class.php:549 -msgid "Alphabetic sort" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" msgstr "" -#: inc/form.class.php:710 -msgid "Please, describe your need here" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Utolsó űrlapjaim (kérelmező)" - -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Még nincs beküldött űrlap" - -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Minden űrlapom (kérelmező)" - -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Utolsó űrlapjaim (jóváhagyó)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Cél" +msgstr[1] "Célok" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Nincs jóváhagyásra váró űrlap" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Célok" +msgstr[1] "Célok" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Minden űrlapom (jóváhagyó)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Törlés" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Válasszon jóváhagyót" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Cél hozzáadása" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "A név nem lehet üres" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Ki kell választania a jóváhagyót !" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Duplikált" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Duplikált űrlap: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Áthelyezett űrlap: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Célpont" -msgstr[1] "Célpontok" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Elérés típus" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Fejléc hozzáadása" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "A típus nem lehet üres!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Egy fejléc már létezik a szülő szervezetben, mely felül fogja írni a megadottat." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Szekció" +msgstr[1] "Szekciók" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "A cím kötelező" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Az űrlap mentve" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Egy űrlapot jóvá kell hagynia" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Az űrlap elutasítva" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Az űrlap elfogadva" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Az űrlap törölve" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Űrlap #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Űrlap neve" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "A teljes űrlap válaszai" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Elutasító megjegyzés" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Jóváhagyó link" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Kérelem #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Az űrlap létrehozva" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "A kérelme mentve" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Üdvözlöm,\\nA kérelme a GLPI-ben mentésre került, a száma:##formcreator.request_id##. Kérelmét továbbítottuk a helpdesk csapatnak.\\nA válaszokat az alábbi linken nézheti meg:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Egy űrlapot jóvá kell hagynia a GLPI-ben" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Üdvözlöm,\\nEgy űrlapot jóvá kell hagynia a GLPI-ben, melyen önt választották jóváhagyónak.\\nElérheti az alábbi linkre kattintva:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Az űrlapját visszautasította a jóváhagyó" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -523,288 +378,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Üdvözlöm,\\nSajnálattal közöljük, hogy az Ön űrlapját elutasította a jóváhagyó. Az elutasítás oka:\\n##formcreator.validation_comment##\\nMódosíthatja, és újra elküldheti az alábbi linkre kattintva:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Az űrlapját elfogadta a jóváhagyó" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Üdvözlöm,\\nÖrömmel értesítjük, hogy az űrlapját elfogadta a jóváhagyó.\\nKérelme hamarosan mérlegelésre kerül." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "Az űrlapját törölte egy Adminisztrátor" -#: inc/notificationtargetformanswer.class.php:122 +#: inc/notificationtargetform_answer.class.php:122 msgid "" "Hi,\\nWe are sorry to inform you that your request cannot be considered and " "has been deleted by an administrator." -msgstr "Üdvözlöm,\\nSajnálattal közöljük, hogy az Ön kérelme nem mérlegelhető és egy Adminisztrátor törölte." - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Kérdés" -msgstr[1] "Kérdések" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Törlés" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "A cím kötelező" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "A mező típus kötelező" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "A szekció kötelező" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "A mező értéke kötelező:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "A leírás mezőnek tartalmaznia kell a leírást:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Az LDAP adatok nem kérhetők le!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Cél" -msgstr[1] "Célok" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Célok" -msgstr[1] "Célok" +msgstr "Üdvözlöm,\\nSajnálattal közöljük, hogy az Ön kérelme nem mérlegelhető és egy Adminisztrátor törölte." -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "A típus nem lehet üres!" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Válasz" +msgstr[1] "Válaszok" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Jelenlegi aktív szervezet" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Alapértelmezett kérelmező felhasználó szervezete" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Első dinamikus kérelmező felhasználó szervezete (ABC)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Utolsó dinamikus kérelmező felhasználó szervezete (ABC)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Az űrlap szervezete" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Jóváhagyó alapértelmezett szervezete" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Különleges szervezet" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "A felhasználó típus kérdés válaszából az alapértelmezett szervezet" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "A GLPI objektum > szervezet típus kérdés válaszából " -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Címkék a kérdésből" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Különleges címkék" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Címkék a kérdésekből és különleges címkék" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Címkék a kérdésekből vagy különleges címkék" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "Megegyezik a kérdésre adott válasszal" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "A bejelentés létrehozási dátumából számítva" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "A kérdés válaszából számítva" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Cél bejelentés" msgstr[1] "Cél bejelentések" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Cél szerkesztése" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Bejelentés tárgya" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Kérdés" +msgstr[1] "Kérdések" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Felhasználó típus kérdés" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Szervezet típus kérdés" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Bejelentés címkék" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Címkék" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Az érvényesítő üzenet kerüljön a bejelentés első utótevekenységébe" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Mégse" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Bejelentés szerzők" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Űrlap kérelmező" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Űrlap jóváhagyó" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Különleges személy" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Személy a kérdésből" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Különleges csoport" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Csoport a kérdésből" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Különleges cég" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Cég a kérdésből" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Teljes űrlap" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "A cím nem lehet üres!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "A Leírás nem lehet üres!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Rádiógombok" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "GLPI Objektum" +msgstr[1] "GLPI Objektumok" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Ez nem szám:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "A következő számnak nagyobbnak kell lennie mint %d: " + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "A következő számnak kisebbnek kell lennie mint %d: " + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "A megadott formátum nem illeszkedik:" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Float" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "Ez nem egész szám:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Egész szám" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "A szöveg túl rövid (minimum %d karakter):" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "A szöveg túl hosszú (maximum %d karakter):" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Szöveg terület" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Szöveg" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "Nem érvényes e-mail cím:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Időpont" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "A következő kérdésre legalább %d választ kell adni" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "A következő kérdésre nem adható több válasz, mint %d" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Többszörös kiválasztás" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Egy kötelező fájl hiányzik:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "LDAP Érték" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Saját legördülő lista" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Jelölőnégyzetek" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Minden elem megjelenítése" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "nincs egyező elem" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Különleges személy" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Különleges csoport" + +#: inc/category.class.php:39 +msgid "Knowbase category" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Kötelező" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Kérdés hozzáadása" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Szekció hozzáadása" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "A mező típus kötelező" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "A szekció kötelező" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "A mező értéke kötelező:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "A leírás mezőnek tartalmaznia kell a leírást:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Az LDAP adatok nem kérhetők le!" + +#: inc/form.class.php:60 +msgid "Import forms" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/form.class.php:94 +msgid "Description" +msgstr "Leírás" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Kezdőképernyő" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Elérés" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Minden nyelv" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Közvetlen elérés a kezdőképernyőről" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Szükséges jóváhagyás?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "" +msgstr[1] "" + +#: inc/form.class.php:536 +msgid "see all" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Biztosan törli ezt a kérdést?" +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Biztosan törli ezt a szekciót?" +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Biztosan törli ezt a célt:" +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Utolsó űrlapjaim (kérelmező)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Még nincs beküldött űrlap" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Minden űrlapom (kérelmező)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Utolsó űrlapjaim (jóváhagyó)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Nincs jóváhagyásra váró űrlap" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Minden űrlapom (jóváhagyó)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Válasszon jóváhagyót" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Ki kell választania a jóváhagyót !" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Duplikált" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Duplikált űrlap: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Áthelyezett űrlap: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "" +msgstr[1] "" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Kérdés szerkesztése" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Üres megjelenítése" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Soronként egy érték a listákból" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Értékek" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Soronként egy" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Szűrő" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Attribútum" + +#: ajax/question.php:268 +msgid "Range" +msgstr "tartomány" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Max" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "További validálás" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Reguláris kifejezés" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "További jóváhagyási feltételek megadása a kérdés leírásában, melyek segíthetik a felhasználókt" + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Mező megjelenítése" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Mindig megjelenik" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Rejtett amíg" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Megjelenik amíg" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Szekció szerkesztése" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Kategória nélküli űrlapok" diff --git a/locales/it_IT.mo b/locales/it_IT.mo index 383960f0edd5061ffd2892540df89d16bae93cf5..86a194c98f0b829fc95eeedeac6359e7c07b250d 100644 GIT binary patch literal 3354 zcmZXVO^h7H6~~L%gfNgm9KOO=$_a^gF}*Xh0WTS65zBgw2YKUVy$}IHsAjshx1gu1 z>8jrGI0_O;q#O)HLU7^$QRD+MNQojv5r-ravT}4H<&*dgoH_P#Dq7Eo_T{nr&j^ud?*;Dhq}y+V8y{6pZM!Ed7fSMVF)Kf$kq zAA;9{AA{F{pM%$f*IZezyB)k5{e$4Q!27_fz&>~l_$bKrPlMc_ft3FO$n#$YTi|OT z&v_HP1$+m*13V8>{zoA1@jvh;u!YTBw;!b39!R;5fL{Zj0IB~VFc0G|fHc9c1J8ip zM*lZ~Z-dn1eURt;1N;v7ACTugh@W^P@OOddz`w(Xe+>PfVKbWImmu{&1Kt3h4SWyexfej*<043V z{2!#B_d*#o#Z4gnCPAKmFG#;FhWS27xhDg+Ky#(SXev1$FdKaYM{uKBgcpLhE0dEEW4N{-aLVpjO z$aC%lx$Xgw@}C50Hx2Tf5r{3~7a)G(6?~}I8zAS;fsCuah4Bj@Lt3r4Lx{LWQbTp`BRxo_JTjyBSp4=^*Oes6RyQpzbb*(76}&2dK0K z?T_>z4xsYxv>)H>ov5_wwCqQNK9i{QDRY!q8V+^tD>x^X;#evfYv)a-ys=prdA{UO z({*}S_tI3RDoa$Nu{X`P)IfVPl+G3qnU2-O$=J9&RTCYHrOb_W5rFmH7iLg;EtZwn zi7h76hJmzYI~wWCizC_%3zJvJ9hr)fWtM8FyAm4@eH-mUf2!V5lX@I@)E1-ac`RJx}Z8eS$SqHEfbT;NYa(VI%rz!I!ACvt1dBd^iY|&Xv6koYwg5FRK*px zM@JAkJvra$9*Vl%X#PjC+v#<>2Rq$P2MeQhy={2R&bo!DgLMnCd#E=*f3SnnIu5r* z8wJ8MWw1geQ^phdW0$MZgLr2qHD0+n;~&7%EGgmjXhW+}PxfIRqcSV30H3Og;Rdp_-FbX?b+69e|2TY zR^7QyYuRQVuQl43y;a&_gbd-LB|r$p@6cAiOC{{HtTd}#j16%taOM*1phkH z6b96^fdfOTvrUFmO$+I-PIWfqy87fsB!tIi(+pL8kD%=(gHvsp?+R)YmuY|zA=_yr zVy28THDQ4)rh3*Jru`-#8=5VxH|=N+LAsH29NB=Ynt@7`k$5%=mUEahAt_F;MGau7 z?6jIDMWe)tB+(u=#cDpi&^Jwg32DM1!mz2D?<3rBaxHUL$B3Pkye3|PfB!AHYw#z^ z4Q+;VkchsNE+0$18BOnkbZLfLMkBv^Ju5DoYZ4}>GTUTKb!o32XZ%3@;NWe|m{M}P zj+#slnFXQeCE>*soZH-1X%ut3Wr0)S*>%K2iTGM^(*&wzfqzgeW%M;lixY!EY7*uT zW05~=bJav()Oi#}hx;6p>uH8Y70GZ~Y5h(&g|9}r-N~++O^B`1D_)(qqNue(Yg@y< L9#6-JCJ@9INk>BZ delta 173 zcmbOwHIv2So)F7a1|VPrVi_P-0b*t#)&XJ=umIxwKuJp=4N?OGlQ*%)^BU+HnkX1p zTA7+?8yHQN, 2016-2017 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2017-01-27 16:22+0000\n" +"Last-Translator: Giudy \n" "Language-Team: Italian (Italy) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/it_IT/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,95 +18,95 @@ msgstr "" "Language: it_IT\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Intestazione" +msgstr[1] "Intestazioni" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Categoria del modulo" +msgstr[1] "Categorie dei moduli" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" msgid_plural "Forms" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Modulo" +msgstr[1] "Moduli" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" -msgstr "" +msgstr "Moduli in attesa di validazione" #: ajax/homepage_forms.php:52 msgid "Forms without category" -msgstr "" +msgstr "Moduli senza categoria" #: ajax/question.php:27 inc/question.class.php:212 msgid "Add a question" -msgstr "" +msgstr "Aggiungi una domanda" #: ajax/question.php:28 msgid "Edit a question" -msgstr "" +msgstr "Modifica una domanda" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Sezione" +msgstr[1] "Sezioni" #: ajax/question.php:91 msgid "GLPI object" msgid_plural "GLPI objects" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Oggetto di GLPI" +msgstr[1] "Oggetti di GLPI" #: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 msgid "Required" -msgstr "" +msgstr "Obbligatorio" #: ajax/question.php:178 msgid "Show empty" -msgstr "" +msgstr "Mostra i vuoti" #: ajax/question.php:196 msgid "One per line for lists" -msgstr "" +msgstr "Uno per linea per le liste" #: ajax/question.php:223 msgid "Values" -msgstr "" +msgstr "Valori" #: ajax/question.php:224 msgid "One per line" -msgstr "" +msgstr "Uno per linea" #: ajax/question.php:236 msgid "Filter" -msgstr "" +msgstr "Filtro" #: ajax/question.php:245 msgid "Attribute" -msgstr "" +msgstr "Attributo" #: ajax/question.php:269 msgid "Range" -msgstr "" +msgstr "Intervallo" #: ajax/question.php:273 msgid "Min" -msgstr "" +msgstr "Min" #: ajax/question.php:279 msgid "Max" -msgstr "" +msgstr "Max" #: ajax/question.php:303 msgid "Additional validation" @@ -113,7 +114,7 @@ msgstr "" #: ajax/question.php:306 msgid "Regular expression" -msgstr "" +msgstr "Espressione regolare" #: ajax/question.php:313 msgid "" @@ -123,55 +124,55 @@ msgstr "" #: ajax/question.php:320 msgid "Show field" -msgstr "" +msgstr "Mostra il campo" #: ajax/question.php:329 msgid "Always displayed" -msgstr "" +msgstr "Mostra sempre" #: ajax/question.php:330 msgid "Hidden unless" -msgstr "" +msgstr "Nascondi se" #: ajax/question.php:331 msgid "Displayed unless" -msgstr "" +msgstr "Mostra se" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" -msgstr "" +msgstr "Aggiungi una sezione" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" -msgstr "" +msgstr "Modifica una sezione" #: ajax/target.php:8 inc/target.class.php:85 msgid "Add a destination" -msgstr "" +msgstr "Aggiungi una destinazione" #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 #: front/wizardfeeds.php:11 front/wizard.php:13 msgid "Service catalog" -msgstr "" +msgstr "Catalogo dei servizi" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" -msgstr "" +msgstr "Creatore di moduli" #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" -msgstr "" +msgstr "Lista dei moduli" #: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" @@ -187,11 +188,11 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Risposta" +msgstr[1] "Risposte" #: inc/category.class.php:39 msgid "Knowbase category" @@ -199,11 +200,11 @@ msgstr "" #: inc/entityconfig.class.php:65 msgid "Helpdesk" -msgstr "" +msgstr "Assistenza" #: inc/entityconfig.class.php:74 msgid "GLPi's helpdesk" -msgstr "" +msgstr "Assistenza GLPI" #: inc/entityconfig.class.php:75 msgid "Service catalog simplified" @@ -215,206 +216,219 @@ msgstr "" #: inc/entityconfig.class.php:79 msgid "Helpdesk mode" -msgstr "" +msgstr "Modalità Assistenza" #: inc/field.class.php:98 scripts/forms-validation.js.php:11 msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Modulo risposta" +msgstr[1] "Modulo risposte" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" -msgstr "" +msgstr "Richiedente" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" -msgstr "" +msgstr "Validatore" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" -msgstr "" +msgstr "in attesa" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" -msgstr "" +msgstr "accettato" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" -msgstr "" +msgstr "rifiutato" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" -msgstr "" +msgstr "Commento" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" -msgstr "" +msgstr "Rifiuta" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" -msgstr "" +msgstr "Accetta" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 -msgid "Description" +#: inc/form.class.php:60 +msgid "Import forms" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:94 +msgid "Description" +msgstr "Descrizione" + +#: inc/form.class.php:122 msgid "Homepage" -msgstr "" +msgstr "Homepage" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" -msgstr "" +msgstr "Accesso" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" -msgstr "" +msgstr "Tutte le lingue" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Categoria" +msgstr[1] "Categorie" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" -msgstr "" +msgstr "vedi tutti" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" -msgstr "" +msgstr "Ordinamento per popolarità" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" -msgstr "" +msgstr "Ordinamento alfabetico" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" -msgstr "" +msgstr "Descrivete la vostra necessità" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" -msgstr "" +msgstr "Ultimi moduli (richiedente)" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" -msgstr "" +msgstr "Ultimi moduli (validatore)" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +442,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +535,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +555,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +567,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +604,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +672,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +804,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/lv_LV.mo b/locales/lv_LV.mo index 9366bb4d644d9d65e6678ce7beed318788609b13..a30c16352977369ffe825c3ba2a61075b7a01c46 100644 GIT binary patch literal 12714 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 delta 154 zcmZ3LyqCq|o)F7a1|VPrVi_P-0b*t#)&XJ=umECaCI$veAPrIj1CtYEV+71}4GnY+ zO%x0)txQd{4U8tAk(J, 2016 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:51+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Latvian (Latvia) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/lv_LV/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,805 +18,935 @@ msgstr "" "Language: lv_LV\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "" +msgstr[0] "Formas" +msgstr[1] "Forma" +msgstr[2] "Formas" -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" msgstr "" -#: ajax/question.php:28 -msgid "Edit a question" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" msgstr "" -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Šajā kategorija nav pievienotas formas" -#: ajax/question.php:178 -msgid "Show empty" -msgstr "" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Vai jūs tiešām gribat izdzēst šo jautājumu?" -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Vai jūs tiešām gribat izdzēst šo sadaļu?" -#: ajax/question.php:223 -msgid "Values" -msgstr "" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Vai jūs tiešām gribat izdzēst šo mērķi:" -#: ajax/question.php:224 -msgid "One per line" -msgstr "" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Parādīt visas vienības" -#: ajax/question.php:236 -msgid "Filter" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" msgstr "" -#: ajax/question.php:245 -msgid "Attribute" -msgstr "" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Nepieciešamais lauks tukšs:" -#: ajax/question.php:269 -msgid "Range" -msgstr "" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" +msgstr "Servisu katalogs" -#: ajax/question.php:273 -msgid "Min" -msgstr "" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" +msgstr "Formas saraksts" -#: ajax/question.php:279 -msgid "Max" -msgstr "" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Formas Veidotājs" -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" +msgstr "Jautājums veiksmīgi saglabāts!" -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" +msgstr "Jautājums sekmīgi atjaunots!" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "" - -#: ajax/question.php:320 -msgid "Show field" -msgstr "" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "" - -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "" - -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Galvene šai nodaļai jau eksistē! Jūs varat pievienot tikai vienu galveni katrai nodaļai." #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." -msgstr "" - -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "" +msgstr "Kategorija ar ievadīto virsrakstu jau eksistē! Kategorijas izveide noraidīta." -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formas gaida apstiprinājumu" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Galvenes" +msgstr[1] "Galvene" +msgstr[2] "Galvenes" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Formas kategoriju" +msgstr[1] "Formas kategorija" +msgstr[2] "Formas kategorijas" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Mērķi" +msgstr[1] "Mērķis" +msgstr[2] "Mērķi" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Piekļuves tips" -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Publiska pieeja" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Privāta pieeja" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Ierobežota pieeja" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Saite uz formu" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Lūdzu aktivizējiet formu lai parādīt saiti" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Pievienot galveni" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Formas atbildes" +msgstr[1] "Formas atbilde" +msgstr[2] "Formas atbildes" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" -msgstr "" +msgstr "Pieteicējs" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" -msgstr "" +msgstr "Apstiprinātājs" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" -msgstr "" +msgstr "gaidīts" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" -msgstr "" +msgstr "akceptēts" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" -msgstr "" +msgstr "noraidīts" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." -msgstr "" +msgstr "Formu akceptēja apstiprinātājs." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." -msgstr "" +msgstr "Forma saglabāta veiksmīgi." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" -msgstr "" +msgstr "Komentārs" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" -msgstr "" +msgstr "Nepieciešams ja noraidīts" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" -msgstr "" +msgstr "Noraidīt" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" -msgstr "" +msgstr "Akceptēt" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" -msgstr "" +msgstr "Nepieciešams noraidīšanas komentārs!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" -msgstr "" +msgstr "Nevar ģenerēt mērķi" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" -msgstr "" - -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 -msgid "Form data" -msgstr "" - -#: inc/form.class.php:92 -msgid "Description" -msgstr "" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "" +msgstr "Forma veiksmīgi saglabāta!" -#: inc/form.class.php:128 -msgid "Access" -msgstr "" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: inc/form.class.php:528 -msgid "see all" -msgstr "" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "" +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 +msgid "Form data" +msgstr "Formas dati" -#: inc/form.class.php:549 -msgid "Alphabetic sort" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" msgstr "" -#: inc/form.class.php:710 -msgid "Please, describe your need here" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" msgstr "" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Vienkāršots servisu katalogs" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Izvērst servisu katalogs" -#: inc/form.class.php:741 -msgid "All my forms (requester)" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" msgstr "" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Mērķis" +msgstr[1] "Mērķis" +msgstr[2] "Mērķi" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Mērķis" +msgstr[1] "Mērķis" +msgstr[2] "Mērķi" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Izdzēst" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Pievienot mērķi" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" -msgstr "" - -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" +msgstr "Virsraksts nevar būt tukšs!" -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Tips nevar būt tukšs!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "" +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Sadaļas" +msgstr[1] "Sadaļa" +msgstr[2] "Sadaļas" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Virsraksts ir nepieciešams" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" -msgstr "" +msgstr "Forma saglabāta" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" -msgstr "" +msgstr "Formai jābūt apstiprinātai" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" -msgstr "" +msgstr "Forma noraidīta" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" -msgstr "" +msgstr "Forma akceptēta" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" -msgstr "" +msgstr "Forma izdzēsta" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" -msgstr "" +msgstr "Forma #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" -msgstr "" +msgstr "Formas virsraksts" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" -msgstr "" +msgstr "Pilnas formas atbildes" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" -msgstr "" +msgstr "Noraidīts komentārs" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" -msgstr "" +msgstr "Apstiprināšanas links" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" -msgstr "" +msgstr "Pieprasījums #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" -msgstr "" +msgstr "Forma izveidota" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" -msgstr "" +msgstr "Jūsu pieprasījums saglabāts" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" -msgstr "" +msgstr "Sveicināti,\\nJūsu pieprasījums no GLPI veiksmīgi saglabāts ar numuru ##formcreator.request_id## un nodots helpdesk komandai.\\nJūs varat sekot līdzi sekojošā vietnē:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" -msgstr "" +msgstr "Formai no GLPI jābūt apstiprinātai" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" -msgstr "" +msgstr "Sveicināti,\\nFormai no GLPI jābūt apstiprinātai un jūs tika izvēlēti kā apstiprinātājs.\\nJūs varat piekļūt tam sekojošā vietnē:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" -msgstr "" +msgstr "Jūsu formu noraidījis apstiprinātājs" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" -"Hi,\\nWe are sorry to inform you that your form has been refused by the " -"validator for the reason " -"below:\\n##formcreator.validation_comment##\\n\\nYou can still modify and " -"resubmit it by clicking onto this link:\\n##formcreator.validation_link##" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 -msgid "Your form has been accepted by the validator" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:116 -msgid "" -"Hi,\\nWe are pleased to inform you that your form has been accepted by the " -"validator.\\nYour request will be considered soon." -msgstr "" - -#: inc/notificationtargetformanswer.class.php:121 -msgid "Your form has been deleted by an administrator" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "" - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "" +"Hi,\\nWe are sorry to inform you that your form has been refused by the " +"validator for the reason " +"below:\\n##formcreator.validation_comment##\\n\\nYou can still modify and " +"resubmit it by clicking onto this link:\\n##formcreator.validation_link##" +msgstr "Sveicināti,\\nJūsu formu noraidīta apstiprinātājs ar sekojošo iemeslu:\\n##formcreator.validation_comment##\\n\\nJūs varat veikt izmaiņas un atkartoti iesniegt formu sekojošā vietnē:\\n##formcreator.validation_link##" -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "" +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 +msgid "Your form has been accepted by the validator" +msgstr "Jūsu formu akceptēja apstiprinātājs" -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "" +#: inc/notificationtargetform_answer.class.php:116 +msgid "" +"Hi,\\nWe are pleased to inform you that your form has been accepted by the " +"validator.\\nYour request will be considered soon." +msgstr "Sveicināti,\\nInformējam, jūsu formu akceptēja apstiprinātājs.\\nJūsu pieteikums drīz tiks izskatīts." -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/notificationtargetform_answer.class.php:121 +msgid "Your form has been deleted by an administrator" +msgstr "Jūsu formu izdzēsa administrators" -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Sveicināti,\\nInformējam, jūsu pieprasījums netiks izskatīts un tika izdzēsts." -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Atbildes" +msgstr[1] "Atbilde" +msgstr[2] "Atbildes" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" -msgstr "" +msgstr "Tekoša aktīva nodaļa" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" -msgstr "" +msgstr "Formas nodaļa" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" -msgstr "" +msgstr "Noklusēta apstiprinātāju nodaļa" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" -msgstr "" +msgstr "Noteikta nodaļa" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" -msgstr "" +msgstr "Tagi no jautājumiem" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" -msgstr "" +msgstr "Noteiktie tagi" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" -msgstr "" +msgstr "Tagi no jautājumiem un noteiktiem tagiem" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" -msgstr "" +msgstr "Tagi no jautājumiem vai noteiktiem tagiem" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" -msgstr "" +msgstr "saskaitīts no pieteikuma izveidošanas datuma" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" +msgstr "saskaitīts no atbildes uz jautājumu" + +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Mērķa pieteikumi" +msgstr[1] "Mērķa pieteikums" +msgstr[2] "Mērķa pieteikumi" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" -msgstr "" +msgstr "Rediģēt mērķi" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" -msgstr "" +msgstr "Pieteikumu virsraksts" + +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Jautājums" +msgstr[1] "Jautājums" +msgstr[2] "Jautājumi" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" -msgstr "" +msgstr "Pieteikumu tagi" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" -msgstr "" +msgstr "Tagi" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" -msgstr "" +msgstr "Atcelt" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" -msgstr "" +msgstr "Pieteikuma dalībnieki" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" -msgstr "" +msgstr "Formas pieteicējs" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" +msgstr "Formas apstiprinātājs" + +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 +msgid "Person from the question" +msgstr "Persona no jautājuma" + +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 +msgid "Group from the question" +msgstr "Grupa no jautājuma" + +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 +msgid "Supplier from the question" +msgstr "Piegādātājs no jautājuma" + +#: inc/targetticket.class.php:988 +msgid "Full form" +msgstr "Pilna forma" + +#: inc/targetticket.class.php:1035 +msgid "The title cannot be empty!" +msgstr "Nosaukums nevar būt tukšs!" + +#: inc/targetticket.class.php:1041 +msgid "The description cannot be empty!" +msgstr "Apraksts nevar būt tukšs!" + +#: inc/fields/radios-field.class.php:48 +msgid "Radios" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 -msgid "Person from the question" +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "GLPI objekti" +msgstr[1] "GLPI objekts" +msgstr[2] "GLPI objekti" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 -msgid "Group from the question" +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" msgstr "" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 -msgid "Supplier from the question" +#: inc/fields/float-field.class.php:38 +msgid "Float" msgstr "" -#: inc/targetticket.class.php:883 -msgid "Full form" +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" msgstr "" -#: inc/targetticket.class.php:927 -msgid "The title cannot be empty!" +#: inc/fields/integer-field.class.php:38 +msgid "Integer" msgstr "" -#: inc/targetticket.class.php:933 -msgid "The description cannot be empty!" +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" msgstr "" -#: inc/wizard.class.php:83 -msgid "Seek assistance" +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" msgstr "" -#: inc/wizard.class.php:87 -msgid "My requests for assistance" +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" msgstr "" -#: inc/wizard.class.php:98 -msgid "Book an asset" +#: inc/fields/text-field.class.php:32 +msgid "Text" msgstr "" -#: inc/wizard.class.php:105 -msgid "Consult feeds" +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" +#: inc/fields/select-field.class.php:51 +msgid "Select" msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" +#: inc/wizard.class.php:67 inc/wizard.class.php:68 +msgid "Seek assistance" +msgstr "" + +#: inc/wizard.class.php:73 inc/wizard.class.php:74 +msgid "My requests for assistance" +msgstr "" + +#: inc/wizard.class.php:85 inc/wizard.class.php:86 +msgid "Book an asset" +msgstr "" + +#: inc/wizard.class.php:94 inc/wizard.class.php:95 +msgid "Consult feeds" +msgstr "" + +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Noteikta persona" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Noteikta grupa" + +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Zināšanas bāzes kategorija" + +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Nepieciešams" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Pievienot jautājumu" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Pievienot sadaļu" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Obligāti aizpildāms lauks" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Sadaļa ir nepieciešama" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Nepieciešams ievadīt lauka vērtību:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Apraksta laukam jābūt aizpildītam:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Nevar piekļūt LDAP informācijai!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Apraksts" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Sākumlapa" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Piekļuve" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Visas valodas" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Tiešsaiste no sākumlapas" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Nepieciešama apstiprināšana?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Noklusēta forma servisu katalogā" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Kategorijas" +msgstr[1] "Kategorija" +msgstr[2] "Kategorijas" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "skatīt visu" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Sakārtot pēc popularitātes" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Sakārtot alfabēta secībā" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Lūdzu definējiet jūsu prasību" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Manas pēdējās formas (pieteicējs)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Nav nosūtītas formas" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Visas manas formas (pieteicējs)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Manas pēdējās formas (apstiprinātājs)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Nav formas kuram nepieciešama apstiprināšana" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Visas manas formas (Apstiprinātājs)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Izvēlēties apstiprinātāju" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Jums nepieciešams izvēlēties apstiprinātāju !" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Dublikāts" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Formas dublikāts: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Forma pārnesta: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" msgstr "" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Problēmjautājumi" +msgstr[1] "Problēmjautājums" +msgstr[2] "Problēmjautājumi" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Rediģēt jautājumu" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Parādīt tukšo" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Viens rindā sarakstiem" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Vērtības" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Viens rindā" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtrs" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Atribūts" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Diapazons" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Min" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Maks" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Papildus apstiprināšana" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Regulārā izteiksme" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Norādiet papildus kritērijus jautājuma aprakstā lai palīdzētu lietotājiem." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Parādīt lauku" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Vienmēr rādīt" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Paslēpts kamēr" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Rādīt kamēr" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Rediģēt sadaļu" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formas bez kategorijas" diff --git a/locales/nl_NL.mo b/locales/nl_NL.mo index a1625b37ea60b8ccb52bbe4ac2b5acc573b46724..74e70f97fefb40451948b8d8a89d5ae3186ff24e 100644 GIT binary patch delta 124 zcmbQs($6wMh4Jb{)uL=eT_Z~cLjx-VLu~^?0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIWlIs;290|RXXAmH*zEH2RvDN4*M&PgoEFS1hb%Fjs5Q*bWN%+AToE6&bTuqi1@ XEY3(Ra;VTP$xG2oO5H5L$jb--q=qF4 delta 144 zcmeBYnaeUkh4Jx3)uMU>T|*NE14}DY6Kw+{0|TxAf8C(evdrSl{5)Nk#FA7i1tSAP zGhIW7I&-i(1E4ye#Nra&kfOxA;+({i{30ub#GKTM#JrTERE3n(oW#<+#7YGl7)uW> Z>5!hAn3\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +17,19 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "" msgstr[1] "" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -37,8 +37,8 @@ msgid_plural "Forms" msgstr[0] "" msgstr[1] "" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "" @@ -55,7 +55,7 @@ msgid "Edit a question" msgstr "" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "" @@ -137,11 +137,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "" @@ -154,7 +154,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -162,8 +162,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -187,7 +187,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "" @@ -221,200 +221,213 @@ msgstr "" msgid "A required field is empty:" msgstr "" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "" msgstr[1] "" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "" msgstr[1] "" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -428,7 +441,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -521,7 +534,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -541,8 +554,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "" @@ -553,28 +566,28 @@ msgstr[1] "" msgid "Delete" msgstr "" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -590,7 +603,7 @@ msgid_plural "Destinations" msgstr[0] "" msgstr[1] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -658,118 +671,130 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "" msgstr[1] "" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "" @@ -778,30 +803,26 @@ msgstr "" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/pl_PL.mo b/locales/pl_PL.mo index 0667f269c775618c5a851438f38f28a0d4de2997..865f55af8776c11ff18fdce7be9217dfe40b4c33 100644 GIT binary patch delta 1068 zcmXZbO-NKx6u|LAV&jaCR%+vnHNCXxV|wzY5Sl5nFf1hqQYdO+Pezz&h7o379}L1H zTJ%9+kWsB#NKmeV*+@wdv~tm=g%B=;+9l*lB<$mVnk$d_-Fvw2-E+^m{ux*uc(YXJ zH*OLcX%o39B3HMIbmJTz#3k&+K%^G$#whbM7(y2VSimOqupMt>7@rzn;uhvrynvrj z*F`$Sm#qx!4w3!XhY8GLGfra$XHZ{kV0R0zppBEL@6F-?{DPX$Z`_RaF_A;qgnKcC zyKoeP=*N5(F}P14iBrg4@)0%Tuc#;cffPg5Q4?#SENUF}eH-<|M^H~bjN8z~Ui9!3 z&f*DN!4^#TJ4ATo7(cq)_Y z{5A0qWzzk+kZb455Cc8wC^ldLdE`1jt@s34D6dgl^B#5mA~xc8)E2B7*HFK+fj6+; zsQ7bcsTDb}aPcwMHKua=>+M{{gg9|496X}9P_}|ocFY4{Rj9P(A^?4u~4kzuy zDJ$uuon*pEKK{_w+5bP{q|%O)aQF+IbIYDRQgVysg6mC`($>&K)-787H*@(yu2|0J atm9tEEoa9|CvVwaG1D_PUQM(QH~#}Lyn4t0 delta 1082 zcmX}rO-NKx6u|LA+Nfh=ALHoE*wnKctehF%gc5#GNiibSqOztW+=&}034&HF+_Vs)g;cwQr2lDd!Q=hzJ#*i?=brQCdulWFdbP$4 zZ4nu67D0lbSod||BM4(3aE4nLu; ziw4D&oecVdA_wsdcH%fT;T&dg9`(T%cDHZ@<2Zx*+yWlLFQ^GMhDAK+#~6k&ii5Zp z^VooQ!mh|x29F3NaTeK2KB8v)74>AlkYb33a%f@^V+{5AKGYWvpq|{pU0B3!oW=oM zz+$xSc1NY%Y)RIo3ZuAm0p*N_lTt(U|>!>a8P!|1G ze5mmt>V7uz*|~Cwfu1yv^*DuGa+{kUpCb$9Eoy5%psruTM*NA|f=y$sReg^a$BFw< zTQP&0_$(gB6%4b#c-yNdjv{TAeq$Orgp^QQaL@S4_#QQ}HPjYtn0YH@;yaWWY9&*s z30y|4zzx*Om9gOzgU1ZCBy*@eTEPSO*~EV%-H<5%O^u&K{d%vXR-jaQQWx_1?0B-v zvU_^FyE^S7_ZOSn&Q>Ew|3+-v_MUb|$Kt~!r!bmx#)_q0%gJRYoI<9QwKCb9bF<(~ aTK)e\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Polish (Poland) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/pl_PL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,21 +18,21 @@ msgstr "" "Language: pl_PL\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "Nagłówek" msgstr[1] "Nagłówki" msgstr[2] "Nagłówki" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "Katogoria formularza" msgstr[1] "Kategorie formularzy" msgstr[2] "Kategorie formularzy" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -41,8 +41,8 @@ msgstr[0] "Formularz" msgstr[1] "Formularze" msgstr[2] "Formularze" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "Forlularze czekające na weryfikację" @@ -59,7 +59,7 @@ msgid "Edit a question" msgstr "Edytuj pytanie" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "Sekcja" @@ -143,11 +143,11 @@ msgstr "Niewidoczny aż" msgid "Displayed unless" msgstr "Widoczny jeżeli" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "dodaj sekcję" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "Edytuj sekcję" @@ -160,7 +160,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "Kategoria o tej nazwiej już istnieje! Tworzenie kategorii zakończone niepowodzeniem. " -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -168,8 +168,8 @@ msgstr "Kategoria o tej nazwiej już istnieje! Tworzenie kategorii zakończone n msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -193,7 +193,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "Odpowiedź" @@ -228,203 +228,216 @@ msgstr "" msgid "A required field is empty:" msgstr "Wymagane pole jest puste:" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Odpowiedź formularza" msgstr[1] "Odpowiedzi formularza" msgstr[2] "Odpowiedzi formularza" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "Wnioskodawca" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "Zatwierdzający" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "oczekujące" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "zaakceptowane" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "odrzucone" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formularz zaakceptowane przez osobę zatwierdzającą" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formularz został zapisany." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Komentarz" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Wymagane w przypadku odrzucenia" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Odrzucenie" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Akceptacja" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Wymagane jest skomentowanie odrzucenia " -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "Nie można wygenerowć obiektów docelowych!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "Dane formularza" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "Strona domowa" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "Dostęp" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "Wszystkie języki" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "Dostęp publiczny" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "Dostęp dla zalogowanego użytkownika" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "Dostęp ograniczony" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "Dostęp ze stony domowej" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "Podlega zatwierdzeniu?" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "Moje ostatnie formularze (wnioskodawca)" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "Brak zapamiętanych formularzy" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "Moje wszystkie formularze (wnioskodawca)" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "Moje ostatnie formularze (zatwierdzający)" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "Brak formularzy oczekujących na zatwierdzenie" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "Moje wszystkie formilarze (zatwierdzający)" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "Wybierz osobę zatwierdzającą" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "Nazwa nie może być pusta!" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "Musisz wybrać osobę zatwierdzającą!" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "Powtórzenie" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "Powtórzonych formularzy: %s" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "Udostępnienie" msgstr[1] "Udostępnienia" msgstr[2] "Udostępnienia" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "Typ dostępu" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -438,7 +451,7 @@ msgid "" "previous one." msgstr "Nagłówek istnieje dla nadrzędnej jednostki! Zostanie nadpisany przez poprzedni." -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -532,7 +545,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -552,8 +565,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "Pytanie" @@ -565,28 +578,28 @@ msgstr[2] "Pytania" msgid "Delete" msgstr "Usuń" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "Tytuł jest wymagany" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "Typ pola jest wymagany" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "Sekcja jest wymagana" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "Wymagana wartość w polu:" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "Pole opisu powinno być wypełnione" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "Nie można pobrać informacji z LDAP!" @@ -604,7 +617,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "Typ nie może być pusty!" @@ -672,119 +685,131 @@ msgstr "wyliczone z daty utworzenia zgłoszenia" msgid "calculated from the answer to the question" msgstr "equals to the answer to the question" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Docelowe zgłoszenie " msgstr[1] "Docelowe zgłoszenia" msgstr[2] "Docelowe zgłoszenia" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "Edytuj obiekt docelowy" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "Tytuł zgłoszenia" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "Dodaj wiadomość o zatwierdzeniu jako pierwszą pozycję śledzenia w zgłoszeniu" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "Anuluj" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "Uczestnicy zgłoszenia" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "Wnioskodawca" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "Weryfikator formularza" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "Osoba" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "Osoba z pytania" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "Grupa" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "Grupa z pytania" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "Dostawca" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "Dostawca z pytania" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "Wypełniony formularz" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "Tytuł nie może być pusty!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "Opis nie może być pusty!" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "Pokaż wszystkie pozycje" @@ -793,30 +818,26 @@ msgstr "Pokaż wszystkie pozycje" msgid "didn't match any item" msgstr "nie pasuje do żadnej pozycji" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "Czy na pewno chcesz usunąć to pytanie?" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "Czy na pewno chcesz usunąć tą sekcję?" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "Czy na pewno chcesz usunąć obiekt docelowy:" diff --git a/locales/pt_BR.mo b/locales/pt_BR.mo index 207a3a3cee58941899d0be901b08c87d4e8b5aed..2f8cf39bcfb922b9ccdaadfcebbf760b47661bfd 100644 GIT binary patch delta 6468 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 delta 4125 zcmYk;3vg7`0mkvOBm@W`B;-X5WO)TJ@5cfm5D^XGAqJyp0|;(6D=cgth9pP{Zjefa zBCi8Q@c|S9HB23KQCk&7=?ujwt!Vmh#pFScPSzJ){ZBh0`{&VM0)X4r6J_%qpj)M61X z#?7b(E?_Z!js=)W>-jhj2jM!5r+u@D3OzAfP(9y^YVbK6gC}tW{tlDz3mkwqQ1|uc zq&hqT)xc!T#s{72ocmGFe-kw$?_vh+n-8gs#LLbbNT*FYt*WP!kW;1vHS#Ld2p3}t z)}tQ09?P&3wR*3+^QTcWc^3IIAMb?$l zybrZ^j$#_Vk9y80$RwFhQP*EX?U|uWm!2~rmH8h?rHm6@I1@MEWxR?jcv>^oaMvez z8a3t5@-*Fd95u36Pz{~JQv4Na2IH94I81S7pk_MDIb|gCPp8ZxP84GhHP!oZGW49BR!Mpq6M2YJ?k59o~j|?lZ^>W=^1%?9~Vr-S87sLqA7d z_!(*nuRHs(U>fld)Y7D)Mm!lc(hAgb?nX7d47CT=INRO#o80%i-Erg)6+P$`R8K#^ z<@gcOwkf1n@i-sVa1Bnt0P1&OE2_blkw0^a4=-Ls-TxnVK8+2gnJYzgbUyN&h*?5K zOVEjGV4w3PWR}e-oQ%K6T=cLm+C=%N2C9(lVjf0a-;Nr{F4SxGB5LWnQ8W7{sskV5 zAie(=sc0?!iVWKP9rJJi3tE6>sD=Zm?{}h>;soA?Cvg(~8P$=2-q_5HM*U9Q>0IEv z4?p!7vlOc%#+b^nyxX`1wR?Yx>gkuLsW#(!|4a_*f%8!vu0>6K9cl(wp{95vYDxE^ zHt8{(i|=7?2U$1mnb8=b4O2)(zjU?8AWSRj!FzEj9>F^7L3ON-UTNfE)XeO6$7fKR z_A68eucJEBgPO6VoLGl4QEyFY4)d>`FXe=6My=VCs5RP+TGPW=jBg{`z;cvet}9Z^Qj*7XUl8q zZ$+(jE~=qQ)Dk?5dj0m`0PJ?Yh8p=>sOvAGp4WqOFtsqY1j~@sGaHfXBjzX-P2pM8 z$Ua6j{5RxY^Iy~rxy+|#pcZez1{{VRsOz_5e>{j9c^9e!FC+WU{0w#77pVJhV4~jt zAq-0$NJmZOc+`Vu;&5Dun$qRYHq_d0N8NV-)$!w)gzuml`X%bVzqs?)G0bsdN$mVO zjHi9GgNkmjsF5CXp2tLvuc0@*|;LKLa(@%P-YYLCoC zemcw|WdE8rWHQV_AM?*fG{5GA*7gP_V8)c#X30k095V|wl8`&!fok9d=W*w&=;6Gc zrSiQPrX0UR_LJw_IWbJ@uc_p9H@kJl6^%yaNn*)N9Z)JsLvM|DAJtivwivxXv%E-V zAK6J(kQ(AA-zGF?){}bjIH}MHO-U80BTtjZ2(PPIMf%DnDjUfU`%d6t68OL48PwCr zgJcQWKwcz!h{|_kn7w!(`4Nfe6;si=YAI9}k`TFF2b2ehemw3ZkC3J0AX!dklkbx* z(pT7Dv46O5PTxsvB6pDaWCWo^djEgM#_lcC`P93sUp&29edP$1Jfh7wukR!l677#; z?pz8slGWq|(n^Msr-(M}R-$rG4D*l{L_6^%cVY{!BkUtHm1x&`$zak+#*k-7I_V}q zAo`6^NhE_vjt(dtgx{FnlFH|CR}VVx$5C4UW^#bcB4y-xqB1Q;@2^@v>YK?LQcdn9 z{LkuUS>S5=0lS;jk{zUlBomcgB%TZ)%ZQ5qP%r$h<6^Riw3DNxuWY9>nuOhnm3Wt{ zKZ;|?v+h`Yi#$PmIfD2fl|Eo-!$N#mngBNxQkj;w5t-=0n@u@|#4_lzoy-ZSbUk9}?Q z;h`<qvA!kftq+F%ZH@l*-Wh$hf}3B?TG`+ag`*V{v-(9JpIqmOCgv{o zBs|a*ZuPg=<#{bBRcixH;Z=TbTZ6aV9}d;~>zi8kDprR6+ zUA)M47MDcN6z`0)%|2hknFHb0P=ozNL7u(hn`FmLsfs=|<&ekvroCr}m8aX)<<<7L z$S<$a5 H*LeO1#xms2 diff --git a/locales/pt_BR.po b/locales/pt_BR.po index d3b84e426..1c65f7ae9 100644 --- a/locales/pt_BR.po +++ b/locales/pt_BR.po @@ -1,19 +1,20 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Eduardo Spinola , 2016 # Marco Antonio Martins Junior , 2016 +# Paulo Gobbato , 2017 # Pedro de Oliveira Lira , 2015 # Rafael Viana , 2015 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,167 +22,71 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Cabeçalho" -msgstr[1] "Cabeçalhos" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Categoria de Formulário" -msgstr[1] "Categorias de Formulário" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formulário" msgstr[1] "Formulários" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Formulários aguardando validação" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Formulários sem categoria" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Adicionar uma questão" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Editar uma questão" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Seção" -msgstr[1] "Seções" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Objeto GLPI" -msgstr[1] "Objetos GLPI" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Obrigatório" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Mostrar vazio" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Listas, um por linha" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Valores" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Um por linha" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Filtro" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Atributos" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Range" - -#: ajax/question.php:273 -msgid "Min" -msgstr "Mínimo" - -#: ajax/question.php:279 -msgid "Max" -msgstr "Máximo" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Validação adicional" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Expressão regular" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Para ajudar os usuários, especifique as condições adicionais de validação na descrição das questões." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Nenhum formulário encontrado. Por favor escolha um formulário abaixo" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Exibir campo" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Um erro ocorreu enquanto requisitando forumlários" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Sempre exibido" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Nenhum formulário nessa categoria" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Escondido a menos que" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Tem certeza que quer deletar esta questão?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Exibido a menos que" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Tem certeza que quer deletar esta seção?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Adicionar seção" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Tem certeza que quer deletar este destino:" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Editar seção" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Mostrar todos os itens" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Adicionar um destino" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "nenhum item condiz" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "Falha na criação da categoria! Já existe uma categoria com este nome" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Um campo obrigatório está vazio: " -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "Catálogo de serviços" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Form creator" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Lista de formulários" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Já existe um cabeçalho para esta entidade! Você só pode ter um cabeçalho por entidade." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Form creator" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -191,332 +96,283 @@ msgstr "A questão foi salva com sucesso!" msgid "The question has been successfully updated!" msgstr "A questão foi modificada com sucesso!" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Resposta" -msgstr[1] "Respostas" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Já existe um cabeçalho para esta entidade! Você só pode ter um cabeçalho por entidade." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "Categoria da base de conhecimento" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "Falha na criação da categoria! Já existe uma categoria com este nome" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "Helpdesk" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Formulários aguardando validação" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Cabeçalho" +msgstr[1] "Cabeçalhos" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Categoria de Formulário" +msgstr[1] "Categorias de Formulário" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Alvo" +msgstr[1] "Alvos" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Tipo de acesso" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Um campo obrigatório está vazio: " +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Acesso público" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Acesso privado" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Acesso restrito" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Link para o formulário" + +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Por favor, ative o formulário para ver o link" + +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Adicionar um cabeçalho " + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Já existe um cabeçalho para uma Entidade Pai! Um novo cabeçalho irá sobrescrevê-lo. " + +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Resposta do formulário" msgstr[1] "Respostas do formulário" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Requerente" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Validador" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "esperando" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "aceito" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "rejeitado" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Formulário aceito pelo validador." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Formulário salvo com sucesso." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Comentário" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Necessário se rejeitado" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Rejeitar" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Aceitar" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Comentário de rejeição necesário!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Impossível gerar alvos!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Formulário salvo com sucesso!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "Você não é o validados destas respostas" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Data do formulário" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Descrição" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Página Inicial" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Acesso" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Todos os idiomas" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Acesso público" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Acesso privado" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Acesso restrito" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Acesso direto na página inicial" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Precisa ser validado?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "Formulário padrão no catálogo de serviços" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "Categoria" -msgstr[1] "Categorias" - -#: inc/form.class.php:528 -msgid "see all" -msgstr "Ver todos" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "Organizar por popularidade" - -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "Organizar por ordem alfabética" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Helpdesk" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "Por favor, descreva o que precisa aqui" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Helpdesk do GLPI" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Formulários recentes (requerente)" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Catálogo de serviços simplificado" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Nenhum formulário postado ainda" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Catálogo de serviços ampliado" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Todos os formulários (requerente)" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Modo de helpdesk" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Formulários recentes (validador)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Destino" +msgstr[1] "Destinações" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Nenhum formulário aguarda validação" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Destino" +msgstr[1] "Destinos" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Todos os formulários (validador)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Deletar" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Escolha um validador" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Adicionar um destino" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "O nome não pode ser vazio!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr " Você deve selecionar um validador!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Duplicar" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Formulário duplicado: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Formulário transferido: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Alvo" -msgstr[1] "Alvos" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Tipo de acesso" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "Link para o formulário" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "Por favor, ative o formulário para ver o link" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Adicionar um cabeçalho " +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "O tipo não pode ser vazio!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Já existe um cabeçalho para uma Entidade Pai! Um novo cabeçalho irá sobrescrevê-lo. " +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Seção" +msgstr[1] "Seções" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "Questão" -msgstr[1] "Questões" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "O título é obrigatório. " -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Formulário salvo" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Um formulário precisa de validação" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Formulário rejeitado" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Formulário aceito" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Formulaáio deletado" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Formulário #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Nome do formulário" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Respostas de formulário completo" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Comentário rejeitado" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Link de validação" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Requisição #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Formulário criado" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "Sua requisição foi salva" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Olá,\\nSua requisição do GLPI foi salva com sucesso com o número ##formcreator.request_id## e transmitido para a equipe de helpdesk.\\nVocê pode ver suas respostas no seguinte link:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Um formulário vindo do GLPI necessita ser validado" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Olá,\\nUm formulário do GLPI precisa ser validado e você foi escolhido como validador.\\nVocê pode acessá-lo clicando neste link:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Seu formulário foi recusado pelo validador" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -524,288 +380,561 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Olá,\\nLamentamos informar que o seu formulário foi recusado pelo validador pelo motivo abaixo:\\n##formcreator.validation_comment##\\n\\nVocê pode modificá-lo e re-submetê-lo clicando neste link:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Seu formulário foi aceito pelo validador" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Olá,\\nTemos a satisfação de informá-lo que o seu formulário foi aceito pelo validador.\\nSua solicitação será considerada em breve." -#: inc/notificationtargetformanswer.class.php:121 -msgid "Your form has been deleted by an administrator" -msgstr "Seu formulário foi deletado por um administrador" - -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "Olá,\\nNós lamentamos informar que a sua solicitação não pode ser considerada e foi deletada por um administrador." - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Questão" -msgstr[1] "Questões" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Deletar" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "O título é obrigatório. " - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "O campo de tipo é obrigatório" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "A seção é obrigatória" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "O valor do campo é obrigatório:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Um campo de descrição necessita uma descrição:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Informações do LDAP não recuperadas!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Destino" -msgstr[1] "Destinações" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Destino" -msgstr[1] "Destinos" +#: inc/notificationtargetform_answer.class.php:121 +msgid "Your form has been deleted by an administrator" +msgstr "Seu formulário foi deletado por um administrador" -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "O tipo não pode ser vazio!" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Olá,\\nNós lamentamos informar que a sua solicitação não pode ser considerada e foi deletada por um administrador." -#: inc/targetticket.class.php:7 +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Resposta" +msgstr[1] "Respostas" + +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Entidade ativa no momento" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Entidade padrão do solicitante" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Primeira entidade do solicitante (alfabeticamente)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Última entidade do solicitante (alfabeticamente)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "A entidade do formulário" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Entidade padrão do validador" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Entidade específica" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Entidade padrão de uma resposta de tipo usuário" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" -msgstr "" +msgstr "De um objeto do GLPI > Entidade tipo pergunta resposta" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Tags das perguntas" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Tags específicas" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Tags das perguntas e tags específicas" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Tags de perguntas ou tags específicas" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "igual a resposta para a questão" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "calculado da data de criação do ticket" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "calculado da resposta a questão" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "Igual a resposta da pergunta" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Ticket alvo" msgstr[1] "Tickets alvos" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Edite um destino" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Título do ticket" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Questão" +msgstr[1] "Questões" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Pergunta de tipo usuário" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Pergunta de tipo entidade" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Tags de ticket" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Tags" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "Adicionar mensagem de validação como primeiro acompanhamento do ticket" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Cancelar" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Autores do ticket" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Requerente do formulário" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Validador do formulário" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Pessoa específica" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Pessoa da questão" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Grupo específico" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Grupo da questão" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Fornecedor específico" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Fornecedor da questão" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Formulário completo" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "O título não pode ser vazio!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "A descrição não pode ser vazia!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Abrangência" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Objeto GLPI" +msgstr[1] "Objetos GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Isto não é um número:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "O número deve ser maior que %d:" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "O número deve ser menor que %d:" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "Formato especificado não combina" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Float" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "Isso não é um Inteiro:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Inteiro" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "O texto é muito curto (mínimo %d caracteres):" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "O texto é muito longo (máximo %d caracteres):" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Área de Texto" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Texto" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "Este e-mail não é válido:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Data" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "A questão precisa ter no mínimo %d respostas" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "A questão seguinte não aceita mais que %d respostas" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Seleção Múltipla " + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Um arquivo obrigatório está ausente:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "Seleção LDAP" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Selecionar" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Caixas de Seleção" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" -msgstr "" +msgstr "Procure suporte" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" -msgstr "" +msgstr "Minhas requisições de suporte" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "Reservar um ativo" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "Consultar feeds" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Mostrar todos os itens" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "Validar" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "nenhum item condiz" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "Fechado" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "Voltar" +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Pessoa específica" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" -msgstr "Nenhum formulário encontrado. Por favor escolha um formulário abaixo" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Grupo específico" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" -msgstr "" +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Categoria da base de conhecimento" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" -msgstr "Nenhum formulário nessa categoria" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Obrigatório" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Tem certeza que quer deletar esta questão?" +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Adicionar uma questão" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Tem certeza que quer deletar esta seção?" +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Adicionar seção" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Tem certeza que quer deletar este destino:" +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "O campo de tipo é obrigatório" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "A seção é obrigatória" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "O valor do campo é obrigatório:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Um campo de descrição necessita uma descrição:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Informações do LDAP não recuperadas!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "Importar formulários" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Descrição" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Página Inicial" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Acesso" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Todos os idiomas" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Acesso direto na página inicial" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Precisa ser validado?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Formulário padrão no catálogo de serviços" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Categoria" +msgstr[1] "Categorias" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "Ver todos" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Organizar por popularidade" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Organizar por ordem alfabética" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Por favor, descreva o que precisa aqui" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Formulários recentes (requerente)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Nenhum formulário postado ainda" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Todos os formulários (requerente)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Formulários recentes (validador)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Nenhum formulário aguarda validação" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Todos os formulários (validador)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Escolha um validador" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr " Você deve selecionar um validador!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Duplicar" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Formulário duplicado: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Formulário transferido: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "Formulários importados com sucesso de %s" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Questão" +msgstr[1] "Questões" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Editar uma questão" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Mostrar vazio" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Listas, um por linha" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Valores" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Um por linha" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Filtro" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Atributos" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Range" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Mínimo" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Máximo" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Validação adicional" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Expressão regular" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Para ajudar os usuários, especifique as condições adicionais de validação na descrição das questões." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Exibir campo" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Sempre exibido" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Escondido a menos que" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Exibido a menos que" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Editar seção" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Formulários sem categoria" diff --git a/locales/ro_RO.mo b/locales/ro_RO.mo index bb71ac9bc744fbfdc7045a80621ad1bf7a7add42..4b8cd81821567db324bfa13e710b8b3c85528eda 100644 GIT binary patch delta 735 zcmXZa&rj4q6u|MPBFLhk$S(zx23QVmic?|;)IAV?98?H~@DEg2rCHLAZ50xTJ?({r zaF-DEW+DfET;OD4hzCy|C34}k;pCA(FyZ^$Hj{qlO=qUBZ(7OjXEzovCjTyooMc4$ zMdbLZNFVlH6R~g%Ycasf_!jGN0b8+*Ex3v|aRb|M4{7p;n}tVMhndFe`etkeRKqt7^gAcI*Utv3js2eY(enw4f2fOea>OKdk303d`p5YJ<+ zX1>ONX0(aDxQEyA2s`lX+qE=MAEkK9BmP6R7iF<83UXR^k(CB41IDVh3sRgPT_JH|Eg$ zOQ(ZQCvVpW_fbp!Jar0n;R5Q0%cvWEK>ZiKpdQ5*YGrm&kMcWGefhb)U-Q1U=-30p zmSbGwsgd_8I98CAWENuU3Xs(~ zMOV8CqWdDUKnUtWyHan0kS_8cDDtK&kuHS3Pdf%L=kq@AdEWOt@B5zJ_|N$JdW#=z z5&07lNs36@Ns$4}poP;I!aBC$5+27D?8XLm;cGmD>)3-kNRwYYEIhz=?CogIx9~J^ zqC{0U6S$1$uo1*>13%#<#<#E) z_k22fw7*dc*vCE$$C~i~>dr<{^Kz(1KY_Z_N2vL8cpe+5`Kzdfd_>*(Ceq{^4?W2r zIE3bqPA{E7zOFBBp&t2E;A7N@E2s;;Kwa<^>c8*-^(sE2p3D~NRenWoLB6l;wmuE{ zj-AR_&S-WxGvuTlCo*~0zUR&ttHrWs=S\n" +"POT-Creation-Date: 2016-11-29 10:01+0100\n" +"PO-Revision-Date: 2016-11-29 09:00+0000\n" +"Last-Translator: Johan Cwiklinski \n" "Language-Team: Romanian (Romania) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/ro_RO/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,21 +18,21 @@ msgstr "" "Language: ro_RO\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 +#: hook.php:57 inc/form.class.php:317 inc/header.class.php:7 msgid "Header" msgid_plural "Headers" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: hook.php:57 inc/category.class.php:9 +#: hook.php:58 inc/category.class.php:9 msgid "Form category" msgid_plural "Form categories" msgstr[0] "Formular categorie" msgstr[1] "Formular categorii" msgstr[2] "Formular categorii" -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 +#: setup.php:20 setup.php:129 ajax/homepage_forms.php:48 #: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 #: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 msgid "Form" @@ -41,8 +41,8 @@ msgstr[0] "Formular" msgstr[1] "Formulare" msgstr[2] "Formulare" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 +#: setup.php:119 inc/form.class.php:58 inc/formlist.class.php:22 +#: inc/formlist.class.php:23 msgid "Forms waiting for validation" msgstr "Formulare în aşteptarea validării" @@ -59,7 +59,7 @@ msgid "Edit a question" msgstr "Editează o întrebare" #: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 +#: inc/targetticket.class.php:941 msgid "Section" msgid_plural "Sections" msgstr[0] "Secţiune" @@ -143,11 +143,11 @@ msgstr "" msgid "Displayed unless" msgstr "" -#: ajax/section.php:21 inc/question.class.php:222 +#: ajax/section.php:23 inc/question.class.php:222 msgid "Add a section" msgstr "Adaugă o secţiune" -#: ajax/section.php:23 +#: ajax/section.php:25 msgid "Edit a section" msgstr "Editează o secţiune" @@ -160,7 +160,7 @@ msgid "" "A category already exists with the same name! Category creation failed." msgstr "" -#: front/formanswer.form.php:43 front/formanswer.php:12 +#: front/form_answer.form.php:37 front/form_answer.php:12 #: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 #: front/knowbaseitem.form.php:10 front/reservation.form.php:10 #: front/reservationitem.php:7 front/reservation.php:12 @@ -168,8 +168,8 @@ msgstr "" msgid "Service catalog" msgstr "" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/form_answer.php:16 front/form_answer.php:21 front/formdisplay.php:62 #: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 #: front/issue.php:21 front/targetticket.form.php:47 msgid "Form Creator" @@ -193,7 +193,7 @@ msgstr "" msgid "The question has been successfully updated!" msgstr "" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 +#: inc/answer.class.php:35 inc/targetticket.class.php:940 msgid "Answer" msgid_plural "Answers" msgstr[0] "Răspuns" @@ -228,203 +228,216 @@ msgstr "" msgid "A required field is empty:" msgstr "Un câmp cerut este necompletat:" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:301 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Răspuns formular" msgstr[1] "Răspunsuri formular" msgstr[2] "Răspunsuri formular" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetformanswer.class.php:51 msgid "Requester" msgstr "Solicitant" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetformanswer.class.php:52 msgid "Validator" msgstr "Validator" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "în aşteptare" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "acceptat" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "refuzat" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Comentariu" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Cerut dacă i refuzat" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Refuz" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Accept" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Comentariu refuzat este cerut" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:612 msgid "Cannot generate targets!" msgstr "" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:624 inc/form_answer.class.php:678 msgid "The form has been successfully saved!" msgstr "" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:638 inc/form_answer.class.php:656 +msgid "You are not the validator of these answers" +msgstr "" + +#: inc/form_answer.class.php:695 inc/form_answer.class.php:697 msgid "Form data" msgstr "Data Formular" -#: inc/form.class.php:92 +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "" + +#: inc/form.class.php:94 msgid "Description" msgstr "" -#: inc/form.class.php:120 +#: inc/form.class.php:122 msgid "Homepage" msgstr "Homepage" -#: inc/form.class.php:128 +#: inc/form.class.php:130 msgid "Access" msgstr "Acces" -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 msgid "All langages" msgstr "Toate limbile" -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 +#: inc/form.class.php:189 inc/form.class.php:243 inc/form_profile.class.php:35 msgid "Public access" msgstr "Public acces" -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 +#: inc/form.class.php:190 inc/form.class.php:246 inc/form_profile.class.php:36 msgid "Private access" msgstr "Privat acces" -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 +#: inc/form.class.php:191 inc/form.class.php:249 inc/form_profile.class.php:37 msgid "Restricted access" msgstr "Restricţionat acces" -#: inc/form.class.php:294 +#: inc/form.class.php:296 msgid "Direct access on homepage" msgstr "" -#: inc/form.class.php:321 +#: inc/form.class.php:323 msgid "Need to be validate?" msgstr "" -#: inc/form.class.php:426 +#: inc/form.class.php:427 msgid "Default form in service catalog" msgstr "" -#: inc/form.class.php:527 +#: inc/form.class.php:535 msgid "Category" msgid_plural "Categories" msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: inc/form.class.php:528 +#: inc/form.class.php:536 msgid "see all" msgstr "" -#: inc/form.class.php:545 +#: inc/form.class.php:554 msgid "Popularity sort" msgstr "" -#: inc/form.class.php:549 +#: inc/form.class.php:558 msgid "Alphabetic sort" msgstr "" -#: inc/form.class.php:710 +#: inc/form.class.php:732 msgid "Please, describe your need here" msgstr "" -#: inc/form.class.php:719 +#: inc/form.class.php:741 msgid "My last forms (requester)" msgstr "" -#: inc/form.class.php:729 +#: inc/form.class.php:751 msgid "No form posted yet" msgstr "" -#: inc/form.class.php:741 +#: inc/form.class.php:763 msgid "All my forms (requester)" msgstr "" -#: inc/form.class.php:751 +#: inc/form.class.php:773 msgid "My last forms (validator)" msgstr "" -#: inc/form.class.php:771 +#: inc/form.class.php:793 msgid "No form waiting for validation" msgstr "Niciun Formular în aşteptarea validării" -#: inc/form.class.php:783 +#: inc/form.class.php:805 msgid "All my forms (validator)" msgstr "" -#: inc/form.class.php:874 +#: inc/form.class.php:897 msgid "Choose a validator" msgstr "Alege un validator" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/form.class.php:941 inc/target.class.php:119 msgid "The name cannot be empty!" msgstr "" -#: inc/form.class.php:1046 +#: inc/form.class.php:1093 msgid "You must select validator !" msgstr "" -#: inc/form.class.php:1270 +#: inc/form.class.php:1318 msgid "Duplicate" msgstr "Duplicheaza" -#: inc/form.class.php:1465 +#: inc/form.class.php:1490 #, php-format msgid "Form duplicated: %s" msgstr "" -#: inc/form.class.php:1476 +#: inc/form.class.php:1501 #, php-format msgid "Form Transfered: %s" msgstr "" -#: inc/formprofiles.class.php:12 +#: inc/form.class.php:1686 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "" + +#: inc/form_profile.class.php:12 msgid "Target" msgid_plural "Targets" msgstr[0] "Target" msgstr[1] "Targete" msgstr[2] "Targete" -#: inc/formprofiles.class.php:29 +#: inc/form_profile.class.php:29 msgid "Access type" msgstr "Tip acces" -#: inc/formprofiles.class.php:44 +#: inc/form_profile.class.php:44 msgid "Link to the form" msgstr "" -#: inc/formprofiles.class.php:52 +#: inc/form_profile.class.php:52 msgid "Please active the form to view the link" msgstr "" @@ -438,7 +451,7 @@ msgid "" "previous one." msgstr "" -#: inc/issue.class.php:6 inc/issue.class.php:184 +#: inc/issue.class.php:6 inc/issue.class.php:187 msgid "Issue" msgid_plural "Issues" msgstr[0] "" @@ -532,7 +545,7 @@ msgid "" msgstr "" #: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/targetticket.class.php:1421 msgid "Your form has been accepted by the validator" msgstr "" @@ -552,8 +565,8 @@ msgid "" "has been deleted by an administrator." msgstr "" -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 +#: inc/question.class.php:35 inc/targetticket.class.php:236 +#: inc/targetticket.class.php:417 inc/targetticket.class.php:938 msgid "Question" msgid_plural "Questions" msgstr[0] "Întrebare" @@ -565,28 +578,28 @@ msgstr[2] "Întrebări" msgid "Delete" msgstr "Şterge" -#: inc/question.class.php:256 inc/section.class.php:163 +#: inc/question.class.php:257 inc/section.class.php:178 msgid "The title is required" msgstr "Titlul este cerut" -#: inc/question.class.php:262 +#: inc/question.class.php:264 msgid "The field type is required" msgstr "" -#: inc/question.class.php:268 +#: inc/question.class.php:271 msgid "The section is required" msgstr "Secţiunea este cerută" -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 +#: inc/question.class.php:280 inc/question.class.php:292 +#: inc/question.class.php:306 msgid "The field value is required:" msgstr "" -#: inc/question.class.php:311 +#: inc/question.class.php:320 msgid "A description field should have a description:" msgstr "" -#: inc/question.class.php:362 +#: inc/question.class.php:375 msgid "Cannot recover LDAP informations!" msgstr "" @@ -604,7 +617,7 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: inc/target.class.php:123 +#: inc/target.class.php:125 msgid "The type cannot be empty!" msgstr "" @@ -672,119 +685,131 @@ msgstr "" msgid "calculated from the answer to the question" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:40 +msgid "Equals to the answer to the question" +msgstr "" + +#: inc/targetticket.class.php:66 inc/targetticket.class.php:108 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Tichet target" msgstr[1] "Tichete target" msgstr[2] "Tichete target" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:96 msgid "Edit a destination" msgstr "Editează o destinaţie" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:111 msgid "Ticket title" msgstr "Titlu Tichet" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:310 msgid "User type question" msgstr "" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:311 msgid "Entity type question" msgstr "" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:375 msgid "Ticket tags" msgstr "" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:418 msgid "Tags" msgstr "" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:484 msgid "Add validation message as first ticket followup" msgstr "" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:498 msgid "Cancel" msgstr "Anulează" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:572 msgid "Ticket actors" msgstr "" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:612 inc/targetticket.class.php:669 +#: inc/targetticket.class.php:713 inc/targetticket.class.php:770 +#: inc/targetticket.class.php:813 inc/targetticket.class.php:883 msgid "Form requester" msgstr "Formular Solicitant" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:613 inc/targetticket.class.php:672 +#: inc/targetticket.class.php:714 inc/targetticket.class.php:773 +#: inc/targetticket.class.php:814 inc/targetticket.class.php:886 msgid "Form validator" msgstr "Validator formular" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 +#: inc/targetticket.class.php:614 inc/targetticket.class.php:715 +#: inc/targetticket.class.php:815 msgid "Specific person" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:615 inc/targetticket.class.php:682 +#: inc/targetticket.class.php:716 inc/targetticket.class.php:783 +#: inc/targetticket.class.php:816 inc/targetticket.class.php:896 msgid "Person from the question" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 +#: inc/targetticket.class.php:616 inc/targetticket.class.php:717 +#: inc/targetticket.class.php:817 msgid "Specific group" msgstr "Specific grup" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:617 inc/targetticket.class.php:693 +#: inc/targetticket.class.php:718 inc/targetticket.class.php:794 +#: inc/targetticket.class.php:818 inc/targetticket.class.php:907 msgid "Group from the question" msgstr "" -#: inc/targetticket.class.php:757 +#: inc/targetticket.class.php:819 msgid "Specific supplier" msgstr "Furnizor specific" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:820 inc/targetticket.class.php:918 msgid "Supplier from the question" msgstr "" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:945 msgid "Full form" msgstr "Formular complet" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:992 msgid "The title cannot be empty!" msgstr "" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:998 msgid "The description cannot be empty!" msgstr "" -#: inc/wizard.class.php:83 +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" msgstr "" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" msgstr "" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "" +#: inc/wizard.class.php:253 +msgid "To validate" +msgstr "" + +#: inc/wizard.class.php:266 +msgid "Closed" +msgstr "" + #: scripts/combobox.js.php:54 msgid "Show All Items" msgstr "Afiseaza toate elementrele" @@ -793,30 +818,26 @@ msgstr "Afiseaza toate elementrele" msgid "didn't match any item" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" - -#: scripts/scripts.js.php:235 +#: scripts/scripts.js.php:250 msgid "No form found. Please choose a form below instead" msgstr "" -#: scripts/scripts.js.php:253 +#: scripts/scripts.js.php:268 msgid "An error occured while querying forms" msgstr "" -#: scripts/scripts.js.php:289 +#: scripts/scripts.js.php:304 msgid "No form yet in this category" msgstr "" -#: scripts/scripts.js.php:382 +#: scripts/scripts.js.php:402 msgid "Are you sure you want to delete this question?" msgstr "" -#: scripts/scripts.js.php:417 +#: scripts/scripts.js.php:437 msgid "Are you sure you want to delete this section?" msgstr "" -#: scripts/scripts.js.php:454 +#: scripts/scripts.js.php:474 msgid "Are you sure you want to delete this destination:" msgstr "" diff --git a/locales/ru_RU.mo b/locales/ru_RU.mo index 6e10f3e89671835d3f64586414988281a3db4009..5ab3b2d46e1e8610322f9278d74bc2e034d90fce 100644 GIT binary patch literal 21193 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 delta 4531 zcmZwJ32;@_8Nl)LAgs!gkd^PqujCSkYDrXXbra0nJ(nd%ttHbHDSQbA#uP zSUzsGH2u@dqeIaS5JAK(52Y^S=@IJKOtxq`CRU!c73JCvmxM)sl?%J{)3*W;Va6Vp%zC_u@u9Luo^ z<@36Le3|NVlox)95!jFNIYw}k3^)%Z@kMCGwa9;Jzj?j~r7{;$5^4IJjtuk-N=bv* zN%DeZ(_G{oY7s_b1IA(}QeAZ(c~pId^0oXI<$f=+kcq^hd>vCzmgZ@c(l0;~Xi_Wa zNNLxiEI~6ehT4L0cnA~FKzVV$c|DdbE=!PyF<6WfaT7`+hfyl?F3RWpiRl-(Y7iR| z*UR_6*viA)a2Y3KIDZT#U^&XJZ$X)P4@!wYMw!W%C@=aBrGle*h%r@~X(>L%aUDL7 zdodorLRsn%F2>6DpF~G?{SuUt?!sT-Z}Dx+Wg5wN7Z+j#Z!5%&Sb*nI67!98Z@vi3 z;5Y+wu^MNf17+>+nAb-{QU67p$fA>n2XH1{Lm6-a^_1P5j0-T^bRWuqH&H4R&5sPc z0LewILaD?q)1xR8{1BybvR;iaDu(*YnznL6E*wS1RHrZ$ucOS|gPT@h2Clqbx-c%HFY~B+`OX^4}oER97$^@1g9C#CYnzoX$e-l8jHHT)2Ys@q4u5oCKxv zu@e0(O7-GJj{lsf)XN-qvQgxCd0dxepbKSyKO#A(e%te`z-8|le zvUv|8`&PY=zIYp@vO{O`R}lSBmar5Hn&@=Uku|x7QmW`I_mUJL%c#nc990L(j4z=q zg~u%SQcXg6K|WfrjL0FRdAdA*4Owrb%t1GtzzFnq{Tg=gZ>nv%AEtxPy3^ zXe8zmHsU2hntT~+h(N-d7)?l9Nem*agly{7gtTHJmyo|duF^}{r7a}(5+MW|`C%JF z?=@l-v5#0pNV5|!5Skd+=5a#S`+0(o$+hOJu&XUMmG`^8;|?q&S{__L*^J|e!H=99 zPXB;;?2qiNAGGo2nc1cZC|}g8#2em2HE)!jU|#)S`EL&(?Rn#|^EmuC~`S>M$RFo$XVm zPx|~_pYWZo@A-bMJ^efM3I8aM%D5#py4f?_5fm_Q@Sp;le$O{$*nHc1HNUb(|1T(A z7X}CG&fpk*J$Q!R7?P}eLb~+Zq0{w9Yv}NXHFb4WmG*i^sCB$W=Y^F!YA1MF^wp>G zbWM1q?h2pe7#y+0qE|+~n4S@zoD`p&W=)zrB|R-RDJ3asWN}e^seNr_LuGAEe2%Tr zKE;}nl>G3%OzzYDk$!QuD*Jj{O+~%kT4ArUt*NnXuugl>OL%xOYh|^qvdS?vs(Mg@ z(Px~r<`oprjk7vioy|tCam?A~-09qEbUWLv#yL)%HF}I*eAnpH_wxhvo#@ChZO&Hn z>k}~#kr`&zYIAip2ve!7} z+)n>T-rKEj#V$^G{GHvdB>RkaqLs17*}~%vGU>LGRv(={$Bnp_LAo_@=kz_!ZA_|} zfm@y1t<3Jx)ZN3#!)L9Ga#o7qY-0eDBF}E!l@y?FBxUN<~4$Gzt8j;SYpSO z%rJ`%oLsFhPqxQAo{6gz?l~Ae4`yqeac-j;dij+515(n}Q~xsHlw z)&!k4Yl;7ll}W0ty9&KMAAP-4X{KJ4J>BQ=M|xfB+OEIJ?$9MUjr!A^PdwjbuC5&> z+rZgE4H-?}%&pbK@-i*GdS>2y{b62u_#qk8wPDW4G$@p86&`5ibPt=8wbA`~Wj`pA zeNL}MA1btJ+q_msfBtJ0{bpg9UR+qO^NXI*eMK3u$Ju7>19yR$t1^B`g64iFxqxD; nt}hN8P%C|~c+$XApA~N&aLTc!B-Y}|U?*JrvD>wwde#2{#sstX diff --git a/locales/ru_RU.po b/locales/ru_RU.po index 36ec18daf..6d7586d35 100644 --- a/locales/ru_RU.po +++ b/locales/ru_RU.po @@ -1,19 +1,20 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Alexey Petukhov , 2014-2015 # Jérémy MOREAU , 2014 # Nikolay , 2016 +# Nikolay , 2017 # Nikolay , 2016 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Russian (Russia) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/ru_RU/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,25 +22,9 @@ msgstr "" "Language: ru_RU\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Заголовок" -msgstr[1] "Заголовки" -msgstr[2] "Заголовки" -msgstr[3] "Заголовки" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Категория формы" -msgstr[1] "Категории формы" -msgstr[2] "Категории формы" -msgstr[3] "Категории формы" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Форма" @@ -47,197 +32,147 @@ msgstr[1] "Формы" msgstr[2] "Формы" msgstr[3] "Формы" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Формы, ожидающие утверждения" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Формы без категорий" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Добавить вопрос" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Изменить вопрос" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Секция" -msgstr[1] "Секции" -msgstr[2] "Секции" -msgstr[3] "Секции" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Не найдена форма. Пожалуйста, выберите форму ниже вместо этой" -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "Объект GLPI" -msgstr[1] "Объекты GLPI" -msgstr[2] "Объекты GLPI" -msgstr[3] "Объекты GLPI" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Произошла ошибка во время выполнения запроса форм" -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Требуется" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Нет формы еще в этой категории" -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Показывать пустое" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Вы уверены, что хотите удалить этот вопрос?" -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "По одному в каждой строке для списка" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Вы уверены, что хотите удалить эту секцию?" -#: ajax/question.php:223 -msgid "Values" -msgstr "Значения" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Вы уверены, что хотите удалить это назначение:" -#: ajax/question.php:224 -msgid "One per line" -msgstr "По одному в каждой линии" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Показать всё" -#: ajax/question.php:236 -msgid "Filter" -msgstr "Фильтр" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "не соответствует ни одному" -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Атрибут" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Требуемое поле пустое:" -#: ajax/question.php:269 -msgid "Range" -msgstr "Диапазон" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" +msgstr "Каталог услуг" -#: ajax/question.php:273 -msgid "Min" -msgstr "Минимум" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" +msgstr "Список форм" -#: ajax/question.php:279 -msgid "Max" -msgstr "Максимум" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Форма создания заявки" -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Дополнительная проверка" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" +msgstr "Вопрос успешно сохранен!" -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Регулярное выражение" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" +msgstr "Вопрос успешно обновлен!" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Укажите дополнительные критерии утверждения в описании вопроса для помощи пользователям." - -#: ajax/question.php:320 -msgid "Show field" -msgstr "Показать поле" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Всегда видим" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Скрытые исключения" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Показанные исключения" - -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Добавить раздел" - -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Изменить раздел" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Добавить назначение" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Такой заголовок уже существует в этой организации! Заголовок должен быть уникальным." #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." msgstr "Категория с таким названием уже существует! Категория не создана." -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Форма создания заявки" - -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "Список форм" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Формы ожидающие согласования" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Такой заголовок уже существует в этой организации! Заголовок должен быть уникальным." +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Заголовок" +msgstr[1] "Заголовки" +msgstr[2] "Заголовки" +msgstr[3] "Заголовки" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "Вопрос успешно сохранен!" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Категория формы" +msgstr[1] "Категории формы" +msgstr[2] "Категории формы" +msgstr[3] "Категории формы" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "Вопрос успешно обновлен!" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Цель" +msgstr[1] "Цели" +msgstr[2] "Цели" +msgstr[3] "Цели" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Ответ" -msgstr[1] "Ответы" -msgstr[2] "Ответы" -msgstr[3] "Ответы" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Тип доступа" -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Публичный доступ" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Личный доступ" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Доступ запрещен" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Ссылка на форму" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Пожалуйста, активную форму можно увидеть по ссылке" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Добавить заголовок" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Требуемое поле пустое:" +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Такой заголовок уже существует в родительской организации! Заголовок перезапишет предыдущий." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Ответ в форме" @@ -245,450 +180,324 @@ msgstr[1] "Ответы в форме" msgstr[2] "Ответ в форме" msgstr[3] "Форма ответов" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "Заказчик" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" -msgstr "Проверяющий" +msgstr "Согласующий" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "ожидание" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "принято" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "отклонено" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." -msgstr "Форма принята проверяющим." +msgstr "Форма принята согласующим." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Форма успешно сохранена." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Комментарий" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Требуется если отклонено" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Отклонить" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Принять" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Требуется комментарий для отклонения!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Не удается выполнить задание!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Форма успешно сохранена!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "Вы не согласующий этих ответов" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Форма данных" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Описание" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Домашняя страница" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Доступ" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Все языки" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Публичный доступ" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Личный доступ" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Доступ запрещен" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Прямой доступ с домашней страницы" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Требуется проверка?" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: inc/form.class.php:528 -msgid "see all" -msgstr "" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "" - -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Служба поддержки" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Служба поддержки GLPI" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Мои последние формы (заказчик)" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Упрощенный каталог услуг" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Еще не создано форм" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Расширенный каталог услуг" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Все мои формы (заказчик)" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Режим службы поддержки" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Мои последние формы (утверждающий)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Назначение" +msgstr[1] "Назначения" +msgstr[2] "Назначения" +msgstr[3] "Назначения" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Нет форм для утверждения" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Назначение" +msgstr[1] "Назначения" +msgstr[2] "Назначений" +msgstr[3] "Назначения" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Все мои формы (утверждающий)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Удалить" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Выбрать утверждающего сотрудника" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Добавить назначение" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "Требуется указать название!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Вы должны выбрать проверяющего!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Дублировать" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Форма дубликата: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Форма передана: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Цель" -msgstr[1] "Цели" -msgstr[2] "Цели" -msgstr[3] "Цели" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Тип доступа" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Добавить заголовок" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Требуется указать тип!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Такой заголовок уже существует в родительской организации! Заголовок перезапишет предыдущий." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Секция" +msgstr[1] "Секции" +msgstr[2] "Секции" +msgstr[3] "Секции" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Требуется указать название" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Форма была сохранена" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" -msgstr "Форма требует утверждения" +msgstr "Форма требует согласования" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Форма отклонена" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Форма принята" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Форма удалена" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Форма #" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Название формы" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Полная форма ответа" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Комментарий отклонения" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" -msgstr "Ссылка для утверждения" +msgstr "Ссылка на согласование" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "Запрос #" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Форма была создана" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "Ваш запрос сохранен!" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Здравствуйте,\\nВаш запрос формы GLPI был успешно сохранен под номером ##formcreator.request_id## и передана в команду службы поддержки.\\nВы можете увидеть Ваши ответы по следующей ссылке:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" -msgstr "Форма из GLPI, требующая проверки" +msgstr "Форма GLPI должна быть согласована" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" -msgstr "Здравствуйте,\\nФорму из GLPI нужно проверить, и в качестве проверяющего выбраны вы.\\nВы можете получить доступ к нему, нажав на эту ссылку:\\n##formcreator.validation_link##" +msgstr "Здравствуйте,\\nФорму из GLPI нужно проверить, и в качестве согласующего выбраны Вы.\\nВы можете получить доступ к нему, нажав на эту ссылку:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" -msgstr "Ваша форма была отклонена проверяющим" +msgstr "Ваша форма была отклонена согласующим" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " "below:\\n##formcreator.validation_comment##\\n\\nYou can still modify and " "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" -msgstr "Здравствуйте,\\nМы сожалеем сообщить Вам, что Ваша форма была отклонена проверяющим по причине ниже:\\n##formcreator.validation_comment##\\n\\nВы можете все еще исправить и снова отправить кликнув по этой ссылке:\\n##formcreator.validation_link##" +msgstr "Здравствуйте,\\nМы сожалеем сообщить Вам, что Ваша форма была отклонена согласующим по причине ниже:\\n##formcreator.validation_comment##\\n\\nВы можете все еще исправить и снова отправить кликнув по этой ссылке:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" -msgstr "Ваша форма была принята проверяющим" +msgstr "Ваша форма была принята согласующим" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." -msgstr "Здравствуйте,\\nМы рады сообщить Вам, что Ваша форма была принята проверяющим.\\nВаш запрос будет вскоре рассмотрен." +msgstr "Здравствуйте,\\nМы рады сообщить Вам, что Ваша форма была принята согласующим.\\nВаш запрос будет вскоре рассмотрен." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" msgstr "Ваша заявка была удалена администратором" -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "Здравствуйте,\\nМы сожалеем сообщить Вам, что Ваш запрос не может быть рассмотрена и была удалена администратором." - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Вопрос" -msgstr[1] "Вопросы" -msgstr[2] "Вопросы" -msgstr[3] "Вопросы" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Удалить" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "Требуется указать название" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "Требуется указать тип поля" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "Требуется указать секцию" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "Требуется указать значение поля:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Поле с описанием должно содержать описание:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "Невозможно получить информацию из LDAP!" - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Назначение" -msgstr[1] "Назначения" -msgstr[2] "Назначения" -msgstr[3] "Назначения" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Назначение" -msgstr[1] "Назначения" -msgstr[2] "Назначений" -msgstr[3] "Назначения" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Здравствуйте,\\nМы сожалеем сообщить Вам, что Ваш запрос не может быть рассмотрена и была удалена администратором." -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "Требуется указать тип!" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Ответ" +msgstr[1] "Ответы" +msgstr[2] "Ответы" +msgstr[3] "Ответы" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Текущая активная организация" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Заказчик организации по умолчанию" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "Первый действующий заказчик организации (в алфавитном порядке)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Последний действующий заказчик организации (в алфавитном порядке)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Форма организации" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" -msgstr "Организация проверяющего по умолчанию" +msgstr "Организация согласующего по умолчанию" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Особая организация" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Организация отвечающего на запросы по умолчанию" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Форма объекта GLPI > Организация отвечающего на запросы" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Тэг из запросов" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Особые тэги" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Тэги из запросов и особых тэгов" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Тэги из запросов или особых тэгов" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "Аналогично ответу на вопрос" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "Получено из даты создания заявки" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "Получено из ответов на вопрос" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "Точный ответ на вопрос" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Целевая заявка" @@ -696,144 +505,468 @@ msgstr[1] "Целевые заявки" msgstr[2] "Целевые заявки" msgstr[3] "Целевые заявки" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Изменить назначение" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Заголовок заявки" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Вопрос" +msgstr[1] "Вопросы" +msgstr[2] "Вопросы" +msgstr[3] "Вопросы" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Отвечающий на запросы" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Организация запрашивающего" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Тэги заявки" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Тэги" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" -msgstr "Добавить подтверждение в качестве первой заметки" +msgstr "Добавить согласование в качестве первого комментария заявки" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "Отменить" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Участники заявки" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Запрашивающий форму" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" -msgstr "Утверждающий форму" - -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Указанная персона" +msgstr "Согласующий форму" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Персона из вопроса" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Указанная группа" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Группа из вопроса" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Указанный поставщик" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Поставщик из вопроса" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Форма полностью" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "Требуется указать заголовок!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "Требуется указать описание!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Переключатель" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Объект GLPI" +msgstr[1] "Объекты GLPI" +msgstr[2] "Объекты GLPI" +msgstr[3] "Объекты GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Это не число:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "Число должно быть больше, чем %d:" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "Число должно быть меньше, чем %d:" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "Указанный формат не соотвутствует" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Плавающий" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "Это не целое число:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Целое число" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "Этот текст слишком короткий (минимум %d символов)" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "Этот текст слишком длинный (максимум %d символов)" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Текстовое поле" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Текст" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "Этот почтовый адрес ЭП неправильный:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Дата и время" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "Вопрос должен содержать хотя бы %d ответ(ов)" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "Вопрос должен содержать не более, чем %d ответ(ов)" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Множественный выбор" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Требуемое поле отсутствует:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "Выбор LDAP" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Выбор" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "Чекбокс" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" -msgstr "" +msgstr "Обратиться за помощью" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" -msgstr "" +msgstr "Мои просьбы о помощи" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" -msgstr "" +msgstr "Заказать актив" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" -msgstr "" +msgstr "Консультирующие каналы" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Показать всё" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "Согласовать" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "не соответствует ни одному" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "Закрыто" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "" +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Указанная персона" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" -msgstr "" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Указанная группа" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" -msgstr "" +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Категория базы знаний" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" -msgstr "" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Обязательный" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Вы уверены, что хотите удалить этот вопрос?" +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Добавить вопрос" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Вы уверены, что хотите удалить эту секцию?" +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Добавить раздел" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Вы уверены, что хотите удалить это назначение:" +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Требуется указать тип поля" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Требуется указать секцию" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Требуется указать значение поля:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Поле с описанием должно содержать описание:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Невозможно получить информацию из LDAP!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "Импорт форм" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Описание" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Домашняя страница" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Доступ" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Все языки" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Прямой доступ с домашней страницы" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Требуется согласование?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Форма по умолчанию в каталоге услуг" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Категория" +msgstr[1] "Категория" +msgstr[2] "Категории" +msgstr[3] "Категории" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "смотреть всё" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "По популярности" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "По алфавиту" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Пожалуйста, опишите здесь, что Вам нужно" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Мои последние формы (заказчик)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Еще не создано форм" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Все мои формы (заказчик)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Мои последние формы (согласующий)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Нет форм для согласования" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Все мои формы (согласующий)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Выбрать согласующего" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Вы должны выбрать согласующего!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Дублировать" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Форма дубликата: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Форма передана: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "Формы успешно импортированы из %s" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Проблема" +msgstr[1] "Проблема" +msgstr[2] "Проблемы" +msgstr[3] "Проблемы" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Изменить вопрос" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Показывать пустой" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "По одному в каждой строке для списка" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Значения" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "По одному в каждой линии" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Фильтр" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Атрибут" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Диапазон" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Минимум" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Максимум" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Дополнительное согласование" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Регулярное выражение" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Укажите дополнительные критерии согласования в описании вопроса для помощи пользователям." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Показать поле" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Всегда видим" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Скрытые исключения" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Показанные исключения" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Изменить раздел" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Формы без категорий" diff --git a/locales/tr_TR.mo b/locales/tr_TR.mo index ce18139b6f6f56d0ca8758be817b20bb452b82ca..ea46ff0985c2841d9e577c2d6cb010079fb0efee 100644 GIT binary patch delta 6277 zcmZ{n3v^Y*xyL6W5@L80AOvJ10*R2AghVh30`ibY1QjdVqVAltlkA>XJo_9V0XjlCl#XtwjobmX z^M{}o+zzM0gOIuA$FK~Zgsf@)05yIvyBz|{q3n!>{4?kBQwrz7TDS;Kfhm#o%>%aM zD^P}BfpXPPp*HXatb~8DtQc23@dZ#DUkJ64l~5kp0CnO7WN&6GRLCBJvi}Thf`?&l zFqJ=0(TVpplBEao&)mn4PPh|d!#oYOz%eKnzYgX4U%;L46x;$o zgZtis6=Z4`9L#Bs!;Mw=UlZ1_3mMn|b@FzoSO&Je1!^OALxtusI0x>6O1=|t5d4kh zTTtUpL51$`mX)|ow`C4gXs*anQC3EvV)zI=2kwE)F)u=G=zpO+^n1vmOeuqA!l_Wn zv;xXAK9ongp$>L8l-)<6V!szExobv zse|&sLMS^|LM`Olb|=(^H$$ELA*c=RgXCP!JYTGs??4&&5#*owZ+%3sVJKxPz!E> zb#O1#hK@t7zBvVDU?|5@dm7ZWya;OkHBcT(KqcQ6sNA{BwjYKH?GsQN&cmEy+($(* zI|k2(KY=p*cQ_kXaV%}}-b$$zC`Q9pCb=b_$(e%t># zoKO2C9rz!Xe}l@MDb2;)YJ|F7txz6$5OR^sKA2O| zy+&m${3GOzG38{64A(<#U;$JT-4117FVu$np*->uRBTT`h3pO6{(q<}f5-L@np+G( z1=PGbbBVuVxR{QSa5a>n4R9RvpiaEi_TL3Z(0%~Qa4*!nUC@DFhdRJ(vZr!yBQp{yr!>k3e~7 zH&p2M!}0JNQ1f4f6X3}lm0BvMrTE0wLA5tPEpRW?j-R&dhuZLKw*5<}1>UypK^GUt zkAWID4JsF!ESE#_(p(SgVeWn^a?LlPvi>Jf6MqG@(?7#XIQ)|0396ySEwo$*HLerN z&MlT9R0#J%9pDI5sDB7`z!Q)^ggH~nbES#1;Q4S7Y=Utp15d(2)D}DLMzq zg+3Z62dT88`)tP=*n{pt&)Po0E?cbZrQ>q@F$?cS7a*Nhh4;g3M9PPo(GjGw9qFBr zHx!Z$NTC`i+ohrXBEnzkE0Hxziba6m3c*&FIx_Sx*5um zr%@kLNue`PfTp555jkmYL7zYaMag&o%|PGK`LCq%8AP5Hp3_CpMekQWLgzmF;dAgI z^fffp_MHVkW$XQx1E{8Q7t%H4Sui0wEfDc(c zZx?FCpYy;D+t!<)@*?Uk)QbO$ue)D`R-zB1TrWQ=pDn^X0WU!l(fw#GdJqkiE-JU9 zZ=x@vi_mi=mn&*0?kI9YS^+KeiC`;>u5MyhDPX4e2L0ekjm##6N;leQn?T< z2ouBKs&vxc%~?O~MV)p(?m2$oB>W)olO6f%Mr=AGd~K9>t`~{5r8awkxvVpl3OvVk zHo9>?>Sj`Db6K38Xt;88-4Hk9W&DJf-#Gfpl9Hw2rNsS_43bG zWCx8YOmx~)=|o^wBr{%zmk#SHrw&`PXsvU#7xy9=v)T=RG^R1Uy>en%HlFc=LT~t3 zW%I<=?!tM!AQQ-h<8ss><0d0s{^iOWN(M#!R9IcLbG;Wk?US))ulCX#{fOs8+>9Gf zbe6xAyPI*MDKBu6sf$%qH5rw3EmN8K=#2I{2QUo#}Lw&h%)DS=Z@tst*{A zjSn7sa~7BQspNZ`atT%!drPIgB?BusZZg0~@GlF!J2~lj(ZETyJDe`=x$JU!bYM>Y z;N%G<*K#VQSSFQn;wes4op3k%i7Xiqbt0W^+Kq6apr&|~%xR;8PSShkfU? zUfzje{>h`Rb(QR#-do69$E!`ae*9m)B^|$*OfBK?Db;1`QUggIHce@nPACe7GkEyj z&w=zslCeE=m$8sb_pSCaT@Cz z-W}K6(%d+!o>I0Nm({LIV=b=B)#9*wFP-jo7H2!CIBWf+=VqNtGHr$S!i*P*`)zfR zRAK>hlO0*NgG(~?uO;KJPo=ZTc-Cq2(}XnWb{#Jk__6#m)ApSacFgccA3f0D%b_w( zESt&3-Sp9e;VUyH4O!)OxpC@m&S)-M=cfHmCve?N{+yY&l!W&;PY55YzM^zZGO97L z@MQHnRm;d_uCLQ~sK-nDWPj4p$7B>EZ`AAzFWYkq|v^(WQ`wkuLP4F0`{jjTk$4BfY3ZuLIB-d7k z&E`W>-14KnS+m?r`u)9eUblFHit}#+7Q2C;iF^IM89!~ugyjuwReg{4cyVH& z-8tFrY=XT;y`#M(Uzli^o&R#fn3B=0*iD+kFXwfW9Q8=!@?8JpoJ$AS)zG8?_qO#N z>h3!fb5ikyJdLB%E#?D9$NCQS?SB8^q=;;HYsn06pwsU5#NB}4v1oJ5ZOg_TFO%?k ziq@4;*`%WY_q;ccp{H#mJZsLbNbx9ryHhbI+rx}%rW8zTR*X9y)1!6TtQvdz!j#z2 zgMnL^Q(WeKCxlPUxn$YmVtN;yWZi0()^??M&>c6L_5$DOAf!Afeou?B!!tIY-VMYr z=PamLQt)q_*V|7g$W%ov8BS|jF*|GhQ^-f2$I}M-5pJ|K!yin)hZ|IxzoV(O*!emH@tco`G%OB{qf21Ff>95NG;KU2kKG(Ldy za3e0jzn~tJ!&8f}6bo=A=HqTm;Q8h>l{gMuKw4zpLG|D=>cQ7=1jZyAGZ3?oKU2o0 z7tTRlHy_n-Kk5M+FcZ6+r=3?(_wT{Y`tW>{NJS4CgoCljIS1*4319-QN3Jy;s1dNJ z9v;9HJb}9L87#r`s9B8VM;-5n8qrkbCo>X5L#dQfQ3K{-2G*kftQZg950YwxD{n6?1SuYVOaWrs@+^2fs!&IDui;ebY7mym4k6YL0vu zS>31yRiRF-MGfHw=cA||Z$nMdlc*jaLG|=i)P4Spdhp*-YvB{;=kE8Ao}v>5pf1Qn z-KY@N(rLIHtC7Z=W2m>~Eb77MQLo=+)OR7C1*H4sBZo{SdT|lz`iI@|UC79V%n2%b z@LAN2E~2L3Ths$m7_Dxdqo@aTBg@8oh&umsR7d(VANmkwpr&pt zChPq#rJ@GRMh)>I)Kt_UqhwZL9&W}045J==+5O(n8=Z=AIF94vaSSd;HDn8FWS&KR zFWzvTlOYbgP35A;m`gaF{ojs^uG%j!pZ(lX(K%g&T3oA8BefIN&{t45K8fnt8PpWK zgX;Me)SCD=Y9wQ5O&O+PNON6HMML99ed$&^A4gqq95s}uF&jU`TI@+H7GpiCA%8-R z)SJ$)v5@^7F4E##h;g_A^|sVyGyb};g9DnoEvN?UM>VM19e)dTgHKTn{x9mai)T0{ zVJ?;=d+#5P!DWIHQ+If z$7gT`9zb39vGZT3A^#G!m=kDSE)GW>zYBGrB_S&6>1x!8ZKyfifeF}&8mcbTB7F^Y z-g#vGnJcIc#Io{=a0JHVeAIbMQTJ`8Y(^Ha>BPQx67|40QFET;i(X%bYS?|)4;Q1RCg^O&p6s__lHUIgDjLF_ zs0&_1_3$JPz_X|uTtcmZ%c!1x<&MWO?gQ9QL^U)6HB!aSS=gWb<*4%-F$qJMqWAv^ zci<4NVE+~UfJ2L;4e_D&%aQ3e)yQm^Hq=}n!X*3+>PvVEb^b-v+W9A{0lmgYO-D5( z2SfUyjEd%LmOEjAGk`jA9VX*u=N?oKkK#al19jfJZvP|aH>ig6FNvO?g&M(f)N}7G zVf;1Jeh%=lGxhGo9msk#2a!K>fsHPVn-CrPp{UiLjXG~8>if}*>hX5e6m_Aldl5BK zXV8N_qOw`@ufm7QtR%}x3sKoleoD4zhccUNBjscPxwHI=ogWZ=L)0NU9$BQ%<3Tcz zsB9(bkjk@UsC&NIz)l_U5|u?{eWdpP%}-qQ5!CRhl#-{(GVM?*$WF46JVCxsv{tm@ zCzGehoh6j&_I`H9(H+#Ebo>1Gyj>oqrZ+*wMv2V3t44T$Z6|3aZIL6J;(c6+q77~3!juOp(4B1DtrkHZ` zBcgIYxtok7_maq+ieM_4MD#&XX(c}B)5t_Qi&v;G?HJF46=m0Kz0$8 zc2Z0BYKKxxW{{cWE>cNChuQ2WKP2$NAoxPEgZ2P9>g{P-hd+f_; zlkHb&H*C_NUH0WczPMoC(ni~nlocK}cuuTsAC~Fy+t<^I?WJKuc4mwZ&&^oou_uN< z*SBSTuqNQG@vrqatf{jvWKOZYy_xZ?>zbMxf`OKBrgw((zcxwX<{&kK1HgDyvTEXofr`E0Z2OGi_IelWn4~~64Cax;b z614GotAQ$?2Xb+`{~3LHdvOM*y``z+u(2OK3>y(JiM)J en8&_4X{LRtyvx2;QDLW6PPVpkRybjDt>=Hz$lTii diff --git a/locales/tr_TR.po b/locales/tr_TR.po index 9066131e2..a245bc699 100644 --- a/locales/tr_TR.po +++ b/locales/tr_TR.po @@ -1,6 +1,6 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Resources Development Team -# This file is distributed under the same license as the GLPI - Resources plugin package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # # Translators: # Kaya Zeren , 2015-2016 @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:52+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,162 +18,70 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "Üst Bilgiler" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "Form kategorileri" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" msgstr[0] "Formlar" -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "Değerlendirme bekleyen formlar" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "Kategorisi bulunmayan formlar" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "Bir soru ekle" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "Bir soruyu düzenle" - -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "Bölüm" - -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "GLPI nesnesi" - -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "Zorunlu" - -#: ajax/question.php:178 -msgid "Show empty" -msgstr "Boş görüntülensin" - -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "Listeler için her satıra bir tane" - -#: ajax/question.php:223 -msgid "Values" -msgstr "Değerler" - -#: ajax/question.php:224 -msgid "One per line" -msgstr "Her satıra bir tane" - -#: ajax/question.php:236 -msgid "Filter" -msgstr "Süzgeç" - -#: ajax/question.php:245 -msgid "Attribute" -msgstr "Öznitelik" - -#: ajax/question.php:269 -msgid "Range" -msgstr "Aralık" - -#: ajax/question.php:273 -msgid "Min" -msgstr "En küçük" - -#: ajax/question.php:279 -msgid "Max" -msgstr "En büyük" - -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "Ek değerlendirme" - -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "Kurallı ifade" - -#: ajax/question.php:313 -msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "Açıklamada ek değerlendirme koşullarını belirterek kullanıcılara yardımcı olabilirsiniz." +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Herhangi bir form bulunamadı. Lütfen aşağıdan bir form seçin" -#: ajax/question.php:320 -msgid "Show field" -msgstr "Alan görüntülensin" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Formlar alınırken bir sorun çıktı" -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "Herzaman görüntülensin" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "Bu kategoride henüz bir form yok" -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "Şu olmadan gizlensin" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Bu soruyu silmek istediğinize emin misiniz?" -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "Şu olmadan görüntülensin" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Bu bölümü silmek istediğinize emin misiniz?" -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "Bir bölüm ekle" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Bu hedefi silmek istediğinize emin misiniz:" -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "Bir bölümü düzenle" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Tüm Ögelere Bakın" -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "Bir hedef ekle" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "uygun bir öge bulunamadı" -#: front/category.form.php:13 -msgid "" -"A category already exists with the same name! Category creation failed." -msgstr "Aynı adlı bir kategori bulunduğundan kategori oluşturulamadı." +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Zorunlu bir alan boş bırakılmış:" -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 msgid "Service catalog" msgstr "Hizmet Kataloğu" -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "Form Oluşturucu" - #: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 msgid "Form list" msgstr "Form listesi" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "Bu varlık için bir üst bilgi zaten var. Her bir varlık için yalnız bir üst bilgi bulunabilir." +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Form Oluşturucu" #: front/question.form.php:15 msgid "The question has been successfully saved!" @@ -183,327 +91,276 @@ msgstr "Soru kaydedildi!" msgid "The question has been successfully updated!" msgstr "Soru güncellendi!" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "Yanıt" +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 +msgid "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Bu varlık için bir üst bilgi zaten var. Her bir varlık için yalnız bir üst bilgi bulunabilir." -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "Bilgi Bankası Kategorisi" +#: front/category.form.php:13 +msgid "" +"A category already exists with the same name! Category creation failed." +msgstr "Aynı adlı bir kategori bulunduğundan kategori oluşturulamadı." -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "Destek Merkezi" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Değerlendirme bekleyen formlar" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Üst Bilgiler" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Form kategorileri" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Hedefler" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Erişim tipi" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "Zorunlu bir alan boş bırakılmış:" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Herkese açık" + +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Özel" + +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Kısıtlı" + +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Forma bağla" + +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Lütfen bağlantının görüntülenmesi için formu etkinleştirin" -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Bir üst bilgi ekle" + +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Üst varlık için bir üst bilgi zaten var. Farklı bir varlık öncekinin yerine geçer." + +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" msgstr[0] "Form yanıtları" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" msgstr "İstekte bulunan" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" msgstr "Değerlendirici" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" msgstr "bekliyor" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" msgstr "onaylandı" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" msgstr "reddedildi" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." msgstr "Form değerlendirici tarafından onaylandı" -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." msgstr "Form kaydedildi" -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" msgstr "Açıklama" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" msgstr "Reddedildi ise zorunlu" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" msgstr "Reddet" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" msgstr "Onayla" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" msgstr "Red açıklaması zorunludur." -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" msgstr "Hedefler oluşturulamadı." -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" msgstr "Form kaydedildi!" -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "Bu yanıtların değerlendiricisi değilsiniz" + +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 msgid "Form data" msgstr "Form verisi" -#: inc/form.class.php:92 -msgid "Description" -msgstr "Açıklama" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "Ana sayfa" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "Erişim" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "Tüm diller" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "Herkese açık" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "Özel" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "Kısıtlı" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "Ana sayfaya doğrudan erişim" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "Değerlendirilmesi gerekli" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "Hizmet kataloğundaki varsayılan form" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "Kategoriler" - -#: inc/form.class.php:528 -msgid "see all" -msgstr "tümünü görüntüle" - -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "Sık kullanım sıralaması" - -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "Alfabetik sıralama" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Destek Merkezi" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "Lütfen neye gerek duyduğunuzu yazın" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "GLPI Destek Merkezi" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "Son formlarım (istekte bulunan)" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Basitleştirilmiş Hizmet Kataloğu" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "Henüz bir form eklenmemiş" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Genişletilmiş Hizmet Kataloğu" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "Tüm formlarım (istekte bulunan)" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Destek Merkezi Kipi" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "Son formlarım (değerlendirici)" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Hedefler" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "Değerlendirilmeyi bekleyen bir form yok" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Hedefler" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "Tüm formlarım (değerlendirici)" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Sil" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "Bir değerlendirici seçin" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Bir hedef ekle" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" msgstr "Ad boş olamaz!" -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "Bir değerlendirici seçmelisiniz!" - -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "Kopyala" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "Form kopyalandı: %s" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "Form Aktarıldı: %s" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "Hedefler" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "Erişim tipi" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "Forma bağla" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "Lütfen bağlantının görüntülenmesi için formu etkinleştirin" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "Bir üst bilgi ekle" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Tip boş olamaz!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "Üst varlık için bir üst bilgi zaten var. Farklı bir varlık öncekinin yerine geçer." +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Bölüm" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "Sorun" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Başlık zorunludur" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" msgstr "Form kaydedildi" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" msgstr "Değerlendirilmesi gereken bir form var" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" msgstr "Form reddedildi" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" msgstr "Form onaylandı" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" msgstr "Form silindi" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" msgstr "Form No" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" msgstr "Form adı" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" msgstr "Tam form yanıtları" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" msgstr "Red açıklaması" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" msgstr "Onaylama bağlantısı" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" msgstr "İstek No" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" msgstr "Bir form eklendi" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" msgstr "İsteğiniz kaydedildi" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" msgstr "Merhaba,\\nGLPI üzerindeki isteğiniz ##formcreator.request_id## numara ile kaydedilerek destek ekibimize iletildi.\\nİsteğinize verilen yanıtları şu bağlantıdan görebilirsiniz:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" msgstr "Değerlendirilmesi gereken bir GLPI formu var" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" msgstr "Merhaba,\\nGLPI üzerinde değerlendirilmesi gereken bir formu değerlendirmek üzere seçildiniz.\\nAşağıdaki bağlantıya tıklayarak forma erişebilirsiniz:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" msgstr "Formunuzdaki bilgiler hatalı olduğundan reddedildi" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " @@ -511,284 +368,553 @@ msgid "" "resubmit it by clicking onto this link:\\n##formcreator.validation_link##" msgstr "Merhaba,\\nFormunuz üzerindeki veriler şu sorunlar nedeniyle reddedildi:\\n##formcreator.validation_comment##\\n\\nFormdaki verileri düzenleyip yeniden göndermek için şu bağlantıyı kullanabilirsiniz:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 msgid "Your form has been accepted by the validator" msgstr "Formunuz kabul edildi" -#: inc/notificationtargetformanswer.class.php:116 +#: inc/notificationtargetform_answer.class.php:116 msgid "" "Hi,\\nWe are pleased to inform you that your form has been accepted by the " "validator.\\nYour request will be considered soon." msgstr "Merhaba,\\nFormunuz kabul edildi.\\nİsteğiniz kısa süre içinde değerlendirilecek." -#: inc/notificationtargetformanswer.class.php:121 +#: inc/notificationtargetform_answer.class.php:121 msgid "Your form has been deleted by an administrator" -msgstr "Formunuz bir yönetici tarafından silindi" - -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "Merhaba,\\nİsteğiniz dikkate alınmadı ve bir yönetici tarafından silindi." - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "Sorular" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "Sil" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "Başlık zorunludur" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "Alan tipi zorunludur" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "Bölüm zorunludur" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "Alan değeri zorunludur:" - -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "Bir açıklama alanında açıklama bulunmalıdır:" - -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "LDAP bilgileri geri yüklenemedi." - -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "Hedefler" - -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "Hedefler" +msgstr "Formunuz bir yönetici tarafından silindi" -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "Tip boş olamaz!" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Merhaba,\\nİsteğiniz dikkate alınmadı ve bir yönetici tarafından silindi." + +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Yanıt" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" msgstr "Geçerli etkin varlık" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" msgstr "Varsayılan istekte bulunan kullanıcının varlığı" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" msgstr "İlk devingen istekte bulunan kullanıcının varlığı (alfabetik)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" msgstr "Son devingen istekte bulunan kullanıcının varlığı (alfabetik)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" msgstr "Form varlığı" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" msgstr "Onaylayan kişinin varsayılan varlığı" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" msgstr "Belirli varlık" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" msgstr "Soruyu yanıtlayan kullanıcı tipinin varsayılan varlığı" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" msgstr "Bir GLPI nesnesinden > Varlık tipi soru yanıtı" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" msgstr "Sorulardan etiketler" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" msgstr "Belirli etiketler" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" msgstr "Sorulardan etiketler ve belirli etiketler" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" msgstr "Sorulardan etiketler ya da belirli etiketler" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" msgstr "sorunun yanıtına eşit" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" msgstr "çağrı oluşturma zamanından hesaplanan" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" msgstr "sorunun yanıtından hesaplanan" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" +msgstr "" + +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "Sorunun yanıtına eşit" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" msgstr[0] "Hedef çağrılar" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" msgstr "Bir hedefi düzenle" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" msgstr "Çağrı başlığı" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Sorular" + +#: inc/targetticket.class.php:324 msgid "User type question" msgstr "Kullanıcı tipi soru" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" msgstr "Varlık tipi soru" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" msgstr "Çağrı etiketleri" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" msgstr "Etiketler" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" msgstr "İlk çağrı izlemesine değerlendirme iletisi eklensin" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" msgstr "İptal" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" msgstr "Çağrı aktörleri" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" msgstr "Form ile istekte bulunan" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" msgstr "Formu değerlendiren" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" -msgstr "Belirli bir kişi" - -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 msgid "Person from the question" msgstr "Sorudan kişi" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" -msgstr "Belirli bir grup" - -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 msgid "Group from the question" msgstr "Sorudan grup" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" -msgstr "Belirli sağlayıcı" +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" +msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 msgid "Supplier from the question" msgstr "Sorudan sağlayıcı" -#: inc/targetticket.class.php:883 +#: inc/targetticket.class.php:988 msgid "Full form" msgstr "Tam form" -#: inc/targetticket.class.php:927 +#: inc/targetticket.class.php:1035 msgid "The title cannot be empty!" msgstr "Başlık boş olamaz!" -#: inc/targetticket.class.php:933 +#: inc/targetticket.class.php:1041 msgid "The description cannot be empty!" msgstr "Açıklama boş olamaz!" -#: inc/wizard.class.php:83 +#: inc/fields/radios-field.class.php:48 +msgid "Radios" +msgstr "Radyo düğmeleri" + +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "GLPI nesnesi" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" +msgstr "Bu bir sayı değil:" + +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" +msgstr "Şu sayı %d değerinden büyük olmalıdır:" + +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" +msgstr "Şu sayı %d değerinden küçük olmalıdır:" + +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" +msgstr "Özel biçim uyumlu değil:" + +#: inc/fields/float-field.class.php:38 +msgid "Float" +msgstr "Ondalık" + +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" +msgstr "Bu bir tamsayı değil:" + +#: inc/fields/integer-field.class.php:38 +msgid "Integer" +msgstr "Tamsayı" + +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" +msgstr "Metin çok kısa (en az %d karakter olmalıdır)" + +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" +msgstr "Metin çok uzun (en fazla %d karakter olmalıdır)" + +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" +msgstr "Metin alanı" + +#: inc/fields/text-field.class.php:32 +msgid "Text" +msgstr "Metin" + +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" +msgstr "E-posta adresi geçersiz:" + +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" +msgstr "Tarih saat" + +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" +msgstr "Şu sorunun en az %d yanıtı olmalıdır" + +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" +msgstr "Şu soru %d yanıttan fazlasını kabul etmez" + +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" +msgstr "Çoklu seçim" + +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" +msgstr "Zorunlu bir dosya eksik:" + +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" +msgstr "LDAP Seçin" + +#: inc/fields/select-field.class.php:51 +msgid "Select" +msgstr "Seçin" + +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" +msgstr "İşaret kutuları" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 msgid "Seek assistance" -msgstr "" +msgstr "Destek İsteyin" -#: inc/wizard.class.php:87 +#: inc/wizard.class.php:73 inc/wizard.class.php:74 msgid "My requests for assistance" -msgstr "" +msgstr "Destek İsteklerim" -#: inc/wizard.class.php:98 +#: inc/wizard.class.php:85 inc/wizard.class.php:86 msgid "Book an asset" msgstr "Bir varlığı ayırtın" -#: inc/wizard.class.php:105 +#: inc/wizard.class.php:94 inc/wizard.class.php:95 msgid "Consult feeds" msgstr "Akışlara bakın" -#: scripts/combobox.js.php:54 -msgid "Show All Items" -msgstr "Tüm Ögelere Bakın" +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "Değerlendirmek için" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" -msgstr "uygun bir öge bulunamadı" +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "Kapalı" -#: scripts/scripts.js.php:165 -msgid "Back" -msgstr "Geri" +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Belirli bir kişi" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" -msgstr "Herhangi bir form bulunamadı. Lütfen aşağıdan bir form seçin" +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Belirli bir grup" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" -msgstr "Formlar alınırken bir sorun çıktı" +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Bilgi Bankası Kategorisi" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" -msgstr "Bu kategoride henüz bir form yok" +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Zorunlu" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" -msgstr "Bu soruyu silmek istediğinize emin misiniz?" +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Bir soru ekle" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" -msgstr "Bu bölümü silmek istediğinize emin misiniz?" +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Bir bölüm ekle" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" -msgstr "Bu hedefi silmek istediğinize emin misiniz:" +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Alan tipi zorunludur" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Bölüm zorunludur" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Alan değeri zorunludur:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Bir açıklama alanında açıklama bulunmalıdır:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "LDAP bilgileri geri yüklenemedi." + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "Formları al" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Açıklama" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Ana sayfa" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Erişim" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Tüm diller" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Ana sayfaya doğrudan erişim" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Değerlendirilmesi gerekli" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Hizmet kataloğundaki varsayılan form" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Kategoriler" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "tümünü görüntüle" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Sık kullanım sıralaması" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Alfabetik sıralama" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Lütfen neye gerek duyduğunuzu yazın" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Son formlarım (istekte bulunan)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Henüz bir form eklenmemiş" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Tüm formlarım (istekte bulunan)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Son formlarım (değerlendirici)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Değerlendirilmeyi bekleyen bir form yok" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Tüm formlarım (değerlendirici)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Bir değerlendirici seçin" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Bir değerlendirici seçmelisiniz!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Kopyala" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Form kopyalandı: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Form Aktarıldı: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "Form %s üzerinden alındı" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Sorun" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Bir soruyu düzenle" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Boş görüntülensin" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Listeler için her satıra bir tane" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Değerler" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Her satıra bir tane" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Süzgeç" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Öznitelik" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Aralık" + +#: ajax/question.php:272 +msgid "Min" +msgstr "En küçük" + +#: ajax/question.php:278 +msgid "Max" +msgstr "En büyük" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Ek değerlendirme" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Kurallı ifade" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Açıklamada ek değerlendirme koşullarını belirterek kullanıcılara yardımcı olabilirsiniz." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Alan görüntülensin" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Herzaman görüntülensin" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Şu olmadan gizlensin" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Şu olmadan görüntülensin" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Bir bölümü düzenle" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Kategorisi bulunmayan formlar" diff --git a/locales/uk_UA.mo b/locales/uk_UA.mo index 5c92d394846980209ac622efff11fd8b8d2bb103..d3259d37323ebe1bc0decda7adaac4a2eb7d1516 100644 GIT binary patch literal 19244 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, 2016-2017 msgid "" msgstr "" "Project-Id-Version: GLPI Plugin - Formcreator\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-14 09:54+0200\n" -"PO-Revision-Date: 2016-10-14 07:54+0000\n" -"Last-Translator: alexandre delaunay \n" +"POT-Creation-Date: 2017-01-31 16:47+0100\n" +"PO-Revision-Date: 2017-01-31 15:51+0000\n" +"Last-Translator: Thierry Bugier Pineau \n" "Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/teclib/glpi-project-plugin-formcreator/language/uk_UA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,805 +18,935 @@ msgstr "" "Language: uk_UA\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: hook.php:56 inc/form.class.php:315 inc/header.class.php:7 -msgid "Header" -msgid_plural "Headers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: hook.php:57 inc/category.class.php:9 -msgid "Form category" -msgid_plural "Form categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: setup.php:20 setup.php:146 ajax/homepage_forms.php:48 -#: ajax/homepage_link.php:6 inc/entityconfig.class.php:27 -#: inc/form.class.php:50 inc/formlist.class.php:14 scripts/scripts.js.php:18 +#: scripts/scripts.js.php:18 setup.php:20 setup.php:131 +#: inc/entityconfig.class.php:27 inc/formlist.class.php:14 +#: inc/form.class.php:50 ajax/homepage_link.php:6 ajax/homepage_forms.php:48 msgid "Form" msgid_plural "Forms" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: setup.php:136 inc/form.class.php:58 inc/form.class.php:59 -#: inc/formlist.class.php:22 inc/formlist.class.php:23 -msgid "Forms waiting for validation" -msgstr "" - -#: ajax/homepage_forms.php:52 -msgid "Forms without category" -msgstr "" - -#: ajax/question.php:27 inc/question.class.php:212 -msgid "Add a question" -msgstr "" - -#: ajax/question.php:28 -msgid "Edit a question" -msgstr "" +msgstr[0] "Замовлення" +msgstr[1] "Замовлення" +msgstr[2] "Замовлень" -#: ajax/question.php:64 inc/section.class.php:35 -#: inc/targetticket.class.php:879 -msgid "Section" -msgid_plural "Sections" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: scripts/scripts.js.php:250 +msgid "No form found. Please choose a form below instead" +msgstr "Замовлення не знайдене. Будь ласка, оберіть нижче інше Замовлення" -#: ajax/question.php:91 -msgid "GLPI object" -msgid_plural "GLPI objects" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: scripts/scripts.js.php:268 +msgid "An error occured while querying forms" +msgstr "Під час роботи з Замовленнями виникла помилка" -#: ajax/question.php:166 inc/question.class.php:168 inc/question.class.php:172 -msgid "Required" -msgstr "" +#: scripts/scripts.js.php:304 +msgid "No form yet in this category" +msgstr "В цій категорії ще немає Замовлень" -#: ajax/question.php:178 -msgid "Show empty" -msgstr "" +#: scripts/scripts.js.php:402 +msgid "Are you sure you want to delete this question?" +msgstr "Ви впевнені, що необхідно видалити це запитання?" -#: ajax/question.php:196 -msgid "One per line for lists" -msgstr "" +#: scripts/scripts.js.php:437 +msgid "Are you sure you want to delete this section?" +msgstr "Ви впевнені, що необхідно видалити цей розділ?" -#: ajax/question.php:223 -msgid "Values" -msgstr "" +#: scripts/scripts.js.php:474 +msgid "Are you sure you want to delete this destination:" +msgstr "Ви впевнені, що необхідно видалити це призначення?" -#: ajax/question.php:224 -msgid "One per line" -msgstr "" +#: scripts/combobox.js.php:54 +msgid "Show All Items" +msgstr "Показати Всі елементи" -#: ajax/question.php:236 -msgid "Filter" -msgstr "" +#: scripts/combobox.js.php:120 +msgid "didn't match any item" +msgstr "не відповідає жодному елементу" -#: ajax/question.php:245 -msgid "Attribute" -msgstr "" +#: scripts/forms-validation.js.php:11 inc/field.class.php:98 +#: inc/fields/actor-field.class.php:153 inc/fields/datetime-field.class.php:50 +#: inc/fields/multiselect-field.class.php:15 +#: inc/fields/date-field.class.php:50 inc/fields/checkboxes-field.class.php:74 +msgid "A required field is empty:" +msgstr "Обов'язкове поле порожнє:" -#: ajax/question.php:269 -msgid "Range" -msgstr "" +#: front/formdisplay.php:44 front/form_answer.php:12 front/reservation.php:12 +#: front/form_answer.form.php:37 front/knowbaseitem.form.php:10 +#: front/reservation.form.php:10 front/reservationitem.php:7 +#: front/issue.form.php:20 front/wizard.php:13 front/wizardfeeds.php:11 +#: front/issue.php:12 +msgid "Service catalog" +msgstr "Каталог сервісів" -#: ajax/question.php:273 -msgid "Min" -msgstr "" +#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 +msgid "Form list" +msgstr "Список Замовлення" -#: ajax/question.php:279 -msgid "Max" -msgstr "" +#: front/formdisplay.php:62 front/formdisplay.php:74 front/form_answer.php:16 +#: front/form_answer.php:21 front/targetticket.form.php:49 front/form.php:15 +#: front/form_answer.form.php:41 front/form_answer.form.php:46 +#: front/issue.php:16 front/issue.php:21 +msgid "Form Creator" +msgstr "Редактор Замовлень" -#: ajax/question.php:303 -msgid "Additional validation" -msgstr "" +#: front/question.form.php:15 +msgid "The question has been successfully saved!" +msgstr "Запитання збережено успішно!" -#: ajax/question.php:306 -msgid "Regular expression" -msgstr "" +#: front/question.form.php:25 +msgid "The question has been successfully updated!" +msgstr "Запитання оновлено успішно!" -#: ajax/question.php:313 +#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 msgid "" -"Specify the additional validation conditions in the description of the " -"question to help users." -msgstr "" - -#: ajax/question.php:320 -msgid "Show field" -msgstr "" - -#: ajax/question.php:329 -msgid "Always displayed" -msgstr "" - -#: ajax/question.php:330 -msgid "Hidden unless" -msgstr "" - -#: ajax/question.php:331 -msgid "Displayed unless" -msgstr "" - -#: ajax/section.php:21 inc/question.class.php:222 -msgid "Add a section" -msgstr "" - -#: ajax/section.php:23 -msgid "Edit a section" -msgstr "" - -#: ajax/target.php:8 inc/target.class.php:85 -msgid "Add a destination" -msgstr "" +"An header already exists for this entity! You can have only one header per " +"entity." +msgstr "Для цього підрозділу заголовок вже існує! Можна створити лише один заголовок для підрозділу." #: front/category.form.php:13 msgid "" "A category already exists with the same name! Category creation failed." -msgstr "" - -#: front/formanswer.form.php:43 front/formanswer.php:12 -#: front/formdisplay.php:44 front/issue.form.php:20 front/issue.php:12 -#: front/knowbaseitem.form.php:10 front/reservation.form.php:10 -#: front/reservationitem.php:7 front/reservation.php:12 -#: front/wizardfeeds.php:11 front/wizard.php:13 -msgid "Service catalog" -msgstr "" - -#: front/formanswer.form.php:47 front/formanswer.form.php:52 -#: front/formanswer.php:16 front/formanswer.php:21 front/formdisplay.php:62 -#: front/formdisplay.php:74 front/form.php:15 front/issue.php:16 -#: front/issue.php:21 front/targetticket.form.php:47 -msgid "Form Creator" -msgstr "" +msgstr "Категорія з такою назвою вже існує! Створення категорії неможливе." -#: front/formdisplay.php:47 front/formlist.php:16 front/formlist.php:22 -msgid "Form list" -msgstr "" +#: setup.php:121 inc/formlist.class.php:22 inc/formlist.class.php:23 +#: inc/form.class.php:58 +msgid "Forms waiting for validation" +msgstr "Замовлення, що очікують перевірки" -#: front/header.form.php:13 inc/header.class.php:34 inc/header.class.php:110 -msgid "" -"An header already exists for this entity! You can have only one header per " -"entity." -msgstr "" +#: hook.php:57 inc/header.class.php:7 inc/form.class.php:317 +msgid "Header" +msgid_plural "Headers" +msgstr[0] "Заголовок" +msgstr[1] "Заголовки" +msgstr[2] "Заголовків" -#: front/question.form.php:15 -msgid "The question has been successfully saved!" -msgstr "" +#: hook.php:58 inc/category.class.php:9 +msgid "Form category" +msgid_plural "Form categories" +msgstr[0] "Категорія Замовлень" +msgstr[1] "Категорії Замовлень" +msgstr[2] "Категорій Замовлень" -#: front/question.form.php:25 -msgid "The question has been successfully updated!" -msgstr "" +#: inc/form_profile.class.php:12 +msgid "Target" +msgid_plural "Targets" +msgstr[0] "Ціль" +msgstr[1] "Цілі" +msgstr[2] "Цілей" -#: inc/answer.class.php:35 inc/targetticket.class.php:878 -msgid "Answer" -msgid_plural "Answers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/form_profile.class.php:29 +msgid "Access type" +msgstr "Тип доступу" -#: inc/category.class.php:39 -msgid "Knowbase category" -msgstr "" +#: inc/form_profile.class.php:35 inc/form.class.php:189 inc/form.class.php:243 +msgid "Public access" +msgstr "Публічний доступ" -#: inc/entityconfig.class.php:65 -msgid "Helpdesk" -msgstr "" +#: inc/form_profile.class.php:36 inc/form.class.php:190 inc/form.class.php:246 +msgid "Private access" +msgstr "Приватний доступ" -#: inc/entityconfig.class.php:74 -msgid "GLPi's helpdesk" -msgstr "" +#: inc/form_profile.class.php:37 inc/form.class.php:191 inc/form.class.php:249 +msgid "Restricted access" +msgstr "Обмежений доступ" -#: inc/entityconfig.class.php:75 -msgid "Service catalog simplified" -msgstr "" +#: inc/form_profile.class.php:44 +msgid "Link to the form" +msgstr "Посилання на Замовлення" -#: inc/entityconfig.class.php:76 -msgid "Service catalog extended" -msgstr "" +#: inc/form_profile.class.php:52 +msgid "Please active the form to view the link" +msgstr "Активуйте Замовлення, щоб побачити посилання" -#: inc/entityconfig.class.php:79 -msgid "Helpdesk mode" -msgstr "" +#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 +msgid "Add an header" +msgstr "Додати заголовок" -#: inc/field.class.php:98 scripts/forms-validation.js.php:11 -msgid "A required field is empty:" -msgstr "" +#: inc/header.class.php:51 +msgid "" +"An header exists for a parent entity! Another header will overwrite the " +"previous one." +msgstr "Заголовок для батьківського підрозділу існує! Інший заголовок перепише попередній." -#: inc/formanswer.class.php:39 inc/issue.class.php:271 +#: inc/form_answer.class.php:39 inc/issue.class.php:328 msgid "Form answer" msgid_plural "Form answers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Відповідь Замовлення" +msgstr[1] "Відповіді Замовлення" +msgstr[2] "Відповідей Замовлення" -#: inc/formanswer.class.php:78 inc/notificationtargetformanswer.class.php:51 +#: inc/form_answer.class.php:78 inc/notificationtargetform_answer.class.php:51 msgid "Requester" -msgstr "" +msgstr "Замовник" -#: inc/formanswer.class.php:87 inc/notificationtargetformanswer.class.php:52 +#: inc/form_answer.class.php:87 inc/notificationtargetform_answer.class.php:52 msgid "Validator" -msgstr "" +msgstr "Контролер" -#: inc/formanswer.class.php:153 +#: inc/form_answer.class.php:153 msgid "waiting" -msgstr "" +msgstr "очікування" -#: inc/formanswer.class.php:157 +#: inc/form_answer.class.php:157 msgid "accepted" -msgstr "" +msgstr "ухвалено" -#: inc/formanswer.class.php:161 +#: inc/form_answer.class.php:161 msgid "refused" -msgstr "" +msgstr "відхилено" -#: inc/formanswer.class.php:277 +#: inc/form_answer.class.php:285 msgid "Form accepted by validator." -msgstr "" +msgstr "Замовлення ухвалене контролером." -#: inc/formanswer.class.php:279 +#: inc/form_answer.class.php:287 msgid "Form successfully saved." -msgstr "" +msgstr "Замовлення успішно збережено." -#: inc/formanswer.class.php:336 +#: inc/form_answer.class.php:344 msgid "Comment" -msgstr "" +msgstr "Пояснення" -#: inc/formanswer.class.php:341 +#: inc/form_answer.class.php:349 msgid "Required if refused" -msgstr "" +msgstr "Обов'язково для відхилення" -#: inc/formanswer.class.php:347 +#: inc/form_answer.class.php:355 msgid "Refuse" -msgstr "" +msgstr "Відхилити" -#: inc/formanswer.class.php:350 +#: inc/form_answer.class.php:358 msgid "Accept" -msgstr "" +msgstr "Ухвалити" -#: inc/formanswer.class.php:365 +#: inc/form_answer.class.php:373 msgid "Refused comment is required!" -msgstr "" +msgstr "Пояснення відхилення обов'язкове!" -#: inc/formanswer.class.php:604 +#: inc/form_answer.class.php:618 msgid "Cannot generate targets!" -msgstr "" +msgstr "Неможливо згенерувати призначення!" -#: inc/formanswer.class.php:616 inc/formanswer.class.php:633 +#: inc/form_answer.class.php:630 inc/form_answer.class.php:684 msgid "The form has been successfully saved!" -msgstr "" - -#: inc/formanswer.class.php:650 inc/formanswer.class.php:652 -msgid "Form data" -msgstr "" - -#: inc/form.class.php:92 -msgid "Description" -msgstr "" - -#: inc/form.class.php:120 -msgid "Homepage" -msgstr "" - -#: inc/form.class.php:128 -msgid "Access" -msgstr "" - -#: inc/form.class.php:186 inc/form.class.php:200 inc/form.class.php:254 -#: inc/form.class.php:309 -msgid "All langages" -msgstr "" - -#: inc/form.class.php:187 inc/form.class.php:241 inc/formprofiles.class.php:35 -msgid "Public access" -msgstr "" - -#: inc/form.class.php:188 inc/form.class.php:244 inc/formprofiles.class.php:36 -msgid "Private access" -msgstr "" - -#: inc/form.class.php:189 inc/form.class.php:247 inc/formprofiles.class.php:37 -msgid "Restricted access" -msgstr "" - -#: inc/form.class.php:294 -msgid "Direct access on homepage" -msgstr "" - -#: inc/form.class.php:321 -msgid "Need to be validate?" -msgstr "" - -#: inc/form.class.php:426 -msgid "Default form in service catalog" -msgstr "" - -#: inc/form.class.php:527 -msgid "Category" -msgid_plural "Categories" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr "Замовлення збережено успішно!" -#: inc/form.class.php:528 -msgid "see all" -msgstr "" +#: inc/form_answer.class.php:644 inc/form_answer.class.php:662 +msgid "You are not the validator of these answers" +msgstr "Ви не є контролером цих відповідей." -#: inc/form.class.php:545 -msgid "Popularity sort" -msgstr "" +#: inc/form_answer.class.php:701 inc/form_answer.class.php:703 +msgid "Form data" +msgstr "Інформація Замовлення" -#: inc/form.class.php:549 -msgid "Alphabetic sort" -msgstr "" +#: inc/entityconfig.class.php:65 +msgid "Helpdesk" +msgstr "Сервіс-деск" -#: inc/form.class.php:710 -msgid "Please, describe your need here" -msgstr "" +#: inc/entityconfig.class.php:74 +msgid "GLPi's helpdesk" +msgstr "Сервіс-деск GLPi" -#: inc/form.class.php:719 -msgid "My last forms (requester)" -msgstr "" +#: inc/entityconfig.class.php:75 +msgid "Service catalog simplified" +msgstr "Спрощений каталог сервісів" -#: inc/form.class.php:729 -msgid "No form posted yet" -msgstr "" +#: inc/entityconfig.class.php:76 +msgid "Service catalog extended" +msgstr "Розширений каталог сервісів" -#: inc/form.class.php:741 -msgid "All my forms (requester)" -msgstr "" +#: inc/entityconfig.class.php:79 +msgid "Helpdesk mode" +msgstr "Режим Сервіс-деску" -#: inc/form.class.php:751 -msgid "My last forms (validator)" -msgstr "" +#: inc/target.class.php:26 +msgid "Destination" +msgid_plural "Destinations" +msgstr[0] "Призначення" +msgstr[1] "Призначення" +msgstr[2] "Призначень" -#: inc/form.class.php:771 -msgid "No form waiting for validation" -msgstr "" +#: inc/target.class.php:48 +msgid "Destinations" +msgid_plural "Destinations" +msgstr[0] "Призначення" +msgstr[1] "Призначення" +msgstr[2] "Призначень" -#: inc/form.class.php:783 -msgid "All my forms (validator)" -msgstr "" +#: inc/target.class.php:72 inc/question.class.php:131 +#: inc/question.class.php:201 +msgid "Delete" +msgstr "Видалити" -#: inc/form.class.php:874 -msgid "Choose a validator" -msgstr "" +#: inc/target.class.php:85 ajax/target.php:8 +msgid "Add a destination" +msgstr "Додати призначення" -#: inc/form.class.php:910 inc/target.class.php:118 +#: inc/target.class.php:119 inc/form.class.php:939 msgid "The name cannot be empty!" -msgstr "" - -#: inc/form.class.php:1046 -msgid "You must select validator !" -msgstr "" +msgstr "Ім'я не може бути порожнім!" -#: inc/form.class.php:1270 -msgid "Duplicate" -msgstr "" - -#: inc/form.class.php:1465 -#, php-format -msgid "Form duplicated: %s" -msgstr "" - -#: inc/form.class.php:1476 -#, php-format -msgid "Form Transfered: %s" -msgstr "" - -#: inc/formprofiles.class.php:12 -msgid "Target" -msgid_plural "Targets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: inc/formprofiles.class.php:29 -msgid "Access type" -msgstr "" - -#: inc/formprofiles.class.php:44 -msgid "Link to the form" -msgstr "" - -#: inc/formprofiles.class.php:52 -msgid "Please active the form to view the link" -msgstr "" - -#: inc/header.class.php:32 inc/header.class.php:48 inc/header.class.php:59 -msgid "Add an header" -msgstr "" +#: inc/target.class.php:125 +msgid "The type cannot be empty!" +msgstr "Тип не може бути порожнім!" -#: inc/header.class.php:51 -msgid "" -"An header exists for a parent entity! Another header will overwrite the " -"previous one." -msgstr "" +#: inc/section.class.php:35 inc/targetticket.class.php:984 +#: ajax/question.php:63 +msgid "Section" +msgid_plural "Sections" +msgstr[0] "Розділ" +msgstr[1] "Розділи" +msgstr[2] "Розділів" -#: inc/issue.class.php:6 inc/issue.class.php:184 -msgid "Issue" -msgid_plural "Issues" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/section.class.php:178 inc/question.class.php:257 +msgid "The title is required" +msgstr "Назва є обов'язковою" -#: inc/notificationtargetformanswer.class.php:12 +#: inc/notificationtargetform_answer.class.php:12 msgid "The form as been saved" -msgstr "" +msgstr "Замовлення збережено" -#: inc/notificationtargetformanswer.class.php:13 -#: inc/notificationtargetformanswer.class.php:102 +#: inc/notificationtargetform_answer.class.php:13 +#: inc/notificationtargetform_answer.class.php:102 msgid "A form need to be validate" -msgstr "" +msgstr "Замовлення має бути перевірене контролером" -#: inc/notificationtargetformanswer.class.php:14 -#: inc/notificationtargetformanswer.class.php:108 +#: inc/notificationtargetform_answer.class.php:14 +#: inc/notificationtargetform_answer.class.php:108 msgid "The form is refused" -msgstr "" +msgstr "Замовлення відхилено" -#: inc/notificationtargetformanswer.class.php:15 -#: inc/notificationtargetformanswer.class.php:114 +#: inc/notificationtargetform_answer.class.php:15 +#: inc/notificationtargetform_answer.class.php:114 msgid "The form is accepted" -msgstr "" +msgstr "Замовлення ухвалене" -#: inc/notificationtargetformanswer.class.php:16 -#: inc/notificationtargetformanswer.class.php:120 +#: inc/notificationtargetform_answer.class.php:16 +#: inc/notificationtargetform_answer.class.php:120 msgid "The form is deleted" -msgstr "" +msgstr "Замовлення видалено" -#: inc/notificationtargetformanswer.class.php:49 +#: inc/notificationtargetform_answer.class.php:49 msgid "Form #" -msgstr "" +msgstr "Замовлення №" -#: inc/notificationtargetformanswer.class.php:50 +#: inc/notificationtargetform_answer.class.php:50 msgid "Form name" -msgstr "" +msgstr "Назва Замовлення" -#: inc/notificationtargetformanswer.class.php:54 +#: inc/notificationtargetform_answer.class.php:54 msgid "Full form answers" -msgstr "" +msgstr "Повні відповіді Замовлення" -#: inc/notificationtargetformanswer.class.php:55 +#: inc/notificationtargetform_answer.class.php:55 msgid "Refused comment" -msgstr "" +msgstr "Пояснення відхилення" -#: inc/notificationtargetformanswer.class.php:56 +#: inc/notificationtargetform_answer.class.php:56 msgid "Validation link" -msgstr "" +msgstr "Посилання контролю" -#: inc/notificationtargetformanswer.class.php:57 +#: inc/notificationtargetform_answer.class.php:57 msgid "Request #" -msgstr "" +msgstr "Запит №" -#: inc/notificationtargetformanswer.class.php:96 +#: inc/notificationtargetform_answer.class.php:96 msgid "A form has been created" -msgstr "" +msgstr "Замовлення створено" -#: inc/notificationtargetformanswer.class.php:97 +#: inc/notificationtargetform_answer.class.php:97 msgid "Your request has been saved" -msgstr "" +msgstr "Ваше Замовлення створено" -#: inc/notificationtargetformanswer.class.php:98 +#: inc/notificationtargetform_answer.class.php:98 msgid "" "Hi,\\nYour request from GLPI has been successfully saved with number " "##formcreator.request_id## and transmitted to the helpdesk team.\\nYou can " "see your answers onto the following link:\\n##formcreator.validation_link##" -msgstr "" +msgstr "Вітаємо!\\nВаше Замовлення успішно збережено з номером ##formcreator.request_id## і передано команді Сервіс-деску.\\nВи можете спостерігати Замовлення за наступним посиланням:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:103 +#: inc/notificationtargetform_answer.class.php:103 msgid "A form from GLPI need to be validate" -msgstr "" +msgstr "Замовлення має бути перевірене контролером" -#: inc/notificationtargetformanswer.class.php:104 +#: inc/notificationtargetform_answer.class.php:104 msgid "" "Hi,\\nA form from GLPI need to be validate and you have been choosen as the " "validator.\\nYou can access it by clicking onto this " "link:\\n##formcreator.validation_link##" -msgstr "" +msgstr "Вітаємо!,\\nЗамовлення з Сервіс-Деску потребує перевірки і Вас обрали у якості контролера.\\nВи можете переглянути його за наступним посиланням:\\n##formcreator.validation_link##" -#: inc/notificationtargetformanswer.class.php:109 +#: inc/notificationtargetform_answer.class.php:109 msgid "Your form has been refused by the validator" -msgstr "" +msgstr "Ваша Замовлення було відхилено контролером" -#: inc/notificationtargetformanswer.class.php:110 +#: inc/notificationtargetform_answer.class.php:110 msgid "" "Hi,\\nWe are sorry to inform you that your form has been refused by the " "validator for the reason " -"below:\\n##formcreator.validation_comment##\\n\\nYou can still modify and " -"resubmit it by clicking onto this link:\\n##formcreator.validation_link##" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:115 -#: inc/targetticket.class.php:1329 -msgid "Your form has been accepted by the validator" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:116 -msgid "" -"Hi,\\nWe are pleased to inform you that your form has been accepted by the " -"validator.\\nYour request will be considered soon." -msgstr "" - -#: inc/notificationtargetformanswer.class.php:121 -msgid "Your form has been deleted by an administrator" -msgstr "" - -#: inc/notificationtargetformanswer.class.php:122 -msgid "" -"Hi,\\nWe are sorry to inform you that your request cannot be considered and " -"has been deleted by an administrator." -msgstr "" - -#: inc/question.class.php:35 inc/targetticket.class.php:356 -#: inc/targetticket.class.php:876 -msgid "Question" -msgid_plural "Questions" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: inc/question.class.php:131 inc/question.class.php:201 -#: inc/target.class.php:72 -msgid "Delete" -msgstr "" - -#: inc/question.class.php:256 inc/section.class.php:163 -msgid "The title is required" -msgstr "" - -#: inc/question.class.php:262 -msgid "The field type is required" -msgstr "" - -#: inc/question.class.php:268 -msgid "The section is required" -msgstr "" - -#: inc/question.class.php:276 inc/question.class.php:286 -#: inc/question.class.php:299 -msgid "The field value is required:" -msgstr "" +"below:\\n##formcreator.validation_comment##\\n\\nYou can still modify and " +"resubmit it by clicking onto this link:\\n##formcreator.validation_link##" +msgstr "Привіт!\\nНа жаль, Ваше Замовлення відхилене контролером з наступним поясненням:\\n##formcreator.validation_comment##\\n\\nВи можете внести зміни за посиланням:\\n##formcreator.validation_link##" -#: inc/question.class.php:311 -msgid "A description field should have a description:" -msgstr "" +#: inc/notificationtargetform_answer.class.php:115 +#: inc/targetticket.class.php:1509 +msgid "Your form has been accepted by the validator" +msgstr "Ваше Замовлення схвалене контролером" -#: inc/question.class.php:362 -msgid "Cannot recover LDAP informations!" -msgstr "" +#: inc/notificationtargetform_answer.class.php:116 +msgid "" +"Hi,\\nWe are pleased to inform you that your form has been accepted by the " +"validator.\\nYour request will be considered soon." +msgstr "Вітаємо!\\nПовідомляємо, що Ваше Замовлення схвалене контролером та буде розглянуто найближчим часом." -#: inc/target.class.php:26 -msgid "Destination" -msgid_plural "Destinations" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/notificationtargetform_answer.class.php:121 +msgid "Your form has been deleted by an administrator" +msgstr "Ваше Замовлення було видалене адміністратором" -#: inc/target.class.php:48 -msgid "Destinations" -msgid_plural "Destinations" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +#: inc/notificationtargetform_answer.class.php:122 +msgid "" +"Hi,\\nWe are sorry to inform you that your request cannot be considered and " +"has been deleted by an administrator." +msgstr "Привіт!\\nНа жаль, Ваше Замовлення не може бути розглянуте і було видалене адміністратором." -#: inc/target.class.php:123 -msgid "The type cannot be empty!" -msgstr "" +#: inc/answer.class.php:35 inc/targetticket.class.php:983 +msgid "Answer" +msgid_plural "Answers" +msgstr[0] "Відповідь" +msgstr[1] "Відповіді" +msgstr[2] "Відповідей" -#: inc/targetticket.class.php:7 +#: inc/targetticket.class.php:21 msgid "Current active entity" -msgstr "" +msgstr "Поточний активний підрозділ" -#: inc/targetticket.class.php:8 +#: inc/targetticket.class.php:22 msgid "Default requester user's entity" -msgstr "" +msgstr "Типовий підрозділ замовника" -#: inc/targetticket.class.php:9 +#: inc/targetticket.class.php:23 msgid "First dynamic requester user's entity (alphabetical)" -msgstr "" +msgstr "Перший динамічний підрозділ замовника (за абеткою)" -#: inc/targetticket.class.php:10 +#: inc/targetticket.class.php:24 msgid "Last dynamic requester user's entity (alphabetical)" -msgstr "" +msgstr "Останній динамічний підрозділ замовника (за абеткою)" -#: inc/targetticket.class.php:11 +#: inc/targetticket.class.php:25 msgid "The form entity" -msgstr "" +msgstr "Підрозділ Замовлення" -#: inc/targetticket.class.php:12 +#: inc/targetticket.class.php:26 msgid "Default entity of the validator" -msgstr "" +msgstr "Типовий підрозділ контролера" -#: inc/targetticket.class.php:13 +#: inc/targetticket.class.php:27 inc/targetticket_actor.class.php:13 msgid "Specific entity" -msgstr "" +msgstr "Вказаний підрозділ" -#: inc/targetticket.class.php:14 +#: inc/targetticket.class.php:28 msgid "Default entity of a user type question answer" -msgstr "" +msgstr "Відповідь для питання типу Типовий підрозділ користувача" -#: inc/targetticket.class.php:15 +#: inc/targetticket.class.php:29 msgid "From a GLPI object > Entity type question answer" -msgstr "" +msgstr "З об'єкту GLPI > Відповідь для питання типу Підрозділ" -#: inc/targetticket.class.php:22 +#: inc/targetticket.class.php:36 msgid "Tags from questions" -msgstr "" +msgstr "Тег з запитань" -#: inc/targetticket.class.php:23 +#: inc/targetticket.class.php:37 msgid "Specific tags" -msgstr "" +msgstr "Визначені теги" -#: inc/targetticket.class.php:24 +#: inc/targetticket.class.php:38 msgid "Tags from questions and specific tags" -msgstr "" +msgstr "Теги з запитань та визначених тегів" -#: inc/targetticket.class.php:25 +#: inc/targetticket.class.php:39 msgid "Tags from questions or specific tags" -msgstr "" +msgstr "Теги з запитань або визначених тегів" -#: inc/targetticket.class.php:31 +#: inc/targetticket.class.php:45 msgid "equals to the answer to the question" -msgstr "" +msgstr "дорівнює відповіді на запитання" -#: inc/targetticket.class.php:32 +#: inc/targetticket.class.php:46 msgid "calculated from the ticket creation date" -msgstr "" +msgstr "обраховується з дати створення заявки" -#: inc/targetticket.class.php:33 +#: inc/targetticket.class.php:47 msgid "calculated from the answer to the question" +msgstr "обраховується з відповіді на запитання" + +#: inc/targetticket.class.php:53 +msgid "Urgency from template or Medium" msgstr "" -#: inc/targetticket.class.php:59 inc/targetticket.class.php:101 +#: inc/targetticket.class.php:54 +msgid "Equals to the answer to the question" +msgstr "Дорівнює відповіді на запитання" + +#: inc/targetticket.class.php:80 inc/targetticket.class.php:122 msgid "Target ticket" msgid_plural "Target tickets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" +msgstr[0] "Цільова заявка" +msgstr[1] "Цільові заявки" +msgstr[2] "Цільових заявок" -#: inc/targetticket.class.php:89 +#: inc/targetticket.class.php:110 msgid "Edit a destination" -msgstr "" +msgstr "Редагувати призначення" -#: inc/targetticket.class.php:104 +#: inc/targetticket.class.php:125 msgid "Ticket title" -msgstr "" +msgstr "Назва заявки" -#: inc/targetticket.class.php:249 +#: inc/targetticket.class.php:250 inc/targetticket.class.php:431 +#: inc/targetticket.class.php:981 inc/question.class.php:35 +msgid "Question" +msgid_plural "Questions" +msgstr[0] "Запитання" +msgstr[1] "Запитання" +msgstr[2] "Запитань" + +#: inc/targetticket.class.php:324 msgid "User type question" -msgstr "" +msgstr "Запитання типу користувача" -#: inc/targetticket.class.php:250 +#: inc/targetticket.class.php:325 msgid "Entity type question" -msgstr "" +msgstr "Запитання типу підрозділу" -#: inc/targetticket.class.php:314 +#: inc/targetticket.class.php:389 msgid "Ticket tags" -msgstr "" +msgstr "Теги заявки" -#: inc/targetticket.class.php:357 +#: inc/targetticket.class.php:432 msgid "Tags" -msgstr "" +msgstr "Теги" -#: inc/targetticket.class.php:423 +#: inc/targetticket.class.php:498 msgid "Add validation message as first ticket followup" -msgstr "" +msgstr "Додати повідомлення перевірки як першу відповідь заявки" -#: inc/targetticket.class.php:437 +#: inc/targetticket.class.php:512 msgid "Cancel" -msgstr "" +msgstr "Відміна" -#: inc/targetticket.class.php:511 +#: inc/targetticket.class.php:594 msgid "Ticket actors" -msgstr "" +msgstr "Виконавці заявки" -#: inc/targetticket.class.php:551 inc/targetticket.class.php:607 -#: inc/targetticket.class.php:651 inc/targetticket.class.php:708 -#: inc/targetticket.class.php:751 inc/targetticket.class.php:821 +#: inc/targetticket.class.php:691 inc/targetticket.class.php:801 +#: inc/targetticket.class.php:920 inc/targetticket_actor.class.php:7 msgid "Form requester" -msgstr "" +msgstr "Замовник Замовлення" -#: inc/targetticket.class.php:552 inc/targetticket.class.php:610 -#: inc/targetticket.class.php:652 inc/targetticket.class.php:711 -#: inc/targetticket.class.php:752 inc/targetticket.class.php:824 +#: inc/targetticket.class.php:694 inc/targetticket.class.php:804 +#: inc/targetticket.class.php:923 inc/targetticket_actor.class.php:8 msgid "Form validator" -msgstr "" +msgstr "Контролер Замовлення" -#: inc/targetticket.class.php:553 inc/targetticket.class.php:653 -#: inc/targetticket.class.php:753 -msgid "Specific person" +#: inc/targetticket.class.php:704 inc/targetticket.class.php:814 +#: inc/targetticket.class.php:933 inc/targetticket_actor.class.php:10 +msgid "Person from the question" +msgstr "Персона з запитання" + +#: inc/targetticket.class.php:715 inc/targetticket.class.php:825 +#: inc/targetticket.class.php:944 inc/targetticket_actor.class.php:12 +msgid "Group from the question" +msgstr "Група з запитання" + +#: inc/targetticket.class.php:721 inc/targetticket.class.php:831 +#: inc/targetticket.class.php:950 inc/targetticket_actor.class.php:15 +msgid "Actors from the question" msgstr "" -#: inc/targetticket.class.php:554 inc/targetticket.class.php:620 -#: inc/targetticket.class.php:654 inc/targetticket.class.php:721 -#: inc/targetticket.class.php:754 inc/targetticket.class.php:834 -msgid "Person from the question" +#: inc/targetticket.class.php:961 inc/targetticket_actor.class.php:14 +msgid "Supplier from the question" +msgstr "Постачальник з запитання" + +#: inc/targetticket.class.php:988 +msgid "Full form" +msgstr "Повне Замовлення" + +#: inc/targetticket.class.php:1035 +msgid "The title cannot be empty!" +msgstr "Назва не може бути порожня!" + +#: inc/targetticket.class.php:1041 +msgid "The description cannot be empty!" +msgstr "Опис не може бути порожнім!" + +#: inc/fields/radios-field.class.php:48 +msgid "Radios" msgstr "" -#: inc/targetticket.class.php:555 inc/targetticket.class.php:655 -#: inc/targetticket.class.php:755 -msgid "Specific group" +#: inc/fields/glpiselect-field.class.php:7 ajax/question.php:90 +msgid "GLPI object" +msgid_plural "GLPI objects" +msgstr[0] "Об'єкт GLPI" +msgstr[1] "Об'єкти GLPI" +msgstr[2] "Об'єктів GLPI" + +#: inc/fields/float-field.class.php:10 +msgid "This is not a number:" msgstr "" -#: inc/targetticket.class.php:556 inc/targetticket.class.php:631 -#: inc/targetticket.class.php:656 inc/targetticket.class.php:732 -#: inc/targetticket.class.php:756 inc/targetticket.class.php:845 -msgid "Group from the question" +#: inc/fields/float-field.class.php:15 inc/fields/integer-field.class.php:15 +#, php-format +msgid "The following number must be greater than %d:" msgstr "" -#: inc/targetticket.class.php:757 -msgid "Specific supplier" +#: inc/fields/float-field.class.php:21 inc/fields/integer-field.class.php:21 +#, php-format +msgid "The following number must be lower than %d:" msgstr "" -#: inc/targetticket.class.php:758 inc/targetticket.class.php:856 -msgid "Supplier from the question" +#: inc/fields/float-field.class.php:27 inc/fields/integer-field.class.php:27 +#: inc/fields/textarea-field.class.php:45 inc/fields/text-field.class.php:22 +msgid "Specific format does not match:" msgstr "" -#: inc/targetticket.class.php:883 -msgid "Full form" +#: inc/fields/float-field.class.php:38 +msgid "Float" msgstr "" -#: inc/targetticket.class.php:927 -msgid "The title cannot be empty!" +#: inc/fields/integer-field.class.php:10 +msgid "This is not an integer:" msgstr "" -#: inc/targetticket.class.php:933 -msgid "The description cannot be empty!" +#: inc/fields/integer-field.class.php:38 +msgid "Integer" msgstr "" -#: inc/wizard.class.php:83 -msgid "Seek assistance" +#: inc/fields/textarea-field.class.php:35 inc/fields/text-field.class.php:12 +#, php-format +msgid "The text is too short (minimum %d characters):" msgstr "" -#: inc/wizard.class.php:87 -msgid "My requests for assistance" +#: inc/fields/textarea-field.class.php:40 inc/fields/text-field.class.php:17 +#, php-format +msgid "The text is too long (maximum %d characters):" msgstr "" -#: inc/wizard.class.php:98 -msgid "Book an asset" +#: inc/fields/textarea-field.class.php:55 +msgid "Textarea" msgstr "" -#: inc/wizard.class.php:105 -msgid "Consult feeds" +#: inc/fields/text-field.class.php:32 +msgid "Text" msgstr "" -#: scripts/combobox.js.php:54 -msgid "Show All Items" +#: inc/fields/email-field.class.php:25 +msgid "This is not a valid e-mail:" msgstr "" -#: scripts/combobox.js.php:120 -msgid "didn't match any item" +#: inc/fields/actor-field.class.php:9 +msgid "Actor" +msgid_plural "Actors" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/datetime-field.class.php:62 +msgid "Datetime" msgstr "" -#: scripts/scripts.js.php:165 -msgid "Back" +#: inc/fields/tag-field.class.php:66 +msgid "Tag" +msgid_plural "Tags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: inc/fields/multiselect-field.class.php:20 +#: inc/fields/checkboxes-field.class.php:81 +#, php-format +msgid "The following question needs of at least %d answers" msgstr "" -#: scripts/scripts.js.php:235 -msgid "No form found. Please choose a form below instead" +#: inc/fields/multiselect-field.class.php:26 +#: inc/fields/checkboxes-field.class.php:87 +#, php-format +msgid "The following question does not accept more than %d answers" msgstr "" -#: scripts/scripts.js.php:253 -msgid "An error occured while querying forms" +#: inc/fields/multiselect-field.class.php:71 +msgid "Multiselect" msgstr "" -#: scripts/scripts.js.php:289 -msgid "No form yet in this category" +#: inc/fields/file-field.class.php:29 +msgid "A required file is missing:" msgstr "" -#: scripts/scripts.js.php:382 -msgid "Are you sure you want to delete this question?" +#: inc/fields/ldapselect-field.class.php:72 +msgid "LDAP Select" msgstr "" -#: scripts/scripts.js.php:417 -msgid "Are you sure you want to delete this section?" +#: inc/fields/select-field.class.php:51 +msgid "Select" msgstr "" -#: scripts/scripts.js.php:454 -msgid "Are you sure you want to delete this destination:" +#: inc/fields/checkboxes-field.class.php:99 +msgid "Checkboxes" msgstr "" + +#: inc/wizard.class.php:67 inc/wizard.class.php:68 +msgid "Seek assistance" +msgstr "Шукати допомогу" + +#: inc/wizard.class.php:73 inc/wizard.class.php:74 +msgid "My requests for assistance" +msgstr "Мої запити допомоги" + +#: inc/wizard.class.php:85 inc/wizard.class.php:86 +msgid "Book an asset" +msgstr "Замовити обладнання" + +#: inc/wizard.class.php:94 inc/wizard.class.php:95 +msgid "Consult feeds" +msgstr "Канали консультації" + +#: inc/wizard.class.php:227 +msgid "To validate" +msgstr "Для схвалення" + +#: inc/wizard.class.php:239 +msgid "Closed" +msgstr "Закрито" + +#: inc/targetticket_actor.class.php:9 +msgid "Specific person" +msgstr "Вказана персона" + +#: inc/targetticket_actor.class.php:11 +msgid "Specific group" +msgstr "Вказана група" + +#: inc/category.class.php:39 +msgid "Knowbase category" +msgstr "Категорія бази знань" + +#: inc/question.class.php:168 inc/question.class.php:172 ajax/question.php:165 +msgid "Required" +msgstr "Обов'язкове" + +#: inc/question.class.php:212 ajax/question.php:26 +msgid "Add a question" +msgstr "Додати запитання" + +#: inc/question.class.php:222 ajax/section.php:23 +msgid "Add a section" +msgstr "Додати розділ" + +#: inc/question.class.php:266 +msgid "The field type is required" +msgstr "Тип поля є обов'язковим" + +#: inc/question.class.php:273 +msgid "The section is required" +msgstr "Розділ є обов'язковим" + +#: inc/question.class.php:283 inc/question.class.php:302 +#: inc/question.class.php:316 +msgid "The field value is required:" +msgstr "Значення поля є обов'язковим:" + +#: inc/question.class.php:330 +msgid "A description field should have a description:" +msgstr "Поле опису повинне містити опис:" + +#: inc/question.class.php:386 +msgid "Cannot recover LDAP informations!" +msgstr "Неможливо отримати інформацію з LDAP!" + +#: inc/form.class.php:60 +msgid "Import forms" +msgstr "Імпорт Замовлень" + +#: inc/form.class.php:94 +msgid "Description" +msgstr "Опис" + +#: inc/form.class.php:122 +msgid "Homepage" +msgstr "Головна сторінка" + +#: inc/form.class.php:130 +msgid "Access" +msgstr "Доступ" + +#: inc/form.class.php:188 inc/form.class.php:202 inc/form.class.php:256 +#: inc/form.class.php:311 +msgid "All langages" +msgstr "Всі мови" + +#: inc/form.class.php:296 +msgid "Direct access on homepage" +msgstr "Прямий доступ до головної сторінки" + +#: inc/form.class.php:323 +msgid "Need to be validate?" +msgstr "Схвалення необхідне?" + +#: inc/form.class.php:427 +msgid "Default form in service catalog" +msgstr "Типове Замовлення каталогу сервісів" + +#: inc/form.class.php:535 +msgid "Category" +msgid_plural "Categories" +msgstr[0] "Категорія" +msgstr[1] "Категорії" +msgstr[2] "Категорій" + +#: inc/form.class.php:536 +msgid "see all" +msgstr "дивитись все" + +#: inc/form.class.php:554 +msgid "Popularity sort" +msgstr "Сортувати за популярністю" + +#: inc/form.class.php:558 +msgid "Alphabetic sort" +msgstr "Сортувати за абеткою" + +#: inc/form.class.php:730 +msgid "Please, describe your need here" +msgstr "Будь ласка, опишіть тут свою потребу" + +#: inc/form.class.php:739 +msgid "My last forms (requester)" +msgstr "Мої останні Замовлення (замовник)" + +#: inc/form.class.php:749 +msgid "No form posted yet" +msgstr "Заповнених Замовлень ще немає" + +#: inc/form.class.php:761 +msgid "All my forms (requester)" +msgstr "Всі мої Замовлення (замовник)" + +#: inc/form.class.php:771 +msgid "My last forms (validator)" +msgstr "Мої останні Замовлення (контролер)" + +#: inc/form.class.php:791 +msgid "No form waiting for validation" +msgstr "Немає Замовлень, що очікують контролю" + +#: inc/form.class.php:803 +msgid "All my forms (validator)" +msgstr "Всі мої Замовлення (контролер)" + +#: inc/form.class.php:895 +msgid "Choose a validator" +msgstr "Обрати контролера" + +#: inc/form.class.php:1102 +msgid "You must select validator !" +msgstr "Необхідно обрати контролера!" + +#: inc/form.class.php:1336 +msgid "Duplicate" +msgstr "Дублювати" + +#: inc/form.class.php:1511 +#, php-format +msgid "Form duplicated: %s" +msgstr "Замовлення продубльовано: %s" + +#: inc/form.class.php:1522 +#, php-format +msgid "Form Transfered: %s" +msgstr "Замовлення перенесено: %s" + +#: inc/form.class.php:1707 +#, php-format +msgid "Forms successfully imported from %s" +msgstr "Замовлення з %s успішно імпортовані" + +#: inc/issue.class.php:6 inc/issue.class.php:214 +msgid "Issue" +msgid_plural "Issues" +msgstr[0] "Проблема" +msgstr[1] "Проблеми" +msgstr[2] "Проблем" + +#: ajax/question.php:27 +msgid "Edit a question" +msgstr "Редагувати запитання" + +#: ajax/question.php:177 +msgid "Show empty" +msgstr "Показувати порожнє" + +#: ajax/question.php:195 +msgid "One per line for lists" +msgstr "Один на рядок для списків" + +#: ajax/question.php:222 +msgid "Values" +msgstr "Значення" + +#: ajax/question.php:223 +msgid "One per line" +msgstr "Один на рядок" + +#: ajax/question.php:235 +msgid "Filter" +msgstr "Фільтр" + +#: ajax/question.php:244 +msgid "Attribute" +msgstr "Атрибут" + +#: ajax/question.php:268 +msgid "Range" +msgstr "Інтервал" + +#: ajax/question.php:272 +msgid "Min" +msgstr "Мінімум" + +#: ajax/question.php:278 +msgid "Max" +msgstr "Максимум" + +#: ajax/question.php:302 +msgid "Additional validation" +msgstr "Додаткова перевірка" + +#: ajax/question.php:305 +msgid "Regular expression" +msgstr "Регулярний вираз" + +#: ajax/question.php:312 +msgid "" +"Specify the additional validation conditions in the description of the " +"question to help users." +msgstr "Для полегшення наведіть додаткові умови перевірки в описі запитання." + +#: ajax/question.php:319 +msgid "Show field" +msgstr "Показати поле" + +#: ajax/question.php:328 +msgid "Always displayed" +msgstr "Завжди видимі" + +#: ajax/question.php:329 +msgid "Hidden unless" +msgstr "Приховане доки" + +#: ajax/question.php:330 +msgid "Displayed unless" +msgstr "Видимі доки" + +#: ajax/section.php:25 +msgid "Edit a section" +msgstr "Редагувати розділ" + +#: ajax/homepage_forms.php:52 +msgid "Forms without category" +msgstr "Замовлення без категорії" diff --git a/plugin.xml b/plugin.xml index 5404d16db..4ecdd6695 100644 --- a/plugin.xml +++ b/plugin.xml @@ -144,6 +144,11 @@ Features 0.90 9.1 + + 2.4.0 + 0.90 + 9.1 + cz_CZ diff --git a/setup.php b/setup.php index 0da785535..64a8cca55 100644 --- a/setup.php +++ b/setup.php @@ -80,6 +80,20 @@ function plugin_init_formcreator () array_push($CFG_GLPI["ticket_types"], 'PluginFormcreatorForm_Answer'); array_push($CFG_GLPI["document_types"], 'PluginFormcreatorForm_Answer'); + // hook to update issues when an operation occurs on a ticket + $PLUGIN_HOOKS['item_add']['formcreator'] = array( + 'Ticket' => 'plugin_formcreator_hook_add_ticket' + ); + $PLUGIN_HOOKS['item_update']['formcreator'] = array( + 'Ticket' => 'plugin_formcreator_hook_update_ticket' + ); + $PLUGIN_HOOKS['item_delete']['formcreator'] = array( + 'Ticket' => 'plugin_formcreator_hook_delete_ticket' + ); + $PLUGIN_HOOKS['item_purge']['formcreator'] = array( + 'Ticket' => 'plugin_formcreator_hook_purge_ticket' + ); + $plugin = new Plugin(); if ($plugin->isInstalled('formcreator') && $plugin->isActivated('formcreator')) { spl_autoload_register('plugin_formcreator_autoload'); diff --git a/tests/0000_Install/SaveInstallTest.php b/tests/0000_Install/SaveInstallTest.php index cf1b49616..e31eb7d3b 100644 --- a/tests/0000_Install/SaveInstallTest.php +++ b/tests/0000_Install/SaveInstallTest.php @@ -50,5 +50,4 @@ public function testSaveInstallation() { $length = $filestats[7]; $this->assertGreaterThan(0, $length); } - } \ No newline at end of file diff --git a/tests/0010_Integration/IssueTest.php b/tests/0010_Integration/IssueTest.php new file mode 100644 index 000000000..75fbf16fd --- /dev/null +++ b/tests/0010_Integration/IssueTest.php @@ -0,0 +1,407 @@ +assertTrue(true); + $ticket = new Ticket(); + $ticket->add(array( + 'name' => 'ticket without form_answer', + 'content' => 'My computer is down !' + )); + $this->assertFalse($ticket->isNewItem()); + + $ticketId = $ticket->getID(); + $issue = new PluginFormcreatorIssue(); + // one and only one issue must exist. If several created, getFromDB will fail + $issue->getFromDBByQuery("WHERE `sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertFalse($issue->isNewItem()); + } + + public function testAddFormAnswerWithoutTargetTicket() { + // create a form with a target ticket + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form with 1 target ticket', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 0 + )); + $this->assertFalse($form->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm()); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + + // check an issue was created for the form answer + $formanswerId = $form_answer->getID(); + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + } + + /** + * + */ + public function testAddFormAnswerWithOneTargetTicket() { + // create a form with a target ticket + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form with 1 target ticket', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 0 + )); + $this->assertFalse($form->isNewItem()); + + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm()); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + + // find the generated ticket + $formanswerId = $form_answer->getID(); + $item_ticket = new Item_Ticket(); + $item_ticket->getFromDBByQuery("WHERE `itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formanswerId'"); + $this->assertFalse($item_ticket->isNewItem()); + $ticket = new Ticket(); + $ticket->getFromDB($item_ticket->getField('tickets_id')); + $this->assertFalse($ticket->isNewItem()); + + // check an issue was created for the ticket + $ticketId = $ticket->getID(); + $ticketIssue = new PluginFormcreatorIssue(); + $ticketIssue->getFromDBByQuery("WHERE `sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertFalse($ticketIssue->isNewItem()); + + // check no issue was created for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(0, $rows); + } + + /** + * + */ + public function testAddFormAnswerWithSeveralTargetTickets() { + // create form + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form with 2 target tickets', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 0 + )); + + // create first target ticket + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target 1', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // create second target ticket + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target 2', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm()); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + + // find the generated tickets + $formanswerId = $form_answer->getID(); + $item_ticket = new Item_Ticket(); + $item_ticketRows = $item_ticket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formanswerId'"); + $this->assertCount(2, $item_ticketRows); + + // check an issue was created for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + + // check no issue was created for each generatred ticket + foreach ($item_ticketRows as $id => $row) { + $ticketId = $row['tickets_id']; + $rows = $form_answerIssue->find("`sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertCount(0, $rows); + } + } + + /** + * + */ + public function testDeleteTicket() { + $this->assertTrue(true); + $ticket = new Ticket(); + $ticket->add(array( + 'name' => 'ticket to delete', + 'content' => 'My computer is down (again) !' + )); + $this->assertFalse($ticket->isNewItem()); + + $ticketId = $ticket->getID(); + $issue = new PluginFormcreatorIssue(); + // one and only one issue must exist. If several created, getFromDB will fail + $issue->getFromDBByQuery("WHERE `sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertFalse($issue->isNewItem()); + + $ticket->delete(array( + 'id' => $ticketId + )); + + $rows = $issue->find("`sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertCount(0, $rows); + } + + public function testDeleteFormAnswer() { + // create a form with a target ticket + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form with 1 target ticket', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 0 + )); + $this->assertFalse($form->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm()); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + + // check an issue was created for the form answer + $formanswerId = $form_answer->getID(); + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + + $form_answer->delete(array( + 'id' => $formanswerId + )); + } + + public function testValidateFormAnswerSingleTargetTicket() { + // create a form with a target ticket + $userId = $_SESSION['glpiID']; + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form to validate with 1 target ticket', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 1, + '_validator_users' => array($userId) + )); + $this->assertFalse($form->isNewItem()); + + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + 'formcreator_validator' => $_SESSION['glpiID'] + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm(), json_encode($_SESSION['MESSAGE_AFTER_REDIRECT'], JSON_PRETTY_PRINT)); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + + // check no tickets are linked to the form answer + $formanswerId = $form_answer->getID(); + $item_ticket = new Item_Ticket(); + $item_ticketRows = $item_ticket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formanswerId'"); + $this->assertCount(0, $item_ticketRows); + + // check an issue was created for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + + // accept answers + $input = array( + 'formcreator_form' => $formId + ); + $form_answer->acceptAnswers($input); + + // find the generated ticket + $item_ticket = new Item_Ticket(); + $item_ticket->getFromDBByQuery("WHERE `itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formanswerId'"); + $this->assertFalse($item_ticket->isNewItem()); + $ticket = new Ticket(); + $ticket->getFromDB($item_ticket->getField('tickets_id')); + $this->assertFalse($ticket->isNewItem()); + + // check an issue was created for the ticket + $ticketId = $ticket->getID(); + $ticketIssue = new PluginFormcreatorIssue(); + $rows = $ticketIssue->find("`sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertCount(1, $rows); + + // check no issue was created for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(0, $rows); + } + + public function testValidateFormAnswerMultipleTargetTicket() { + // create a form with a target ticket + $userId = $_SESSION['glpiID']; + $form = new PluginFormcreatorForm(); + $form->add(array( + 'entities_id' => $_SESSION['glpiactive_entity'], + 'name' => 'form to validate with 2 target tickets', + 'description' => 'form description', + 'content' => 'a content', + 'is_active' => 1, + 'validation_required' => 1, + '_validator_users' => array($userId) + )); + $this->assertFalse($form->isNewItem()); + + // create first target ticket + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target 1', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // create second target ticket + $target = new PluginFormcreatorTarget(); + $target->add(array( + 'name' => 'target 2', + 'itemtype' => 'PluginFormcreatorTargetTicket', + 'plugin_formcreator_forms_id' => $form->getID(), + )); + $this->assertFalse($target->isNewItem()); + + // answer the form (no matter it is empty) + $formId = $form->getID(); + $_POST = array( + 'formcreator_form' => $formId, + 'formcreator_validator' => $_SESSION['glpiID'] + ); + + // saveForm returns true if form data is valid + $this->assertTrue($form->saveForm(), json_encode($_SESSION['MESSAGE_AFTER_REDIRECT'], JSON_PRETTY_PRINT)); + unset($_POST); // Don't disturb next tests + + // find the generated form answer + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->getFromDBByQuery("WHERE `plugin_formcreator_forms_id` = '$formId'"); + $this->assertFalse($form_answer->isNewItem()); + $formanswerId = $form_answer->getID(); + + // check an issue was created for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + + // accept answers + $input = array( + 'formcreator_form' => $formId + ); + $form_answer->acceptAnswers($input); + + // check there is still an issue for the form answer + $form_answerIssue = new PluginFormcreatorIssue(); + $rows = $form_answerIssue->find("`sub_itemtype` = 'PluginFormcreatorForm_Answer' AND `original_id` = '$formanswerId'"); + $this->assertCount(1, $rows); + + // find the generated tickets + $formanswerId = $form_answer->getID(); + $item_ticket = new Item_Ticket(); + $item_ticketRows = $item_ticket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `items_id` = '$formanswerId'"); + $this->assertCount(2, $item_ticketRows); + + // check no issue was created for each generatred ticket + foreach ($item_ticketRows as $id => $row) { + $ticketId = $row['tickets_id']; + $rows = $form_answerIssue->find("`sub_itemtype` = 'Ticket' AND `original_id` = '$ticketId'"); + $this->assertCount(0, $rows); + } + + } +} \ No newline at end of file diff --git a/tools/extract_template.sh b/tools/extract_template.sh index 6563c7232..05b202537 100755 --- a/tools/extract_template.sh +++ b/tools/extract_template.sh @@ -1,10 +1,20 @@ #!/bin/bash -# Only strings with domain specified are extracted (use Xt args of keyword param to set number of args needed) +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../" +pushd $DIR > /dev/null + +NAME='Formcreator' +POTFILE=${NAME,,}.pot -xgettext *.php */*.php --copyright-holder='Resources Development Team' --package-name='GLPI - Resources plugin' --package-version='1.5.0' -o locales/glpi.pot -L PHP --add-comments=TRANS --from-code=UTF-8 --force-po \ - --keyword=_n:1,2,4t --keyword=__s:1,2t --keyword=__:1,2t --keyword=_e:1,2t --keyword=_x:1c,2,3t \ - --keyword=_ex:1c,2,3t --keyword=_nx:1c,2,3,5t --keyword=_sx:1c,2,3t +PHP_SOURCES=`find ./ -name \*.php -not -path "./vendor/*" -not -path "./lib/*"` +if [ ! -d "locales" ]; then + mkdir locales +fi +# Only strings with domain specified are extracted (use Xt args of keyword param to set number of args needed) +xgettext $PHP_SOURCES -o locales/$POTFILE -L PHP --add-comments=TRANS --from-code=UTF-8 --force-po \ + --keyword=_n:1,2,4t --keyword=__s:1,2t --keyword=__:1,2t --keyword=_e:1,2t --keyword=_x:1c,2,3t --keyword=_ex:1c,2,3t \ + --keyword=_sx:1c,2,3t --keyword=_nx:1c,2,3,5t +popd > /dev/null \ No newline at end of file diff --git a/tools/move_to_po.php b/tools/move_to_po.php deleted file mode 100644 index 263211613..000000000 --- a/tools/move_to_po.php +++ /dev/null @@ -1,307 +0,0 @@ -. - -------------------------------------------------------------------------- - */ - -// ---------------------------------------------------------------------- -// Original Author of file: Julien Dombre -// Purpose of file: -// ---------------------------------------------------------------------- - -chdir(dirname($_SERVER["SCRIPT_FILENAME"])); - -if ($argv) { - for ($i=1 ; $i'.$sing_trans.' '.$current_string_plural.'->'.$plural_trans."\n"; - if (!strlen($sing_trans) || !strlen($plural_trans)) { -// echo "clean\n"; - $sing_trans = ''; - $plural_trans = ''; - } - $content = "msgstr[0] \"$sing_trans\"\n"; - $content .= "msgstr[1] \"$plural_trans\"\n"; - } - } else { - $content=''; - } - } - $context = ''; - } - // Standard replacement - $content = preg_replace('/charset=CHARSET/','charset=UTF-8',$content); - - if (preg_match('/Plural-Forms/',$content)) { - $content = "\"Plural-Forms: nplurals=2; plural=(n != 1)\\n\"\n"; - } - - if (fwrite($po, $content) === FALSE) { - echo "unable to write in po file"; - exit; - } - - } -} -fclose($pot); -fclose($po); - - -function search_in_dict($string, $context) { - global $REFLANG, $LANG; - - if ($context) { - $string = "$context/$string"; - } - - $ponctmatch = "([\.: \(\)]*)"; - $varmatch = "(%s)*"; - - if (preg_match("/$varmatch$ponctmatch(.*)$ponctmatch$varmatch$/U",$string,$reg)) { -// print_r($reg); - $left = $reg[1]; - $left .= $reg[2]; - $string = $reg[3]; - $right = $reg[4]; - if (isset($reg[5])) { - $right .= $reg[5]; - } - } - -// echo $left.' <- '.$string.' -> '.$right."\n"; - foreach ($REFLANG as $mod => $data) { - - foreach ($data as $key => $val) { - - if (!is_array($val)){ - if (!isset($LANG[$mod][$key])) { - continue; - } - - // Search same case with punc - if (strcmp($val,$left.$string.$right) === 0) { - return $LANG[$mod][$key]; - } - // Search same case with punc - if (strcasecmp($val,$left.$string.$right) === 0) { - return $LANG[$mod][$key]; - } - - // Search same case with left punc - if (strcmp($val,$left.$string) === 0) { - return $LANG[$mod][$key].$right; - } - // Search same case with left punc - if (strcasecmp($val,$left.$string) === 0) { - return $LANG[$mod][$key].$right; - } - - // Search same case with right punc - if (strcmp($val,$string.$right) === 0) { - return $left.$LANG[$mod][$key]; - } - // Search same case with right punc - if (strcasecmp($val,$string.$right) === 0) { - return $left.$LANG[$mod][$key]; - } - - // Search same case without punc - if (strcmp($val,$string) === 0) { - return $left.$LANG[$mod][$key].$right; - } - // Search non case sensitive - if (strcasecmp($val,$string) === 0) { - return $left.$LANG[$mod][$key].$right; - } - } else { - //toolbox::logdebug($val); - //toolbox::logdebug($key); - //toolbox::logdebug($mod); - foreach ($val as $k => $v) { - if (!isset($LANG[$mod][$key][$k])) { - continue; - } - - // Search same case with punc - if (strcmp($v,$left.$string.$right) === 0) { - return $LANG[$mod][$key][$k]; - } - // Search same case with punc - if (strcasecmp($v,$left.$string.$right) === 0) { - return $LANG[$mod][$key][$k]; - } - - // Search same case with left punc - if (strcmp($v,$left.$string) === 0) { - return $LANG[$mod][$key][$k].$right; - } - // Search same case with left punc - if (strcasecmp($v,$left.$string) === 0) { - return $LANG[$mod][$key][$k].$right; - } - - // Search same case with right punc - if (strcmp($v,$string.$right) === 0) { - return $left.$LANG[$mod][$key][$k]; - } - // Search same case with right punc - if (strcasecmp($v,$string.$right) === 0) { - return $left.$LANG[$mod][$key][$k]; - } - - // Search same case without punc - if (strcmp($v,$string) === 0) { - return $left.$LANG[$mod][$key][$k].$right; - } - // Search non case sensitive - if (strcasecmp($v,$string) === 0) { - return $left.$LANG[$mod][$key][$k].$right; - } - } - } - } - } - - return ""; -} -?> \ No newline at end of file diff --git a/tools/release b/tools/release new file mode 100755 index 000000000..59b19231e --- /dev/null +++ b/tools/release @@ -0,0 +1,684 @@ +#!/usr/bin/python +# Adapted from Galette release script + +import os, sys, argparse, re, git, subprocess +import tarfile, shutil, gitdb, time, urllib2, json +from datetime import datetime +from termcolor import colored +from lxml import etree + +plugin_dir = os.path.dirname( + os.path.dirname(os.path.abspath(__file__)) +) +dist_dir = os.path.join( + plugin_dir, + 'dist' +) +verbose = False +tagrefs = None +force = False +commit = None +extra = None +sign = True +github = True +assume_yes = False +banned = [ + 'dist', + 'vendor', + '.git', + '.gitignore', + '.gh_token', + '.tx', + 'tools', + 'tests', + '.atoum.php', + 'screenshot*.png' +] +gh_orga = 'pluginsGLPI' +script_version = '1.0.1' + +def print_err(msg): + """ + Display colored error message + """ + print colored(msg, 'red', attrs=['bold']) + +def get_numeric_version(ver): + """ + Returns all numeric version + """ + return re.findall(r'\d+', ver) + +def valid_version(ver): + """ + Check if provided version is valid. + + Takes all digits in passed version, then reassemble them with dots + to check if it is the same as original given one. + """ + return '.'.join(get_numeric_version(ver)) == ver + +def incr_version(ver): + """ + Increment version number + """ + version = get_numeric_version(ver) + version[-1] = str(int(version[-1]) + 1) + return version + +def propose_version(): + """ + Propose new minor and major versions, + according to existing git tags + """ + last_major = '0' + last_minor = '0' + + for tagref in tagrefs: + if valid_version(tagref.name): + #last minor version is always the last one :) + if tagref.name > last_minor: + last_minor = tagref.name + + #last major version + if len(tagref.name) == 5 and tagref.name > last_major: + last_major = tagref.name + + if verbose: + print 'last minor: %s | last major %s' % (last_minor, last_major) + + #no version provided. propose one + new_minor = None + new_major = None + + if len(last_minor) == 5: + #if the latest is a major version + new_minor = last_minor + ('.1') + else: + new_minor = '.'.join(incr_version(last_minor)) + + new_major = '.'.join(incr_version(last_major)) + + print """Proposed versions: + minor: %s + major: %s + """ % (new_minor, new_major) + +def get_latest_version(): + """ + Look for latest version + """ + last = None + for tagref in tagrefs: + if valid_version(tagref.name): + #last created minor version is always the last one :) + if tagref.name > last: + last = tagref.name + + return last + +def is_existing_version(ver): + """ + Look specified version exists + """ + for tagref in tagrefs: + if valid_version(tagref.name): + if tagref.name == ver: + return True + return False + +def ask_user_confirm(msg): + """ + Ask user his confirmation + """ + if assume_yes: + return True + else: + while True: + sys.stdout.write(msg) + choice = raw_input().lower() + if choice == 'y' or choice == 'yes': + return True + elif choice == 'n' or choice == 'no': + return False + else: + print_err( + "Invalid input. Please enter 'yes' or 'no' (or 'y' or 'n')." + ) + +def get_rel_name(buildver): + """ + Build archive name from command line parameters + That would be used for git archiving prefix and archive name + """ + archive_name = None + + if commit and extra: + now = datetime.now() + archive_name = 'glpi-%s-%s-%s-%s-%s' % ( + plugin_name, + buildver, + extra, + now.strftime('%Y%m%d'), + commit + ) + else: + archive_name = 'glpi-%s-%s' % (plugin_name, buildver) + + return archive_name + +def _do_build(repo, ver): + """ + Proceed build + """ + exists = False + ascexists = False + rel_name = get_rel_name(ver) + archive_name = rel_name + '.tar.bz2' + archive = os.path.join( + dist_dir, + archive_name + ) + + if not force: + #first check if a version + local = False + ascLocal = False + + #check if a release exists upstream + #FIXME: this retrieve only publicated release, not drafts + url = 'https://api.github.com/repos/%s/%s/releases/tags/%s' % (gh_orga, plugin_name, ver) + + exists = False + gh_id = None + + try: + request = urllib2.Request(url) + handle = urllib2.urlopen(request) + contents = json.loads(handle.read()) + + for asset in contents['assets']: + if archive_name == asset['name']: + exists = True + gh_id = contents['id'] + break + except (urllib2.URLError, urllib2.HTTPError): + pass + + if exists: + #we know a release exists for this tag. Check if files have been uploaded yet + pass + + if not exists: + #also check from local repo + exists = os.path.exists(archive) + if exists: + local = True + + #also check from local repo + ascexists = os.path.exists( + os.path.join( + dist_dir, + archive_name + '.asc' + ) + ) + + if exists or ascexists: + msg = None + if exists: + loctxt = '' + if local: + loctxt = 'locally ' + msg = 'Release %s already %sexists' % (rel_name, loctxt) + + if ascexists: + loctxt = '' + if ascLocal: + loctxt = ' locally' + if msg is not None: + msg += ' and has been %ssigned!' % loctxt + else: + msg += 'Release has been %ssigned!' % loctxt + + msg += '\n\nYou will *NOT* build another one :)' + print_err(msg) + else: + print 'Building %s...' % rel_name + + if verbose: + typestr = 'Tag' + typever = ver + + if commit and extra: + typestr = 'Commit' + typever = commit + + print 'Release name: %s, %s: %s, Dest: %s' % ( + rel_name, + typestr, + typever, + archive + ) + + paths = os.listdir(plugin_dir) + paths = list(set(paths) - set(banned)) + + if commit and extra: + print 'Archiving GIT commit %s' % commit + with open(archive, 'wb') as stream: + repo.archive(stream, commit, prefix=plugin_name+'/', path=paths) + else: + print 'Archiving GIT tag %s' % ver + with open(archive, 'wb') as stream: + repo.archive(stream, ver, prefix=plugin_name+'/', path=paths) + + print 'Adding vendor libraries' + prepare(plugin_name, archive) + + if sign: + do_sign(archive) + + if github: + create_gh_release(archive, gh_id, plugin_name, ver) + +def do_sign(archive): + sign_cmd = 'gpg --no-use-agent --detach-sign --armor %s' % archive + p1 = subprocess.Popen(sign_cmd, shell=True) + p1.communicate() + +def create_gh_release(archive, gh_id, plugin_name, ver): + with open(gh_cred_file, 'r') as fd: + token = fd.readline().strip() + + gh = github.Github(token) + gh_user = gh.get_user() + + for gh_repo in gh_user.get_repos(): + if gh_repo.full_name == '%s/%s' % (gh_orga, plugin_name): + break + + gh_release = None + + #check in all releases (including drafts) if nothing has been found yet + if gh_id is None: + for gh_rel in gh_repo.get_releases(): + if gh_rel.tag_name == ver: + gh_release = gh_rel + break + + #create release if it does not exists + if gh_id is None and gh_release is None: + is_prerelease = True if commit else False + gh_release = gh_repo.create_git_release( + ver, + 'GLPI %s %s' % (plugin_name, ver), + 'Automated release from release script', + True, + is_prerelease + ) + elif gh_id is not None: + gh_release = gh_repo.get_release(gh_id) + + #upload = ask_user_confirm( + # 'Do you want to upload archive %s? [yes/No] ' % archive + #) + + #if upload: + # do_upload(archive, gh_id, plugin_name, ver) + +#def do_upload(archive, gh_id, plugin_name, ver): + #from uritemplate import URITemplate + #import requests + #import mimetypes + + #Upload asset + #template = URITemplate(gh_release.upload_url) + + #headers = {'Content-Type': 'application/octet-stream', 'Authorization': 'token %s' % token} + #params = {'name': '%s-%s.tar.bz2' % (plugin_name, ver)} + #url = template.expand(params) + + ## Bad request :'( + #f = open('/var/www/webapps/glpi/plugins/order/dist/glpi-order-1.9.5.tar.bz2', 'rb') + #r = requests.post( + # url, + # data=f, + # headers=headers + #) + #print r.json() + #r.raise_for_status() + +def prepare(rel_name, archive): + """ + Add external libraries to the archive, if any + """ + + plugin = tarfile.open(archive, 'r') + src_dir = os.path.join(dist_dir, 'src') + if not os.path.exists(src_dir): + os.makedirs(src_dir) + plugin.extractall(path=src_dir) + plugin.close() + + build_dir = os.path.join(src_dir, plugin_name) + if os.path.exists(os.path.join(build_dir, 'composer.lock')): + composer = ['composer', 'install', '-o', '--no-dev'] + + if not verbose: + composer.insert(-1, '-q') + + p1 = subprocess.Popen( + composer, + cwd=build_dir + ) + p1.communicate() + + compile_mo(build_dir) + + minify(build_dir) + + plugin = tarfile.open(archive, 'w|bz2') + + for i in os.listdir(src_dir): + plugin.add( + os.path.join(src_dir, i), + arcname=rel_name + ) + + plugin.close() + shutil.rmtree(src_dir) + +def compile_mo(build_dir): + locales_dir = os.path.join(build_dir, 'locales') + if verbose: + print 'Locales dir: %s' % locales_dir + if os.path.exists(locales_dir): + for file in os.listdir(locales_dir): + if file.endswith('.po'): + if verbose: + print 'Compiling %s...' % file + p1 = subprocess.Popen( + ['msgfmt', file, '-o', file.replace('.po', '.mo')], + cwd=locales_dir + ) + p1.communicate() + +def minify(build_dir): + robo_path = os.path.join(plugin_dir, 'vendor', 'bin', 'robo') + if os.path.exists(robo_path): + robo = [robo_path, 'minify'] + if not verbose: + robo.insert(-1, '-q') + + if verbose: + print robo + + p1 = subprocess.Popen( + robo, + cwd=build_dir + ) + p1.communicate() + else: + print_err("Robo.li is not installed; cannot minify!") + +def valid_commit(repo, c): + """ + Validate commit existance in repository + """ + global commit + + try: + dformat = '%a, %d %b %Y %H:%M' + repo_commit = repo.commit(c) + + commit = repo_commit.hexsha[:10] + print colored("""Commit informations: + Hash: %s + Author: %s + Authored date: %s + Commiter: %s + Commit date: %s + Message: %s""" % ( + commit, + repo_commit.author, + time.strftime(dformat, time.gmtime(repo_commit.authored_date)), + repo_commit.committer, + time.strftime(dformat, time.gmtime(repo_commit.committed_date)), + repo_commit.message + ), None, 'on_grey', attrs=['bold']) + return True + except gitdb.exc.BadObject: + return False + +def guess_plugin_name(): + """ + Tries to guess plugin name, ask user at last + """ + name = None + + filename = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + 'extract_template.sh' + ) + + #try to get configured plugin name + if os.path.exists(filename): + with file(filename) as input: + for count, line in enumerate(input): + results = re.match(r"^NAME='(.+)'$", line) + if results: + name = results.group(1) + break + + if name is None: + #No configured name found. Let's use current directory name + name = os.path.split(plugin_dir)[-1] + + return name.lower() + +def check_version(buildver): + if verbose: + print 'Checking for version %s' % buildver + + filename = os.path.join( + plugin_dir, + 'setup.php' + ) + + found = None + #find version constant + if os.path.exists(filename): + with file(filename) as input: + for count, line in enumerate(input): + regexp = ".*('|\")PLUGIN_%s_VERSION('|\"), ('|\")(.+)('|\")" % plugin_name.upper() + results = re.match(regexp, line) + if results: + found = results.group(4) + break + + if not found == buildver: + print_err('Plugin version check has failed (%s but %s found)!' % (buildver, found)) + return False + + #check plugins website XML file + xmlfile = os.path.join(plugin_dir, '%s.xml' % plugin_name) + if not os.path.exists(xmlfile): + xmlfile = os.path.join(plugin_dir, 'plugin.xml') + if not os.path.exists(xmlfile): + xmlfile = None + + if xmlfile != None: + if verbose: + print 'XML file found in %s' % xmlfile + try: + xmldoc = etree.parse(xmlfile) + for version in xmldoc.getiterator('num'): + if version.text == buildver: + if verbose: + print '%s found in the XML file!' % buildver + return True + print_err('%s *NOT* found in the XML file %s' % (buildver, xmlfile)) + except etree.XMLSyntaxError as err: + print_err('%s is *NOT* XML valid!' % (xmlfile)) + if verbose: + print format(err) + return False + else: + print_err('Plugins website configuration file has not been found!') + return False + +def main(): + """ + Main method + """ + global verbose, tagrefs, force, extra, assume_yes, sign, plugin_name, github, gh_cred_file + + parser = argparse.ArgumentParser(description='GLPI plugins release script', version=script_version) + group = parser.add_mutually_exclusive_group() + group.add_argument( + '-r', + '--release', + help='Version to release' + ) + parser.add_argument( + '-g', + '--nogithub', + help="DO NOT Create github draft release", + action='store_false' + ) + parser.add_argument( + '-C', + '--check-only', + help="Only do chec, does not release anything", + action='store_true' + ) + group.add_argument( + '-p', + '--propose', + help='Calculate and propose next possible versions', + action='store_true' + ) + parser.add_argument( + '-c', + '--commit', + help='Specify commit to archive (-v required)' + ) + parser.add_argument( + '-e', + '--extra', + help='Extra version informations (-c required)' + ) + parser.add_argument( + '-m', + '--compile-mo', + help="Compile MO files from PO files (exclusive)", + action='store_true' + ) + parser.add_argument( + '-M', + '--minify', + help="Minify CSS ans JS files", + action='store_true' + ) + parser.add_argument( + '-S', + '--nosign', + help="Do not sign release tarball", + action="store_false" + ) + parser.add_argument( + '-Y', + '--assume-yes', + help='Assume YES to all questions. Be sure to understand what you are doing!', + action='store_true' + ) + parser.add_argument( + '-V', + '--verbose', + help='Be more verbose', + action="store_true" + ) + parser.add_argument('-f', action='store_true') + args = parser.parse_args() + + verbose=args.verbose + sign=args.nosign + github=args.nogithub + + if verbose: + print args + + if github: + import github + gh_cred_file = os.path.join(plugin_dir, '.gh_token') + if not os.path.exists(gh_cred_file): + print_err('GitHub credential file does not exists! Either create it or use the --nogithub option.') + sys.exit(1) + + plugin_name = guess_plugin_name() + + plugin_repo = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + repo = git.Repo(plugin_repo) + tagrefs = repo.tags + + if args.f == True: + force = ask_user_confirm( + 'Are you *REALLY* sure you mean -f when you typed -f? [yes/No] ' + ) + assume_yes=args.assume_yes + + if args.check_only: + print '*** Entering *check-only* mode ***' + + #check if dist_dir exists + if not os.path.exists(dist_dir): + os.makedirs(dist_dir) + + build = False + buildver = None + if args.compile_mo or args.minify: + if args.compile_mo: + compile_mo(plugin_repo) + if args.minify: + minify(plugin_repo) + elif (args.extra or args.commit) and (not args.extra or not args.commit or not args.release): + print_err('You have to specify --version --commit and --extra all together') + sys.exit(1) + elif args.commit and args.release and args.extra: + if valid_commit(repo, args.commit): + if verbose: + print 'Commit is valid' + build = True + buildver = args.release + extra = args.extra + else: + print_err('Invalid commit ref %s' % args.commit) + elif args.release: + if not valid_version(args.release): + print_err('%s is not a valid version number!' % args.release) + sys.exit(1) + else: + #check if specified version exists + if not is_existing_version(args.release): + print_err('%s does not exist!' % args.release) + else: + build = True + buildver = args.release + elif args.propose: + propose_version() + else: + buildver = get_latest_version() + if force: + build = True + else: + build = ask_user_confirm( + 'Do you want to build version %s? [Yes/no] ' % buildver + ) + + if build: + if check_version(buildver) and args.check_only == False: + _do_build(repo, buildver) + +if __name__ == "__main__": + main() + From 567ca7c240c98ff5f85aa054ad37cf1deba9fb6b Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Mar 2017 17:01:08 +0100 Subject: [PATCH 104/178] better log checking (#515) --- tests/inc/CommonTestCase.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/inc/CommonTestCase.php b/tests/inc/CommonTestCase.php index 2b72409ec..ace7855ba 100644 --- a/tests/inc/CommonTestCase.php +++ b/tests/inc/CommonTestCase.php @@ -27,11 +27,16 @@ protected static function resetGLPILogs() { // Reset error logs file_put_contents(GLPI_LOG_DIR."/sql-errors.log", ''); file_put_contents(GLPI_LOG_DIR."/php-errors.log", ''); - } + } protected function tearDown() { - $GLPIlog = new GLPIlogs(); - $GLPIlog->testSQLlogs(); - $GLPIlog->testPHPlogs(); + // Check logs + $fileSqlContent = file_get_contents(GLPI_LOG_DIR."/sql-errors.log"); + $filePhpContent = file_get_contents(GLPI_LOG_DIR."/php-errors.log"); + + self::resetGLPILogs(); + + $this->assertEquals('', $fileSqlContent, 'sql-errors.log not empty'); + $this->assertEquals('', $filePhpContent, 'php-errors.log not empty'); } } \ No newline at end of file From e104703bc470ac2126392191e90f7076b39b639e Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Mar 2017 16:17:00 +0100 Subject: [PATCH 105/178] fix SQL errors --- hook.php | 2 +- inc/form_answer.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hook.php b/hook.php index 7a6bacd21..0abe9c168 100644 --- a/hook.php +++ b/hook.php @@ -284,7 +284,7 @@ function plugin_formcreator_hook_update_ticket(CommonDBTM $item) { 'is_recursive' => '0', 'requester_id' => $item->fields['users_id_recipient'], 'validator_id' => '0', - 'comment' => $item->fields['content'], + 'comment' => addslashes($item->fields['content']), )); } } diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 03c07bc52..f12627149 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -781,7 +781,7 @@ public function saveAnswers($datas) 'is_recursive' => '0', 'requester_id' => $ticket->getField('users_id_recipient'), 'validator_id' => '', - 'comment' => $ticket->getField('content'), + 'comment' => addslashes($ticket->getField('content')), )); } else { $issue = new PluginFormcreatorIssue(); @@ -798,7 +798,7 @@ public function saveAnswers($datas) 'is_recursive' => '0', 'requester_id' => $ticket->getField('users_id_recipient'), 'validator_id' => '', - 'comment' => $ticket->getField('content'), + 'comment' => addslashes($ticket->getField('content')), )); } } From 2b86b1f9650594777635715167b5b265976fef2f Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Mar 2017 21:39:50 +0100 Subject: [PATCH 106/178] fix typos --- inc/section.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/section.class.php b/inc/section.class.php index 83c1958c2..a8080c0f4 100644 --- a/inc/section.class.php +++ b/inc/section.class.php @@ -56,7 +56,7 @@ public function prepareInputForAdd($input) // - name is required if(!isset($input['name']) || (isset($input['name']) && empty($input['name'])) ) { - Session::addMessageAfterRedirect(__('The title is required', 'formcreato'), false, ERROR); + Session::addMessageAfterRedirect(__('The title is required', 'formcreator'), false, ERROR); return array(); } $input['name'] = addslashes($input['name']); @@ -97,7 +97,7 @@ public function prepareInputForUpdate($input) // - name is required if(isset($input['name']) && empty($input['name'])) { - Session::addMessageAfterRedirect(__('The title is required', 'formcreato'), false, ERROR); + Session::addMessageAfterRedirect(__('The title is required', 'formcreator'), false, ERROR); return array(); } From 5e6bc836f46c328f6d8e48a08b090f484f4a2477 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Mar 2017 21:21:47 +0100 Subject: [PATCH 107/178] make column not clickable --- inc/issue.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/issue.class.php b/inc/issue.class.php index 3be6df8fd..fbac3c2ce 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -250,7 +250,7 @@ public function getSearchOptions() { 'table' => self::getTable(), 'field' => 'display_id', 'name' => __('ID'), - 'datatype' => 'itemlink', + 'datatype' => 'string', 'forcegroupby' => true, 'massiveaction' => false, ), From 02241a8fb500ac4734c72fb03602d6a352febcc6 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 7 Mar 2017 14:31:52 +0100 Subject: [PATCH 108/178] create tab for forms in central --- ajax/homepage_forms.php | 128 +------------------------------------- inc/form.class.php | 134 ++++++++++++++++++++++++++++++++++++++++ scripts/scripts.js.php | 3 +- setup.php | 2 + 4 files changed, 139 insertions(+), 128 deletions(-) diff --git a/ajax/homepage_forms.php b/ajax/homepage_forms.php index ebed59712..745cf205e 100644 --- a/ajax/homepage_forms.php +++ b/ajax/homepage_forms.php @@ -1,129 +1,5 @@ query($query_forms); - -// Show categories wicth have at least one form user can access -$query = "SELECT $cat_table.`name`, $cat_table.`id` - FROM $cat_table - WHERE 0 < ( - SELECT COUNT($form_table.id) - FROM $form_table - WHERE $form_table.`plugin_formcreator_categories_id` = $cat_table.`id` - AND $form_table.`is_active` = 1 - AND $form_table.`is_deleted` = 0 - AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) - AND $where - AND ($form_table.`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( - SELECT plugin_formcreator_forms_id - FROM $table_fp - WHERE profiles_id = " . $_SESSION['glpiactiveprofile']['id'] . ")) - ) - ORDER BY $cat_table.`name` ASC"; -$result = $DB->query($query); -if ($DB->numrows($result) > 0 || $DB->numrows($result_forms) > 0) { - echo ''; - echo ''; - echo ''; - echo ''; - - if ($DB->numrows($result_forms) > 0) { - echo ''; - $i = 0; - while ($form = $DB->fetch_array($result_forms)) { - $i++; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - } - - if ($DB->numrows($result) > 0) { - // For each categories, show the list of forms the user can fill - $i = 0; - while ($category = $DB->fetch_array($result)) { - $categoryId = $category['id']; - echo ''; - $query_forms = "SELECT $form_table.id, $form_table.name, $form_table.description - FROM $form_table - WHERE $form_table.`plugin_formcreator_categories_id` = '$categoryId' - AND $form_table.`is_active` = 1 - AND $form_table.`is_deleted` = 0 - AND $form_table.`helpdesk_home` = 1 - AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) - AND $where - AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( - SELECT plugin_formcreator_forms_id - FROM $table_fp - WHERE profiles_id = " . (int) $_SESSION['glpiactiveprofile']['id'] . ")) - ORDER BY $form_table.name ASC"; - $result_forms = $DB->query($query_forms); - $i = 0; - while ($form = $DB->fetch_array($result_forms)) { - $i++; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - } - } - } - echo '
    ' . _n('Form', 'Forms', 2, 'formcreator') . '
    ' . __('Forms without category', 'formcreator') . '
    '; - echo '+'; - echo ' '; - echo '' - . $form['name'] - . '
    ' . $form['description'] . ' 
    ' . $category['name'] . '
    '; - echo '+'; - echo ' '; - echo '' - . $form['name'] - . '
    ' . $form['description'] . ' 
    '; - echo '
    '; - echo ''; -} +$form = new PluginFormcreatorForm(); +$form->showForCentral(); diff --git a/inc/form.class.php b/inc/form.class.php index cda386d8b..e2e2140c0 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1633,4 +1633,138 @@ public static function import($form = array()) { return $forms_id; } + + /** + * show list of available forms + */ + public function showForCentral() { + global $DB, $CFG_GLPI; + + // Define tables + $cat_table = getTableForItemType('PluginFormcreatorCategory'); + $form_table = getTableForItemType('PluginFormcreatorForm'); + $table_fp = getTableForItemType('PluginFormcreatorForm_Profile'); + $where = getEntitiesRestrictRequest("", $form_table, "", "", true, false); + $language = $_SESSION['glpilanguage']; + + // Show form whithout table + $query_forms = "SELECT $form_table.id, $form_table.name, $form_table.description + FROM $form_table + WHERE $form_table.`plugin_formcreator_categories_id` = 0 + AND $form_table.`is_active` = 1 + AND $form_table.`is_deleted` = 0 + AND $form_table.`helpdesk_home` = 1 + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) + AND $where + AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( + SELECT plugin_formcreator_forms_id + FROM $table_fp + WHERE profiles_id = " . $_SESSION['glpiactiveprofile']['id'] . ")) + ORDER BY $form_table.name ASC"; + $result_forms = $DB->query($query_forms); + + // Show categories wicth have at least one form user can access + $query = "SELECT $cat_table.`name`, $cat_table.`id` + FROM $cat_table + WHERE 0 < ( + SELECT COUNT($form_table.id) + FROM $form_table + WHERE $form_table.`plugin_formcreator_categories_id` = $cat_table.`id` + AND $form_table.`is_active` = 1 + AND $form_table.`is_deleted` = 0 + AND $form_table.`helpdesk_home` = 1 + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) + AND $where + AND ($form_table.`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( + SELECT plugin_formcreator_forms_id + FROM $table_fp + WHERE profiles_id = " . $_SESSION['glpiactiveprofile']['id'] . ")) + ) + ORDER BY $cat_table.`name` ASC"; + $result = $DB->query($query); + if ($DB->numrows($result) > 0 || $DB->numrows($result_forms) > 0) { + echo ''; + echo ''; + echo ''; + echo ''; + + if ($DB->numrows($result_forms) > 0) { + echo ''; + $i = 0; + while ($form = $DB->fetch_array($result_forms)) { + $i++; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + + if ($DB->numrows($result) > 0) { + // For each categories, show the list of forms the user can fill + $i = 0; + while ($category = $DB->fetch_array($result)) { + $categoryId = $category['id']; + echo ''; + $query_forms = "SELECT $form_table.id, $form_table.name, $form_table.description + FROM $form_table + WHERE $form_table.`plugin_formcreator_categories_id` = '$categoryId' + AND $form_table.`is_active` = 1 + AND $form_table.`is_deleted` = 0 + AND $form_table.`helpdesk_home` = 1 + AND ($form_table.`language` = '$language' OR $form_table.`language` IN (0, '', NULL)) + AND $where + AND (`access_rights` != " . PluginFormcreatorForm::ACCESS_RESTRICTED . " OR $form_table.`id` IN ( + SELECT plugin_formcreator_forms_id + FROM $table_fp + WHERE profiles_id = " . (int) $_SESSION['glpiactiveprofile']['id'] . ")) + ORDER BY $form_table.name ASC"; + $result_forms = $DB->query($query_forms); + $i = 0; + while ($form = $DB->fetch_array($result_forms)) { + $i++; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + } + echo '
    ' . _n('Form', 'Forms', 2, 'formcreator') . '
    ' . __('Forms without category', 'formcreator') . '
    '; + echo '+'; + echo ' '; + echo '' + . $form['name'] + . '
    ' . $form['description'] . ' 
    ' . $category['name'] . '
    '; + echo '+'; + echo ' '; + echo '' + . $form['name'] + . '
    ' . $form['description'] . ' 
    '; + echo '
    '; + echo ''; + } + } } diff --git a/scripts/scripts.js.php b/scripts/scripts.js.php index 41a28169d..9bbb29ce0 100644 --- a/scripts/scripts.js.php +++ b/scripts/scripts.js.php @@ -60,8 +60,7 @@ } ?> - if (location.pathname.indexOf("central.php") != -1 - || location.pathname.indexOf("helpdesk.public.php") != -1) { + if (location.pathname.indexOf("helpdesk.public.php") != -1) { $('.ui-tabs-panel:visible').ready(function() { showHomepageFormList(); diff --git a/setup.php b/setup.php index 64a8cca55..88c635707 100644 --- a/setup.php +++ b/setup.php @@ -176,6 +176,8 @@ function plugin_init_formcreator () $PLUGIN_HOOKS['add_javascript']['formcreator'][] = 'lib/masonry.pkgd.min.js'; } + Plugin::registerClass('PluginFormcreatorForm', array('addtabon' => 'Central')); + // Load field class and all its method to manage fields Plugin::registerClass('PluginFormcreatorFields'); From 9ccd4f597cd3adea1d9fbf9b2cd8d8dab4b95ea6 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 8 Mar 2017 14:38:58 +0100 Subject: [PATCH 109/178] fix typo --- inc/form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/form.class.php b/inc/form.class.php index e2e2140c0..5706b4276 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1287,7 +1287,7 @@ public function duplicate() $target->update(array( 'id' => $target->getID(), - 'items_id' => $new_target_ticket_id, + 'items_id' => $new_targets_ticket_id, )); // Form target tickets actors From 2af72c9d98bce6db35fa6844d8ce4e545c8b9fa8 Mon Sep 17 00:00:00 2001 From: btry Date: Wed, 8 Mar 2017 21:30:20 +0100 Subject: [PATCH 110/178] add unit tests --- .../0010_Integration/FormDuplicationTest.php | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/tests/0010_Integration/FormDuplicationTest.php b/tests/0010_Integration/FormDuplicationTest.php index c0a964da2..87b8b1308 100644 --- a/tests/0010_Integration/FormDuplicationTest.php +++ b/tests/0010_Integration/FormDuplicationTest.php @@ -4,6 +4,7 @@ class FormDuplicationTest extends SuperAdminTestCase protected $formData; protected $sectionData; + protected $targetData; public function setUp() { parent::setUp(); @@ -50,6 +51,16 @@ public function setUp() { ), ); + $this->targetData = array( + array( + 'name' => 'target ticket 1', + 'itemtype' => 'PluginFormcreatorTargetTicket', + ), + array( + 'name' => 'target ticket 2', + 'itemtype' => 'PluginFormcreatorTargetTicket', + ) + ); } public function testInitCreateForm() { @@ -84,6 +95,12 @@ public function testInitCreateForm() { $question->updateConditions($questionData); } } + foreach ($this->targetData as $targetData) { + $target = new PluginFormcreatorTarget(); + $targetData['plugin_formcreator_forms_id'] = $formId; + $target->add($targetData); + $this->assertFalse($target->isNewItem()); + } } return $form; @@ -101,13 +118,13 @@ public function testDuplicateForm(PluginFormcreatorForm $form) { $newFormId = $form->getID(); $this->assertNotEquals($sourceFormId, $newFormId); - // Check sections have been copied + // Check sections were copied $section = new PluginFormcreatorSection(); $sourceRows = $section->find("`plugin_formcreator_forms_id` = '$sourceFormId'"); $newRows = $section->find("`plugin_formcreator_forms_id` = '$newFormId'"); $this->assertEquals(count($sourceRows), count ($newRows)); - // Check questions have been copied + // Check questions were copied $table_section = PluginFormcreatorSection::getTable(); $question = new PluginFormcreatorQuestion(); $sourceRows = $question->find("`plugin_formcreator_sections_id` IN ( @@ -116,7 +133,22 @@ public function testDuplicateForm(PluginFormcreatorForm $form) { $newRows = $question->find("`plugin_formcreator_sections_id` IN ( SELECT `id` FROM `$table_section` WHERE `$table_section`.`plugin_formcreator_forms_id` = '$newFormId' )"); + $this->assertEquals(count($sourceRows), count($newRows)); + // check target were created + $target = new PluginFormcreatorTarget(); + $sourceRows = $target->find("`plugin_formcreator_forms_id` = '$sourceFormId'"); + $newRows = $target->find("`plugin_formcreator_forms_id` = '$sourceFormId'"); $this->assertEquals(count($sourceRows), count($newRows)); + + // check target tickets were created + foreach ($newRows as $targetId => $newTarget) { + if ($newTarget['itemtype'] == 'PluginFormcreatorTargetTicket') { + $targetTicket = new PluginFormcreatorTArgetTicket(); + $targetTicket->getFromDB($newTarget['items_id']); + $this->assertFalse($targetTicket->isNewItem()); + } + } + } } \ No newline at end of file From b9e5d9dea4071a3bb0edc537aaeeaa83fb97bcfd Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 9 Mar 2017 09:06:56 +0100 Subject: [PATCH 111/178] Revert "fix typo" This reverts commit 9ccd4f597cd3adea1d9fbf9b2cd8d8dab4b95ea6. --- inc/form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/form.class.php b/inc/form.class.php index 5706b4276..e2e2140c0 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1287,7 +1287,7 @@ public function duplicate() $target->update(array( 'id' => $target->getID(), - 'items_id' => $new_targets_ticket_id, + 'items_id' => $new_target_ticket_id, )); // Form target tickets actors From 12d1b8a82e0a9c03490bba0c17ffaa5e7fde40bd Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 9 Mar 2017 13:38:24 +0100 Subject: [PATCH 112/178] use phpunit from composer (#530) use phpunit from composer; fix backward comaptibility with PHP 5.4 and robo.li --- .travis.yml | 5 +++-- composer.json | 7 ++++--- tests/inc/CommonDBTestCase.php | 2 +- tests/inc/GLPIlogs.php | 4 ++-- tests/inc/PluginDB.php | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index aaa035081..028ba8ebb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,8 @@ before_script: - mv ../formcreator plugins/formcreator - composer install --no-dev - php tools/cliinstall.php --db=glpi-test --user=travis --tests + - cd plugins/formcreator + - composer install script: - - cd plugins/formcreator - - phpunit --verbose + - vendor/bin/phpunit --verbose diff --git a/composer.json b/composer.json index cd119c088..9fc3faed1 100644 --- a/composer.json +++ b/composer.json @@ -1,8 +1,9 @@ { "require-dev": { - "consolidation/robo": "dev-master@dev", + "consolidation/robo": "^0.7 || ^1.0", "patchwork/jsqueeze": "~1.0", "natxet/CssMin": "~3.0", - "glpi-project/coding-standard": "0.5" + "glpi-project/coding-standard": "0.5", + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.0" } -} \ No newline at end of file +} diff --git a/tests/inc/CommonDBTestCase.php b/tests/inc/CommonDBTestCase.php index 6a07c1a3d..ecb21209c 100644 --- a/tests/inc/CommonDBTestCase.php +++ b/tests/inc/CommonDBTestCase.php @@ -1,5 +1,5 @@ Date: Mon, 13 Mar 2017 11:27:57 +0100 Subject: [PATCH 113/178] fix added actors with ID = 0 (#532) --- inc/targetticket.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 36c247350..0d676f098 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -1415,6 +1415,10 @@ protected function addActor($role, $user, $notify) { } else { $userId = intval($user); $alternativeEmail = ''; + if ($userId == '0') { + // there is no actor + return; + } } switch ($role) { From 560df411cb746581bebaa971f335aa50092dc802 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 14 Mar 2017 15:03:31 +0100 Subject: [PATCH 114/178] code refactor --- inc/form_answer.class.php | 41 +++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 4f9eddcf5..859cd3c52 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -105,30 +105,25 @@ public function getSearchOptions() if ($display_for_form) { $optindex = self::SOPTION_ANSWER; - $section = new PluginFormcreatorSection; $question = new PluginFormcreatorQuestion; - $sections = $section->find("`".PluginFormcreatorSection::$items_id."` = ". - $_SESSION['formcreator']['form_search_answers']); - foreach ($sections as $sections_id => $current_section) { - $questions = $question->find("`".PluginFormcreatorQuestion::$items_id."` = ". - $sections_id); - - foreach($questions as $questions_id => $current_question) { - $tab[$optindex] = [ - 'table' => PluginFormcreatorAnswer::getTable(), - 'field' => 'answer', - 'name' => $current_question['name'], - 'datatype' => 'string', - 'massiveaction' => false, - 'nosearch' => true, - 'joinparams' => [ - 'jointype' => 'child', - 'condition' => "AND NEWTABLE.`plugin_formcreator_question_id` = $questions_id", - ] - ]; - - $optindex++; - } + $questions = $question->getQuestionsFromForm($_SESSION['formcreator']['form_search_answers']); + + foreach($questions as $current_question) { + $questions_id = $question->getID(); + $tab[$optindex] = [ + 'table' => PluginFormcreatorAnswer::getTable(), + 'field' => 'answer', + 'name' => $current_question->getField('name'), + 'datatype' => 'string', + 'massiveaction' => false, + 'nosearch' => false, + 'joinparams' => [ + 'jointype' => 'child', + 'condition' => "AND NEWTABLE.`plugin_formcreator_question_id` = $questions_id", + ] + ]; + + $optindex++; } } From 782c2159f10c05c9eac23a518c532b2f67d37b3a Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 16 Mar 2017 16:12:17 +0100 Subject: [PATCH 115/178] simplify escaping mess --- ajax/showfields.php | 2 +- inc/form_answer.class.php | 2 +- inc/question.class.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ajax/showfields.php b/ajax/showfields.php index 5f7f4d76e..5d0ee75e9 100644 --- a/ajax/showfields.php +++ b/ajax/showfields.php @@ -14,7 +14,7 @@ } $value = json_encode($tab); } else { - $value = plugin_formcreator_encode($value); + $value = stripslashes($value); } } unset ($value); diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 4f9eddcf5..f1235b294 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -880,7 +880,7 @@ public function getAnswers($formAnswerId) { $answers = $answer->find("`plugin_formcreator_forms_answers_id` = '$formAnswerId'"); $answers_values = array(); foreach ($answers as $found_answer) { - $answers_values[$found_answer['plugin_formcreator_question_id']] = $found_answer['answer']; + $answers_values[$found_answer['plugin_formcreator_question_id']] = stripslashes($found_answer['answer']); } return $answers_values; } diff --git a/inc/question.class.php b/inc/question.class.php index 3f5fa459d..a3eca56f3 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -633,7 +633,7 @@ public function updateConditions($input) { $order = 0; while (count($input['show_field']) > 0) { $order++; - $value = plugin_formcreator_encode(array_shift($input['show_value'])); + $value = plugin_formcreator_encode(array_shift($input['show_value']), false); $showField = (int) array_shift($input['show_field']); $showCondition = plugin_formcreator_decode(array_shift($input['show_condition'])); $showLogic = array_shift($input['show_logic']); From 99cb5865c72b2df1deb3c279b620c2df99fceac2 Mon Sep 17 00:00:00 2001 From: btry Date: Thu, 16 Mar 2017 18:48:14 +0100 Subject: [PATCH 116/178] fix not displayed ticket in service catalog (#535) --- inc/issue.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/issue.class.php b/inc/issue.class.php index fbac3c2ce..14ef652e3 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -245,13 +245,13 @@ public function getSearchOptions() { 'name' => __('Name'), 'datatype' => 'itemlink', 'massiveaction' => false, + 'additionalfields' => array('display_id'), ), '2' => array( 'table' => self::getTable(), 'field' => 'display_id', 'name' => __('ID'), 'datatype' => 'string', - 'forcegroupby' => true, 'massiveaction' => false, ), '3' => array( @@ -389,8 +389,8 @@ public static function giveItem($itemtype, $ID, $data, $num) { $table=$searchopt[$ID]["table"]; $field=$searchopt[$ID]["field"]; - if (isset($data['raw']['id'])) { - $id = substr($data['raw']['id'], 2); + if (isset($data['raw']['ITEM_0_display_id'])) { + $id = substr($data['raw']['ITEM_0_display_id'], 2); } switch ("$table.$field") { From 999d490a097b209939a135d4220e9b2ebd7bc0c6 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Mar 2017 11:49:24 +0100 Subject: [PATCH 117/178] fix overflow if too many categories --- css/styles.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index 5b4f9b360..b0990756c 100644 --- a/css/styles.css +++ b/css/styles.css @@ -594,7 +594,6 @@ form.formcreator_form { #plugin_formcreator_wizard_categories { width: 275px; - min-height: calc(100vh - 28px - 65px); top: 0; bottom: 0; left: 0; @@ -777,6 +776,12 @@ form.formcreator_form { 0 1px 5px 0 rgba(0,0,0,.12); } +.plugin_formcreator_card::after { + content: ""; + display: block; + clear: both; +} + #plugin_formcreator_formlist { margin-top: 10px; } From 70fb5cb56cb533ed2f45e533f4c9a015b689f6ad Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Mar 2017 10:44:37 +0100 Subject: [PATCH 118/178] fix width for datetime --- css/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/styles.css b/css/styles.css index b0990756c..e35182e26 100644 --- a/css/styles.css +++ b/css/styles.css @@ -247,7 +247,7 @@ form.formcreator_form { box-sizing: border-box; } .formcreator_form .form-group .form_field input.hasDatepicker { - width: 115px; + width: 125px; } .formcreator_form .form-group img { vertical-align: middle; From 0a742ebccfa6afc420eece2a93339de016bfce22 Mon Sep 17 00:00:00 2001 From: Alexandre Delaunay Date: Mon, 20 Mar 2017 14:14:58 +0100 Subject: [PATCH 119/178] Message ack for public (#539) * some clean + add confirmation message for public form missing cr in eof * fix plugin check * CS --- front/form.form.php | 2 +- front/formdisplay.php | 63 +++++++++++-------------------------------- inc/form.class.php | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 48 deletions(-) diff --git a/front/form.form.php b/front/form.form.php index 199b05e48..a8229d64f 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -95,7 +95,7 @@ // If user was not authenticated, remove temporary user if($_SESSION['glpiname'] == 'formcreator_temp_user') { unset($_SESSION['glpiname']); - Html::back(); + Html::redirect('formdisplay.php?answer_saved'); } else if (plugin_formcreator_replaceHelpdesk()) { Html::redirect('issue.php'); } else { diff --git a/front/formdisplay.php b/front/formdisplay.php index 210c9dd40..2ad062824 100644 --- a/front/formdisplay.php +++ b/front/formdisplay.php @@ -4,8 +4,16 @@ // Check if plugin is activated... $plugin = new Plugin(); -if($plugin->isActivated("formcreator") && isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) { - $form = new PluginFormcreatorForm(); +if(!$plugin->isActivated("formcreator")) { + Html::displayNotFoundError(); +} + +$form = new PluginFormcreatorForm(); +PluginFormcreatorForm::header(); + +if(isset($_REQUEST['id']) + && is_numeric($_REQUEST['id'])) { + if($form->getFromDB((int) $_REQUEST['id'])) { if($form->fields['access_rights'] != PluginFormcreatorForm::ACCESS_PUBLIC) { @@ -36,49 +44,7 @@ } } - if (isset($_SESSION['glpiactiveprofile']['interface']) - && ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk')) { - if (plugin_formcreator_replaceHelpdesk()) { - PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); - } else { - Html::helpHeader( - __('Form list', 'formcreator'), - $_SERVER['PHP_SELF'] - ); - } - - $form->displayUserForm($form); - - if (plugin_formcreator_replaceHelpdesk()) { - PluginFormcreatorWizard::footer(); - } else { - Html::helpFooter(); - } - - } elseif(!empty($_SESSION['glpiactiveprofile'])) { - Html::header( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'], - 'helpdesk', - 'PluginFormcreatorFormlist' - ); - - $form->displayUserForm($form); - - Html::footer(); - - } else { - Html::nullHeader( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'] - ); - - Html::displayMessageAfterRedirect(); - - $form->displayUserForm($form); - - Html::nullFooter(); - } + $form->displayUserForm($form); } else { Html::displayNotFoundError(); @@ -90,6 +56,9 @@ } // Or display a "Not found" error -} else { - Html::displayNotFoundError(); +} elseif (isset($_GET['answer_saved'])) { + $message = __("The form has been successfully saved!"); + Html::displayTitle($CFG_GLPI['root_doc']."/pics/ok.png", $message, $message); } + +PluginFormcreatorForm::footer(); diff --git a/inc/form.class.php b/inc/form.class.php index 374777cba..7d0b5f486 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -1795,4 +1795,53 @@ function showDescription(id, img){ '; } } + + static function getInterface() { + if (isset($_SESSION['glpiactiveprofile']['interface']) + && ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk')) { + if (plugin_formcreator_replaceHelpdesk()) { + return 'servicecatalog'; + } else { + return 'self-service'; + } + + } elseif(!empty($_SESSION['glpiactiveprofile'])) { + return 'central'; + } + + return 'public'; + } + + static function header() { + switch (self::getInterface()) { + case "servicecatalog"; + return PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); + case "self-service"; + return Html::helpHeader(__('Form list', 'formcreator'), $_SERVER['PHP_SELF']); + case "central"; + return Html::header( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'], + 'helpdesk', + 'PluginFormcreatorFormlist' + ); + case "public"; + default: + return Html::nullHeader(__('Form Creator', 'formcreator'), $_SERVER['PHP_SELF']); + } + } + + static function footer() { + switch (self::getInterface()) { + case "servicecatalog"; + return PluginFormcreatorWizard::footer(); + case "self-service"; + return Html::helpFooter(); + case "central"; + return Html::footer(); + case "public"; + default: + return Html::nullFooter(); + } + } } From 4f084ddb8eefb443592c459afd941356eb5adf86 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Mar 2017 17:19:07 +0100 Subject: [PATCH 120/178] show notifications in service catalog --- inc/wizard.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/wizard.class.php b/inc/wizard.class.php index eacaf8176..0801b8809 100644 --- a/inc/wizard.class.php +++ b/inc/wizard.class.php @@ -139,7 +139,7 @@ public static function header($title) { // call static function callcron() every 5min CronTask::callCron(); - + Html::displayMessageAfterRedirect(); } public static function footer() { From 89b0f643b1d1382502d404a873db203f5e8a30a9 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 21 Mar 2017 14:07:16 +0100 Subject: [PATCH 121/178] drop_dead_code --- inc/form_answer.class.php | 110 -------------------------------------- 1 file changed, 110 deletions(-) diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 4f9eddcf5..8e69d6ab0 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -1018,114 +1018,4 @@ public function post_purgeItem() NotificationEvent::raiseEvent('plugin_formcreator_deleted', $this); } } - - /** - * Database table installation for the item type - * - * @param Migration $migration - * @return boolean True on success - */ - public static function install(Migration $migration) - { - global $DB; - - $table = self::getTable(); - - if (TableExists("glpi_plugin_formcreator_formanswers")) { - $migration->renameTable('glpi_plugin_formcreator_formanswers', $table); - $itemTicket_table = Item_Ticket::getTable(); - $itemtype = __CLASS__; - $query = "UPDATE `$itemTicket_table` SET `itemtype` = '$itemtype' WHERE `itemtype` = 'PluginFormcreatorFormanswer'"; - $DB->query($query) or die ($DB->error()); - } - - if (!TableExists($table)) { - $migration->displayMessage("Installing $table"); - - // Create questions table - $query = "CREATE TABLE IF NOT EXISTS `$table` ( - `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, - `name` varchar(255) NOT NULL DEFAULT '', - `entities_id` int(11) NOT NULL DEFAULT '0', - `is_recursive` tinyint(1) NOT NULL DEFAULT '0', - `plugin_formcreator_forms_id` int(11) NOT NULL, - `requester_id` int(11) NULL, - `validator_id` int(11) NULL, - `request_date` datetime NOT NULL, - `status` enum('waiting', 'refused', 'accepted') NOT NULL DEFAULT 'waiting', - `comment` text NULL DEFAULT NULL - ) - ENGINE = MyISAM - DEFAULT CHARACTER SET = utf8 - COLLATE = utf8_unicode_ci"; - $DB->query($query) or die ($DB->error()); - } else { - /** - * Migration of special chars from previous versions - * - * @since 0.85-1.2.3 - */ - $query = "SELECT `id`, `comment` - FROM `$table`"; - $result = $DB->query($query); - while ($line = $DB->fetch_array($result)) { - $query_update = "UPDATE `$table` SET - `comment` = '" . plugin_formcreator_encode($line['comment']) . "' - WHERE `id` = " . $line['id']; - $DB->query($query_update) or die ($DB->error()); - } - - if (!FieldExists($table, 'name')) { - $query_update = 'ALTER TABLE `$table` ADD `name` VARCHAR(255) NOT NULL AFTER `id`;'; - $DB->query($query_update) or die ($DB->error()); - } - - // valdiator_id should not be set for waiting form answers - $query = "UPDATE $table - SET `validator_id` = '0' WHERE `status`='waiting'"; - $DB->query($query) or die ($DB->error()); - } - - // Create standard search options - $query = "INSERT IGNORE INTO `glpi_displaypreferences` (`id`, `itemtype`, `num`, `rank`, `users_id`) VALUES - (NULL, '" . __CLASS__ . "', 2, 2, 0), - (NULL, '" . __CLASS__ . "', 3, 3, 0), - (NULL, '" . __CLASS__ . "', 4, 4, 0), - (NULL, '" . __CLASS__ . "', 5, 5, 0), - (NULL, '" . __CLASS__ . "', 6, 6, 0);"; - $DB->query($query) or die ($DB->error()); - - return true; - } - - /** - * Database table uninstallation for the item type - * - * @return boolean True on success - */ - public static function uninstall() - { - global $DB, $CFG_GLPI; - - // Delete logs of the plugin - $log = new Log(); - $log->deleteByCriteria(array('itemtype' => __CLASS__)); - - // Delete display preferences - $displayPreference = new DisplayPreference(); - $displayPreference->deleteByCriteria(array('itemtype' => __CLASS__)); - - // Delete relations with tickets with email notifications disabled - $use_mailing = $CFG_GLPI['use_mailing']; - $CFG_GLPI['use_mailing'] = '0'; - $item_ticket = new Item_Ticket(); - $item_ticket->deleteByCriteria(array('itemtype' => 'PluginFormcreatorForm_Answer')); - $CFG_GLPI['use_mailing'] = $use_mailing; - - // Remove table - $table = self::getTable(); - $DB->query("DROP TABLE IF EXISTS `$table`"); - - return true; - } } From 09dade746b420a92bf4ce79556161d205daa5ad1 Mon Sep 17 00:00:00 2001 From: btry Date: Tue, 21 Mar 2017 14:01:06 +0100 Subject: [PATCH 122/178] better handling ticket delete / restore --- hook.php | 48 +++++++++++++++++++++- inc/issue.class.php | 1 + install/mysql/plugin_formcreator_empty.sql | 1 + install/update_0.0_2.5.php | 1 + setup.php | 3 ++ 5 files changed, 52 insertions(+), 2 deletions(-) diff --git a/hook.php b/hook.php index 0abe9c168..903f43dee 100644 --- a/hook.php +++ b/hook.php @@ -246,7 +246,7 @@ function plugin_formcreator_hook_add_ticket(CommonDBTM $item) { if ($item instanceof Ticket) { if (!isset($CFG_GLPI['plugin_formcreator_disable_hook_create_ticket'])) { - // run this hok only if the plugin is not generating tickets + // run this hook only if the plugin is not generating tickets $issue = new PluginFormcreatorIssue(); $issue->add(array( 'original_id' => $item->getID(), @@ -259,7 +259,7 @@ function plugin_formcreator_hook_add_ticket(CommonDBTM $item) { 'is_recursive' => '0', 'requester_id' => $item->fields['users_id_recipient'], 'validator_id' => '0', - 'comment' => '', + 'comment' => addslashes($item->fields['content']), )); } } @@ -293,6 +293,18 @@ function plugin_formcreator_hook_delete_ticket(CommonDBTM $item) { if ($item instanceof Ticket) { $id = $item->getID(); + // mark form_answers as deleted + $item_ticket = new Item_Ticket(); + $rows = $item_ticket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `tickets_id` = '$id'"); + foreach ($rows as $row) { + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->update(array( + 'id' => $row['id'], + 'is_deleted' => 1, + )); + } + + // delete issue $issue = new PluginFormcreatorIssue(); $issue->deleteByCriteria(array( 'display_id' => "t_$id", @@ -301,6 +313,38 @@ function plugin_formcreator_hook_delete_ticket(CommonDBTM $item) { } } +function plugin_formcreator_hook_restore_ticket(CommonDBTM $item) { + if ($item instanceof Ticket) { + $id = $item->getID(); + + // Restore deletes form_answers + $item_ticket = new Item_Ticket(); + $rows = $item_ticket->find("`itemtype` = 'PluginFormcreatorForm_Answer' AND `tickets_id` = '$id'"); + foreach ($rows as $row) { + $form_answer = new PluginFormcreatorForm_Answer(); + $form_answer->update(array( + 'id' => $row['id'], + 'is_deleted' => 0, + )); + } + + $issue = new PluginFormcreatorIssue(); + $issue->add(array( + 'original_id' => $item->getID(), + 'sub_itemtype' => 'Ticket', + 'name' => addslashes($item->fields['name']), + 'status' => $item->fields['status'], + 'date_creation' => $item->fields['date'], + 'date_mod' => $item->fields['date_mod'], + 'entities_id' => $item->fields['entities_id'], + 'is_recursive' => '0', + 'requester_id' => $item->fields['users_id_recipient'], + 'validator_id' => '0', + 'comment' => '', + )); + } +} + function plugin_formcreator_hook_purge_ticket(CommonDBTM $item) { if ($item instanceof Ticket) { $id = $item->getID(); diff --git a/inc/issue.class.php b/inc/issue.class.php index 14ef652e3..c2c5e57de 100644 --- a/inc/issue.class.php +++ b/inc/issue.class.php @@ -57,6 +57,7 @@ public static function cronSyncIssues($task) { LEFT JOIN `glpi_items_tickets` AS `itic` ON `itic`.`items_id` = `fanswer`.`id` AND `itic`.`itemtype` = 'PluginFormcreatorForm_Answer' + WHERE `fanswer`.`is_deleted` = '0' GROUP BY `original_id` HAVING COUNT(`itic`.`tickets_id`) != 1 diff --git a/install/mysql/plugin_formcreator_empty.sql b/install/mysql/plugin_formcreator_empty.sql index 26972dc59..c2559b27d 100644 --- a/install/mysql/plugin_formcreator_empty.sql +++ b/install/mysql/plugin_formcreator_empty.sql @@ -68,6 +68,7 @@ CREATE TABLE IF NOT EXISTS `glpi_plugin_formcreator_forms_answers` ( `request_date` datetime NOT NULL, `status` enum('waiting','refused','accepted') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'waiting', `comment` text COLLATE utf8_unicode_ci, + `is_deleted` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), INDEX `plugin_formcreator_forms_id` (`plugin_formcreator_forms_id`), INDEX `entities_id_is_recursive` (`entities_id`, `is_recursive`), diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index e11d07f7b..ff279a229 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -168,6 +168,7 @@ function plugin_formcreator_updateForm_Answer(Migration $migration) { $migration->addKey('glpi_plugin_formcreator_forms_answers', array('entities_id', 'is_recursive')); $migration->addKey('glpi_plugin_formcreator_forms_answers', 'requester_id'); $migration->addKey('glpi_plugin_formcreator_forms_answers', 'validator_id'); + $migration->addField('glpi_plugin_formcreator_forms_answers', 'is_deleted', 'bool'); } function plugin_formcreator_updateForm_Profile(Migration $migration) { diff --git a/setup.php b/setup.php index 88c635707..5d6258c3d 100644 --- a/setup.php +++ b/setup.php @@ -90,6 +90,9 @@ function plugin_init_formcreator () $PLUGIN_HOOKS['item_delete']['formcreator'] = array( 'Ticket' => 'plugin_formcreator_hook_delete_ticket' ); + $PLUGIN_HOOKS['item_restore']['formcreator'] = array( + 'Ticket' => 'plugin_formcreator_hook_restore_ticket' + ); $PLUGIN_HOOKS['item_purge']['formcreator'] = array( 'Ticket' => 'plugin_formcreator_hook_purge_ticket' ); From 6d1e0b9c8c80a4049ac7e2dcf8624469b78dfa2f Mon Sep 17 00:00:00 2001 From: btry Date: Fri, 24 Mar 2017 13:58:17 +0100 Subject: [PATCH 123/178] fix #552 --- ajax/dropdown_values.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ajax/dropdown_values.php b/ajax/dropdown_values.php index 6a59dbb18..5ef1104c8 100644 --- a/ajax/dropdown_values.php +++ b/ajax/dropdown_values.php @@ -3,13 +3,14 @@ Session::checkRight("entity", UPDATE); -if(class_exists($_REQUEST['dropdown_itemtype'])) { +if($_REQUEST['dropdown_itemtype'] == '0' || !class_exists($_REQUEST['dropdown_itemtype'])) { + $options = array( + 'display_emptychoice' => true, + ); + Dropdown::showFromArray("dropdown_default_value", array(), $options); +} else { Dropdown::show($_REQUEST['dropdown_itemtype'], array( - 'name' => 'dropdown_default_value', - 'rand' => mt_rand(), + 'name' => 'dropdown_default_value', + 'rand' => mt_rand(), )); -} else { - echo ''; } From 417e54ed753f32a8d1a7f358c417aa2c61821260 Mon Sep 17 00:00:00 2001 From: btry Date: Fri, 24 Mar 2017 14:28:43 +0100 Subject: [PATCH 124/178] shorten previous fix --- ajax/dropdown_values.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ajax/dropdown_values.php b/ajax/dropdown_values.php index 5ef1104c8..08bfa4e6e 100644 --- a/ajax/dropdown_values.php +++ b/ajax/dropdown_values.php @@ -4,10 +4,7 @@ Session::checkRight("entity", UPDATE); if($_REQUEST['dropdown_itemtype'] == '0' || !class_exists($_REQUEST['dropdown_itemtype'])) { - $options = array( - 'display_emptychoice' => true, - ); - Dropdown::showFromArray("dropdown_default_value", array(), $options); + Dropdown::showFromArray("dropdown_default_value", array(), array('display_emptychoice' => true)); } else { Dropdown::show($_REQUEST['dropdown_itemtype'], array( 'name' => 'dropdown_default_value', From e9f8420713ac07bc67e106216628ac50f8d1bef1 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 27 Mar 2017 09:51:42 +0200 Subject: [PATCH 125/178] fix SQL error if a single quote appears in the name of the ticket (#538) * fix SQL error if a single quote appears in the name of the ticket * escape single quotes --- hook.php | 4 ++-- inc/form_answer.class.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hook.php b/hook.php index 0abe9c168..376fa3ee6 100644 --- a/hook.php +++ b/hook.php @@ -251,7 +251,7 @@ function plugin_formcreator_hook_add_ticket(CommonDBTM $item) { $issue->add(array( 'original_id' => $item->getID(), 'sub_itemtype' => 'Ticket', - 'name' => $item->fields['name'], + 'name' => addslashes($item->fields['name']), 'status' => $item->fields['status'], 'date_creation' => $item->fields['date'], 'date_mod' => $item->fields['date_mod'], @@ -276,7 +276,7 @@ function plugin_formcreator_hook_update_ticket(CommonDBTM $item) { 'original_id' => $id, 'display_id' => "t_$id", 'sub_itemtype' => 'Ticket', - 'name' => $item->fields['name'], + 'name' => addslashes($item->fields['name']), 'status' => $item->fields['status'], 'date_creation' => $item->fields['date'], 'date_mod' => $item->fields['date_mod'], diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index a6f813faa..f2441dafe 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -733,7 +733,7 @@ public function saveAnswers($datas) $issue->add(array( 'original_id' => $id, 'sub_itemtype' => 'PluginFormcreatorForm_Answer', - 'name' => $this->fields['name'], + 'name' => addslashes($this->fields['name']), 'status' => $status, 'date_creation' => $this->fields['request_date'], 'date_mod' => $this->fields['request_date'], @@ -751,7 +751,7 @@ public function saveAnswers($datas) 'id' => $issue->getID(), 'original_id' => $id, 'sub_itemtype' => 'PluginFormcreatorForm_Answer', - 'name' => $this->fields['name'], + 'name' => addslashes($this->fields['name']), 'status' => $status, 'date_creation' => $this->fields['request_date'], 'date_mod' => $this->fields['request_date'], @@ -773,7 +773,7 @@ public function saveAnswers($datas) $issue->add(array( 'original_id' => $ticketId, 'sub_itemtype' => 'Ticket', - 'name' => $ticket->getField('name'), + 'name' => addslashes($ticket->getField('name')), 'status' => $ticket->getField('status'), 'date_creation' => $ticket->getField('date'), 'date_mod' => $ticket->getField('date_mod'), @@ -790,7 +790,7 @@ public function saveAnswers($datas) 'id' => $issue->getID(), 'original_id' => $ticketId, 'sub_itemtype' => 'Ticket', - 'name' => $ticket->getField('name'), + 'name' => addslashes($ticket->getField('name')), 'status' => $ticket->getField('status'), 'date_creation' => $ticket->getField('date'), 'date_mod' => $ticket->getField('date_mod'), From ed611f788598df9b1024b6a8442785ec1453ad0f Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 27 Mar 2017 14:53:11 +0200 Subject: [PATCH 126/178] add unit test for actor field --- tests/0005_Unit/ActorFieldTest.php | 152 +++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tests/0005_Unit/ActorFieldTest.php diff --git a/tests/0005_Unit/ActorFieldTest.php b/tests/0005_Unit/ActorFieldTest.php new file mode 100644 index 000000000..2e343f29c --- /dev/null +++ b/tests/0005_Unit/ActorFieldTest.php @@ -0,0 +1,152 @@ +getFromDBbyName('glpi'); + $userId = $user->getID(); + $dataset = array( + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => '', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => true + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => '', + 'values' => 'glpi', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => true + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => 'nonexistent', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => false + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => 'email@incomplete', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => false + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => 'email@something.com', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => true + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => $userId . ',email@something.com', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => true + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => $userId . ',email@something.com,nonexistent', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => false + ), + array( + 'fields' => array( + 'fieldtype' => 'actor', + 'name' => 'question', + 'required' => '0', + 'default_values' => $userId . ',email@something.com,email@incomplete', + 'values' => '', + 'order' => '1', + 'show_rule' => 'always' + ), + 'data' => null, + 'expectedValue' => array(''), + 'expectedIsValid' => false + ), + ); + + return $dataset; + } + + /** + * @dataProvider provider + */ + public function testFieldValue($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorActorField($fields, $data); + + $value = $fieldInstance->getValue(); + $this->assertEquals(count($expectedValue), count($value)); + foreach ($expectedValue as $expectedSubValue) { + if (!empty($expectedSubValue)) { + $this->assertTrue(in_array($expectedSubValue, $value)); + } + } + } + + /** + * @dataProvider provider + */ + public function testFieldIsValid($fields, $data, $expectedValue, $expectedValidity) { + $fieldInstance = new PluginFormcreatorActorField($fields, $data); + + $values = $fields['default_values']; + $isValid = $fieldInstance->isValid($values); + $this->assertEquals($expectedValidity, $isValid); + } +} From 696283a10a18f42246b996e6fa05b5dbbcf982a1 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 27 Mar 2017 17:23:41 +0200 Subject: [PATCH 127/178] prevent htmlentities when saving in db --- install/update_0.0_2.5.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install/update_0.0_2.5.php b/install/update_0.0_2.5.php index e11d07f7b..8deb39538 100644 --- a/install/update_0.0_2.5.php +++ b/install/update_0.0_2.5.php @@ -87,8 +87,8 @@ function plugin_formcreator_updateCategory(Migration $migration) { $result = $DB->query($query); while ($line = $DB->fetch_array($result)) { $query_update = "UPDATE `glpi_plugin_formcreator_categories` SET - `name` = '".plugin_formcreator_encode($line['name'])."', - `comment` = '".plugin_formcreator_encode($line['comment'])."' + `name` = '".plugin_formcreator_encode($line['name'], false)."', + `comment` = '".plugin_formcreator_encode($line['comment'], false)."' WHERE `id` = ".$line['id']; $DB->query($query_update) or plugin_formcreator_upgrade_error($migration); } @@ -448,7 +448,7 @@ function plugin_formcreator_updateQuestionCondition(Migration $migration) { $result = $DB->query($query); while ($line = $DB->fetch_array($result)) { $query_update = "UPDATE `glpi_plugin_formcreator_questions_conditions` SET - `show_value` = '" . plugin_formcreator_encode($line['show_value']) . "' + `show_value` = '" . plugin_formcreator_encode($line['show_value'], false) . "' WHERE `id` = " . $line['id']; $DB->query($query_update) or plugin_formcreator_upgrade_error($migration); } From 2d88e1498a6ddef8536687ccfa99690672b42398 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Mar 2017 09:31:03 +0100 Subject: [PATCH 128/178] use external tools --- .gitignore | 4 + .travis.yml | 12 +- RoboFile.php | 8 +- RoboFilePlugin.php | 142 ----- composer.json | 9 +- composer.lock | 1217 +++++++++++++++++++++++++++++++++++++ tools/extract_template.sh | 20 - tools/modify_headers.pl | 102 ---- tools/update_mo.pl | 29 - tools/update_po.pl | 30 - 10 files changed, 1241 insertions(+), 332 deletions(-) delete mode 100644 RoboFilePlugin.php create mode 100644 composer.lock delete mode 100755 tools/extract_template.sh delete mode 100755 tools/modify_headers.pl delete mode 100755 tools/update_mo.pl delete mode 100755 tools/update_po.pl diff --git a/.gitignore b/.gitignore index e69de29bb..283db0afd 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,4 @@ +dist/ +vendor/ +.gh_token +*.min.* diff --git a/.travis.yml b/.travis.yml index 028ba8ebb..98a69b77b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,11 @@ language: php php: - - '5.4' - '5.5' - '5.6' - '7.0' + - '7.1' + - nightly before_script: - git clone https://github.com/glpi-project/glpi --depth 50 -b 9.1 ../glpi && cd ../glpi @@ -16,3 +17,12 @@ before_script: script: - vendor/bin/phpunit --verbose + - vendor/bin/robo --no-interaction code:cs + +matrix: + allow_failures: + - php: nightly + +cache: + directories: + - $HOME/.composer/cache diff --git a/RoboFile.php b/RoboFile.php index ba0dcf47e..f6360f5a6 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -4,8 +4,10 @@ * * @see http://robo.li/ */ -require_once 'RoboFilePlugin.php'; -class RoboFile extends RoboFilePlugin + +require_once 'vendor/autoload.php'; + +class RoboFile extends Glpi\Tools\RoboFile { //Own plugin's robo stuff -} \ No newline at end of file +} diff --git a/RoboFilePlugin.php b/RoboFilePlugin.php deleted file mode 100644 index 488a733e9..000000000 --- a/RoboFilePlugin.php +++ /dev/null @@ -1,142 +0,0 @@ -minifyCSS() - ->minifyJS(); - } - - /** - * Minify CSS stylesheets - * - * @return void - */ - public function minifyCSS() { - $css_dir = __DIR__ . '/css'; - if (is_dir($css_dir)) { - foreach (glob("$css_dir/*.css") as $css_file) { - if (!$this->endsWith($css_file, 'min.css')) { - $this->taskMinify($css_file) - ->to(str_replace('.css', '.min.css', $css_file)) - ->type('css') - ->run(); - } - } - } - return $this; - } - - /** - * Minify JavaScript files stylesheets - * - * @return void - */ - public function minifyJS() { - $js_dir = __DIR__ . '/js'; - if (is_dir($js_dir)) { - foreach (glob("$js_dir/*.js") as $js_file) { - if (!$this->endsWith($js_file, 'min.js')) { - $this->taskMinify($js_file) - ->to(str_replace('.js', '.min.js', $js_file)) - ->type('js') - ->run(); - } - } - } - return $this; - } - - /** - * Extract translatable strings - * - * @return void - */ - public function localesExtract() { - $this->_exec('tools/extract_template.sh'); - return $this; - } - - /** - * Push locales to transifex - * - * @return void - */ - public function localesPush() { - $this->_exec('tx push -s'); - return $this; - } - - /** - * Pull locales from transifex. - * - * @param integer $percent Completeness percentage - * - * @return void - */ - public function localesPull($percent = 70) { - $this->_exec('tx pull -a --minimum-perc=' .$percent); - return $this; - } - - /** - * Build MO files - * - * @return void - */ - public function localesMo() { - $this->_exec('./tools/release --compile-mo'); - return $this; - } - - /** - * Extract and send locales - * - * @return void - */ - public function localesSend() { - $this->localesExtract() - ->localesPush(); - return $this; - } - - /** - * Retrieve locales and generate mo files - * - * @param integer $percent Completeness percentage - * - * @return void - */ - public function localesGenerate($percent = 70) { - $this->localesPull($percent) - ->localesMo(); - return $this; - } - - /** - * Checks if a string ends with another string - * - * @param string $haystack Full string - * @param string $needle Ends string - * - * @return boolean - * @see http://stackoverflow.com/a/834355 - */ - private function endsWith($haystack, $needle) { - $length = strlen($needle); - if ($length == 0) { - return true; - } - - return (substr($haystack, -$length) === $needle); - } -} \ No newline at end of file diff --git a/composer.json b/composer.json index 9fc3faed1..cf81319d1 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,8 @@ { + "minimum-stability": "dev", + "prefer-stable": true, "require-dev": { - "consolidation/robo": "^0.7 || ^1.0", - "patchwork/jsqueeze": "~1.0", - "natxet/CssMin": "~3.0", - "glpi-project/coding-standard": "0.5", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.0" + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.0", + "glpi-project/tools": "^0.1.0" } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..8fda6f90c --- /dev/null +++ b/composer.lock @@ -0,0 +1,1217 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "8a6db7f45e083d6f582cc8949facfebb", + "packages": [], + "packages-dev": [ + { + "name": "consolidation/annotated-command", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "80afffd362bd1cf83bef60db690a8c50d8390803" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/80afffd362bd1cf83bef60db690a8c50d8390803", + "reference": "80afffd362bd1cf83bef60db690a8c50d8390803", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.1.5", + "php": ">=5.4.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "psr/log": "~1", + "symfony/console": "^2.8|~3", + "symfony/event-dispatcher": "^2.5|~3", + "symfony/finder": "^2.5|~3" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2017-02-04T06:13:54+00:00" + }, + { + "name": "consolidation/log", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", + "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/log": "~1.0", + "symfony/console": "~2.5|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2016-03-23T23:46:42+00:00" + }, + { + "name": "consolidation/output-formatters", + "version": "3.1.7", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "da39a0f14d5aaaee06732bb7cef2aea1de056b40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/da39a0f14d5aaaee06732bb7cef2aea1de056b40", + "reference": "da39a0f14d5aaaee06732bb7cef2aea1de056b40", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "symfony/console": "~2.5|~3.0", + "symfony/finder": "~2.5|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "victorjonsson/markdowndocs": "^1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2017-01-21T06:26:40+00:00" + }, + { + "name": "consolidation/robo", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/consolidation/Robo.git", + "reference": "b6ac24dbbfacbc31069642ae502a8859b3c4f613" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6ac24dbbfacbc31069642ae502a8859b3c4f613", + "reference": "b6ac24dbbfacbc31069642ae502a8859b3c4f613", + "shasum": "" + }, + "require": { + "consolidation/annotated-command": "^2.2", + "consolidation/log": "~1", + "consolidation/output-formatters": "^3.1.5", + "league/container": "^2.2", + "php": ">=5.5.0", + "symfony/console": "~2.8|~3.0", + "symfony/event-dispatcher": "~2.5|~3.0", + "symfony/filesystem": "~2.5|~3.0", + "symfony/finder": "~2.5|~3.0", + "symfony/process": "~2.5|~3.0" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "require-dev": { + "codeception/aspect-mock": "~1", + "codeception/base": "^2.2.6", + "codeception/verify": "^0.3.2", + "henrikbjorn/lurker": "~1", + "natxet/cssmin": "~3", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "~1", + "squizlabs/php_codesniffer": "~2" + }, + "suggest": { + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "natxet/CssMin": "For minifying JS files in taskMinify", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." + }, + "bin": [ + "robo" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "classmap": [ + "scripts/composer/ScriptHandler.php" + ], + "psr-4": { + "Robo\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "Modern task runner", + "time": "2017-02-08T20:53:21+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", + "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "time": "2014-12-30T15:22:37+00:00" + }, + { + "name": "glpi-project/coding-standard", + "version": "0.5", + "source": { + "type": "git", + "url": "https://github.com/glpi-project/coding-standard.git", + "reference": "e19495c896a01199a2fec2e65b7613310598cf96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/glpi-project/coding-standard/zipball/e19495c896a01199a2fec2e65b7613310598cf96", + "reference": "e19495c896a01199a2fec2e65b7613310598cf96", + "shasum": "" + }, + "require": { + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPLv3" + ], + "authors": [ + { + "name": "Teclib'", + "email": "contact@teclib.com", + "homepage": "https://teclib.com" + } + ], + "description": "GLPI PHP CodeSniffer Coding Standard", + "keywords": [ + "codesniffer", + "glpi", + "phpcs" + ], + "time": "2017-01-06T11:10:46+00:00" + }, + { + "name": "glpi-project/tools", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/glpi-project/tools.git", + "reference": "89083f6e71fac05190c7cc76a9c5afd8b1f421ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/glpi-project/tools/zipball/89083f6e71fac05190c7cc76a9c5afd8b1f421ef", + "reference": "89083f6e71fac05190c7cc76a9c5afd8b1f421ef", + "shasum": "" + }, + "require": { + "consolidation/robo": "dev-master@dev", + "glpi-project/coding-standard": "0.5", + "natxet/cssmin": "~3.0", + "patchwork/jsqueeze": "~1.0" + }, + "bin": [ + "tools/plugin-release", + "tools/extract_template.sh", + "tools/modify_headers.pl" + ], + "type": "library", + "autoload": { + "psr-4": { + "Glpi\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPLv3" + ], + "authors": [ + { + "name": "Teclib'", + "email": "glpi@teclib.com", + "homepage": "https://teclib.com" + } + ], + "description": "Various tools for GLPI and its plugins", + "keywords": [ + "glpi", + "plugins", + "tools" + ], + "time": "2017-02-08T08:20:09+00:00" + }, + { + "name": "league/container", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "php": ">=5.4.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.1" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2016-03-17T11:07:59+00:00" + }, + { + "name": "natxet/CssMin", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/natxet/CssMin.git", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39", + "shasum": "" + }, + "require": { + "php": ">=5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Scylla", + "email": "joe.scylla@gmail.com", + "homepage": "https://profiles.google.com/joe.scylla" + } + ], + "description": "Minifying CSS", + "homepage": "http://code.google.com/p/cssmin/", + "keywords": [ + "css", + "minify" + ], + "time": "2015-09-25T11:13:11+00:00" + }, + { + "name": "patchwork/jsqueeze", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/tchwork/jsqueeze.git", + "reference": "f90a933213534b93e4ff3c2c3026ff7458f7721b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tchwork/jsqueeze/zipball/f90a933213534b93e4ff3c2c3026ff7458f7721b", + "reference": "f90a933213534b93e4ff3c2c3026ff7458f7721b", + "shasum": "" + }, + "require": { + "php": ">=5.1.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "JSqueeze": "class/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "(Apache-2.0 or GPL-2.0)" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Efficient JavaScript minification in PHP", + "homepage": "https://github.com/tchwork/jsqueeze", + "keywords": [ + "compression", + "javascript", + "minification" + ], + "time": "2015-03-25T10:11:08+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "86dd55a522238211f9f3631e3361703578941d9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/86dd55a522238211f9f3631e3361703578941d9a", + "reference": "86dd55a522238211f9f3631e3361703578941d9a", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-02-02T03:30:00+00:00" + }, + { + "name": "symfony/console", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/7a8405a9fc175f87fed8a3c40856b0d866d61936", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-02-06T12:04:21+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/b4d9818f127c60ce21ed62c395da7df868dc8477", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-01-28T02:37:08+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9137eb3a3328e413212826d63eeeb0217836e2b6", + "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-01-08T20:47:33+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/process", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "32646a7cf53f3956c76dcb5c82555224ae321858" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/32646a7cf53f3956c76dcb5c82555224ae321858", + "reference": "32646a7cf53f3956c76dcb5c82555224ae321858", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2017-02-03T12:11:38+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/tools/extract_template.sh b/tools/extract_template.sh deleted file mode 100755 index 05b202537..000000000 --- a/tools/extract_template.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../" -pushd $DIR > /dev/null - -NAME='Formcreator' -POTFILE=${NAME,,}.pot - -PHP_SOURCES=`find ./ -name \*.php -not -path "./vendor/*" -not -path "./lib/*"` - -if [ ! -d "locales" ]; then - mkdir locales -fi - -# Only strings with domain specified are extracted (use Xt args of keyword param to set number of args needed) -xgettext $PHP_SOURCES -o locales/$POTFILE -L PHP --add-comments=TRANS --from-code=UTF-8 --force-po \ - --keyword=_n:1,2,4t --keyword=__s:1,2t --keyword=__:1,2t --keyword=_e:1,2t --keyword=_x:1c,2,3t --keyword=_ex:1c,2,3t \ - --keyword=_sx:1c,2,3t --keyword=_nx:1c,2,3,5t - -popd > /dev/null \ No newline at end of file diff --git a/tools/modify_headers.pl b/tools/modify_headers.pl deleted file mode 100755 index 71719e28a..000000000 --- a/tools/modify_headers.pl +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/perl -#!/usr/bin/perl -w - -# ---------------------------------------------------------------------- -# GLPI - Gestionnaire Libre de Parc Informatique -# Copyright (C) 2003-2006 by the INDEPNET Development Team. -# -# http://indepnet.net/ http://glpi-project.org -# ---------------------------------------------------------------------- -# -# LICENSE -# -# This file is part of GLPI. -# -# GLPI is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# GLPI is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GLPI; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# ------------------------------------------------------------------------ - - -do_dir(".."); - - -sub do_dir{ -local ($dir)=@_; -print "Entering $dir\n"; - -opendir(DIRHANDLE,$dir)||die "ERROR: can not read current directory\n"; -foreach (readdir(DIRHANDLE)){ - if ($_ ne '..' && $_ ne '.'){ - if (-d "$dir/$_"){ - if ($_ !~ m/.svn/i && $_ !~ m/CVS/i && $_ !~ m/lib/i){ - - do_dir("$dir/$_"); - } - } else { - if(!(-l "$dir/$_")){ - if ((index($_,".php",0)!=-1)||(index($_,".txt",0)!=-1)||(index($_,".css",0)!=-1)){ - do_file("$dir/$_"); - } - } - } - } -} -closedir DIRHANDLE; - -} - -sub do_file{ - local ($file)=@_; - print $file."\n"; - ### DELETE HEADERS - open(INIT_FILE,$file); - @lines=; - close(INIT_FILE); - - open(TMP_FILE,">/tmp/tmp_glpi.txt"); - - $status=''; - foreach (@lines){ - if ($_ =~ m/\*\//){ - $status="END"; - } - - if ($status =~ m/END/||$status !~ m/BEGIN/){ - print TMP_FILE $_; - } - - if ($status !~ m/END/){ - if ($_ =~ m/\/\*/){ - $status="BEGIN"; - ##### ADD NEW HEADERS - open(HEADER_FILE,"HEADER"); - @headers=; - foreach (@headers){ - print TMP_FILE $_; - } - close(HEADER_FILE) ; - - } - } - } - close(TMP_FILE); - - system("cp -f /tmp/tmp_glpi.txt $file"); - - - -} - - - diff --git a/tools/update_mo.pl b/tools/update_mo.pl deleted file mode 100755 index ed44da6fe..000000000 --- a/tools/update_mo.pl +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/perl -#!/usr/bin/perl -w - -if (@ARGV!=0){ -print "USAGE update_mo.pl\n\n"; - -exit(); -} - - -opendir(DIRHANDLE,'locales')||die "ERROR: can not read current directory\n"; -foreach (readdir(DIRHANDLE)){ - if ($_ ne '..' && $_ ne '.'){ - - if(!(-l "$dir/$_")){ - if (index($_,".po",0)==length($_)-3) { - $lang=$_; - $lang=~s/\.po//; - - `msgfmt locales/$_ -o locales/$lang.mo`; - } - } - - } -} -closedir DIRHANDLE; - -# -# diff --git a/tools/update_po.pl b/tools/update_po.pl deleted file mode 100755 index ce44ea7a5..000000000 --- a/tools/update_po.pl +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl -#!/usr/bin/perl -w - -if (@ARGV!=2){ -print "USAGE update_po.pl transifex_login transifex_password\n\n"; - -exit(); -} -$user = $ARGV[0]; -$password = $ARGV[1]; - -opendir(DIRHANDLE,'locales')||die "ERROR: can not read current directory\n"; -foreach (readdir(DIRHANDLE)){ - if ($_ ne '..' && $_ ne '.'){ - - if(!(-l "$dir/$_")){ - if (index($_,".po",0)==length($_)-3) { - $lang=$_; - $lang=~s/\.po//; - - `wget --user=$user --password=$password --output-document=locales/$_ http://www.transifex.net/api/2/project/GLPI_example/resource/glpipot/translation/$lang/?file=$_`; - } - } - - } -} -closedir DIRHANDLE; - -# -# From bff7d7b8f4f4c22fb62c0092ee17a1eefa29a607 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 6 Mar 2017 17:00:28 +0100 Subject: [PATCH 129/178] CS --- ajax/homepage_wizard.php | 2 +- inc/question.class.php | 4 +--- inc/targetchange.class.php | 4 ++-- inc/targetticket.class.php | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/ajax/homepage_wizard.php b/ajax/homepage_wizard.php index aad45c50e..5bb98c90f 100644 --- a/ajax/homepage_wizard.php +++ b/ajax/homepage_wizard.php @@ -28,7 +28,7 @@ function plugin_formcreator_showWizardCategories($helpdesk = true) { echo json_encode($tree, JSON_UNESCAPED_SLASHES); } -function plugin_formcreator_showWizardForms($rootCategory = 0, $keywords, $helpdeskHome = false) { +function plugin_formcreator_showWizardForms($rootCategory = 0, $keywords = '', $helpdeskHome = false) { $form = new PluginFormcreatorForm(); $formList = $form->showFormList($rootCategory, $keywords, $helpdeskHome); echo json_encode($formList, JSON_UNESCAPED_SLASHES); diff --git a/inc/question.class.php b/inc/question.class.php index a3eca56f3..dde30adf2 100644 --- a/inc/question.class.php +++ b/inc/question.class.php @@ -624,11 +624,9 @@ public function updateConditions($input) { && isset($input['show_value']) && isset($input['show_logic'])) { // All arrays of condition exists if ($input['show_rule'] != 'always') { - if (! (count($input['show_field']) == count($input['show_condition']) + if ((count($input['show_field']) == count($input['show_condition']) && count($input['show_value']) == count($input['show_logic']) && count($input['show_field']) == count($input['show_value']))) { - // TODO : add error message ? - } else { // Arrays all have the same count and ahve at least one item $order = 0; while (count($input['show_field']) > 0) { diff --git a/inc/targetchange.class.php b/inc/targetchange.class.php index a389b4624..595ce690c 100644 --- a/inc/targetchange.class.php +++ b/inc/targetchange.class.php @@ -1141,8 +1141,8 @@ public function save(PluginFormcreatorForm_Answer $formanswer) WHERE `glpi_profiles_users`.`users_id` = $requesters_id ORDER BY `glpi_profiles_users`.`is_dynamic` DESC, $order_entities"; $res_entities = $DB->query($query_entities); - while($data_entities[] = $DB->fetch_array($res_entities)) { - + while ($entity = $DB->fetch_array($res_entities)) { + $data_entities[] = $entity; } $first_entity = array_shift($data_entities); $datas['entities_id'] = $first_entity['entities_id']; diff --git a/inc/targetticket.class.php b/inc/targetticket.class.php index 0d676f098..9fa9eb5b0 100644 --- a/inc/targetticket.class.php +++ b/inc/targetticket.class.php @@ -941,8 +941,8 @@ public function save(PluginFormcreatorForm_Answer $formanswer) { WHERE `glpi_profiles_users`.`users_id` = $requesters_id ORDER BY `glpi_profiles_users`.`is_dynamic` DESC, $order_entities"; $res_entities = $DB->query($query_entities); - while($data_entities[] = $DB->fetch_array($res_entities)) { - + while ($entity = $DB->fetch_array($res_entities)) { + $data_entities[] = $entity; } $first_entity = array_shift($data_entities); $datas['entities_id'] = $first_entity['entities_id']; From 51266195216f55bba34d6e39a0919ec05dc3128f Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 13 Mar 2017 10:02:45 +0100 Subject: [PATCH 130/178] update composer.lock --- composer.lock | 1625 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 1398 insertions(+), 227 deletions(-) diff --git a/composer.lock b/composer.lock index 8fda6f90c..132fba730 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "8a6db7f45e083d6f582cc8949facfebb", + "content-hash": "6bd2bddd060ab70475f15776c4c87303", "packages": [], "packages-dev": [ { "name": "consolidation/annotated-command", - "version": "2.4.0", + "version": "2.4.5", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "80afffd362bd1cf83bef60db690a8c50d8390803" + "reference": "7c97c401ea81549779ce96d62f00d230ed5ff1d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/80afffd362bd1cf83bef60db690a8c50d8390803", - "reference": "80afffd362bd1cf83bef60db690a8c50d8390803", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/7c97c401ea81549779ce96d62f00d230ed5ff1d8", + "reference": "7c97c401ea81549779ce96d62f00d230ed5ff1d8", "shasum": "" }, "require": { @@ -31,7 +31,7 @@ "symfony/finder": "^2.5|~3" }, "require-dev": { - "phpunit/phpunit": "4.*", + "phpunit/phpunit": "^4.8", "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "^2.7" }, @@ -57,7 +57,7 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2017-02-04T06:13:54+00:00" + "time": "2017-02-28T22:50:54+00:00" }, { "name": "consolidation/log", @@ -108,27 +108,27 @@ }, { "name": "consolidation/output-formatters", - "version": "3.1.7", + "version": "3.1.8", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "da39a0f14d5aaaee06732bb7cef2aea1de056b40" + "reference": "0b50ba1134d581fd55376f3e21508dab009ced47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/da39a0f14d5aaaee06732bb7cef2aea1de056b40", - "reference": "da39a0f14d5aaaee06732bb7cef2aea1de056b40", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/0b50ba1134d581fd55376f3e21508dab009ced47", + "reference": "0b50ba1134d581fd55376f3e21508dab009ced47", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", + "symfony/console": "^2.8|~3", "symfony/finder": "~2.5|~3.0" }, "require-dev": { - "phpunit/phpunit": "4.*", + "phpunit/phpunit": "^4.8", "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*", + "squizlabs/php_codesniffer": "^2.7", "victorjonsson/markdowndocs": "^1.3" }, "type": "library", @@ -153,7 +153,7 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2017-01-21T06:26:40+00:00" + "time": "2017-03-01T20:54:45+00:00" }, { "name": "consolidation/robo", @@ -161,12 +161,12 @@ "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "b6ac24dbbfacbc31069642ae502a8859b3c4f613" + "reference": "2bbcdadab41c7f12414adca7ac80368ca3094ed0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6ac24dbbfacbc31069642ae502a8859b3c4f613", - "reference": "b6ac24dbbfacbc31069642ae502a8859b3c4f613", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/2bbcdadab41c7f12414adca7ac80368ca3094ed0", + "reference": "2bbcdadab41c7f12414adca7ac80368ca3094ed0", "shasum": "" }, "require": { @@ -230,22 +230,25 @@ } ], "description": "Modern task runner", - "time": "2017-02-08T20:53:21+00:00" + "time": "2017-03-11 19:48:06" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -257,7 +260,62 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30T15:22:37+00:00" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" }, { "name": "glpi-project/coding-standard", @@ -298,16 +356,16 @@ }, { "name": "glpi-project/tools", - "version": "0.1.1", + "version": "0.1.2", "source": { "type": "git", "url": "https://github.com/glpi-project/tools.git", - "reference": "89083f6e71fac05190c7cc76a9c5afd8b1f421ef" + "reference": "55b3ba30c9c7f32acf5d9e8d6747e1e369809b13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/glpi-project/tools/zipball/89083f6e71fac05190c7cc76a9c5afd8b1f421ef", - "reference": "89083f6e71fac05190c7cc76a9c5afd8b1f421ef", + "url": "https://api.github.com/repos/glpi-project/tools/zipball/55b3ba30c9c7f32acf5d9e8d6747e1e369809b13", + "reference": "55b3ba30c9c7f32acf5d9e8d6747e1e369809b13", "shasum": "" }, "require": { @@ -344,28 +402,29 @@ "plugins", "tools" ], - "time": "2017-02-08T08:20:09+00:00" + "time": "2017-03-03T14:40:45+00:00" }, { "name": "league/container", - "version": "2.2.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "reference": "5ec434f4760d83c2a479266b618fb3e3be24c974" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/thephpleague/container/zipball/5ec434f4760d83c2a479266b618fb3e3be24c974", + "reference": "5ec434f4760d83c2a479266b618fb3e3be24c974", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -376,7 +435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, @@ -408,7 +467,49 @@ "provider", "service" ], - "time": "2016-03-17T11:07:59+00:00" + "time": "2017-03-06T15:24:06+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-01-26T22:05:40+00:00" }, { "name": "natxet/CssMin", @@ -646,31 +747,39 @@ "time": "2016-11-25T06:54:22+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "phpspec/prophecy", + "version": "v1.7.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", + "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", "shasum": "" }, "require": { - "php": ">=5.3.0" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8 || ^5.6.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "psr-0": { + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -679,77 +788,68 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "log", - "psr", - "psr-3" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2017-03-02T20:05:34+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "2.8.0", + "name": "phpunit/php-code-coverage", + "version": "4.0.7", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "86dd55a522238211f9f3631e3361703578941d9a" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "09e2277d14ea467e5a984010f501343ef29ffc69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/86dd55a522238211f9f3631e3361703578941d9a", - "reference": "86dd55a522238211f9f3631e3361703578941d9a", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/09e2277d14ea467e5a984010f501343ef29ffc69", + "reference": "09e2277d14ea467e5a984010f501343ef29ffc69", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", + "ext-dom": "*", "ext-xmlwriter": "*", - "php": ">=5.1.2" + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" }, - "bin": [ - "scripts/phpcs", - "scripts/phpcbf" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -758,226 +858,1242 @@ ], "authors": [ { - "name": "Greg Sherwood", + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "phpcs", - "standards" + "coverage", + "testing", + "xunit" ], - "time": "2017-02-02T03:30:00+00:00" + "time": "2017-03-01T09:12:17+00:00" }, { - "name": "symfony/console", - "version": "v3.2.3", + "name": "phpunit/php-file-iterator", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7a8405a9fc175f87fed8a3c40856b0d866d61936", - "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/filesystem": "", - "symfony/process": "" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2017-02-06T12:04:21+00:00" + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" }, { - "name": "symfony/debug", - "version": "v3.2.3", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b4d9818f127c60ce21ed62c395da7df868dc8477", - "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2017-01-28T02:37:08+00:00" + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v3.2.3", + "name": "phpunit/php-timer", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9137eb3a3328e413212826d63eeeb0217836e2b6", - "reference": "9137eb3a3328e413212826d63eeeb0217836e2b6", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2017-01-02T20:32:22+00:00" + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.2.3", + "name": "phpunit/php-token-stream", + "version": "1.4.11", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", - "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", "shasum": "" }, "require": { - "php": ">=5.5.9" + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "1.4-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "5.7.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "b99112aecc01f62acf3d81a3f59646700a1849e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b99112aecc01f62acf3d81a3f59646700a1849e5", + "reference": "b99112aecc01f62acf3d81a3f59646700a1849e5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "~1.2", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-03-02T15:22:43+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2016-12-08T20:27:08+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19T07:33:16+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", + "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-03-01T22:17:45+00:00" + }, + { + "name": "symfony/console", + "version": "v3.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "28fb243a2b5727774ca309ec2d92da240f1af0dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/28fb243a2b5727774ca309ec2d92da240f1af0dd", + "reference": "28fb243a2b5727774ca309ec2d92da240f1af0dd", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-03-06T19:30:27+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "b90c9f91ad8ac37d9f114e369042d3226b34dc1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/b90c9f91ad8ac37d9f114e369042d3226b34dc1a", + "reference": "b90c9f91ad8ac37d9f114e369042d3226b34dc1a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-02-18T17:28:00+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v3.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b7a1b9e0a0f623ce43b4c8d775eb138f190c9d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7a1b9e0a0f623ce43b4c8d775eb138f190c9d8d", + "reference": "b7a1b9e0a0f623ce43b4c8d775eb138f190c9d8d", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-02-21T09:12:04+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bc0f17bed914df2cceb989972c3b996043c4da4a", + "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ "/Tests/" ] }, @@ -997,20 +2113,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-01-08T20:47:33+00:00" + "time": "2017-03-06T19:30:27+00:00" }, { "name": "symfony/finder", - "version": "v3.2.3", + "version": "v3.2.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" + "reference": "92d7476d2df60cd851a3e13e078664b1deb8ce10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", - "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/92d7476d2df60cd851a3e13e078664b1deb8ce10", + "reference": "92d7476d2df60cd851a3e13e078664b1deb8ce10", "shasum": "" }, "require": { @@ -1046,7 +2162,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-01-02T20:32:22+00:00" + "time": "2017-02-21T09:12:04+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1109,16 +2225,16 @@ }, { "name": "symfony/process", - "version": "v3.2.3", + "version": "v3.2.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "32646a7cf53f3956c76dcb5c82555224ae321858" + "reference": "68bfa8c83f24c0ac04ea7193bcdcda4519f41892" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/32646a7cf53f3956c76dcb5c82555224ae321858", - "reference": "32646a7cf53f3956c76dcb5c82555224ae321858", + "url": "https://api.github.com/repos/symfony/process/zipball/68bfa8c83f24c0ac04ea7193bcdcda4519f41892", + "reference": "68bfa8c83f24c0ac04ea7193bcdcda4519f41892", "shasum": "" }, "require": { @@ -1154,7 +2270,62 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-02-03T12:11:38+00:00" + "time": "2017-03-04T12:23:14+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/093e416ad096355149e265ea2e4cc1f9ee40ab1a", + "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-03-07T16:47:02+00:00" }, { "name": "webmozart/assert", From 13495c5851b538c90e244a711c245a4139aeee79 Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Mar 2017 21:58:55 +0100 Subject: [PATCH 131/178] output to stderr --- phpunit.xml.dist | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 0b7924174..8fc7cfc91 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,6 +6,7 @@ processIsolation="false" backupGlobals="false" colors="true" + stderr="true" > @@ -28,4 +29,4 @@ ./tests/0010_Integration/ - \ No newline at end of file + From 2f99900e572af84cacf543f259d49f9bc7f13c1f Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 20 Mar 2017 22:03:34 +0100 Subject: [PATCH 132/178] disble cookies earlier --- tests/bootstrap.php | 4 +++- tests/inc/CommonDBTestCase.php | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/bootstrap.php b/tests/bootstrap.php index c8e629435..ac0069ac4 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -20,8 +20,10 @@ public static function autoload($className) { } +ini_set('session.use_cookies', 0); //disable session cookies + UnitTestAutoload::register(); define('GLPI_ROOT', dirname(dirname(dirname(__DIR__)))); define("GLPI_CONFIG_DIR", GLPI_ROOT . "/tests"); -include (GLPI_ROOT . "/inc/includes.php"); \ No newline at end of file +include (GLPI_ROOT . "/inc/includes.php"); diff --git a/tests/inc/CommonDBTestCase.php b/tests/inc/CommonDBTestCase.php index ecb21209c..5c18a74ff 100644 --- a/tests/inc/CommonDBTestCase.php +++ b/tests/inc/CommonDBTestCase.php @@ -146,7 +146,7 @@ protected static function setupGLPIFramework() { ini_set("memory_limit", "-1"); ini_set("max_execution_time", "0"); - ini_set('session.use_cookies', 0); //disable session cookies + //ini_set('session.use_cookies', 0); //disable session cookies $_SESSION['MESSAGE_AFTER_REDIRECT'] = []; } From 33bffd18c088b8108b986a18c46694680b654b1c Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 3 Apr 2017 13:38:26 +0200 Subject: [PATCH 133/178] remove composer.lock for tests --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 98a69b77b..5ac765bc5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ before_script: - composer install --no-dev - php tools/cliinstall.php --db=glpi-test --user=travis --tests - cd plugins/formcreator + - rm composer.lock - composer install script: From 0f307a7b38a5bf61f155a0aad8ebfe6f70911b5d Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 3 Apr 2017 13:48:51 +0200 Subject: [PATCH 134/178] do not check CS on libs --- RoboFile.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RoboFile.php b/RoboFile.php index f6360f5a6..e6c830b0f 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -9,5 +9,7 @@ class RoboFile extends Glpi\Tools\RoboFile { + + protected $csignore = ['/vendor/', '/lib/']; //Own plugin's robo stuff } From 402f0473245767ed94dbcbcea95c2080f662a74e Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 3 Apr 2017 13:51:53 +0200 Subject: [PATCH 135/178] update gitignore --- .gitignore | 4 ++++ hook.php | 31 +++++++++++++------------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 283db0afd..003cc7da2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ dist/ vendor/ .gh_token *.min.* +.idea +.settings +.buildpath +.project diff --git a/hook.php b/hook.php index 1b0068458..fbbced37b 100644 --- a/hook.php +++ b/hook.php @@ -4,8 +4,7 @@ * * @return boolean True if success */ -function plugin_formcreator_install() -{ +function plugin_formcreator_install() { spl_autoload_register('plugin_formcreator_autoload'); $version = plugin_version_formcreator(); @@ -23,8 +22,7 @@ function plugin_formcreator_install() * * @return boolean True if success */ -function plugin_formcreator_uninstall() -{ +function plugin_formcreator_uninstall() { require_once(__DIR__ . '/install/install.php'); $install = new PluginFormcreatorInstall(); $install->uninstall(); @@ -33,8 +31,7 @@ function plugin_formcreator_uninstall() /** * Define Dropdown tables to be manage in GLPI : */ -function plugin_formcreator_getDropdown() -{ +function plugin_formcreator_getDropdown() { return array( 'PluginFormcreatorCategory' => _n('Form category', 'Form categories', 2, 'formcreator'), ); @@ -87,8 +84,7 @@ function plugin_formcreator_getCondition($itemtype) { * @param String $itemtype Itemtype for the search engine * @return String Specific search request */ -function plugin_formcreator_addDefaultWhere($itemtype) -{ +function plugin_formcreator_addDefaultWhere($itemtype) { $condition = ""; $table = getTableForItemType($itemtype); switch ($itemtype) { @@ -119,14 +115,14 @@ function plugin_formcreator_addLeftJoin($itemtype, $ref_table, $new_table, $link $join = ""; switch ($itemtype) { case 'PluginFormcreatorIssue': - if ($new_table == 'glpi_ticketvalidations') { - foreach ($already_link_tables as $table) { - if (strpos($table, $new_table) === 0) { - $AS = $table; - } + if ($new_table == 'glpi_ticketvalidations') { + foreach ($already_link_tables as $table) { + if (strpos($table, $new_table) === 0) { + $AS = $table; } - $join = " LEFT JOIN `$new_table` AS `$AS` ON (`$ref_table`.`tickets_id` = `$AS`.`tickets_id`) "; } + $join = " LEFT JOIN `$new_table` AS `$AS` ON (`$ref_table`.`tickets_id` = `$AS`.`tickets_id`) "; + } break; } @@ -196,17 +192,16 @@ function plugin_formcreator_addWhere($link, $nott, $itemtype, $ID, $val, $search if (count($tocheck)) { if ($nott) { - return $link." `$table`.`$field` NOT IN ('".implode("','",$tocheck)."')"; + return $link." `$table`.`$field` NOT IN ('".implode("','", $tocheck)."')"; } - return $link." `$table`.`$field` IN ('".implode("','",$tocheck)."')"; + return $link." `$table`.`$field` IN ('".implode("','", $tocheck)."')"; } break; } } -function plugin_formcreator_AssignToTicket($types) -{ +function plugin_formcreator_AssignToTicket($types) { $types['PluginFormcreatorForm_Answer'] = PluginFormcreatorForm_Answer::getTypeName(); return $types; From dd6123396d2d814d71b87b0b567fdfb6580f27cb Mon Sep 17 00:00:00 2001 From: btry Date: Mon, 3 Apr 2017 13:52:14 +0200 Subject: [PATCH 136/178] CS --- ajax/dropdown_values.php | 2 +- ajax/homepage_link.php | 2 +- ajax/homepage_wizard.php | 2 +- ajax/question.php | 2 +- ajax/section.php | 2 +- ajax/showfields.php | 2 +- css/styles.css | 8 +- front/category.form.php | 6 +- front/category.php | 2 +- front/entityconfig.form.php | 2 +- front/export.php | 4 +- front/form.form.php | 28 +- front/form.php | 4 +- front/form_answer.form.php | 22 +- front/form_answer.php | 34 +- front/form_profile.form.php | 8 +- front/formdisplay.php | 22 +- front/formlist.php | 2 +- front/header.form.php | 6 +- front/header.php | 2 +- front/issue.form.php | 4 +- front/issue.php | 32 +- front/question.form.php | 28 +- front/reservation.form.php | 7 +- front/reservation.php | 1 - front/reservationitem.php | 1 - front/section.form.php | 24 +- front/target.form.php | 10 +- front/targetchange.form.php | 6 +- front/targetticket.form.php | 10 +- front/wizard.php | 2 +- front/wizardfeeds.php | 3 +- inc/answer.class.php | 23 +- inc/category.class.php | 16 +- inc/entityconfig.class.php | 3 +- inc/field.class.php | 34 +- inc/fields.class.php | 36 +- inc/fields/actorfield.class.php | 22 +- inc/fields/checkboxesfield.class.php | 43 +- inc/fields/datefield.class.php | 21 +- inc/fields/datetimefield.class.php | 21 +- inc/fields/descriptionfield.class.php | 15 +- inc/fields/dropdownfield.class.php | 17 +- inc/fields/emailfield.class.php | 21 +- inc/fields/filefield.class.php | 17 +- inc/fields/floatfield.class.php | 30 +- inc/fields/glpiselectfield.class.php | 9 +- inc/fields/hiddenfield.class.php | 15 +- inc/fields/integerfield.class.php | 30 +- inc/fields/ipfield.class.php | 15 +- inc/fields/ldapselectfield.class.php | 24 +- inc/fields/multiselectfield.class.php | 40 +- inc/fields/radiosfield.class.php | 19 +- inc/fields/selectfield.class.php | 25 +- inc/fields/tagfield.class.php | 17 +- inc/fields/textareafield.class.php | 29 +- inc/fields/textfield.class.php | 38 +- inc/fields/urgencyfield.class.php | 23 +- inc/form.class.php | 158 +- inc/form_answer.class.php | 79 +- inc/form_profile.class.php | 11 +- inc/formlist.class.php | 3 +- inc/issue.class.php | 8 +- inc/notificationtargetform_answer.class.php | 17 +- inc/question.class.php | 94 +- inc/question_condition.class.php | 2 +- inc/section.class.php | 40 +- inc/target.class.php | 29 +- inc/targetchange.class.php | 74 +- inc/targetchange_actor.class.php | 8 +- inc/targetticket.class.php | 61 +- inc/targetticket_actor.class.php | 2 +- inc/wizard.class.php | 17 +- install/install.php | 3 +- install/update_0.0_2.5.php | 58 +- scripts/scripts.js.php | 8 +- setup.php | 26 +- tests/0010_Integration/CloneTest.php | 4 +- tests/0010_Integration/ExportImportTest.php | 14 +- .../FormAnswerValidationTest.php | 18 +- .../0010_Integration/FormDuplicationTest.php | 2 +- tests/0010_Integration/UrgencyTest.php | 6 +- tests/inc/CommonDBTestCase.php | 14 +- tests/inc/GLPIlogs.php | 1 - tests/inc/PluginDB.php | 24 +- tools/cliinstall.php | 2 +- tools/docopt.php | 1742 ++++++++--------- 87 files changed, 1606 insertions(+), 1812 deletions(-) diff --git a/ajax/dropdown_values.php b/ajax/dropdown_values.php index 08bfa4e6e..88cc44399 100644 --- a/ajax/dropdown_values.php +++ b/ajax/dropdown_values.php @@ -3,7 +3,7 @@ Session::checkRight("entity", UPDATE); -if($_REQUEST['dropdown_itemtype'] == '0' || !class_exists($_REQUEST['dropdown_itemtype'])) { +if ($_REQUEST['dropdown_itemtype'] == '0' || !class_exists($_REQUEST['dropdown_itemtype'])) { Dropdown::showFromArray("dropdown_default_value", array(), array('display_emptychoice' => true)); } else { Dropdown::show($_REQUEST['dropdown_itemtype'], array( diff --git a/ajax/homepage_link.php b/ajax/homepage_link.php index 9174e07b2..23a8d0d58 100644 --- a/ajax/homepage_link.php +++ b/ajax/homepage_link.php @@ -3,6 +3,6 @@ echo ''; diff --git a/ajax/homepage_wizard.php b/ajax/homepage_wizard.php index 5bb98c90f..af17dc668 100644 --- a/ajax/homepage_wizard.php +++ b/ajax/homepage_wizard.php @@ -17,7 +17,7 @@ $keywords = isset($_REQUEST['keywords']) ? $_REQUEST['keywords'] : ''; $helpdeskHome = isset($_REQUEST['helpdeskHome']) ? $_REQUEST['helpdeskHome'] != '0' : false; plugin_formcreator_showWizardForms($categoriesId, $keywords, $helpdeskHome); -} elseif ($_REQUEST['wizard'] == 'toggle_menu') { +} else if ($_REQUEST['wizard'] == 'toggle_menu') { $_SESSION['plugin_formcreator_toggle_menu'] = isset($_SESSION['plugin_formcreator_toggle_menu']) ? !$_SESSION['plugin_formcreator_toggle_menu'] : true; diff --git a/ajax/question.php b/ajax/question.php index c9af6b635..e4feba30f 100644 --- a/ajax/question.php +++ b/ajax/question.php @@ -3,7 +3,7 @@ Session::checkRight("entity", UPDATE); $question = new PluginFormcreatorQuestion(); -if(empty($_REQUEST['question_id'])) { +if (empty($_REQUEST['question_id'])) { $question_id = 0; $question->getEmpty(); } else { diff --git a/ajax/section.php b/ajax/section.php index 02851c209..6e8e172ac 100644 --- a/ajax/section.php +++ b/ajax/section.php @@ -4,7 +4,7 @@ Session::checkRight("entity", UPDATE); $section = new PluginFormcreatorSection(); -if(empty($_REQUEST['section_id'])) { +if (empty($_REQUEST['section_id'])) { $section_id = 0; } else { $section_id = intval($_REQUEST['section_id']); diff --git a/ajax/showfields.php b/ajax/showfields.php index 5d0ee75e9..ea76ed928 100644 --- a/ajax/showfields.php +++ b/ajax/showfields.php @@ -7,7 +7,7 @@ foreach ($value as &$sub_value) { $sub_value = plugin_formcreator_encode($sub_value); } - } elseif (is_array(json_decode($value))) { + } else if (is_array(json_decode($value))) { $tab = json_decode($value); foreach ($tab as &$sub_value) { $sub_value = plugin_formcreator_encode($sub_value); diff --git a/css/styles.css b/css/styles.css index e35182e26..ded7bf0fe 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1,5 +1,5 @@ html, body { - height: 100%; + height: 100%; } @-moz-keyframes ripple { @@ -428,7 +428,7 @@ form.formcreator_form { font-style: italic; margin: 0 4px; } -.div_show_condition_field, .div_show_condition_operator, +.div_show_condition_field, .div_show_condition_operator, .div_show_condition_value, .div_show_condition_logic, .div_show_condition_add, .div_show_condition_remove { //float: left; @@ -457,7 +457,7 @@ form.formcreator_form { width: 300px !important; } .div_show_condition_logic { - width: 70px !important; + width: 70px !important; } .div_show_condition_add img, .div_show_condition_remove img { width: 12px; @@ -878,7 +878,7 @@ a.plugin_formcreator_formTile_title { clear: both; } #plugin_formcreator_wizard_forms > div { - text-align: center; + text-align: center; } #plugin_formcreator_searchBar { diff --git a/front/category.form.php b/front/category.form.php index 2b3f899bb..4d81fd2b1 100644 --- a/front/category.form.php +++ b/front/category.form.php @@ -3,13 +3,13 @@ Session::checkRight("entity", UPDATE); -Plugin::load('formcreator',true); +Plugin::load('formcreator', true); $dropdown = new PluginFormcreatorCategory(); -if(isset($_POST['add']) && isset($_POST['name'])) { +if (isset($_POST['add']) && isset($_POST['name'])) { $found = $dropdown->find("name LIKE '" . $_POST['name'] . "'"); - if(!empty($found)) { + if (!empty($found)) { Session::addMessageAfterRedirect(__('A category already exists with the same name! Category creation failed.', 'formcreator'), false, ERROR); Html::back(); } diff --git a/front/category.php b/front/category.php index 49b03267e..21a1a7cd7 100644 --- a/front/category.php +++ b/front/category.php @@ -1,7 +1,7 @@ update($_POST); } diff --git a/front/export.php b/front/export.php index 0784e1ce1..8007948eb 100644 --- a/front/export.php +++ b/front/export.php @@ -3,13 +3,13 @@ // Check if plugin is activated... $plugin = new Plugin(); -if(!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { +if (!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { Html::displayNotFoundError(); } $form = new PluginFormcreatorForm; $export_array = ['forms' => []]; -foreach($_GET['plugin_formcreator_forms_id'] as $id) { +foreach ($_GET['plugin_formcreator_forms_id'] as $id) { $form->getFromDB($id); $export_array['forms'][] = $form->export(); } diff --git a/front/form.form.php b/front/form.form.php index a8229d64f..d5fc0c047 100644 --- a/front/form.form.php +++ b/front/form.form.php @@ -6,45 +6,45 @@ if ($plugin->isActivated("formcreator")) { $form = new PluginFormcreatorForm(); - if(isset($_POST["add"])) { + if (isset($_POST["add"])) { // Add a new Form Session::checkRight("entity", UPDATE); $newID = $form->add($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $newID); - } elseif(isset($_POST["update"])) { + } else if (isset($_POST["update"])) { // Edit an existing form Session::checkRight("entity", UPDATE); $form->update($_POST); Html::back(); - } elseif(isset($_POST["delete"])) { + } else if (isset($_POST["delete"])) { // Delete a form (is_deleted = true) Session::checkRight("entity", UPDATE); $form->delete($_POST); $form->redirectToList(); - } elseif(isset($_POST["restore"])) { + } else if (isset($_POST["restore"])) { // Restore a deleteted form (is_deleted = false) Session::checkRight("entity", UPDATE); $form->restore($_POST); $form->redirectToList(); - } elseif(isset($_POST["purge"])) { + } else if (isset($_POST["purge"])) { // Delete defenitively a form from DB and all its datas Session::checkRight("entity", UPDATE); - $form->delete($_POST,1); + $form->delete($_POST, 1); $form->redirectToList(); - } elseif (isset($_POST['filetype_create'])) { + } else if (isset($_POST['filetype_create'])) { $documentType = new DocumentType(); $canAddType = $documentType->canCreate(); if ($canAddType) { $form->createDocumentType(); } Html::back(); - } elseif (isset($_POST['filetype_enable'])) { + } else if (isset($_POST['filetype_enable'])) { $documentType = new DocumentType(); $canUpdateType = $documentType->canUpdate(); @@ -53,7 +53,7 @@ } Html::back(); - } elseif (isset($_GET["import_form"])) { + } else if (isset($_GET["import_form"])) { // Import form Session::checkRight("entity", UPDATE); Html::header( @@ -71,18 +71,18 @@ $form->showImportForm(); Html::footer(); - } elseif(isset($_POST["import_send"])) { + } else if (isset($_POST["import_send"])) { // Import form Session::checkRight("entity", UPDATE); $form->importJson($_REQUEST); Html::back(); - } elseif (isset($_POST['submit_formcreator'])) { + } else if (isset($_POST['submit_formcreator'])) { // Save form to target - if($form->getFromDB($_POST['formcreator_form'])) { + if ($form->getFromDB($_POST['formcreator_form'])) { // If user is not authenticated, create temporary user - if(!isset($_SESSION['glpiname'])) { + if (!isset($_SESSION['glpiname'])) { $_SESSION['glpiname'] = 'formcreator_temp_user'; } @@ -93,7 +93,7 @@ $form->increaseUsageCount(); // If user was not authenticated, remove temporary user - if($_SESSION['glpiname'] == 'formcreator_temp_user') { + if ($_SESSION['glpiname'] == 'formcreator_temp_user') { unset($_SESSION['glpiname']); Html::redirect('formdisplay.php?answer_saved'); } else if (plugin_formcreator_replaceHelpdesk()) { diff --git a/front/form.php b/front/form.php index 63a0aaa34..4596ffb2e 100644 --- a/front/form.php +++ b/front/form.php @@ -6,11 +6,11 @@ // Check if plugin is activated... $plugin = new Plugin(); -if(!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { +if (!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { Html::displayNotFoundError(); } -if(PluginFormcreatorForm::canView()) { +if (PluginFormcreatorForm::canView()) { Html::header( __('Form Creator', 'formcreator'), $_SERVER['PHP_SELF'], diff --git a/front/form_answer.form.php b/front/form_answer.form.php index f73e69312..e4360d172 100644 --- a/front/form_answer.form.php +++ b/front/form_answer.form.php @@ -9,29 +9,29 @@ $formanswer = new PluginFormcreatorForm_Answer(); // Edit an existing target ticket - if(isset($_POST['update'])) { + if (isset($_POST['update'])) { $formanswer->update($_POST); Html::back(); - } elseif(isset($_POST['refuse_formanswer'])) { + } else if (isset($_POST['refuse_formanswer'])) { $formanswer->getFromDB(intval($_POST['id'])); $formanswer->refuseAnswers($_POST); $formanswer->redirectToList(); - } elseif(isset($_POST['accept_formanswer'])) { + } else if (isset($_POST['accept_formanswer'])) { $formanswer->getFromDB(intval($_POST['id'])); $formanswer->acceptAnswers($_POST); $formanswer->redirectToList(); - } elseif(isset($_POST['save_formanswer'])) { + } else if (isset($_POST['save_formanswer'])) { $_POST['plugin_formcreator_forms_id'] = intval($_POST['formcreator_form']); $_POST['status'] = 'waiting'; $formanswer->saveAnswers($_POST); $formanswer->redirectToList(); - // Show target ticket form + // Show target ticket form } else { if (plugin_formcreator_replaceHelpdesk()) { PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); @@ -53,14 +53,14 @@ $formanswer->display($_REQUEST); - if (plugin_formcreator_replaceHelpdesk()) { - PluginFormcreatorWizard::footer(); - } else { - Html::footer(); + if (plugin_formcreator_replaceHelpdesk()) { + PluginFormcreatorWizard::footer(); + } else { + Html::footer(); + } } -} -// Or display a "Not found" error + // Or display a "Not found" error } else { Html::displayNotFoundError(); } diff --git a/front/form_answer.php b/front/form_answer.php index 3cf267cee..318a465a9 100644 --- a/front/form_answer.php +++ b/front/form_answer.php @@ -3,28 +3,28 @@ // Check if plugin is activated... $plugin = new Plugin(); -if(!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { +if (!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { Html::displayNotFoundError(); } -if(PluginFormcreatorForm_Answer::canView()) { - if (plugin_formcreator_replaceHelpdesk()) { - PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); +if (PluginFormcreatorForm_Answer::canView()) { + if (plugin_formcreator_replaceHelpdesk()) { + PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); + } else { + if ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { + Html::helpHeader( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'] + ); } else { - if ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { - Html::helpHeader( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'] - ); - } else { - Html::header( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'], - 'helpdesk', - 'PluginFormcreatorFormlist' - ); - } + Html::header( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'], + 'helpdesk', + 'PluginFormcreatorFormlist' + ); } + } Search::show('PluginFormcreatorForm_Answer'); diff --git a/front/form_profile.form.php b/front/form_profile.form.php index 0b32f3e7a..2822c791f 100644 --- a/front/form_profile.form.php +++ b/front/form_profile.form.php @@ -8,7 +8,7 @@ if ($plugin->isActivated("formcreator")) { if (isset($_POST["profiles_id"]) && isset($_POST["form_id"])) { - if(isset($_POST['access_rights'])) { + if (isset($_POST['access_rights'])) { $form = new PluginFormcreatorForm(); $form->update(array( 'id' => $_POST['form_id'], @@ -22,7 +22,7 @@ )); $table = PluginFormcreatorForm_Profile::getTable(); - foreach($_POST["profiles_id"] as $profile_id) { + foreach ($_POST["profiles_id"] as $profile_id) { if ($profile_id != 0) { $form_profile = new PluginFormcreatorForm_Profile(); $form_profile->add(array( @@ -37,7 +37,7 @@ Html::back(); } -// Or display a "Not found" error -}else{ + // Or display a "Not found" error +} else { Html::displayNotFoundError(); } diff --git a/front/formdisplay.php b/front/formdisplay.php index 2ad062824..d5a612b82 100644 --- a/front/formdisplay.php +++ b/front/formdisplay.php @@ -4,35 +4,35 @@ // Check if plugin is activated... $plugin = new Plugin(); -if(!$plugin->isActivated("formcreator")) { +if (!$plugin->isActivated("formcreator")) { Html::displayNotFoundError(); } $form = new PluginFormcreatorForm(); PluginFormcreatorForm::header(); -if(isset($_REQUEST['id']) +if (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) { - if($form->getFromDB((int) $_REQUEST['id'])) { + if ($form->getFromDB((int) $_REQUEST['id'])) { - if($form->fields['access_rights'] != PluginFormcreatorForm::ACCESS_PUBLIC) { + if ($form->fields['access_rights'] != PluginFormcreatorForm::ACCESS_PUBLIC) { Session::checkLoginUser(); } - if($form->fields['access_rights'] == PluginFormcreatorForm::ACCESS_RESTRICTED) { + if ($form->fields['access_rights'] == PluginFormcreatorForm::ACCESS_RESTRICTED) { $form_profile = new PluginFormcreatorForm_Profile(); $formId = $form->getID(); $activeProfileId = $_SESSION['glpiactiveprofile']['id']; $rows = $form_profile->find("profiles_id = '$activeProfileId' AND plugin_formcreator_forms_id = '$formId'", "", "1"); - if(count($rows) == 0) { + if (count($rows) == 0) { Html::displayRightError(); exit(); } } - if(($form->fields['access_rights'] == PluginFormcreatorForm::ACCESS_PUBLIC) && (!isset($_SESSION['glpiID']))) { + if (($form->fields['access_rights'] == PluginFormcreatorForm::ACCESS_PUBLIC) && (!isset($_SESSION['glpiID']))) { // If user is not authenticated, create temporary user - if(!isset($_SESSION['glpiname'])) { + if (!isset($_SESSION['glpiname'])) { $_SESSION['formcreator_forms_id'] = $form->fields['id']; $_SESSION['glpiname'] = 'formcreator_temp_user'; $_SESSION['valid_id'] = session_id(); @@ -51,12 +51,12 @@ } // If user was not authenticated, remove temporary user - if($_SESSION['glpiname'] == 'formcreator_temp_user') { + if ($_SESSION['glpiname'] == 'formcreator_temp_user') { unset($_SESSION['glpiname']); } -// Or display a "Not found" error -} elseif (isset($_GET['answer_saved'])) { + // Or display a "Not found" error +} else if (isset($_GET['answer_saved'])) { $message = __("The form has been successfully saved!"); Html::displayTitle($CFG_GLPI['root_doc']."/pics/ok.png", $message, $message); } diff --git a/front/formlist.php b/front/formlist.php index a5f42b441..27cab5e05 100644 --- a/front/formlist.php +++ b/front/formlist.php @@ -2,7 +2,7 @@ include ('../../../inc/includes.php'); $plugin = new Plugin(); -if(!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { +if (!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { Html::displayNotFoundError(); } diff --git a/front/header.form.php b/front/header.form.php index 28d1c9054..e0d62a705 100644 --- a/front/header.form.php +++ b/front/header.form.php @@ -3,13 +3,13 @@ Session::checkRight("entity", UPDATE); -Plugin::load('formcreator',true); +Plugin::load('formcreator', true); $dropdown = new PluginFormcreatorHeader(); -if(isset($_POST['add'])) { +if (isset($_POST['add'])) { $found = $dropdown->find("entities_id = ".$_SESSION['glpiactive_entity']); - if(!empty($found)) { + if (!empty($found)) { Session::addMessageAfterRedirect(__('An header already exists for this entity! You can have only one header per entity.', 'formcreator'), false, ERROR); Html::back(); } diff --git a/front/header.php b/front/header.php index 67716b438..d2ac5d97d 100644 --- a/front/header.php +++ b/front/header.php @@ -1,7 +1,7 @@ isActivated('formcreator')) { +if ($plugin->isActivated('formcreator')) { if (!isset($_REQUEST['sub_itemtype'])) { Html::displayNotFoundError(); } $issue = new PluginFormcreatorIssue(); - if(isset($_POST['save_formanswer'])) { + if (isset($_POST['save_formanswer'])) { $_POST['plugin_formcreator_forms_id'] = intval($_POST['formcreator_form']); $_POST['status'] = 'waiting'; $issue->saveAnswers($_POST); diff --git a/front/issue.php b/front/issue.php index 941e9ff51..6600d7b03 100644 --- a/front/issue.php +++ b/front/issue.php @@ -3,28 +3,28 @@ // Check if plugin is activated... $plugin = new Plugin(); -if(!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { +if (!$plugin->isInstalled('formcreator') || !$plugin->isActivated('formcreator')) { Html::displayNotFoundError(); } if (PluginFormcreatorIssue::canView()) { - if (plugin_formcreator_replaceHelpdesk()) { - PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); + if (plugin_formcreator_replaceHelpdesk()) { + PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); + } else { + if ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { + Html::helpHeader( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'] + ); } else { - if ($_SESSION['glpiactiveprofile']['interface'] == 'helpdesk') { - Html::helpHeader( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'] - ); - } else { - Html::header( - __('Form Creator', 'formcreator'), - $_SERVER['PHP_SELF'], - 'helpdesk', - 'PluginFormcreatorFormlist' - ); - } + Html::header( + __('Form Creator', 'formcreator'), + $_SERVER['PHP_SELF'], + 'helpdesk', + 'PluginFormcreatorFormlist' + ); } + } Search::show('PluginFormcreatorIssue'); diff --git a/front/question.form.php b/front/question.form.php index d40e9d568..0a6c39006 100644 --- a/front/question.form.php +++ b/front/question.form.php @@ -9,7 +9,7 @@ $question = new PluginFormcreatorQuestion(); // Add a new Question - if(isset($_POST["add"])) { + if (isset($_POST["add"])) { Session::checkRight("entity", UPDATE); if ($newid = $question->add($_POST)) { Session::addMessageAfterRedirect(__('The question has been successfully saved!', 'formcreator'), true, INFO); @@ -18,8 +18,8 @@ } Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - // Edit an existing Question - } elseif(isset($_POST["update"])) { + // Edit an existing Question + } else if (isset($_POST["update"])) { Session::checkRight("entity", UPDATE); if ($question->update($_POST)) { Session::addMessageAfterRedirect(__('The question has been successfully updated!', 'formcreator'), true, INFO); @@ -27,43 +27,43 @@ } Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - // Delete a Question - } elseif(isset($_POST["delete_question"])) { + // Delete a Question + } else if (isset($_POST["delete_question"])) { Session::checkRight("entity", UPDATE); $question->delete($_POST); - // Duplicate a Question - } elseif(isset($_POST["duplicate_question"])) { + // Duplicate a Question + } else if (isset($_POST["duplicate_question"])) { Session::checkRight("entity", UPDATE); if ($question->getFromDB((int) $_POST['id'])) { $question->duplicate(); } - // Set a Question required - } elseif(isset($_POST["set_required"])) { + // Set a Question required + } else if (isset($_POST["set_required"])) { global $DB; Session::checkRight("entity", UPDATE); $table = getTableForItemtype('PluginFormcreatorQuestion'); $DB->query("UPDATE $table SET `required` = " . $_POST['value'] . " WHERE id = " . $_POST['id']); - // Move a Question - } elseif(isset($_POST["move"])) { + // Move a Question + } else if (isset($_POST["move"])) { Session::checkRight("entity", UPDATE); if ($question->getFromDB((int) $_POST['id'])) { - if($_POST["way"] == 'up') { + if ($_POST["way"] == 'up') { $question->moveUp(); } else { $question->moveDown(); } } - // Return to form list + // Return to form list } else { Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.php'); } -// Or display a "Not found" error + // Or display a "Not found" error } else { Html::displayNotFoundError(); } diff --git a/front/reservation.form.php b/front/reservation.form.php index 6d3c70f3f..40d6b20a8 100644 --- a/front/reservation.form.php +++ b/front/reservation.form.php @@ -10,7 +10,7 @@ PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); if (isset($_POST["update"])) { - list($begin_year,$begin_month,$begin_day) = explode("-",$_POST['resa']["begin"]); + list($begin_year,$begin_month,$begin_day) = explode("-", $_POST['resa']["begin"]); Toolbox::manageBeginAndEndPlanDates($_POST['resa']); if (Session::haveRight("reservation", UPDATE) || (Session::getLoginUserID() === $_POST["users_id"])) { @@ -33,7 +33,7 @@ $reservationitems_id)); } - list($begin_year,$begin_month,$begin_day) = explode("-",$rr->fields["begin"]); + list($begin_year,$begin_month,$begin_day) = explode("-", $rr->fields["begin"]); Html::redirect(FORMCREATOR_ROOTDOC."/front/reservation.php?reservationitems_id=". "$reservationitems_id&mois_courant=$begin_month&annee_courante=$begin_year"); @@ -45,7 +45,7 @@ } Toolbox::manageBeginAndEndPlanDates($_POST['resa']); $dates_to_add = array(); - list($begin_year,$begin_month,$begin_day) = explode("-",$_POST['resa']["begin"]); + list($begin_year,$begin_month,$begin_day) = explode("-", $_POST['resa']["begin"]); if (isset($_POST['resa']["end"])) { // Compute dates to add. $dates_to_add[$_POST['resa']["begin"]] = $_POST['resa']["end"]; @@ -120,4 +120,3 @@ } PluginFormcreatorWizard::footer(); -?> \ No newline at end of file diff --git a/front/reservation.php b/front/reservation.php index 1098bb25c..b826fc146 100644 --- a/front/reservation.php +++ b/front/reservation.php @@ -12,4 +12,3 @@ PluginFormcreatorWizard::header(__('Service catalog', 'formcreator')); Reservation::showCalendar($_GET["reservationitems_id"]); PluginFormcreatorWizard::footer(); -?> \ No newline at end of file diff --git a/front/reservationitem.php b/front/reservationitem.php index 2f6f78f82..e5a1440f3 100644 --- a/front/reservationitem.php +++ b/front/reservationitem.php @@ -16,4 +16,3 @@ } PluginFormcreatorWizard::footer(); -?> \ No newline at end of file diff --git a/front/section.form.php b/front/section.form.php index 896eede8d..04308562a 100644 --- a/front/section.form.php +++ b/front/section.form.php @@ -9,36 +9,36 @@ $section = new PluginFormcreatorSection(); // Add a new Section - if(isset($_POST["add"])) { + if (isset($_POST["add"])) { Session::checkRight("entity", UPDATE); $section->add($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - // Edit an existing Section - } elseif(isset($_POST["update"])) { + // Edit an existing Section + } else if (isset($_POST["update"])) { Session::checkRight("entity", UPDATE); $section->update($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - // Delete a Section - } elseif(isset($_POST["delete_section"])) { + // Delete a Section + } else if (isset($_POST["delete_section"])) { Session::checkRight("entity", UPDATE); $section->delete($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - // Duplicate a Section - } elseif(isset($_POST["duplicate_section"])) { + // Duplicate a Section + } else if (isset($_POST["duplicate_section"])) { Session::checkRight("entity", UPDATE); if ($section->getFromDB((int) $_POST['id'])) { $section->duplicate(); } - // Move a Section - } elseif(isset($_POST["move"])) { + // Move a Section + } else if (isset($_POST["move"])) { Session::checkRight("entity", UPDATE); if ($section->getFromDB((int) $_POST['id'])) { - if($_POST["way"] == 'up') { + if ($_POST["way"] == 'up') { $section->moveUp(); } else { $section->moveDown(); @@ -47,12 +47,12 @@ // Page refresh handled by Javascript - // Return to form list + // Return to form list } else { Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.php'); } -// Or display a "Not found" error + // Or display a "Not found" error } else { Html::displayNotFoundError(); } diff --git a/front/target.form.php b/front/target.form.php index 913bd3b29..ecbd1b8aa 100644 --- a/front/target.form.php +++ b/front/target.form.php @@ -9,25 +9,25 @@ $target = new PluginFormcreatorTarget(); // Add a new target - if(isset($_POST["add"]) && !empty($_POST['plugin_formcreator_forms_id'])) { + if (isset($_POST["add"]) && !empty($_POST['plugin_formcreator_forms_id'])) { Session::checkRight("entity", UPDATE); $target->add($_POST); Html::back(); - // Delete a target - } elseif(isset($_POST["delete_target"])) { + // Delete a target + } else if (isset($_POST["delete_target"])) { Session::checkRight("entity", UPDATE); $target->delete($_POST); Html::redirect($CFG_GLPI["root_doc"] . '/plugins/formcreator/front/form.form.php?id=' . $_POST['plugin_formcreator_forms_id']); - } elseif(isset($_GET['id'])) { + } else if (isset($_GET['id'])) { $target->getFromDB($_GET['id']); Html::redirect(Toolbox::getItemTypeFormURL($target->fields['itemtype']) . '?id=' . $_GET['id']); } else { Html::back(); } -// Or display a "Not found" error + // Or display a "Not found" error } else { Html::displayNotFoundError(); } diff --git a/front/targetchange.form.php b/front/targetchange.form.php index 1c047132f..519438680 100644 --- a/front/targetchange.form.php +++ b/front/targetchange.form.php @@ -9,7 +9,7 @@ $targetticket = new PluginFormcreatorTargetChange(); // Edit an existing target ticket - if(isset($_POST["update"])) { + if (isset($_POST["update"])) { Session::checkRight("entity", UPDATE); $target = new PluginFormcreatorTarget(); @@ -19,7 +19,7 @@ $targetticket->update($_POST); Html::back(); - } elseif (isset($_POST['actor_role'])) { + } else if (isset($_POST['actor_role'])) { Session::checkRight("entity", UPDATE); $id = (int) $_POST['id']; $actor_value = isset($_POST['actor_value_' . $_POST['actor_type']]) @@ -36,7 +36,7 @@ )); Html::back(); - } elseif (isset($_GET['delete_actor'])) { + } else if (isset($_GET['delete_actor'])) { $targetChange_actor = new PluginFormcreatorTargetChange_Actor(); $targetChange_actor->delete(array( 'id' => (int) $_GET['delete_actor'] diff --git a/front/targetticket.form.php b/front/targetticket.form.php index 012ee1283..d6752147d 100644 --- a/front/targetticket.form.php +++ b/front/targetticket.form.php @@ -9,7 +9,7 @@ $targetticket = new PluginFormcreatorTargetTicket(); // Edit an existing target ticket - if(isset($_POST["update"])) { + if (isset($_POST["update"])) { Session::checkRight("entity", UPDATE); $target = new PluginFormcreatorTarget(); @@ -19,7 +19,7 @@ $targetticket->update($_POST); Html::back(); - } elseif (isset($_POST['actor_role'])) { + } else if (isset($_POST['actor_role'])) { Session::checkRight("entity", UPDATE); $id = (int) $_POST['id']; $actor_value = isset($_POST['actor_value_' . $_POST['actor_type']]) @@ -36,14 +36,14 @@ )); Html::back(); - } elseif (isset($_GET['delete_actor'])) { + } else if (isset($_GET['delete_actor'])) { $targetTicket_actor = new PluginFormcreatorTargetTicket_Actor(); $targetTicket_actor->delete(array( 'id' => (int) $_GET['delete_actor'] )); Html::back(); - // Show target ticket form + // Show target ticket form } else { Html::header( __('Form Creator', 'formcreator'), @@ -68,7 +68,7 @@ Html::footer(); } -// Or display a "Not found" error + // Or display a "Not found" error } else { Html::displayNotFoundError(); } diff --git a/front/wizard.php b/front/wizard.php index 0ad936217..5bae67e89 100644 --- a/front/wizard.php +++ b/front/wizard.php @@ -4,7 +4,7 @@ // Check if plugin is activated... $plugin = new Plugin(); -if($plugin->isActivated("formcreator")) { +if ($plugin->isActivated("formcreator")) { if (! plugin_formcreator_replaceHelpdesk()) { Html::redirect($CFG_GLPI["root_doc"]."/plugins/formcreator/front/formlist.php"); diff --git a/front/wizardfeeds.php b/front/wizardfeeds.php index f4ad0246a..3b8798d5b 100644 --- a/front/wizardfeeds.php +++ b/front/wizardfeeds.php @@ -2,7 +2,7 @@ include ("../../../inc/includes.php"); -if($plugin->isActivated("formcreator")) { +if ($plugin->isActivated("formcreator")) { if (! plugin_formcreator_replaceHelpdesk()) { Html::redirect($CFG_GLPI["root_doc"]."/front/helpdesk.public.php"); } @@ -14,4 +14,3 @@ } } -?> \ No newline at end of file diff --git a/inc/answer.class.php b/inc/answer.class.php index 6ce377954..133902f63 100644 --- a/inc/answer.class.php +++ b/inc/answer.class.php @@ -9,8 +9,7 @@ class PluginFormcreatorAnswer extends CommonDBChild * * @return boolean True if he can create and modify requests */ - public static function canCreate() - { + public static function canCreate() { return true; } @@ -19,8 +18,7 @@ public static function canCreate() * * @return boolean True if he can read requests */ - public static function canView() - { + public static function canView() { return true; } @@ -30,8 +28,7 @@ public static function canView() * @param number $nb Number of item(s) * @return string Itemtype name */ - public static function getTypeName($nb = 0) - { + public static function getTypeName($nb = 0) { return _n('Answer', 'Answers', $nb, 'formcreator'); } @@ -43,23 +40,22 @@ public static function getTypeName($nb = 0) * * @return the modified $input array **/ - public function prepareInputForAdd($input) - { + public function prepareInputForAdd($input) { // Decode (if already encoded) and encode strings to avoid problems with quotes foreach ($input as $key => $value) { if (is_array($value)) { - foreach($value as $key2 => $value2) { + foreach ($value as $key2 => $value2) { $input[$key][$key2] = plugin_formcreator_encode($value2, false); } - } elseif(is_array(json_decode($value))) { + } else if (is_array(json_decode($value))) { $value = json_decode($value); - foreach($value as $key2 => $value2) { + foreach ($value as $key2 => $value2) { $value[$key2] = plugin_formcreator_encode($value2, false); } // Verify the constant exits (included in PHP 5.4+) if (defined('JSON_UNESCAPED_UNICODE')) { $input[$key] = json_encode($value, JSON_UNESCAPED_UNICODE); - // If PHP 5.3, don't use the constant, but bug with UTF-8 languages like Russian... + // If PHP 5.3, don't use the constant, but bug with UTF-8 languages like Russian... } else { $input[$key] = json_encode($value); } @@ -79,8 +75,7 @@ public function prepareInputForAdd($input) * * @return the modified $input array **/ - public function prepareInputForUpdate($input) - { + public function prepareInputForUpdate($input) { return $this->prepareInputForAdd($input); } } diff --git a/inc/category.class.php b/inc/category.class.php index 9ecda163d..4f2972e3a 100644 --- a/inc/category.class.php +++ b/inc/category.class.php @@ -4,21 +4,18 @@ class PluginFormcreatorCategory extends CommonTreeDropdown // Activate translation on GLPI 0.85 var $can_be_translated = true; - public static function getTypeName($nb = 1) - { + public static function getTypeName($nb = 1) { return _n('Form category', 'Form categories', $nb, 'formcreator'); } - public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) - { + public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { $env = new self; $found_env = $env->find(); $nb = count($found_env); return self::createTabEntry(self::getTypeName($nb), $nb); } - public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) - { + public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { global $CFG_GLPI; if ($item->getType()==__CLASS__) { @@ -30,13 +27,12 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $ * {@inheritDoc} * @see CommonTreeDropdown::getAdditionalFields() */ - public function getAdditionalFields() - { + public function getAdditionalFields() { return [ [ 'name' => 'knowbaseitemcategories_id', 'type' => 'dropdownValue', - 'label' => __('Knowbase category','formcreator'), + 'label' => __('Knowbase category', 'formcreator'), 'list' => false ], [ @@ -122,7 +118,7 @@ public static function getCategoryTree($rootId = 0, $helpdeskHome = false) { 'id' => $rootId, 'subcategories' => array() ); - foreach($items as $categoryId => $categoryItem) { + foreach ($items as $categoryId => $categoryItem) { $children['subcategories'][] = self::getCategoryTree($categoryId); } diff --git a/inc/entityconfig.class.php b/inc/entityconfig.class.php index dafa467e2..fd123c096 100644 --- a/inc/entityconfig.class.php +++ b/inc/entityconfig.class.php @@ -60,7 +60,6 @@ public function showFormForEntity(Entity $entity) { echo ""; } - echo ""; echo ""; @@ -91,7 +90,7 @@ public function showFormForEntity(Entity $entity) { echo ""; echo ""; echo "
    ".__('Helpdesk', 'formcreator')."
    "; echo ""; - echo ""; + echo ""; echo "
    "; Html::closeForm(); diff --git a/inc/field.class.php b/inc/field.class.php index 99ba5a5d0..bbe5834ad 100644 --- a/inc/field.class.php +++ b/inc/field.class.php @@ -8,20 +8,18 @@ abstract class PluginFormcreatorField implements Field protected $fields = array(); - public function __construct($fields, $datas = array()) - { + public function __construct($fields, $datas = array()) { $this->fields = $fields; $this->fields['answer'] = $datas; } - public function show($canEdit = true) - { + public function show($canEdit = true) { $required = ($canEdit && $this->fields['required']) ? ' required' : ''; echo '
    '; echo ''; @@ -44,8 +42,7 @@ public function show($canEdit = true) } } - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { if ($canEdit) { echo 'fields['name']; } - public function getField() - { + public function getField() { } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { - if(!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { + if (!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { return json_decode($this->fields['answer']); } return $this->fields['answer']; @@ -86,18 +80,15 @@ public function getValue() } } - public function getAnswer() - { + public function getAnswer() { return $this->getValue(); } - public function getAvailableValues() - { + public function getAvailableValues() { return explode("\r\n", $this->fields['values']); } - public function isValid($value) - { + public function isValid($value) { // If the field is required it can't be empty if ($this->isRequired() && empty($value)) { Session::addMessageAfterRedirect( @@ -111,8 +102,7 @@ public function isValid($value) return true; } - public function isRequired() - { + public function isRequired() { return $this->fields['required']; } diff --git a/inc/fields.class.php b/inc/fields.class.php index c849e6a51..dbe27850c 100644 --- a/inc/fields.class.php +++ b/inc/fields.class.php @@ -7,15 +7,14 @@ class PluginFormcreatorFields * * @return Array field_type => File_path */ - public static function getTypes() - { + public static function getTypes() { $tab_field_types = array(); foreach (glob(dirname(__FILE__).'/fields/*field.class.php') as $class_file) { preg_match("#fields/(.+)field\.class.php$#", $class_file, $matches); $classname = 'PluginFormcreator' . ucfirst($matches[1]) . 'Field'; - if(class_exists($classname)) { + if (class_exists($classname)) { $tab_field_types[strtolower($matches[1])] = $class_file; } } @@ -28,8 +27,7 @@ public static function getTypes() * * @return Array field_type => Name */ - public static function getNames() - { + public static function getNames() { // Get field types and file path $tab_field_types = self::getTypes(); $plugin = new Plugin(); @@ -61,14 +59,13 @@ public static function getNames() * * @return String field_value */ - public static function getValue($field, $value) - { + public static function getValue($field, $value) { $class_file = dirname(__FILE__).'/fields/'.$field['fieldtype'].'-field.class.php'; - if(is_file($class_file)) { + if (is_file($class_file)) { include_once ($class_file); $classname = 'PluginFormcreator'.ucfirst($field['fieldtype']).'Field'; - if(class_exists($classname)) { + if (class_exists($classname)) { $obj = new $classname($field, $value); return $obj->getAnswer(); } @@ -77,8 +74,7 @@ public static function getValue($field, $value) } - public static function printAllTabFieldsForJS() - { + public static function printAllTabFieldsForJS() { $tabFieldsForJS = ''; // Get field types and file path $tab_field_types = self::getTypes(); @@ -87,19 +83,18 @@ public static function printAllTabFieldsForJS() foreach ($tab_field_types as $field_type => $class_file) { $classname = 'PluginFormcreator' . ucfirst($field_type) . 'Field'; - if(method_exists($classname, 'getJSFields')) { + if (method_exists($classname, 'getJSFields')) { $tabFieldsForJS .= PHP_EOL.' '.$classname::getJSFields(); } } return $tabFieldsForJS; } - public static function showField($field, $datas = null, $edit = true) - { + public static function showField($field, $datas = null, $edit = true) { // Get field types and file path $tab_field_types = self::getTypes(); - if(array_key_exists($field['fieldtype'], $tab_field_types)) { + if (array_key_exists($field['fieldtype'], $tab_field_types)) { $fieldClass = 'PluginFormcreator'.ucfirst($field['fieldtype']).'Field'; $plugin = new Plugin(); @@ -119,8 +114,7 @@ public static function showField($field, $datas = null, $edit = true) * @param Array $values Array of current fields values (id => value) * @return boolean Should be shown or not */ - public static function isVisible($id, $values) - { + public static function isVisible($id, $values) { global $DB; /** @@ -197,7 +191,7 @@ public static function isVisible($id, $values) } if (is_array($values[$condition['field']])) { $value = !in_array($condition['value'], $values[$condition['field']]); - } elseif ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { + } else if ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { $value = !in_array($condition['value'], $decodedConditionField); } else { $value = $condition['value'] != $values[$condition['field']]; @@ -216,7 +210,7 @@ public static function isVisible($id, $values) } if (is_array($values[$condition['field']])) { $value = in_array($condition['value'], $values[$condition['field']]); - } elseif ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { + } else if ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { $value = in_array($condition['value'], $decodedConditionField); } else { $value = $condition['value'] == $values[$condition['field']]; @@ -233,7 +227,7 @@ public static function isVisible($id, $values) if (is_array($values[$condition['field']])) { eval('$value = "'.$condition['value'].'" '.$condition['operator'] .' Array('.implode(',', $values[$condition['field']]).');'); - } elseif ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { + } else if ($decodedConditionField !== null && $decodedConditionField != $values[$condition['field']]) { eval('$value = "'.$condition['value'].'" '.$condition['operator'] .' Array(' .implode(',', $decodedConditionField).');'); } else { @@ -287,7 +281,7 @@ public static function isVisible($id, $values) if ($question->fields['show_rule'] == 'hidden') { return $return; - // else show it if condition is false + // else show it if condition is false } else { return !$return; } diff --git a/inc/fields/actorfield.class.php b/inc/fields/actorfield.class.php index 5613c6059..c67987542 100644 --- a/inc/fields/actorfield.class.php +++ b/inc/fields/actorfield.class.php @@ -3,13 +3,11 @@ class PluginFormcreatorActorField extends PluginFormcreatorField { const IS_MULTIPLE = true; - public static function getName() - { + public static function getName() { return _n('Actor', 'Actors', 1, 'formcreator'); } - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { global $CFG_GLPI; $readonly = $canEdit ? 'false' : 'true'; @@ -96,7 +94,7 @@ public function serializeValue($value) { public function deserializeValue($value) { $deserialized = array(); - $serialized = explode(',',$value); + $serialized = explode(',', $value); if ($serialized !== null) { foreach ($serialized as $item) { $item = trim($item); @@ -123,7 +121,7 @@ protected function sanitizeValue($value) { $unknownUsers = array(); $knownUsers = array(); $idToCheck = array(); - foreach($answerValue as $item) { + foreach ($answerValue as $item) { $item = trim($item); if (filter_var($item, FILTER_VALIDATE_EMAIL) !== false) { $unknownUsers[$item] = $item; @@ -139,8 +137,7 @@ protected function sanitizeValue($value) { return $knownUsers + $unknownUsers; } - public function isValid($value) - { + public function isValid($value) { $sanitized = $this->sanitizeValue($value); // Ignore empty values @@ -157,8 +154,7 @@ public function isValid($value) return count($sanitized) == count($value); } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { $value = $this->sanitizeValue($this->fields['answer']); } else { @@ -168,8 +164,7 @@ public function getValue() return implode(',', $value); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -184,8 +179,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['actor'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/checkboxesfield.class.php b/inc/fields/checkboxesfield.class.php index e2b6f8bcf..0aafa9aaa 100644 --- a/inc/fields/checkboxesfield.class.php +++ b/inc/fields/checkboxesfield.class.php @@ -2,15 +2,14 @@ class PluginFormcreatorCheckboxesField extends PluginFormcreatorField { const IS_MULTIPLE = true; - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { if ($canEdit) { echo '' . PHP_EOL; $values = array(); $values = $this->getAvailableValues(); - if(!empty($values)) { + if (!empty($values)) { echo '
    '; $i = 0; foreach ($values as $value) { @@ -52,7 +51,7 @@ public function displayField($canEdit = true) if (!empty($answer)) { if (is_array($answer)) { echo implode("
    ", $answer); - } elseif (is_array(json_decode($answer))) { + } else if (is_array(json_decode($answer))) { echo implode("
    ", json_decode($answer)); } else { echo $this->getAnswer(); @@ -63,10 +62,11 @@ public function displayField($canEdit = true) } } - public function isValid($value) - { + public function isValid($value) { $value = json_decode($value); - if (is_null($value)) $value = array(); + if (is_null($value)) { + $value = array(); + } // If the field is required it can't be empty if ($this->isRequired() && empty($value)) { @@ -76,31 +76,29 @@ public function isValid($value) ERROR); return false; - // Min range not set or number of selected item lower than min - } elseif (!empty($this->fields['range_min']) && (count($value) < $this->fields['range_min'])) { + // Min range not set or number of selected item lower than min + } else if (!empty($this->fields['range_min']) && (count($value) < $this->fields['range_min'])) { $message = sprintf(__('The following question needs of at least %d answers', 'formcreator'), $this->fields['range_min']); Session::addMessageAfterRedirect($message . ' ' . $this->getLabel(), false, ERROR); return false; - // Max range not set or number of selected item greater than max - } elseif (!empty($this->fields['range_max']) && (count($value) > $this->fields['range_max'])) { - $message = sprintf(__('The following question does not accept more than %d answers', 'formcreator'), $this->fields['range_max']); - Session::addMessageAfterRedirect($message . ' ' . $this->getLabel(), false, ERROR); - return false; + // Max range not set or number of selected item greater than max + } else if (!empty($this->fields['range_max']) && (count($value) > $this->fields['range_max'])) { + $message = sprintf(__('The following question does not accept more than %d answers', 'formcreator'), $this->fields['range_max']); + Session::addMessageAfterRedirect($message . ' ' . $this->getLabel(), false, ERROR); + return false; - // All is OK + // All is OK } else { - return true; + return true; } - } + } - public static function getName() - { + public static function getName() { return __('Checkboxes', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -115,8 +113,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['checkboxes'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/datefield.class.php b/inc/fields/datefield.class.php index 69d5afa45..a32a50651 100644 --- a/inc/fields/datefield.class.php +++ b/inc/fields/datefield.class.php @@ -1,8 +1,7 @@ fields['required']) ? ' required' : ''; $rand = mt_rand(); @@ -27,8 +26,7 @@ public function displayField($canEdit = true) } } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { $date = $this->fields['answer']; } else { @@ -37,13 +35,11 @@ public function getValue() return (strtotime($date) != '') ? $date : null; } - public function getAnswer() - { + public function getAnswer() { return Html::convDate($this->getValue()); } - public function isValid($value) - { + public function isValid($value) { // If the field is required it can't be empty if ($this->isRequired() && (strtotime($value) == '')) { Session::addMessageAfterRedirect( @@ -57,13 +53,11 @@ public function isValid($value) return true; } - public static function getName() - { + public static function getName() { return __('Date'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -78,8 +72,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['date'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/datetimefield.class.php b/inc/fields/datetimefield.class.php index c2eb21abf..6392fb0ed 100644 --- a/inc/fields/datetimefield.class.php +++ b/inc/fields/datetimefield.class.php @@ -1,8 +1,7 @@ fields['required']) ? ' required' : ''; $rand = mt_rand(); @@ -27,8 +26,7 @@ public function displayField($canEdit = true) } } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { $date = $this->fields['answer']; } else { @@ -37,13 +35,11 @@ public function getValue() return (strtotime($date) != '') ? $date : null; } - public function getAnswer() - { + public function getAnswer() { return Html::convDateTime($this->getValue()); } - public function isValid($value) - { + public function isValid($value) { // If the field is required it can't be empty if ($this->isRequired() && (strtotime($value) == '')) { Session::addMessageAfterRedirect( @@ -57,13 +53,11 @@ public function isValid($value) return true; } - public static function getName() - { + public static function getName() { return __('Datetime', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -78,8 +72,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['datetime'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/descriptionfield.class.php b/inc/fields/descriptionfield.class.php index 7c98d6d93..0efedef3e 100644 --- a/inc/fields/descriptionfield.class.php +++ b/inc/fields/descriptionfield.class.php @@ -1,26 +1,22 @@ fields['id'] . '">'; echo nl2br(html_entity_decode($this->fields['description'])); echo '
    ' . PHP_EOL; echo ''; } - public function isValid($value) - { + public function isValid($value) { return true; } - public static function getName() - { + public static function getName() { return __('Description'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 0, 'default_values' => 0, @@ -35,8 +31,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['description'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/dropdownfield.class.php b/inc/fields/dropdownfield.class.php index 04380f6df..6b23710ad 100644 --- a/inc/fields/dropdownfield.class.php +++ b/inc/fields/dropdownfield.class.php @@ -1,11 +1,10 @@ '; - if(!empty($this->fields['values'])) { + if (!empty($this->fields['values'])) { $rand = mt_rand(); $required = $this->fields['required'] ? ' required' : ''; $itemtype = $this->fields['values']; @@ -34,8 +33,7 @@ public function displayField($canEdit = true) } } - public function getAnswer() - { + public function getAnswer() { $value = $this->getValue(); if ($this->fields['values'] == 'User') { return getUserName($value); @@ -44,13 +42,11 @@ public function getAnswer() } } - public static function getName() - { + public static function getName() { return _n('Dropdown', 'Dropdowns', 1); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -65,8 +61,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['dropdown'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/emailfield.class.php b/inc/fields/emailfield.class.php index 5c2cf0ebc..99c1976da 100644 --- a/inc/fields/emailfield.class.php +++ b/inc/fields/emailfield.class.php @@ -1,8 +1,7 @@ fields['required'] ? ' required' : ''; @@ -16,12 +15,13 @@ public function displayField($canEdit = true) } } - public function isValid($value) - { - if (!parent::isValid($value)) return false; + public function isValid($value) { + if (!parent::isValid($value)) { + return false; + } // Specific format not set or well match - if(!empty($value) && !filter_var($value, FILTER_VALIDATE_EMAIL)) { + if (!empty($value) && !filter_var($value, FILTER_VALIDATE_EMAIL)) { Session::addMessageAfterRedirect(__('This is not a valid e-mail:', 'formcreator') . ' ' . $this->getLabel(), false, ERROR); return false; } @@ -30,13 +30,11 @@ public function isValid($value) return true; } - public static function getName() - { + public static function getName() { return _n('Email', 'Emails', 1); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -51,8 +49,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['email'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/filefield.class.php b/inc/fields/filefield.class.php index 98388a144..cfeda3aa3 100644 --- a/inc/fields/filefield.class.php +++ b/inc/fields/filefield.class.php @@ -1,8 +1,7 @@ isRequired() ? ' required' : ''; @@ -15,14 +14,13 @@ public function displayField($canEdit = true) } else { $doc = new Document(); $answer = $this->getAnswer(); - if($doc->getFromDB($answer)) { + if ($doc->getFromDB($answer)) { echo $doc->getDownloadLink(); } } } - public function isValid($value) - { + public function isValid($value) { // If the field is required it can't be empty if ($this->isRequired() && (empty($_FILES['formcreator_field_' . $this->fields['id']]['tmp_name']) || !is_file($_FILES['formcreator_field_' . $this->fields['id']]['tmp_name']))) { @@ -34,13 +32,11 @@ public function isValid($value) return true; } - public static function getName() - { + public static function getName() { return __('File'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -55,8 +51,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['file'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/floatfield.class.php b/inc/fields/floatfield.class.php index 0ae9639af..eee6a08ad 100644 --- a/inc/fields/floatfield.class.php +++ b/inc/fields/floatfield.class.php @@ -1,45 +1,44 @@ fields['name'], false, ERROR); return false; - // Min range not set or text length longer than min length - } elseif (!empty($this->fields['range_min']) && ($value < $this->fields['range_min'])) { + // Min range not set or text length longer than min length + } else if (!empty($this->fields['range_min']) && ($value < $this->fields['range_min'])) { $message = sprintf(__('The following number must be greater than %d:', 'formcreator'), $this->fields['range_min']); Session::addMessageAfterRedirect($message . ' ' . $this->fields['name'], false, ERROR); return false; - // Max range not set or text length shorter than max length - } elseif (!empty($this->fields['range_max']) && ($value > $this->fields['range_max'])) { + // Max range not set or text length shorter than max length + } else if (!empty($this->fields['range_max']) && ($value > $this->fields['range_max'])) { $message = sprintf(__('The following number must be lower than %d:', 'formcreator'), $this->fields['range_max']); Session::addMessageAfterRedirect($message . ' ' . $this->fields['name'], false, ERROR); return false; - // Specific format not set or well match - } elseif (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { + // Specific format not set or well match + } else if (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { Session::addMessageAfterRedirect(__('Specific format does not match:', 'formcreator') . ' ' . $this->fields['name'], false, ERROR); return false; - // All is OK + // All is OK } else { return true; } } - public static function getName() - { + public static function getName() { return __('Float', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -54,8 +53,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['float'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/glpiselectfield.class.php b/inc/fields/glpiselectfield.class.php index c0dcbaa63..357261e36 100644 --- a/inc/fields/glpiselectfield.class.php +++ b/inc/fields/glpiselectfield.class.php @@ -1,13 +1,11 @@ 1, 'default_values' => 0, @@ -22,8 +20,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['glpiselect'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/hiddenfield.class.php b/inc/fields/hiddenfield.class.php index 17f80f095..1db1b6b1a 100644 --- a/inc/fields/hiddenfield.class.php +++ b/inc/fields/hiddenfield.class.php @@ -1,26 +1,22 @@ fields['id'] . '" id="formcreator_field_' . $this->fields['id'] . '" value="' . $this->fields['default_values'] . '" />' . PHP_EOL; } - public function isValid($value) - { + public function isValid($value) { return true; } - public static function getName() - { + public static function getName() { return _n('Hidden field', 'Hidden fields', 1); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 0, 'default_values' => 1, @@ -35,8 +31,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['hidden'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/integerfield.class.php b/inc/fields/integerfield.class.php index b28fef865..344d09ebe 100644 --- a/inc/fields/integerfield.class.php +++ b/inc/fields/integerfield.class.php @@ -1,45 +1,44 @@ fields['name'], false, ERROR); return false; - // Min range not set or text length longer than min length - } elseif (!empty($this->fields['range_min']) && ($value < $this->fields['range_min'])) { + // Min range not set or text length longer than min length + } else if (!empty($this->fields['range_min']) && ($value < $this->fields['range_min'])) { $message = sprintf(__('The following number must be greater than %d:', 'formcreator'), $this->fields['range_min']); Session::addMessageAfterRedirect($message . ' ' . $this->fields['name'], false, ERROR); return false; - // Max range not set or text length shorter than max length - } elseif (!empty($this->fields['range_max']) && ($value > $this->fields['range_max'])) { + // Max range not set or text length shorter than max length + } else if (!empty($this->fields['range_max']) && ($value > $this->fields['range_max'])) { $message = sprintf(__('The following number must be lower than %d:', 'formcreator'), $this->fields['range_max']); Session::addMessageAfterRedirect($message . ' ' . $this->fields['name'], false, ERROR); return false; - // Specific format not set or well match - } elseif (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { + // Specific format not set or well match + } else if (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { Session::addMessageAfterRedirect(__('Specific format does not match:', 'formcreator') . ' ' . $this->fields['name'], false, ERROR); return false; - // All is OK + // All is OK } else { return true; } } - public static function getName() - { + public static function getName() { return __('Integer', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -54,8 +53,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['integer'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/ipfield.class.php b/inc/fields/ipfield.class.php index b08000b9f..8e08960e0 100644 --- a/inc/fields/ipfield.class.php +++ b/inc/fields/ipfield.class.php @@ -1,26 +1,22 @@ fields['id'] . '" id="formcreator_field_' . $this->fields['id'] . '" value="' . $_SERVER["REMOTE_ADDR"] . '" />' . PHP_EOL; } - public function isValid($value) - { + public function isValid($value) { return true; } - public static function getName() - { + public static function getName() { return _n('IP address', 'Adresses IP', 1); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 0, 'default_values' => 0, @@ -35,8 +31,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['ip'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/ldapselectfield.class.php b/inc/fields/ldapselectfield.class.php index a3191fbec..d1c4e1269 100644 --- a/inc/fields/ldapselectfield.class.php +++ b/inc/fields/ldapselectfield.class.php @@ -1,8 +1,7 @@ fields['values'])) { $ldap_values = json_decode(plugin_formcreator_decode($this->fields['values'])); $ldap_dropdown = new RuleRightParameter(); @@ -18,7 +17,9 @@ public function getAvailableValues() if (!function_exists('warning_handler')) { function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) { - if (0 === error_reporting()) return false; + if (0 === error_reporting()) { + return false; + } throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } } @@ -40,8 +41,8 @@ function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) $entries = ldap_get_entries($ds, $result); array_shift($entries); - foreach($entries as $id => $attr) { - if(isset($attr[$attribute[0]]) + foreach ($entries as $id => $attr) { + if (isset($attr[$attribute[0]]) && !in_array($attr[$attribute[0]][0], $tab_values)) { $tab_values[$id] = $attr[$attribute[0]][0]; } @@ -51,11 +52,11 @@ function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) ldap_control_paged_result_response($ds, $result, $cookie); } - } while($cookie !== null && $cookie != ''); + } while ($cookie !== null && $cookie != ''); asort($tab_values); return $tab_values; - } catch(Exception $e) { + } catch (Exception $e) { return array(); } @@ -65,13 +66,11 @@ function warning_handler($errno, $errstr, $errfile, $errline, array $errcontext) } } - public static function getName() - { + public static function getName() { return __('LDAP Select', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 0, @@ -86,8 +85,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['ldapselect'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/multiselectfield.class.php b/inc/fields/multiselectfield.class.php index 760ede2a5..8582026e3 100644 --- a/inc/fields/multiselectfield.class.php +++ b/inc/fields/multiselectfield.class.php @@ -3,24 +3,25 @@ class PluginFormcreatorMultiSelectField extends PluginFormcreatorSelectField { const IS_MULTIPLE = true; - public function isValid($value) - { + public function isValid($value) { $value = json_decode($value); - if (is_null($value)) $value = array(); + if (is_null($value)) { + $value = array(); + } // If the field is required it can't be empty if ($this->isRequired() && empty($value)) { Session::addMessageAfterRedirect(__('A required field is empty:', 'formcreator') . ' ' . $this->getLabel(), false, ERROR); return false; - // Min range not set or number of selected item lower than min - } elseif (!empty($this->fields['range_min']) && (count($value) < $this->fields['range_min'])) { + // Min range not set or number of selected item lower than min + } else if (!empty($this->fields['range_min']) && (count($value) < $this->fields['range_min'])) { $message = sprintf(__('The following question needs of at least %d answers', 'formcreator'), $this->fields['range_min']); Session::addMessageAfterRedirect($message . ' ' . $this->getLabel(), false, ERROR); return false; - // Max range not set or number of selected item greater than max - } elseif (!empty($this->fields['range_max']) && (count($value) > $this->fields['range_max'])) { + // Max range not set or number of selected item greater than max + } else if (!empty($this->fields['range_max']) && (count($value) > $this->fields['range_max'])) { $message = sprintf(__('The following question does not accept more than %d answers', 'formcreator'), $this->fields['range_max']); Session::addMessageAfterRedirect($message . ' ' . $this->getLabel(), false, ERROR); return false; @@ -30,8 +31,7 @@ public function isValid($value) return true; } - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { if ($canEdit) { parent::displayField($canEdit); } else { @@ -42,35 +42,36 @@ public function displayField($canEdit = true) } } - public function getAnswer() - { + public function getAnswer() { $return = array(); $values = $this->getAvailableValues(); $value = $this->getValue(); - if (empty($value)) return ''; + if (empty($value)) { + return ''; + } if (is_array($value)) { $tab_values = $value; - } elseif (is_array(json_decode($value))) { + } else if (is_array(json_decode($value))) { $tab_values = json_decode($value); } else { $tab_values = array($value); } foreach ($tab_values as $value) { - if (in_array($value, $values)) $return[] = $value; + if (in_array($value, $values)) { + $return[] = $value; + } } return json_encode($return); } - public static function getName() - { + public static function getName() { return __('Multiselect', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -85,8 +86,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['multiselect'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/radiosfield.class.php b/inc/fields/radiosfield.class.php index 63b9beb66..05bdd76ae 100644 --- a/inc/fields/radiosfield.class.php +++ b/inc/fields/radiosfield.class.php @@ -1,14 +1,13 @@ fields['id'] . '" value="" />' . PHP_EOL; $values = $this->getAvailableValues(); - if(!empty($values)) { + if (!empty($values)) { echo '
    '; $i = 0; foreach ($values as $value) { @@ -43,13 +42,11 @@ public function displayField($canEdit = true) } } - public static function getName() - { + public static function getName() { return __('Radios', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -64,10 +61,9 @@ public static function getPrefs() ); } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { - if(!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { + if (!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { return json_decode($this->fields['answer']); } return $this->fields['answer']; @@ -79,8 +75,7 @@ public function getValue() } } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['radios'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/selectfield.class.php b/inc/fields/selectfield.class.php index 2360572c3..21ec37665 100644 --- a/inc/fields/selectfield.class.php +++ b/inc/fields/selectfield.class.php @@ -1,8 +1,7 @@ getAvailableValues(); echo '
    '; - if(!empty($this->fields['values'])) { + if (!empty($this->fields['values'])) { foreach ($values as $value) { - if ((trim($value) != '')) $tab_values[$value] = $value; + if ((trim($value) != '')) { + $tab_values[$value] = $value; + } } - if($this->fields['show_empty']) $tab_values = array('' => '-----') + $tab_values; + if ($this->fields['show_empty']) { + $tab_values = array('' => '-----') + $tab_values; + } Dropdown::showFromArray('formcreator_field_' . $this->fields['id'], $tab_values, array( 'value' => static::IS_MULTIPLE ? '' : $this->getValue(), 'values' => static::IS_MULTIPLE ? $this->getValue() : array(), @@ -39,20 +42,17 @@ public function displayField($canEdit = true) } } - public function getAnswer() - { + public function getAnswer() { $values = $this->getAvailableValues(); $value = $this->getValue(); return in_array(Html::entities_deep($value), $values) ? $value : $this->fields['default_values']; } - public static function getName() - { + public static function getName() { return __('Select', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -67,8 +67,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['select'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/tagfield.class.php b/inc/fields/tagfield.class.php index b9509e898..779db2861 100644 --- a/inc/fields/tagfield.class.php +++ b/inc/fields/tagfield.class.php @@ -3,8 +3,7 @@ class PluginFormcreatorTagField extends PluginFormcreatorDropdownField { const IS_MULTIPLE = true; - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { if ($canEdit) { $rand = mt_rand(); $required = $this->fields['required'] ? ' required' : ''; @@ -16,7 +15,7 @@ public function displayField($canEdit = true) $obj->getEmpty(); $where = "(`type_menu` LIKE '%\"Ticket\"%' OR `type_menu` LIKE '0')"; - $where .= getEntitiesRestrictRequest('AND', getTableForItemType('PluginTagTag'),'','',true); + $where .= getEntitiesRestrictRequest('AND', getTableForItemType('PluginTagTag'), '', '', true); $result = $obj->find($where, "name"); foreach ($result AS $id => $datas) { @@ -45,8 +44,7 @@ public function displayField($canEdit = true) } } - public function getAnswer() - { + public function getAnswer() { $return = array(); $values = $this->getValue(); @@ -59,13 +57,11 @@ public function getAnswer() return json_encode($return); } - public static function getName() - { + public static function getName() { return _n('Tag', 'Tags', 2, 'tag'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 0, 'default_values' => 0, @@ -80,8 +76,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['tag'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/textareafield.class.php b/inc/fields/textareafield.class.php index 6f33f3456..94fa1aae5 100644 --- a/inc/fields/textareafield.class.php +++ b/inc/fields/textareafield.class.php @@ -1,8 +1,7 @@ fields['range_min']) && strlen($value) < $this->fields['range_min']) { + if (!empty($this->fields['range_min']) && strlen($value) < $this->fields['range_min']) { Session::addMessageAfterRedirect(sprintf(__('The text is too short (minimum %d characters):', 'formcreator'), $this->fields['range_min']).' '.$this->fields['name'], false, ERROR); return false; - // Max range not set or text length shorter than max length - } elseif(!empty($this->fields['range_max']) && strlen($value) > $this->fields['range_max']) { + // Max range not set or text length shorter than max length + } else if (!empty($this->fields['range_max']) && strlen($value) > $this->fields['range_max']) { Session::addMessageAfterRedirect(sprintf(__('The text is too long (maximum %d characters):', 'formcreator'), $this->fields['range_max']).' '.$this->fields['name'], false, ERROR); return false; - // Specific format not set or well match - } elseif(!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { + // Specific format not set or well match + } else if (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { Session::addMessageAfterRedirect(__('Specific format does not match:', 'formcreator').' '.$this->fields['name'], false, ERROR); return false; } @@ -50,13 +50,11 @@ public function isValid($value) return true; } - public static function getName() - { + public static function getName() { return __('Textarea', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -71,8 +69,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['textarea'] = 'showFields(".implode(', ', $prefs).");';"; } diff --git a/inc/fields/textfield.class.php b/inc/fields/textfield.class.php index 3eff3fcbc..d409c2900 100644 --- a/inc/fields/textfield.class.php +++ b/inc/fields/textfield.class.php @@ -1,39 +1,38 @@ fields['range_min']) && strlen($value) < $this->fields['range_min']) { + if (!empty($this->fields['range_min']) && strlen($value) < $this->fields['range_min']) { Session::addMessageAfterRedirect(sprintf(__('The text is too short (minimum %d characters):', 'formcreator'), $this->fields['range_min']) . ' ' . $this->fields['name'], false, ERROR); return false; - // Max range not set or text length shorter than max length - } elseif(!empty($this->fields['range_max']) && strlen($value) > $this->fields['range_max']) { + // Max range not set or text length shorter than max length + } else if (!empty($this->fields['range_max']) && strlen($value) > $this->fields['range_max']) { Session::addMessageAfterRedirect(sprintf(__('The text is too long (maximum %d characters):', 'formcreator'), $this->fields['range_max']) . ' ' . $this->fields['name'], false, ERROR); return false; - // Specific format not set or well match - } elseif(!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { - Session::addMessageAfterRedirect(__('Specific format does not match:', 'formcreator') . ' ' . $this->fields['name'], false, ERROR); - return false; - } + // Specific format not set or well match + } else if (!empty($this->fields['regex']) && !preg_match($this->fields['regex'], $value)) { + Session::addMessageAfterRedirect(__('Specific format does not match:', 'formcreator') . ' ' . $this->fields['name'], false, ERROR); + return false; + } - // All is OK - return true; - } + // All is OK + return true; + } - public static function getName() - { + public static function getName() { return __('Text', 'formcreator'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -48,8 +47,7 @@ public static function getPrefs() ); } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['text'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/fields/urgencyfield.class.php b/inc/fields/urgencyfield.class.php index 390a59ea0..e51985f8f 100644 --- a/inc/fields/urgencyfield.class.php +++ b/inc/fields/urgencyfield.class.php @@ -2,8 +2,7 @@ class PluginFormcreatorUrgencyField extends PluginFormcreatorField { - public function displayField($canEdit = true) - { + public function displayField($canEdit = true) { if ($canEdit) { echo '
    '; $rand = mt_rand(); @@ -26,20 +25,17 @@ public function displayField($canEdit = true) } } - public function getAnswer() - { + public function getAnswer() { $values = $this->getAvailableValues(); $value = $this->getValue(); return in_array($value, $values) ? $value : $this->fields['default_values']; } - public static function getName() - { + public static function getName() { return __('Urgency'); } - public static function getPrefs() - { + public static function getPrefs() { return array( 'required' => 1, 'default_values' => 1, @@ -54,8 +50,7 @@ public static function getPrefs() ); } - public function getAvailableValues() - { + public function getAvailableValues() { return array( _x('urgency', 'Very high'), _x('urgency', 'High'), @@ -65,10 +60,9 @@ public function getAvailableValues() ); } - public function getValue() - { + public function getValue() { if (isset($this->fields['answer'])) { - if(!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { + if (!is_array($this->fields['answer']) && is_array(json_decode($this->fields['answer']))) { return json_decode($this->fields['answer']); } return $this->fields['answer']; @@ -77,8 +71,7 @@ public function getValue() } } - public static function getJSFields() - { + public static function getJSFields() { $prefs = self::getPrefs(); return "tab_fields_fields['urgency'] = 'showFields(" . implode(', ', $prefs) . ");';"; } diff --git a/inc/form.class.php b/inc/form.class.php index 7d0b5f486..ec5747c53 100644 --- a/inc/form.class.php +++ b/inc/form.class.php @@ -14,8 +14,7 @@ class PluginFormcreatorForm extends CommonDBTM * * @return boolean True if he can create and modify requests */ - public static function canCreate() - { + public static function canCreate() { return Session::haveRight("entity", UPDATE); } @@ -24,8 +23,7 @@ public static function canCreate() * * @return boolean True if he can read requests */ - public static function canView() - { + public static function canView() { return Session::haveRight("entity", UPDATE); } @@ -34,8 +32,7 @@ public static function canView() * * @return boolean True if he can read requests */ - public static function canDelete() - { + public static function canDelete() { return Session::haveRight("entity", UPDATE); } @@ -45,8 +42,7 @@ public static function canDelete() * @param number $nb Number of item(s) * @return string Itemtype name */ - public static function getTypeName($nb = 0) - { + public static function getTypeName($nb = 0) { return _n('Form', 'Forms', $nb, 'formcreator'); } @@ -71,8 +67,7 @@ static function getMenuContent() { * * @return Array Array of fields to show in search engine and options for each fields */ - public function getSearchOptions() - { + public function getSearchOptions() { $tab = array( '2' => array( 'table' => self::getTable(), @@ -164,8 +159,7 @@ public function getSearchOptions() * * @return String Html string to be displayed for the form field **/ - public static function getSpecificValueToSelect($field, $name='', $values='', array $options=array()) - { + public static function getSpecificValueToSelect($field, $name='', $values='', array $options=array()) { if (!is_array($values)) { $values = array($field => $values); @@ -216,15 +210,14 @@ public static function getSpecificValueToSelect($field, $name='', $values='', ar * @param Array $options Options (optional) * @return Mixed Value to be displayed */ - public static function getSpecificValueToDisplay($field, $values, array $options=array()) - { + public static function getSpecificValueToDisplay($field, $values, array $options=array()) { global $CFG_GLPI; if (!is_array($values)) { $values = array($field => $values); } switch ($field) { case 'is_active': - if($values[$field] == 0) { + if ($values[$field] == 0) { $output = '
    ' . __('Inactive') . 'initForm($ID, $options); @@ -337,7 +329,7 @@ public function showForm($ID, $options=array()) $formId = $this->getID(); $form_validator = new PluginFormcreatorForm_Validator(); $rows = $form_validator->find("`plugin_formcreator_forms_id` = '$formId'"); - foreach($rows as $id => $row) { + foreach ($rows as $id => $row) { $validators[] = $row['items_id']; } @@ -371,7 +363,7 @@ public function showForm($ID, $options=array()) echo '
    '; echo ''; @@ -396,9 +390,11 @@ public function showForm($ID, $options=array()) AND gu.`users_id` IN (" . implode(',', $groups_users) . ") ORDER BY g.`completename`"; $result = $DB->query($query); - while($group = $DB->fetch_assoc($result)) { + while ($group = $DB->fetch_assoc($result)) { echo ''; } } @@ -441,8 +437,7 @@ function changeValidators(value) { * * @return String Name to be displayed */ - public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) - { + public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { switch ($item->getType()) { case "PluginFormcreatorConfig": $object = new self; @@ -468,10 +463,11 @@ public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) * * @return null Nothing, just display the list */ - public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) - { + public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { $uri = strrchr($_SERVER['HTTP_REFERER'], '/'); - if(strpos($uri, '?')) $uri = substr($uri, 0, strpos($uri, '?')); + if (strpos($uri, '?')) { + $uri = substr($uri, 0, strpos($uri, '?')); + } $uri = trim($uri, '/'); switch ($uri) { @@ -484,8 +480,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi } - public function defineTabs($options=array()) - { + public function defineTabs($options=array()) { $ong = array(); $this->addDefaultFormTab($ong); $this->addStandardTab('PluginFormcreatorQuestion', $ong, $options); @@ -526,7 +521,7 @@ public function showServiceCatalog() { $this->showWizard(true); echo '
    '; - echo '
    '; #formcreator_servicecatalogue + echo '
    '; // formcreator_servicecatalogue } public function showWizard($service_catalog = false) { @@ -815,11 +810,10 @@ protected function showMyLastForms() { * * @return Null Nothing, just display the form */ - public function displayUserForm(CommonGLPI $item) - { + public function displayUserForm(CommonGLPI $item) { global $CFG_GLPI, $DB; - if(isset($_SESSION['formcreator']['datas'])) { + if (isset($_SESSION['formcreator']['datas'])) { $datas = $_SESSION['formcreator']['datas']; unset($_SESSION['formcreator']['datas']); } else { @@ -883,18 +877,18 @@ class='formcreator_form form_horizontal' onsubmit='return validateForm(this);'>" LEFT JOIN `$table_form_validator` fv ON fv.`items_id` = g.`id` AND fv.itemtype = 'Group' WHERE fv.`plugin_formcreator_forms_id` = " . $this->getID(); $result = $DB->query($query); - while($validator = $DB->fetch_assoc($result)) { + while ($validator = $DB->fetch_assoc($result)) { $validators[$validator['id']] = $validator['completename']; } - // Users + // Users } else { $query = "SELECT u.`id`, u.`name`, u.`realname`, u.`firstname` FROM `glpi_users` u LEFT JOIN `$table_form_validator` fv ON fv.`items_id` = u.`id` AND fv.itemtype = 'User' WHERE fv.`plugin_formcreator_forms_id` = " . $this->getID(); $result = $DB->query($query); - while($validator = $DB->fetch_assoc($result)) { + while ($validator = $DB->fetch_assoc($result)) { $validators[$validator['id']] = formatUserName($validator['id'], $validator['name'], $validator['realname'], $validator['firstname']); } } @@ -925,8 +919,7 @@ class='formcreator_form form_horizontal' onsubmit='return validateForm(this);'>" * * @return the modified $input array **/ - public function prepareInputForAdd($input) - { + public function prepareInputForAdd($input) { // Decode (if already encoded) and encode strings to avoid problems with quotes foreach ($input as $key => $value) { if (!is_array($value)) { @@ -942,7 +935,7 @@ public function prepareInputForAdd($input) // Control fields values : // - name is required - if(isset($input['name'])) { + if (isset($input['name'])) { if (empty($input['name'])) { Session::addMessageAfterRedirect(__('The name cannot be empty!', 'formcreator'), false, ERROR); return array(); @@ -964,7 +957,6 @@ public function prepareInputForAdd($input) $input['requesttype'] = $requestType->getID(); } - return $input; } @@ -973,8 +965,7 @@ public function prepareInputForAdd($input) * * @return nothing **/ - public function post_addItem() - { + public function post_addItem() { $this->updateValidators(); return true; } @@ -986,8 +977,7 @@ public function post_addItem() * * @return the modified $input array **/ - public function prepareInputForUpdate($input) - { + public function prepareInputForUpdate($input) { if (isset($input['access_rights']) || isset($_POST['massiveaction']) || isset($input['usage_count'])) { @@ -1021,8 +1011,7 @@ public function post_purgeItem() { * * @return void */ - private function updateValidators() - { + private function updateValidators() { global $DB; if (!isset($this->input['validation_required'])) { @@ -1058,15 +1047,16 @@ private function updateValidators() } } - public function saveForm() - { + public function saveForm() { $valid = true; $tab_section = array(); $datas = array(); $sections = new PluginFormcreatorSection(); $found_sections = $sections->find('`plugin_formcreator_forms_id` = ' . $this->getID()); - foreach ($found_sections as $id => $fields) $tab_section[] = $id; + foreach ($found_sections as $id => $fields) { + $tab_section[] = $id; + } if (count($tab_section) < 1) { $found_questions = array(); @@ -1110,20 +1100,20 @@ public function saveForm() // Check required_validator if ($this->fields['validation_required'] && empty($datas['formcreator_validator'])) { - Session::addMessageAfterRedirect(__('You must select validator !','formcreator'), false, ERROR); + Session::addMessageAfterRedirect(__('You must select validator !', 'formcreator'), false, ERROR); $valid = false; } // If not valid back to form if (!$valid) { - foreach($datas as $key => $value) { + foreach ($datas as $key => $value) { if (is_array($value)) { - foreach($value as $key2 => $value2) { + foreach ($value as $key2 => $value2) { $datas[$key][$key2] = plugin_formcreator_encode($value2); } - } elseif(is_array(json_decode($value))) { + } else if (is_array(json_decode($value))) { $value = json_decode($value); - foreach($value as $key2 => $value2) { + foreach ($value as $key2 => $value2) { $value[$key2] = plugin_formcreator_encode($value2); } $datas[$key] = json_encode($value); @@ -1133,7 +1123,7 @@ public function saveForm() } $_SESSION['formcreator']['datas'] = $datas; - // Save form + // Save form } else { $formanswer = new PluginFormcreatorForm_Answer(); $formanswer->saveAnswers($datas); @@ -1170,8 +1160,7 @@ public function getByQuestionId($questionId) { * * @return Boolean true if success, false toherwize. */ - public function duplicate() - { + public function duplicate() { global $DB; $section = new PluginFormcreatorSection(); @@ -1195,11 +1184,13 @@ public function duplicate() $old_form_id = $this->getID(); $new_form_id = $this->add($form_datas); - if ($new_form_id === false) return false; + if ($new_form_id === false) { + return false; + } // Form profiles $rows = $form_profile->find("`plugin_formcreator_forms_id` = '$old_form_id'"); - foreach($rows as $row) { + foreach ($rows as $row) { unset($row['id'], $row['uuid']); $row['plugin_formcreator_forms_id'] = $new_form_id; @@ -1210,7 +1201,7 @@ public function duplicate() // Form validators $rows = $form_validator->find("`plugin_formcreator_forms_id` = '$old_form_id'"); - foreach($rows as $row) { + foreach ($rows as $row) { unset($row['id'], $row['uuid']); $row['plugin_formcreator_forms_id'] = $new_form_id; @@ -1221,7 +1212,7 @@ public function duplicate() // Form sections $sectionRows = $form_section->find("`plugin_formcreator_forms_id` = '$old_form_id'"); - foreach($sectionRows as $sections_id => $sectionRow) { + foreach ($sectionRows as $sections_id => $sectionRow) { unset($sectionRow['id'], $sectionRow['uuid']); $sectionRow['plugin_formcreator_forms_id'] = $new_form_id; @@ -1231,7 +1222,7 @@ public function duplicate() // Form questions $questionRows = $section_question->find("`plugin_formcreator_sections_id` = '$sections_id'"); - foreach($questionRows as $questions_id => $questionRow) { + foreach ($questionRows as $questions_id => $questionRow) { unset($questionRow['id'], $questionRow['uuid']); $questionRow['plugin_formcreator_sections_id'] = $new_sections_id; @@ -1247,7 +1238,7 @@ public function duplicate() // Form questions conditions $questionIds = implode("', '", array_keys($tab_questions)); $rows = $question_condition->find("`plugin_formcreator_questions_id` IN ('$questionIds')"); - foreach($rows as $conditions_id => $row) { + foreach ($rows as $conditions_id => $row) { unset($row['id'], $row['uuid']); $row['show_field'] = $tab_questions[$row['show_field']]; @@ -1259,7 +1250,7 @@ public function duplicate() // Form targets $rows = $target->find("`plugin_formcreator_forms_id` = '$old_form_id'"); - foreach($rows as $targets_id => $target_values) { + foreach ($rows as $targets_id => $target_values) { unset($target_values['id'], $target_values['uuid']); $target_values['plugin_formcreator_forms_id'] = $new_form_id; @@ -1283,7 +1274,9 @@ public function duplicate() $new_target_ticket = new PluginFormcreatorTargetTicket(); $new_target_ticket->add($update_target_ticket); $new_target_ticket_id = $new_target_ticket->getID(); - if (!$new_target_ticket_id) return false; + if (!$new_target_ticket_id) { + return false; + } $target->update(array( 'id' => $target->getID(), @@ -1292,7 +1285,7 @@ public function duplicate() // Form target tickets actors $rows = $target_ticket_actor->find("`plugin_formcreator_targettickets_id` = '{$target_values['items_id']}'"); - foreach($rows as $actors_id => $row) { + foreach ($rows as $actors_id => $row) { unset($row['id'], $row['uuid']); $row['plugin_formcreator_targettickets_id'] = $new_target_ticket_id; @@ -1310,8 +1303,7 @@ public function duplicate() * * @return Boolean true if success, false otherwize. */ - public function transfer($entity) - { + public function transfer($entity) { global $DB; $query = "UPDATE `glpi_plugin_formcreator_forms` SET @@ -1332,9 +1324,9 @@ public static function showMassiveActionsSubForm(MassiveAction $ma) { Entity::dropdown(array( 'name' => 'entities_id', )); - echo '

    ' . Html::submit(_x('button','Post'), array('name' => 'massiveaction')); + echo '

    ' . Html::submit(_x('button', 'Post'), array('name' => 'massiveaction')); return true; - } + } return parent::showMassiveActionsSubForm($ma); } @@ -1345,8 +1337,7 @@ public static function showMassiveActionsSubForm(MassiveAction $ma) { * * @see CommonDBTM::processMassiveActionsForOneItemtype() **/ - static function processMassiveActionsForOneItemtype(MassiveAction $ma, CommonDBTM $item, array $ids) - { + static function processMassiveActionsForOneItemtype(MassiveAction $ma, CommonDBTM $item, array $ids) { global $DB; switch ($ma->getAction()) { @@ -1462,7 +1453,7 @@ function export($remove_uuid = false) { // get sections $form['_sections'] = []; $all_sections = $form_section->find("plugin_formcreator_forms_id = ".$this->getID()); - foreach($all_sections as $sections_id => $section) { + foreach ($all_sections as $sections_id => $section) { $form_section->getFromDB($sections_id); $form['_sections'][] = $form_section->export($remove_uuid); } @@ -1470,7 +1461,7 @@ function export($remove_uuid = false) { // get validators $form['_validators'] = []; $all_validators = $form_validator->find("plugin_formcreator_forms_id = ".$this->getID()); - foreach($all_validators as $validators_id => $validator) { + foreach ($all_validators as $validators_id => $validator) { $form_validator->getFromDB($validators_id); $form['_validators'][] = $form_validator->export($remove_uuid); } @@ -1478,7 +1469,7 @@ function export($remove_uuid = false) { // get targets $form['_targets'] = []; $all_target = $form_target->find("plugin_formcreator_forms_id = ".$this->getID()); - foreach($all_target as $targets_id => $target) { + foreach ($all_target as $targets_id => $target) { $form_target->getFromDB($targets_id); $form['_targets'][] = $form_target->export($remove_uuid); } @@ -1486,7 +1477,7 @@ function export($remove_uuid = false) { // get profiles $form['_profiles'] = []; $all_profiles = $form_profile->find("plugin_formcreator_forms_id = ".$this->getID()); - foreach($all_profiles as $profiles_id => $profile) { + foreach ($all_profiles as $profiles_id => $profile) { $form_profile->getFromDB($profiles_id); $form['_profiles'][] = $form_profile->export($remove_uuid); } @@ -1521,7 +1512,7 @@ public function showImportForm() { echo ""; echo ""; echo ""; - echo Html::submit(_x('button','Send'), array('name' => 'import_send')); + echo Html::submit(_x('button', 'Send'), array('name' => 'import_send')); echo ""; echo ""; echo ""; @@ -1537,7 +1528,7 @@ public function showImportForm() { */ public function importJson($params = array()) { // parse json file(s) - foreach($params['_json_file'] as $filename) { + foreach ($params['_json_file'] as $filename) { if (!$json = file_get_contents(GLPI_TMP_DIR."/".$filename)) { Session::addMessageAfterRedirect(__("Forms import impossible, the file is empty")); continue; @@ -1551,7 +1542,7 @@ public function importJson($params = array()) { continue; } - foreach($forms_toimport['forms'] as $form) { + foreach ($forms_toimport['forms'] as $form) { self::import($form); } @@ -1604,11 +1595,10 @@ public static function import($form = array()) { $forms_id = $form_obj->add($form); } - // import form's sections if ($forms_id && isset($form['_sections'])) { - foreach($form['_sections'] as $section) { + foreach ($form['_sections'] as $section) { PluginFormcreatorSection::import($forms_id, $section); } } @@ -1618,7 +1608,7 @@ public static function import($form = array()) { // import form's validators if ($forms_id && isset($form['_validators'])) { - foreach($form['_validators'] as $validator) { + foreach ($form['_validators'] as $validator) { PluginFormcreatorForm_Validator::import($forms_id, $validator); } } @@ -1626,7 +1616,7 @@ public static function import($form = array()) { // import form's targets if ($forms_id && isset($form['_targets'])) { - foreach($form['_targets'] as $target) { + foreach ($form['_targets'] as $target) { PluginFormcreatorTarget::import($forms_id, $target); } } @@ -1805,7 +1795,7 @@ static function getInterface() { return 'self-service'; } - } elseif(!empty($_SESSION['glpiactiveprofile'])) { + } else if (!empty($_SESSION['glpiactiveprofile'])) { return 'central'; } diff --git a/inc/form_answer.class.php b/inc/form_answer.class.php index 03cc4731f..b5ad9ce79 100644 --- a/inc/form_answer.class.php +++ b/inc/form_answer.class.php @@ -15,8 +15,7 @@ class PluginFormcreatorForm_Answer extends CommonDBChild * * @return boolean True if he can create and modify requests */ - public static function canCreate() - { + public static function canCreate() { return true; } @@ -25,8 +24,7 @@ public static function canCreate() * * @return boolean True if he can read requests */ - public static function canView() - { + public static function canView() { return true; } @@ -36,8 +34,7 @@ public static function canView() * @param number $nb Number of item(s) * @return string Itemtype name */ - public static function getTypeName($nb = 0) - { + public static function getTypeName($nb = 0) { return _n('Form answer', 'Form answers', $nb, 'formcreator'); } @@ -46,8 +43,7 @@ public static function getTypeName($nb = 0) * * @return Array Array of fields to show in search engine and options for each fields */ - public function getSearchOptions() - { + public function getSearchOptions() { $tab = []; $display_for_form = isset($_SESSION['formcreator']['form_search_answers']) @@ -108,7 +104,7 @@ public function getSearchOptions() $question = new PluginFormcreatorQuestion; $questions = $question->getQuestionsFromForm($_SESSION['formcreator']['form_search_answers']); - foreach($questions as $current_question) { + foreach ($questions as $current_question) { $questions_id = $question->getID(); $tab[$optindex] = [ 'table' => PluginFormcreatorAnswer::getTable(), @@ -138,8 +134,7 @@ public function getSearchOptions() * @param Array $options Options (optional) * @return Mixed Value to be displayed */ - public static function getSpecificValueToDisplay($field, $values, array $options=array()) - { + public static function getSpecificValueToDisplay($field, $values, array $options=array()) { global $CFG_GLPI; if (!is_array($values)) { @@ -167,8 +162,7 @@ public static function getSpecificValueToDisplay($field, $values, array $options * * @return String Html string to be displayed for the form field **/ - public static function getSpecificValueToSelect($field, $name='', $values='', array $options=array()) - { + public static function getSpecificValueToSelect($field, $name='', $values='', array $options=array()) { if (!is_array($values)) { $values = array($field => $values); } @@ -207,8 +201,7 @@ public static function getSpecificValueToSelect($field, $name='', $values='', ar * * @return null Nothing, just display the list */ - public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) - { + public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $withtemplate=0) { if ($item instanceof PluginFormcreatorForm) { self::showForForm($item); } else { @@ -216,8 +209,7 @@ public static function displayTabContentForItem(CommonGLPI $item, $tabnum=1, $wi } } - public function defineTabs($options = array()) - { + public function defineTabs($options = array()) { $ong = array(); $this->addDefaultFormTab($ong); if ($this->fields['id'] > 0) { @@ -237,8 +229,7 @@ public function defineTabs($options = array()) * * @return String Name to be displayed */ - public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) - { + public function getTabNameForItem(CommonGLPI $item, $withtemplate=0) { if ($item instanceof PluginFormcreatorForm) { $number = count($this->find("`".self::$items_id."` = ".$item->getID())); return self::createTabEntry(self::getTypeName($number), $number); @@ -345,12 +336,12 @@ public function showForm($ID, $options = array()) { echo '
    '; echo '
    ' . nl2br($this->fields['comment']) . '
    '; echo '
    '; - } elseif($this->fields['status'] == 'accepted') { + } else if ($this->fields['status'] == 'accepted') { echo '
    '; echo '
    '; if (!empty($this->fields['comment'])) { echo nl2br($this->fields['comment']); - } elseif($form->fields['validation_required']) { + } else if ($form->fields['validation_required']) { echo __('Form accepted by validator.', 'formcreator'); } else { echo __('Form successfully saved.', 'formcreator'); @@ -405,8 +396,8 @@ public function showForm($ID, $options = array()) { echo '
    '; echo '
    '; - // Display validation form - } elseif(($this->fields['status'] == 'waiting') && $canValidate) { + // Display validation form + } else if (($this->fields['status'] == 'waiting') && $canValidate) { if (Session::haveRight('ticketvalidation', TicketValidation::VALIDATEINCIDENT) || Session::haveRight('ticketvalidation', TicketValidation::VALIDATEREQUEST)) { echo '
    '; @@ -435,7 +426,7 @@ public function showForm($ID, $options = array()) { echo ''; echo '
    '; -// echo ''; + // echo ''; echo '