From 65318ff629d8d3427ca775428de58e65c7a66dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Anne?= Date: Tue, 27 Nov 2018 10:07:15 +0100 Subject: [PATCH 1/3] GLPI 9.4 compatibility - Use ITILFollowup in replacement of TicketFollowup - Use array conditions instead of string in CommonDBTM::find() - Use array conditions instead of string in Dropdown::show() --- .travis.yml | 4 +- hook.php | 4 +- inc/container.class.php | 74 +++++++++++++++++++--------------- inc/dropdown.class.php | 4 +- inc/field.class.php | 63 +++++++++++++++++------------ inc/labeltranslation.class.php | 15 +++---- inc/profile.class.php | 13 +++--- plugin.xml | 4 ++ setup.php | 8 ++-- 9 files changed, 108 insertions(+), 81 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6cd92f2d..3f7b9ed9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,14 +10,14 @@ env: global: - DB=mysql matrix: - - GLPIVER=9.3/bugfixes + - GLPIVER=9.4/bugfixes before_script: - composer self-update - git clone --depth=1 https://github.com/glpi-project/glpi -b $GLPIVER ../glpi && cd ../glpi - composer install --no-dev - mysql -u root -e 'create database glpitest;' - - php scripts/cliinstall.php --db=glpitest --user=root --tests + - bin/console glpi:database:install --config-dir=./tests --no-interaction --db-name=glpitest --db-host=127.0.0.1 --db-user=root - mv ../fields plugins/fields - cd plugins/fields - composer install -o diff --git a/hook.php b/hook.php index 33e46122..ac0f7c98 100644 --- a/hook.php +++ b/hook.php @@ -177,7 +177,7 @@ function plugin_fields_getDropdown() { $dropdowns = []; $field_obj = new PluginFieldsField; - $fields = $field_obj->find("`type` = 'dropdown'"); + $fields = $field_obj->find(['type' => 'dropdown']); foreach ($fields as $field) { $field['itemtype'] = PluginFieldsField::getType(); $label = PluginFieldsLabelTranslation::getLabelFor($field); @@ -301,7 +301,7 @@ function plugin_datainjection_populate_fields() { global $INJECTABLE_TYPES; $container = new PluginFieldsContainer(); - $found = $container->find("`is_active` = 1"); + $found = $container->find(['is_active' => 1]); foreach ($found as $id => $values) { $types = json_decode($values['itemtypes']); diff --git a/inc/container.class.php b/inc/container.class.php index 1b52dc51..921adf0b 100644 --- a/inc/container.class.php +++ b/inc/container.class.php @@ -55,7 +55,7 @@ static function install(Migration $migration, $version) { //add display preferences for this class $d_pref = new DisplayPreference; - $found = $d_pref->find("itemtype = '".__CLASS__."'"); + $found = $d_pref->find(['itemtype' => __CLASS__]); if (count($found) == 0) { for ($i = 2; $i <= 5; $i++) { $DB->query("REPLACE INTO glpi_displaypreferences VALUES @@ -81,7 +81,7 @@ static function install(Migration $migration, $version) { $compcontainer->getFromDB($comptab); $fields = new PluginFieldsField(); - $fields = $fields->find("plugin_fields_containers_id='$ostab'"); + $fields = $fields->find(['plugin_fields_containers_id' => $ostab]); $classname = self::getClassname(Computer::getType(), $oscontainer->fields['name']); $osdata = new $classname; @@ -92,7 +92,7 @@ static function install(Migration $migration, $version) { //add fields to compcontainer foreach ($fields as $field) { $newname = $field['name']; - $compfields = $fields->find("plugin_fields_containers_id='$comptab' AND name='$newname'"); + $compfields = $fields->find(['plugin_fields_containers_id' => $comptab, 'name' => $newname]); if ($compfields) { $newname = $newname . '_os'; $DB->query("UPDATE glpi_plugin_fields_fields SET name='$newname' WHERE name='{$field['name']}' AND plugin_fields_containers_id='$ostab'"); @@ -327,7 +327,7 @@ function prepareInputForAdd($input) { if ($input['type'] === "dom") { //check for already exist dom container with this itemtype - $found = $this->find("`type`='dom'"); + $found = $this->find(['type' => 'dom']); if (count($found) > 0) { foreach (array_column($found, 'itemtypes') as $founditemtypes) { foreach (json_decode($founditemtypes) as $founditemtype) { @@ -342,7 +342,7 @@ function prepareInputForAdd($input) { if ($input['type'] === "domtab") { //check for already exist domtab container with this itemtype on this tab - $found = $this->find("`type`='domtab' AND `subtype`='{$input['subtype']}'"); + $found = $this->find(['type' => 'domtab', 'subtype' => $input['subtype']]); if (count($found) > 0) { foreach (array_column( $found, 'itemtypes' ) as $founditemtypes) { foreach (json_decode( $founditemtypes ) as $founditemtype) { @@ -364,7 +364,7 @@ function prepareInputForAdd($input) { } //check for already existing container with same name - $found = $this->find("`name`='".$input['name']."'"); + $found = $this->find(['name' => $input['name']]); if (count($found) > 0) { foreach (array_column($found, 'itemtypes') as $founditemtypes) { foreach (json_decode($founditemtypes) as $founditemtype) { @@ -648,7 +648,7 @@ static function showFormSubtype($params, $display = false) { if (count($tabs)) { // delete Log of array (don't work with this tab) - $tabs_to_remove = ['Log$1', 'TicketFollowup$1', 'TicketTask$1', 'Document_Item$1']; + $tabs_to_remove = ['Log$1', 'Document_Item$1']; foreach ($tabs_to_remove as $tab_to_remove) { if (isset($tabs[$tab_to_remove])) { unset($tabs[$tab_to_remove]); @@ -794,9 +794,11 @@ static function getTypes() { static function getEntries($type = 'tab', $full = false) { global $DB; - $sql_type = "1=1"; + $condition = [ + 'is_active' => 1, + ]; if ($type !== "all") { - $sql_type = "`type` = '$type'"; + $condition[] = ['type' => $type]; } if (!$DB->tableExists(self::getTable())) { @@ -806,7 +808,7 @@ static function getEntries($type = 'tab', $full = false) { $itemtypes = []; $container = new self; $profile = new PluginFieldsProfile; - $found = $container->find("$sql_type AND is_active = 1", "`label`"); + $found = $container->find($condition, 'label'); foreach ($found as $item) { //entities restriction if (!in_array($item['entities_id'], $_SESSION['glpiactiveentities'])) { @@ -824,9 +826,9 @@ static function getEntries($type = 'tab', $full = false) { continue; } //profiles restriction - $found = $profile->find("`profiles_id` = '".$_SESSION['glpiactiveprofile']['id']."' - AND `plugin_fields_containers_id` = '".$item['id']."' - AND `right` >= ".READ); + $found = $profile->find(['profiles_id' => $_SESSION['glpiactiveprofile']['id'], + 'plugin_fields_containers_id' => $item['id'], + 'right' => ['>=', READ]]); $first_found = array_shift($found); if ($first_found['right'] == null || $first_found['right'] == 0) { continue; @@ -877,7 +879,7 @@ function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { $container = new self; foreach ($itemtypes[$item->getType()] as $tab_name => $tab_label) { // needs to check if entity of item is in hierachy of $tab_name - foreach ($container->find("`is_active` = 1 AND `name` = '$tab_name'") as $data) { + foreach ($container->find(['is_active' => 1, 'name' => $tab_name]) as $data) { $dataitemtypes = json_decode($data['itemtypes']); if (in_array(get_class($item), $dataitemtypes) != false) { $entities = [$data['entities_id']]; @@ -899,7 +901,7 @@ function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { //retrieve container for current tab $container = new self; - $found_c = $container->find("`type` = 'tab' AND `name` = '$tabnum' AND is_active = 1"); + $found_c = $container->find(['type' => 'tab', 'name' => $tabnum, 'is_active' => 1]); foreach ($found_c as $data) { $dataitemtypes = json_decode($data['itemtypes']); if (in_array(get_class($item), $dataitemtypes) != false) { @@ -932,7 +934,7 @@ function updateFieldsValues($data, $itemtype, $massiveaction = false) { //check if data already inserted $obj = new $classname; - $found = $obj->find("items_id = $items_id"); + $found = $obj->find(['items_id' => $items_id]); if (empty($found)) { // add fields data $obj->add($data); @@ -1082,8 +1084,9 @@ static function validateValues($data, $itemtype, $massiveaction) { $container->getFromDB($data['plugin_fields_containers_id']); $field_obj = new PluginFieldsField(); - $fields = $field_obj->find("plugin_fields_containers_id = ". - $data['plugin_fields_containers_id']); + $fields = $field_obj->find([ + 'plugin_fields_containers_id' => $data['plugin_fields_containers_id'] + ]); foreach ($fields as $fields_id => $field) { if ($field['type'] == "yesno" || $field['type'] == "header") { @@ -1165,23 +1168,28 @@ static function validateValues($data, $itemtype, $massiveaction) { static function findContainer($itemtype, $type = 'tab', $subtype = '') { - $sql_type = "`type` = '$type'"; + + $condition = [ + 'is_active' => 1, + ['type' => $type], + ]; + $entity = isset($_SESSION['glpiactiveentities']) ? $_SESSION['glpiactiveentities'] : 0; - $sql_entity = getEntitiesRestrictRequest("AND", "", "", $entity, true, true); + $condition += getEntitiesRestrictCriteria("", "", $entity, true, true); - $sql_subtype = ''; if ($subtype != '') { if ($subtype == $itemtype.'$main') { - $sql_subtype = " AND type = 'dom' "; + $condition[] = ['type' => 'dom']; } else { - $sql_subtype = " AND type != 'dom' AND subtype = '$subtype' "; + $condition[] = ['type' => ['!=', 'dom']]; + $condition['subtype'] = $subtype; } } $container = new PluginFieldsContainer(); - $itemtypes = $container->find($sql_type." AND is_active = 1 ".$sql_entity.$sql_subtype); + $itemtypes = $container->find($condition); $id = 0; if (count($itemtypes) < 1) { return false; @@ -1199,13 +1207,8 @@ static function findContainer($itemtype, $type = 'tab', $subtype = '') { if (isset($_SESSION['glpiactiveprofile']['id'])) { $profile = new PluginFieldsProfile(); if (isset($id)) { - if (is_array($id)) { - $condition = "`plugin_fields_containers_id` IN (" . implode(", ", $id) . ")"; - } else { - $condition = "`plugin_fields_containers_id` = '$id'"; - } - $found = $profile->find("`profiles_id` = '".$_SESSION['glpiactiveprofile']['id']."' - AND $condition"); + $found = $profile->find(['profiles_id' => $_SESSION['glpiactiveprofile']['id'], + 'plugin_fields_containers_id' => $id]); $first_found = array_shift($found); if ($first_found['right'] == null || $first_found['right'] == 0) { return false; @@ -1331,8 +1334,13 @@ static function preItem(CommonDBTM $item) { static private function populateData($c_id, CommonDBTM $item) { //find fields associated to found container $field_obj = new PluginFieldsField(); - $fields = $field_obj->find("plugin_fields_containers_id = $c_id - AND type != 'header'", "ranking"); + $fields = $field_obj->find( + [ + 'plugin_fields_containers_id' => $c_id, + 'type' => ['!=', 'header'] + ], + "ranking" + ); //prepare data to update $data = ['plugin_fields_containers_id' => $c_id]; diff --git a/inc/dropdown.class.php b/inc/dropdown.class.php index 8f4e1134..e149ec64 100644 --- a/inc/dropdown.class.php +++ b/inc/dropdown.class.php @@ -20,7 +20,7 @@ static function install(Migration $migration, $version) { // OLD path: GLPI_ROOT."/plugins/fields/front/$class_filename" // NEW path: PLUGINFIELDS_FRONT_PATH . "/$class_filename" $obj = new PluginFieldsField; - $fields = $obj->find('type = "dropdown"'); + $fields = $obj->find(['type' => 'dropdown']); foreach ($fields as $field) { //First, drop old fields from plugin directories $class_filename = $field['name']."dropdown.class.php"; @@ -52,7 +52,7 @@ static function uninstall() { if ($DB->tableExists("glpi_plugin_fields_fields")) { require_once "field.class.php"; $field = new PluginFieldsField; - $dropdowns = $field->find("`type` = 'dropdown'"); + $dropdowns = $field->find(['type' => 'dropdown']); foreach ($dropdowns as $dropdown) { self::destroy($dropdown['name']); } diff --git a/inc/field.class.php b/inc/field.class.php index 951e26f7..f9e70e34 100644 --- a/inc/field.class.php +++ b/inc/field.class.php @@ -80,9 +80,12 @@ function prepareInputForAdd($input) { if ($input['type'] === "dropdown") { //search if dropdown already exist in this container - $found = $this->find("name = '".$input['name']."' - AND plugin_fields_containers_id = '". - $input['plugin_fields_containers_id']."'"); + $found = $this->find( + [ + 'name' => $input['name'], + 'plugin_fields_containers_id' => $input['plugin_fields_containers_id'], + ] + ); //reject adding for same dropdown on same bloc if (!empty($found)) { @@ -186,7 +189,7 @@ function prepareName($input) { //for dropdown, if already exist, link to it if (isset($input['type']) && $input['type'] === "dropdown") { - $found = $this->find("name = '".$input['name']."'"); + $found = $this->find(['name' => $input['name']]); if (!empty($found)) { return $input['name']; } @@ -199,7 +202,7 @@ function prepareName($input) { $field = new self; $field_name = $input['name']; $i = 2; - while (count($field->find("name = '$field_name'")) > 0) { + while (count($field->find(['name' => $field_name])) > 0) { $field_name = $input['name'].$i; $i++; } @@ -436,14 +439,14 @@ static function showForTabContainer($c_id, $items_id, $itemtype) { //profile restriction (for reading profile) $profile = new PluginFieldsProfile; - $found = $profile->find("`profiles_id` = '".$_SESSION['glpiactiveprofile']['id']."' - AND `plugin_fields_containers_id` = '$c_id'"); + $found = $profile->find(['profiles_id' => $_SESSION['glpiactiveprofile']['id'], + 'plugin_fields_containers_id' => $c_id]); $first_found = array_shift($found); $canedit = ($first_found['right'] == CREATE); //get fields for this container $field_obj = new self(); - $fields = $field_obj->find("plugin_fields_containers_id = $c_id AND is_active = 1", "ranking"); + $fields = $field_obj->find(['plugin_fields_containers_id' => $c_id, 'is_active' => 1], "ranking"); echo "
"; echo Html::hidden('plugin_fields_containers_id', ['value' => $c_id]); @@ -477,20 +480,21 @@ static function showForTabContainer($c_id, $items_id, $itemtype) { * @return void */ static private function showDomContainer($c_id, $itemtype, $items_id, $type = "dom", $subtype = "") { - if (is_array($c_id)) { - $condition = "plugin_fields_containers_id IN (".implode(", ", $c_id).")"; - } else { - $condition = "plugin_fields_containers_id = $c_id"; - } - if ($c_id === false) { - $condition = "1=0"; + if ($c_id !== false) { + //get fields for this container + $field_obj = new self(); + $fields = $field_obj->find( + [ + 'plugin_fields_containers_id' => $c_id, + 'is_active' => 1, + ], + "ranking" + ); + } else { + $fields = []; } - //get fields for this container - $field_obj = new self(); - $fields = $field_obj->find($condition." AND is_active = 1", "ranking"); - echo Html::hidden('_plugin_fields_type', ['value' => $type]); echo Html::hidden('_plugin_fields_subtype', ['value' => $subtype]); echo self::prepareHtmlFields($fields, $items_id, $itemtype); @@ -594,15 +598,22 @@ static function prepareHtmlFields($fields, $items_id, $itemtype, $canedit = true $obj = new $classname; //find row for this object with the items_id - $found_values = $obj->find("plugin_fields_containers_id = ". - $first_field['plugin_fields_containers_id']." AND items_id = ". - $items_id); + $found_values = $obj->find( + [ + 'plugin_fields_containers_id' => $first_field['plugin_fields_containers_id'], + 'items_id' => $items_id, + ] + ); $found_v = array_shift($found_values); // find profiles (to check if current profile can edit fields) $fprofile = new PluginFieldsProfile; - $found_p = $fprofile->find("`profiles_id` = '".$_SESSION['glpiactiveprofile']['id']."' - AND `plugin_fields_containers_id` = '".$first_field['plugin_fields_containers_id']."'"); + $found_p = $fprofile->find( + [ + 'profiles_id' => $_SESSION['glpiactiveprofile']['id'], + 'plugin_fields_containers_id' => $first_field['plugin_fields_containers_id'], + ] + ); $first_found_p = array_shift($found_p); // test status for "CommonITILObject" objects @@ -787,7 +798,7 @@ static function prepareHtmlFields($fields, $items_id, $itemtype, $canedit = true 'entity' => -1, 'right' => 'all', 'display' => false, - 'condition' => 'is_active=1 && is_deleted=0']); + 'condition' => ['is_active' => 1, 'is_deleted' => 0]]); } else { $showuserlink = 0; if (Session::haveRight('user', 'r')) { @@ -879,7 +890,7 @@ function post_addItem() { //dropdowns : create files if ($input['type'] === "dropdown") { //search if dropdown already exist in other container - $found = $this->find("id != " . $input['id'] . " AND name = '" . $input['name'] . "'"); + $found = $this->find(['id' => ['!=', $input['id']], 'name' => $input['name']]); //for dropdown, if already exist, don't create files if (empty($found)) { PluginFieldsDropdown::create($input); diff --git a/inc/labeltranslation.class.php b/inc/labeltranslation.class.php index 57011284..bd74393a 100644 --- a/inc/labeltranslation.class.php +++ b/inc/labeltranslation.class.php @@ -115,9 +115,11 @@ static function showTranslations(CommonDBTM $item) { $obj = new self; $found = $obj->find( - "`plugin_fields_itemtype` = '{$item::getType()}' AND - `plugin_fields_items_id`='{$item->getID()}'", - "`language` ASC" + [ + 'plugin_fields_itemtype' => $item::getType(), + 'plugin_fields_items_id' => $item->getID(), + ], + "language ASC" ); if (count($found) > 0) { @@ -256,10 +258,9 @@ static function getAlreadyTranslatedForItem($itemtype, $items_id) { */ static public function getLabelFor(array $item) { $obj = new self; - $found = $obj->find("`plugin_fields_itemtype` = '{$item['itemtype']}' - AND `plugin_fields_items_id`='{$item['id']}' - AND `language` = '{$_SESSION['glpilanguage']}'" - ); + $found = $obj->find(['plugin_fields_itemtype' => $item['itemtype'], + 'plugin_fields_items_id' => $item['id'], + 'language' => $_SESSION['glpilanguage']]); if (count($found) > 0) { return array_values($found)[0]['label']; diff --git a/inc/profile.class.php b/inc/profile.class.php index f1e8baaf..fe8d87cc 100644 --- a/inc/profile.class.php +++ b/inc/profile.class.php @@ -52,8 +52,8 @@ static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtem echo "" . _n("Profile", "Profiles", 2) .""; foreach ($found_profiles as $profile_item) { //get right for current profile - $found = $fields_profile->find("`profiles_id` = '".$profile_item['id']."' - AND `plugin_fields_containers_id` = '".$item->fields['id']."'"); + $found = $fields_profile->find(['profiles_id' => $profile_item['id'], + 'plugin_fields_containers_id' => $item->fields['id']]); $first_found = array_shift($found); //display right @@ -81,9 +81,12 @@ static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtem static function updateProfile($input) { $fields_profile = new self; foreach ($input['rights'] as $profiles_id => $right) { - $found = $fields_profile->find("`profiles_id` = '$profiles_id' - AND `plugin_fields_containers_id` = '". - $input['plugin_fields_containers_id']."'"); + $found = $fields_profile->find( + [ + 'profiles_id' => $profiles_id, + 'plugin_fields_containers_id' => $input['plugin_fields_containers_id'] + ] + ); if (count( $found ) > 0) { $first_found = array_shift($found); diff --git a/plugin.xml b/plugin.xml index d3928972..cecdf9ee 100644 --- a/plugin.xml +++ b/plugin.xml @@ -97,6 +97,10 @@ Il existe un [script de migration](https://github.com/pluginsGLPI/customfields/b Johan Cwiklinski + + 1.9.0 + 9.4 + 1.8.2 9.3 diff --git a/setup.php b/setup.php index 117915ce..ebbccd18 100644 --- a/setup.php +++ b/setup.php @@ -26,12 +26,12 @@ -------------------------------------------------------------------------- */ -define ('PLUGIN_FIELDS_VERSION', '1.8.2'); +define ('PLUGIN_FIELDS_VERSION', '1.9.0'); // Minimal GLPI version, inclusive -define("PLUGIN_FIELDS_MIN_GLPI", "9.3"); +define("PLUGIN_FIELDS_MIN_GLPI", "9.4"); // Maximum GLPI version, exclusive -define("PLUGIN_FIELDS_MAX_GLPI", "9.4"); +define("PLUGIN_FIELDS_MAX_GLPI", "9.5"); if (!defined("PLUGINFIELDS_DIR")) { define("PLUGINFIELDS_DIR", GLPI_ROOT . "/plugins/fields"); @@ -257,7 +257,7 @@ function plugin_fields_checkFiles($force = false) { if ($DB->tableExists(PluginFieldsField::getTable())) { $fields_obj = new PluginFieldsField(); - $fields = $fields_obj->find("`type` = 'dropdown'"); + $fields = $fields_obj->find(['type' => 'dropdown']); foreach ($fields as $field) { PluginFieldsDropdown::create($field); } From 7e1b4352d2d1165f488c11156222a10060a93049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Anne?= Date: Fri, 7 Dec 2018 16:21:04 +0100 Subject: [PATCH 2/3] Update PHP dependencies --- composer.lock | 248 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 165 insertions(+), 83 deletions(-) diff --git a/composer.lock b/composer.lock index 132860c5..b9c2a02a 100644 --- a/composer.lock +++ b/composer.lock @@ -92,20 +92,20 @@ }, { "name": "consolidation/annotated-command", - "version": "2.8.4", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "651541a0b68318a2a202bda558a676e5ad92223c" + "reference": "8e7d1a05230dc1159c751809e98b74f2b7f71873" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/651541a0b68318a2a202bda558a676e5ad92223c", - "reference": "651541a0b68318a2a202bda558a676e5ad92223c", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/8e7d1a05230dc1159c751809e98b74f2b7f71873", + "reference": "8e7d1a05230dc1159c751809e98b74f2b7f71873", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.1.12", + "consolidation/output-formatters": "^3.4", "php": ">=5.4.0", "psr/log": "^1", "symfony/console": "^2.8|^3|^4", @@ -140,20 +140,20 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2018-05-25T18:04:25+00:00" + "time": "2018-11-15T01:46:18+00:00" }, { "name": "consolidation/config", - "version": "1.0.11", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/consolidation/config.git", - "reference": "ede41d946078e97e7a9513aadc3352f1c26817af" + "reference": "925231dfff32f05b787e1fddb265e789b939cf4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/config/zipball/ede41d946078e97e7a9513aadc3352f1c26817af", - "reference": "ede41d946078e97e7a9513aadc3352f1c26817af", + "url": "https://api.github.com/repos/consolidation/config/zipball/925231dfff32f05b787e1fddb265e789b939cf4c", + "reference": "925231dfff32f05b787e1fddb265e789b939cf4c", "shasum": "" }, "require": { @@ -163,7 +163,7 @@ }, "require-dev": { "g1a/composer-test-scenarios": "^1", - "phpunit/phpunit": "^4", + "phpunit/phpunit": "^5", "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "2.*", "symfony/console": "^2.5|^3|^4", @@ -194,7 +194,7 @@ } ], "description": "Provide configuration services for a commandline tool.", - "time": "2018-05-27T01:17:02+00:00" + "time": "2018-10-24T17:55:35+00:00" }, { "name": "consolidation/log", @@ -247,19 +247,20 @@ }, { "name": "consolidation/output-formatters", - "version": "3.2.1", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "d78ef59aea19d3e2e5a23f90a055155ee78a0ad5" + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/d78ef59aea19d3e2e5a23f90a055155ee78a0ad5", - "reference": "d78ef59aea19d3e2e5a23f90a055155ee78a0ad5", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/a942680232094c4a5b21c0b7e54c20cce623ae19", + "reference": "a942680232094c4a5b21c0b7e54c20cce623ae19", "shasum": "" }, "require": { + "dflydev/dot-access-data": "^1.1.0", "php": ">=5.4.0", "symfony/console": "^2.8|^3|^4", "symfony/finder": "^2.5|^3|^4" @@ -298,20 +299,20 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2018-05-25T18:02:34+00:00" + "time": "2018-10-19T22:35:38+00:00" }, { "name": "consolidation/robo", - "version": "1.3.0", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "ac563abfadf7cb7314b4e152f2b5033a6c255f6f" + "reference": "a9bd9ecf00751aa92754903c0d17612c4e840ce8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/ac563abfadf7cb7314b4e152f2b5033a6c255f6f", - "reference": "ac563abfadf7cb7314b4e152f2b5033a6c255f6f", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/a9bd9ecf00751aa92754903c0d17612c4e840ce8", + "reference": "a9bd9ecf00751aa92754903c0d17612c4e840ce8", "shasum": "" }, "require": { @@ -319,6 +320,7 @@ "consolidation/config": "^1.0.10", "consolidation/log": "~1", "consolidation/output-formatters": "^3.1.13", + "consolidation/self-update": "^1", "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", @@ -335,15 +337,15 @@ "codeception/aspect-mock": "^1|^2.1.1", "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "g1a/composer-test-scenarios": "^2", + "g1a/composer-test-scenarios": "^3", "goaop/framework": "~2.1.2", "goaop/parser-reflection": "^1.1.0", "natxet/cssmin": "3.0.4", "nikic/php-parser": "^3.1.5", "patchwork/jsqueeze": "~2", "pear/archive_tar": "^1.4.2", + "php-coveralls/php-coveralls": "^1", "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "^2", "squizlabs/php_codesniffer": "^2.8" }, "suggest": { @@ -357,9 +359,36 @@ ], "type": "library", "extra": { + "scenarios": { + "symfony4": { + "require": { + "symfony/console": "^4" + }, + "config": { + "platform": { + "php": "7.1.3" + } + } + }, + "symfony2": { + "require": { + "symfony/console": "^2.8" + }, + "remove": [ + "goaop/framework" + ], + "config": { + "platform": { + "php": "5.5.9" + } + }, + "scenario-options": { + "create-lockfile": "false" + } + } + }, "branch-alias": { - "dev-master": "1.x-dev", - "dev-state": "1.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -378,7 +407,57 @@ } ], "description": "Modern task runner", - "time": "2018-05-27T01:42:53+00:00" + "time": "2018-11-22T05:43:44+00:00" + }, + { + "name": "consolidation/self-update", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/self-update.git", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/self-update/zipball/a1c273b14ce334789825a09d06d4c87c0a02ad54", + "reference": "a1c273b14ce334789825a09d06d4c87c0a02ad54", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/filesystem": "^2.5|^3|^4" + }, + "bin": [ + "scripts/release" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "SelfUpdate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + }, + { + "name": "Alexander Menk", + "email": "menk@mestrona.net" + } + ], + "description": "Provides a self:update command for Symfony Console applications.", + "time": "2018-10-28T01:52:03+00:00" }, { "name": "container-interop/container-interop", @@ -857,16 +936,16 @@ }, { "name": "psr/log", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", "shasum": "" }, "require": { @@ -900,20 +979,20 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-11-20T15:27:04+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.0", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "d86873af43b4aa9d1f39a3601cc0cfcf02b25266" + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d86873af43b4aa9d1f39a3601cc0cfcf02b25266", - "reference": "d86873af43b4aa9d1f39a3601cc0cfcf02b25266", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", "shasum": "" }, "require": { @@ -951,20 +1030,20 @@ "phpcs", "standards" ], - "time": "2018-06-06T23:58:19+00:00" + "time": "2018-09-23T23:08:17+00:00" }, { "name": "symfony/console", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27" + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/36f83f642443c46f3cf751d4d2ee5d047d757a27", - "reference": "36f83f642443c46f3cf751d4d2ee5d047d757a27", + "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", "shasum": "" }, "require": { @@ -1020,20 +1099,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" + "time": "2018-11-26T12:48:07+00:00" }, { "name": "symfony/debug", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68" + "reference": "a2233f555ddf55e5600f386fba7781cea1cb82d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b28fd73fefbac341f673f5efd707d539d6a19f68", - "reference": "b28fd73fefbac341f673f5efd707d539d6a19f68", + "url": "https://api.github.com/repos/symfony/debug/zipball/a2233f555ddf55e5600f386fba7781cea1cb82d3", + "reference": "a2233f555ddf55e5600f386fba7781cea1cb82d3", "shasum": "" }, "require": { @@ -1076,20 +1155,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-05-16T14:03:39+00:00" + "time": "2018-11-27T12:43:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8" + "reference": "cc35e84adbb15c26ae6868e1efbf705a917be6b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8", - "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc35e84adbb15c26ae6868e1efbf705a917be6b5", + "reference": "cc35e84adbb15c26ae6868e1efbf705a917be6b5", "shasum": "" }, "require": { @@ -1139,20 +1218,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-04-06T07:35:25+00:00" + "time": "2018-11-30T18:07:24+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0" + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", - "reference": "8e03ca3fa52a0f56b87506f38cf7bd3f9442b3a0", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", "shasum": "" }, "require": { @@ -1189,20 +1268,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/finder", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6" + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/472a92f3df8b247b49ae364275fb32943b9656c6", - "reference": "472a92f3df8b247b49ae364275fb32943b9656c6", + "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", "shasum": "" }, "require": { @@ -1238,29 +1317,32 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" + "time": "2018-11-11T19:48:54+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.8.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "suggest": { + "ext-ctype": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -1293,20 +1375,20 @@ "polyfill", "portable" ], - "time": "2018-04-30T19:57:29+00:00" + "time": "2018-08-06T14:22:27+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", + "version": "v1.10.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", "shasum": "" }, "require": { @@ -1318,7 +1400,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -1352,20 +1434,20 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2018-09-21T13:07:52+00:00" }, { "name": "symfony/process", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187" + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4cbf2db9abcb01486a21b7a059e03a62fae63187", - "reference": "4cbf2db9abcb01486a21b7a059e03a62fae63187", + "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", "shasum": "" }, "require": { @@ -1401,20 +1483,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-05-16T08:49:21+00:00" + "time": "2018-11-20T16:10:26+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.11", + "version": "v3.4.20", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0" + "reference": "291e13d808bec481eab83f301f7bff3e699ef603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", - "reference": "c5010cc1692ce1fa328b1fb666961eb3d4a85bb0", + "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", + "reference": "291e13d808bec481eab83f301f7bff3e699ef603", "shasum": "" }, "require": { @@ -1460,7 +1542,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-05-03T23:18:14+00:00" + "time": "2018-11-11T19:48:54+00:00" } ], "aliases": [], From bb84a7de08218aaab3b8bc1817deab43974ca238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Anne?= Date: Fri, 7 Dec 2018 16:22:30 +0100 Subject: [PATCH 3/3] Add Finnish (Finland) locale --- locales/fi_FI.mo | Bin 0 -> 3464 bytes locales/fi_FI.po | 176 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 locales/fi_FI.mo create mode 100644 locales/fi_FI.po diff --git a/locales/fi_FI.mo b/locales/fi_FI.mo new file mode 100644 index 0000000000000000000000000000000000000000..16df6c405c5df48c62bf2ae78616703915c983a1 GIT binary patch literal 3464 zcmb7`&u=706~`-(@WYS*A^h49sBFU8CTWkyY{Y676G-racWuXPW>;D`gqrE{Ou2iy zhOX+F9SI>0IdE7B35f#|5*JIkaX?WNZb$b>uKRXu-x`2L?L+A`Otx!U(B^$fi8E`Dg=dACv@f(E`9eiuFrC-4Dy2fiQv z7=8l&4Bii4g&%;wg71UBg<}7E_#XJjIp2hzr~eoDCHNqN#qKJUar^L7@D_X&1}N+N z2+BOKKw1A6@Em*{UVwjqpN0Q~4S0@8SwdZfABTHT;;`^Cygh&aDtv+o^-Cn)Ru z8(xGD&`Dtn?!lkKXW>5}OQ|(P`Xw5E0X{~8?jwoZsxL$FYa2>D23~^^imtzgGVV8U4gMX<{O54C1)qd3!-v${q)CoMS7{&RTILeHMEj3%sjsG~ zHoCB5ec)`K*8ONYLKmGc3X{*?1od3*yP1047YD9amG<~vCeH^LDd*{cQ}V!2L8+86nRyPhp(^3vq@`IORmQ*_I<^Z5Pa7mbgFG`2eybhPKNgM zpkPO&BcBZp_2}A8FP~k2_f*v~iKQILo$nmlE~_BuDbN1TMNUuoPSed@b}0e6E`b!a zD<@o1q3_3Pzx3i?vYjS35u1{3>96nXZ|nV8J`+9LfJ@iy(3dgU4Lz48&sDvUw0%o2 z?Z41Yo-b{^84}scExobcyp*h8N;aChd9iiz;#2E143q12=kP3uGB0~fcUIE znnJ~SZcDFj;=g9vO6^ph?4*{LEP%r1W*lEbld+6I#27mY66NW74rSvwjhNF;&Gz7NsG$z(Vbbx#kSt0Oa@($o5|&Z~qs z8=}vPI7B%?9etwq->#I;%SVHcl&QZP86U+{wf?_2Ayqy10AFx|P)|8<&pIsmU#6}- b<8O~H_?ISX)(;R(zHoTz3PqUY@<{y$p;Q%A literal 0 HcmV?d00001 diff --git a/locales/fi_FI.po b/locales/fi_FI.po new file mode 100644 index 00000000..cbbf1e7c --- /dev/null +++ b/locales/fi_FI.po @@ -0,0 +1,176 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Markku Vepsä, 2018 +msgid "" +msgstr "" +"Project-Id-Version: GLPI Plugin - Fields\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-08-21 14:44+0000\n" +"PO-Revision-Date: 2018-11-12 17:54+0000\n" +"Last-Translator: Markku Vepsä\n" +"Language-Team: Finnish (Finland) (http://www.transifex.com/teclib/glpi-plugin-plugin-fields/language/fi_FI/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi_FI\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: front/container.php:4 front/container.form.php:35 inc/menu.class.php:6 +#: setup.php:174 +msgid "Additionnal fields" +msgstr "Lisäkentät" + +#: hook.php:58 +msgid "MySQL tables installation" +msgstr "MySQL-taulukoiden asennus" + +#: hook.php:106 +msgid "The plugin can't be uninstalled when the plugin is disabled" +msgstr "Liitännäistä ei voi poistaa, kun liitännäinen on poistettu käytöstä" + +#: hook.php:115 +msgid "MySQL tables uninstallation" +msgstr "MySQL-taulukoiden poistaminen" + +#: inc/field.class.php:72 +msgid "Field" +msgstr "Kenttä" + +#: inc/field.class.php:241 +msgid "Fields" +msgstr "Kentät" + +#: inc/field.class.php:295 +msgid "Add a new field" +msgstr "Lisää uusi kenttä" + +#: inc/field.class.php:299 +msgid "No field for this block" +msgstr "Ei kenttää tälle osiolle" + +#: inc/field.class.php:311 inc/field.class.php:424 +msgid "Read only" +msgstr "Vain luku" + +#: inc/field.class.php:401 +msgid "Configure" +msgstr "Määritä" + +#: inc/field.class.php:401 +msgid "Configure fields values" +msgstr "Määritä kenttien arvot" + +#: inc/field.class.php:717 +msgid "show" +msgstr "näytä" + +#: inc/field.class.php:863 +msgid "Header" +msgstr "Ylätunniste" + +#: inc/field.class.php:864 +msgid "Text (single line)" +msgstr "Teksti (yksi rivi)" + +#: inc/field.class.php:865 +msgid "Text (multiples lines)" +msgstr "Teksti (useita rivejä)" + +#: inc/field.class.php:866 +msgid "Number" +msgstr "Numero" + +#: inc/field.class.php:867 +msgid "URL" +msgstr "URL" + +#: inc/field.class.php:868 +msgid "Dropdown" +msgstr "Pudotusvalikko" + +#: inc/field.class.php:869 +msgid "Yes/No" +msgstr "Kyllä/Ei" + +#: inc/field.class.php:870 +msgid "Date" +msgstr "Päivämäärä" + +#: inc/field.class.php:871 +msgid "Date & time" +msgstr "Päivämäärä ja aika" + +#: inc/container.class.php:12 +msgid "Regenerate container files" +msgstr "Luo uudelleen säilötiedostot" + +#: inc/container.class.php:127 +msgid "Updating generated containers files" +msgstr "Päivitetään luodut säilötiedostot" + +#: inc/container.class.php:318 +msgid "You cannot add block without associated element type" +msgstr "Et voi lisätä osiota ilman liittyvää elementtityyppiä" + +#: inc/container.class.php:335 +msgid "" +"You cannot add several blocks with type 'Insertion in the form' on same " +"object" +msgstr "Et voi lisätä useita osioita, joiden tyyppi on \"Lisää lomakkeeseen\" samassa objektissa" + +#: inc/container.class.php:350 +msgid "" +"You cannot add several blocks with type 'Insertion in the form of a specific" +" tab' on same object tab" +msgstr "Et voi lisätä useita osioita, joissa on tyyppi \"Liitettynä lomakkeeseen tietyssä välilehdessä\" samassa objektin välilehdessä" + +#: inc/container.class.php:372 +msgid "You cannot add several blocs with identical name on same object" +msgstr "Et voi lisätä useita osioita samalla nimellä samaan objektiin" + +#: inc/container.class.php:512 +msgid "Block" +msgstr "Osio" + +#: inc/container.class.php:583 +msgid "Tab" +msgstr "Välilehti" + +#: inc/container.class.php:788 +msgid "Add tab" +msgstr "Lisää välilehti" + +#: inc/container.class.php:789 +msgid "Insertion in the form (before save button)" +msgstr "Lisää lomakkeeseen (ennen tallennuspainiketta)" + +#: inc/container.class.php:790 +msgid "Insertion in the form of a specific tab (before save button)" +msgstr "Lisää lomakkeeseen tietyssä välilehdessä (ennen tallennuspainiketta)" + +#: inc/container.class.php:1149 +msgid "Some mandatory fields are empty" +msgstr "Jotkut pakolliset kentät ovat tyhjiä" + +#: inc/container.class.php:1154 +msgid "Some numeric fields contains non numeric values" +msgstr "Jotkin numeeriset kentät sisältävät ei-numeerisia arvoja" + +#: inc/container.class.php:1159 +msgid "Some URL fields contains invalid links" +msgstr "Joissakin URL-kentissä on virheellisiä linkkejä" + +#: inc/labeltranslation.class.php:137 +msgid "Language" +msgstr "Kieli" + +#: inc/labeltranslation.class.php:138 +msgid "Label" +msgstr "Etiketti" + +#: inc/dropdown.class.php:16 +msgid "Updating generated dropdown files" +msgstr "Päivitetään luodut pudotusvalikko tiedostot"