From 3927d4d812c0c71d550975c6ec0767586c6383ee Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 3 Apr 2018 14:43:49 +0200 Subject: [PATCH 001/356] fix translation text when list is empty --- views/bootstrap/class.LogManagement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.LogManagement.php b/views/bootstrap/class.LogManagement.php index 6641571cf..66ef66363 100644 --- a/views/bootstrap/class.LogManagement.php +++ b/views/bootstrap/class.LogManagement.php @@ -65,7 +65,7 @@ class SeedDMS_View_LogManagement extends SeedDMS_Bootstrap_Style { print "\n"; } - if ($print_header) printMLText("empty_notify_list"); + if ($print_header) printMLText("empty_list"); else print "\n"; } /* }}} */ From 52f58727ca94b0235661a83789aaecb76dae9f44 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 15:29:32 +0200 Subject: [PATCH 002/356] add sql statements for scheduler --- install/create_tables-innodb.sql | 20 ++++++++++++++++++++ install/create_tables-postgres.sql | 19 +++++++++++++++++++ install/create_tables-sqlite3.sql | 19 +++++++++++++++++++ install/update-6.0.0/update-postgres.sql | 13 +++++++++++++ install/update-6.0.0/update-sqlite3.sql | 13 +++++++++++++ install/update-6.0.0/update.sql | 14 ++++++++++++++ 6 files changed, 98 insertions(+) diff --git a/install/create_tables-innodb.sql b/install/create_tables-innodb.sql index ec1cb63c8..245b62487 100644 --- a/install/create_tables-innodb.sql +++ b/install/create_tables-innodb.sql @@ -968,6 +968,26 @@ CREATE TABLE `tblArosAcos` ( -- -------------------------------------------------------- +-- +-- Table structure for table `tblSchedulerTask` +-- + +CREATE TABLE `tblSchedulerTask` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(100) DEFAULT NULL, + `description` text DEFAULT NULL, + `disabled` smallint(1) NOT NULL DEFAULT '0', + `extension` varchar(100) DEFAULT NULL, + `task` varchar(100) DEFAULT NULL, + `frequency` varchar(100) DEFAULT NULL, + `params` text DEFAULT NULL, + `nextrun` datetime DEFAULT NULL, + `lastrun` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + -- -- Table structure for table `tblVersion` -- diff --git a/install/create_tables-postgres.sql b/install/create_tables-postgres.sql index af8fd53b3..7a36a63b2 100644 --- a/install/create_tables-postgres.sql +++ b/install/create_tables-postgres.sql @@ -783,6 +783,25 @@ CREATE TABLE "tblArosAcos" ( -- -------------------------------------------------------- +-- +-- Table structure for tblSchedulerTask +-- + +CREATE TABLE "tblSchedulerTask" ( + "id" SERIAL UNIQUE, + "name" varchar(100) DEFAULT NULL, + "description" TEXT DEFAULT NULL, + "disabled" INTEGER NOT NULL DEFAULT '0', + "extension" varchar(100) DEFAULT NULL, + "task" varchar(100) DEFAULT NULL, + "frequency" varchar(100) DEFAULT NULL, + "params" TEXT DEFAULT NULL, + "nextrun" TIMESTAMP DEFAULT NULL, + "lastrun" TIMESTAMP DEFAULT NULL +) ; + +-- -------------------------------------------------------- + -- -- Table structure for version -- diff --git a/install/create_tables-sqlite3.sql b/install/create_tables-sqlite3.sql index 3c130dd2f..15e471de0 100644 --- a/install/create_tables-sqlite3.sql +++ b/install/create_tables-sqlite3.sql @@ -792,6 +792,25 @@ CREATE TABLE `tblArosAcos` ( -- -------------------------------------------------------- +-- +-- Table structure for table `tblSchedulerTask` +-- + +CREATE TABLE `tblSchedulerTask` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `name` varchar(100) DEFAULT NULL, + `description` TEXT DEFAULT NULL, + `disabled` INTEGER NOT NULL DEFAULT '0', + `extension` varchar(100) DEFAULT NULL, + `task` varchar(100) DEFAULT NULL, + `frequency` varchar(100) DEFAULT NULL, + `params` TEXT DEFAULT NULL, + `nextrun` TEXT DEFAULT NULL, + `lastrun` TEXT DEFAULT NULL +) ; + +-- -------------------------------------------------------- + -- -- Table structure for table `tblVersion` -- diff --git a/install/update-6.0.0/update-postgres.sql b/install/update-6.0.0/update-postgres.sql index 0631c9bb3..aa0068bac 100644 --- a/install/update-6.0.0/update-postgres.sql +++ b/install/update-6.0.0/update-postgres.sql @@ -138,6 +138,19 @@ CREATE TABLE "tblArosAcos" ( CONSTRAINT "tblArosAcos_aros" FOREIGN KEY ("aro") REFERENCES "tblAros" ("id") ON DELETE CASCADE ); +CREATE TABLE "tblSchedulerTask" ( + "id" SERIAL UNIQUE, + "name" varchar(100) DEFAULT NULL, + "description" TEXT DEFAULT NULL, + "disabled" INTEGER NOT NULL DEFAULT '0', + "extension" varchar(100) DEFAULT NULL, + "task" varchar(100) DEFAULT NULL, + "frequency" varchar(100) DEFAULT NULL, + "params" TEXT DEFAULT NULL, + "nextrun" TIMESTAMP DEFAULT NULL, + "lastrun" TIMESTAMP DEFAULT NULL +) ; + UPDATE "tblVersion" set "major"=6, "minor"=0, "subminor"=0; COMMIT; diff --git a/install/update-6.0.0/update-sqlite3.sql b/install/update-6.0.0/update-sqlite3.sql index c33f05c59..c55358638 100644 --- a/install/update-6.0.0/update-sqlite3.sql +++ b/install/update-6.0.0/update-sqlite3.sql @@ -154,6 +154,19 @@ CREATE INDEX `indDocumentApproveLogApproveID` ON `tblDocumentApproveLog` (`appro CREATE INDEX `indDocumentReviewersRequired` ON `tblDocumentReviewers` (`required`); CREATE INDEX `indDocumentReviewLogReviewID` ON `tblDocumentReviewLog` (`reviewID`); +CREATE TABLE `tblSchedulerTask` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `name` varchar(100) DEFAULT NULL, + `description` TEXT DEFAULT NULL, + `disabled` INTEGER NOT NULL DEFAULT '0', + `extension` varchar(100) DEFAULT NULL, + `task` varchar(100) DEFAULT NULL, + `frequency` varchar(100) DEFAULT NULL, + `params` TEXT DEFAULT NULL, + `nextrun` TEXT DEFAULT NULL, + `lastrun` TEXT DEFAULT NULL +) ; + UPDATE tblVersion set major=6, minor=0, subminor=0; COMMIT; diff --git a/install/update-6.0.0/update.sql b/install/update-6.0.0/update.sql index 526c51f33..ea9b70c9a 100644 --- a/install/update-6.0.0/update.sql +++ b/install/update-6.0.0/update.sql @@ -153,6 +153,20 @@ CREATE TABLE `tblArosAcos` ( CONSTRAINT `tblArosAcos_aros` FOREIGN KEY (`aro`) REFERENCES `tblAros` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `tblSchedulerTask` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(100) DEFAULT NULL, + `description` text DEFAULT NULL, + `disabled` smallint(1) NOT NULL DEFAULT '0', + `extension` varchar(100) DEFAULT NULL, + `task` varchar(100) DEFAULT NULL, + `frequency` varchar(100) DEFAULT NULL, + `params` text DEFAULT NULL, + `nextrun` datetime DEFAULT NULL, + `lastrun` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UPDATE tblVersion set major=6, minor=0, subminor=0; COMMIT; From 9ae591bae769ac8e1be1b34c1d4359c7894e581d Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 15:31:43 +0200 Subject: [PATCH 003/356] add scheduler --- inc/inc.ClassScheduler.php | 74 +++++ inc/inc.ClassSchedulerTask.php | 278 ++++++++++++++++++ inc/inc.ClassSchedulerTaskBase.php | 37 +++ inc/inc.Extension.php | 1 + inc/inc.Scheduler.php | 17 ++ op/op.SchedulerTaskMgr.php | 107 +++++++ out/out.SchedulerTaskMgr.php | 67 +++++ utils/schedulercli.php | 108 +++++++ utils/seeddms-schedulercli | 6 + views/bootstrap/class.SchedulerTaskMgr.php | 315 +++++++++++++++++++++ 10 files changed, 1010 insertions(+) create mode 100644 inc/inc.ClassScheduler.php create mode 100644 inc/inc.ClassSchedulerTask.php create mode 100644 inc/inc.ClassSchedulerTaskBase.php create mode 100644 inc/inc.Scheduler.php create mode 100644 op/op.SchedulerTaskMgr.php create mode 100644 out/out.SchedulerTaskMgr.php create mode 100644 utils/schedulercli.php create mode 100644 utils/seeddms-schedulercli create mode 100644 views/bootstrap/class.SchedulerTaskMgr.php diff --git a/inc/inc.ClassScheduler.php b/inc/inc.ClassScheduler.php new file mode 100644 index 000000000..38aad78de --- /dev/null +++ b/inc/inc.ClassScheduler.php @@ -0,0 +1,74 @@ + + * @copyright 2018 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class to represent a SchedulerTask + * + * This class provides some very basic methods to manage extensions. + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @copyright 2011 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_Scheduler { + + /** + * Instanz of database + */ + protected $db; + + public function getTask($id) { /* {{{ */ + return SeedDMS_SchedulerTask::getInstance($id, $this->db); + } /* }}} */ + + public function getTasksByExtension($extname, $taskname) { /* {{{ */ + return SeedDMS_SchedulerTask::getInstancesByExtension($extname, $taskname, $this->db); + } /* }}} */ + + public function getTasks() { /* {{{ */ + return SeedDMS_SchedulerTask::getInstances($this->db); + } /* }}} */ + + public function addTask($extname, $taskname, $name, $description, $frequency, $disabled, $params) { /* {{{ */ + $db = $this->db; + if(!$extname) + return false; + if(!$taskname) + return false; + try { + $cron = Cron\CronExpression::factory($frequency); + } catch (Exception $e) { + return false; + } + $nextrun = $cron->getNextRunDate()->format('Y-m-d H:i:s'); + + $queryStr = "INSERT INTO `tblSchedulerTask` (`extension`, `task`, `name`, `description`, `frequency`, `disabled`, `params`, `nextrun`, `lastrun`) VALUES (".$db->qstr($extname).", ".$db->qstr($taskname).", ".$db->qstr($name).", ".$db->qstr($description).", ".$db->qstr($frequency).", ".intval($disabled).", ".$db->qstr(json_encode($params)).", '".$nextrun."', NULL)"; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $task = SeedDMS_SchedulerTask::getInstance($db->getInsertID('tblSchedulerTask'), $db); + + return $task; + } /* }}} */ + + function __construct($db) { + $this->db = $db; + } + +} diff --git a/inc/inc.ClassSchedulerTask.php b/inc/inc.ClassSchedulerTask.php new file mode 100644 index 000000000..45017dbc3 --- /dev/null +++ b/inc/inc.ClassSchedulerTask.php @@ -0,0 +1,278 @@ + + * @copyright 2018 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Class to represent a SchedulerTask + * + * This class provides some very basic methods to manage extensions. + * + * @category DMS + * @package SeedDMS + * @author Markus Westphal, Malcolm Cowe, Uwe Steinmann + * @copyright 2011 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_SchedulerTask { + /** + * Instanz of database + */ + protected $db; + + /** + * @var integer unique id of task + */ + protected $_id; + + /** + * @var string name of task + */ + protected $_name; + + /** + * @var string description of task + */ + protected $_description; + + /** + * @var string extension of task + */ + protected $_extension; + + /** + * @var string task of task + */ + protected $_task; + + /** + * @var string frequency of task + */ + protected $_frequency; + + /** + * @var integer set if disabled + */ + protected $_disabled; + + /** + * @var integer last run + */ + protected $_lastrun; + + /** + * @var integer next run + */ + protected $_nextrun; + + public static function getInstance($id, $db) { /* {{{ */ + $queryStr = "SELECT * FROM `tblSchedulerTask` WHERE `id` = " . (int) $id; + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && $resArr == false) + return false; + if (count($resArr) != 1) + return null; + $row = $resArr[0]; + + $task = new self($row["id"], $row['name'], $row["description"], $row["extension"], $row["task"], $row["frequency"], $row['disabled'], json_decode($row['params'], true), $row["nextrun"], $row["lastrun"]); + $task->setDB($db); + + return $task; + } /* }}} */ + + public static function getInstances($db) { /* {{{ */ + $queryStr = "SELECT * FROM `tblSchedulerTask`"; + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && $resArr == false) + return false; + if (count($resArr) == 0) + return array(); + + $tasks = array(); + foreach($resArr as $row) { + $task = new self($row["id"], $row['name'], $row["description"], $row["extension"], $row["task"], $row["frequency"], $row['disabled'], json_decode($row['params'], true), $row["nextrun"], $row["lastrun"]); + $task->setDB($db); + $tasks[] = $task; + } + + return $tasks; + } /* }}} */ + + public static function getInstancesByExtension($extname, $taskname, $db) { /* {{{ */ + $queryStr = "SELECT * FROM `tblSchedulerTask` WHERE `extension` = '".$extname."' AND `task` = '".$taskname."'"; + $resArr = $db->getResultArray($queryStr); + if (is_bool($resArr) && $resArr == false) + return false; + if (count($resArr) == 0) + return array(); + + $tasks = array(); + foreach($resArr as $row) { + $task = new self($row["id"], $row['name'], $row["description"], $row["extension"], $row["task"], $row["frequency"], $row['disabled'], json_decode($row['params'], true), $row["nextrun"], $row["lastrun"]); + $task->setDB($db); + $tasks[] = $task; + } + + return $tasks; + } /* }}} */ + + function __construct($id, $name, $description, $extension, $task, $frequency, $disabled, $params, $nextrun, $lastrun) { + $this->_id = $id; + $this->_name = $name; + $this->_description = $description; + $this->_extension = $extension; + $this->_task = $task; + $this->_frequency = $frequency; + $this->_disabled = $disabled; + $this->_params = $params; + $this->_nextrun = $nextrun; + $this->_lastrun = $lastrun; + } + + public function setDB($db) { + $this->db = $db; + } + + public function getID() { + return $this->_id; + } + + public function getName() { + return $this->_name; + } + + public function setName($newName) { /* {{{ */ + $db = $this->db; + + $queryStr = "UPDATE `tblSchedulerTask` SET `name` =".$db->qstr($newName)." WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_name = $newName; + return true; + } /* }}} */ + + public function getDescription() { + return $this->_description; + } + + public function setDescription($newDescripion) { /* {{{ */ + $db = $this->db; + + $queryStr = "UPDATE `tblSchedulerTask` SET `description` =".$db->qstr($newDescripion)." WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_description = $newDescripion; + return true; + } /* }}} */ + + public function getExtension() { + return $this->_extension; + } + + public function getTask() { + return $this->_task; + } + + public function getFrequency() { + return $this->_frequency; + } + + public function setFrequency($newFrequency) { /* {{{ */ + $db = $this->db; + + try { + $cron = Cron\CronExpression::factory($newFrequency); + } catch (Exception $e) { + return false; + } + $nextrun = $cron->getNextRunDate()->format('Y-m-d H:i:s'); + + $queryStr = "UPDATE `tblSchedulerTask` SET `frequency` =".$db->qstr($newFrequency).", `nextrun` = '".$nextrun."' WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_frequency = $newFrequency; + $this->_nextrun = $nextrun; + return true; + } /* }}} */ + + public function getNextRun() { + return $this->_nextrun; + } + + public function getLastRun() { + return $this->_lastrun; + } + + public function getDisabled() { + return $this->_disabled; + } + + public function setDisabled($newDisabled) { /* {{{ */ + $db = $this->db; + + $queryStr = "UPDATE `tblSchedulerTask` SET `disabled` =".intval($newDisabled)." WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_disabled = $newDisable; + return true; + } /* }}} */ + + public function setParameter($newParams) { /* {{{ */ + $db = $this->db; + + $queryStr = "UPDATE `tblSchedulerTask` SET `parameter` =".json_encode($newParams)." WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_params = $newParams; + return true; + } /* }}} */ + + public function getParameter() { + return $this->_params; + } + + public function isDue() { + return $this->_nextrun < date('Y-m-d H:i:s'); + } + + public function updateLastNextRun() { + $db = $this->db; + + $lastrun = date('Y-m-d H:i:s'); + try { + $cron = Cron\CronExpression::factory($this->_frequency); + $nextrun = $cron->getNextRunDate()->format('Y-m-d H:i:s'); + } catch (Exception $e) { + $nextrun = null; + } + + $queryStr = "UPDATE `tblSchedulerTask` SET `lastrun`=".$db->qstr($lastrun).", `nextrun`=".($nextrun ? $db->qstr($nextrun) : "NULL")." WHERE `id` = " . $this->_id; + $res = $db->getResult($queryStr); + if (!$res) + return false; + + $this->_lastrun = $lastrun; + $this->_nextrun = $nextrun; + } +} diff --git a/inc/inc.ClassSchedulerTaskBase.php b/inc/inc.ClassSchedulerTaskBase.php new file mode 100644 index 000000000..c190096a9 --- /dev/null +++ b/inc/inc.ClassSchedulerTaskBase.php @@ -0,0 +1,37 @@ + +* All rights reserved +* +* This script is part of the SeedDMS project. The SeedDMS project 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. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* +* This script 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. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ + +/** + * Base class for scheduler task + * + * @author Uwe Steinmann + * @package SeedDMS + */ +class SeedDMS_SchedulerTaskBase { + public function execute($task, $dms) { + return true; + } +} + +?> diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index b5ba1c203..ceb491587 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -12,6 +12,7 @@ */ require "inc.ClassExtensionMgr.php"; +require_once "inc.ClassSchedulerTaskBase.php"; require_once "inc.ClassExtBase.php"; require_once "inc.Version.php"; require_once "inc.Utils.php"; diff --git a/inc/inc.Scheduler.php b/inc/inc.Scheduler.php new file mode 100644 index 000000000..e5c2e3aaa --- /dev/null +++ b/inc/inc.Scheduler.php @@ -0,0 +1,17 @@ + + * @copyright Copyright (C) 2018 Uwe Steinmann + * @version Release: @package_version@ + */ + +require_once "inc.ClassSchedulerTaskBase.php"; +require_once "inc.ClassScheduler.php"; +require_once "inc.ClassSchedulerTask.php"; + diff --git a/op/op.SchedulerTaskMgr.php b/op/op.SchedulerTaskMgr.php new file mode 100644 index 000000000..6904da2c7 --- /dev/null +++ b/op/op.SchedulerTaskMgr.php @@ -0,0 +1,107 @@ +isGuest()) { + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); +} + +if (isset($_POST["action"])) $action=$_POST["action"]; +else $action=NULL; + +$scheduler = new SeedDMS_Scheduler($dms->getDB()); + +// add new task --------------------------------------------------- +if ($action == "addtask") { /* {{{ */ + + /* Check if the form data comes for a trusted request */ + if(!checkFormKey('addtask')) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_request_token")); + } + + $extension = $_POST["extension"]; + $task = $_POST["task"]; + $name = $_POST["name"]; + $description = $_POST["description"]; + $frequency = $_POST["frequency"]; + $params = $_POST["params"]; + + $newtask = $scheduler->addTask($extension, $task, $name, $description, $frequency, 0, $params); + if ($newtask) { + } + else UI::exitError(getMLText("admin_tools"),getMLText("error_occured")); + + $taskid=$newtask->getID(); + + $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_add_task'))); + + add_log_line(".php&action=addtask&name=".$name); +} /* }}} */ + +// modify transmittal ---------------------------------------------------- +else if ($action == "edittask") { /* {{{ */ + + /* Check if the form data comes for a trusted request */ + if(!checkFormKey('edittask')) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_request_token")); + } + + if (!isset($_POST["taskid"]) || !is_numeric($_POST["taskid"]) || intval($_POST["taskid"])<1) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_task")); + } + + $taskid=$_POST["taskid"]; + $editedtask = $scheduler->getTask($taskid); + + if (!is_object($editedtask)) { + UI::exitError(getMLText("admin_tools"),getMLText("invalid_task")); + } + + $name = $_POST["name"]; + $description = $_POST["description"]; + $frequency = $_POST["frequency"]; + $disabled = isset($_POST["disabled"]) ? $_POST["disabled"] : 0; + $params = $_POST["params"]; + + if ($editedtask->getName() != $name) + $editedtask->setName($name); + if ($editedtask->getDescription() != $description) + $editedtask->setDescription($description); + $editedtask->setFrequency($frequency); + $editedtask->setDisabled($disabled); + $editedtask->setParameter($params); + + $session->setSplashMsg(array('type'=>'success', 'msg'=>getMLText('splash_edit_task'))); + add_log_line(".php&action=edittask&taskid=".$taskid); +} /* }}} */ + +header("Location:../out/out.SchedulerTaskMgr.php"); + diff --git a/out/out.SchedulerTaskMgr.php b/out/out.SchedulerTaskMgr.php new file mode 100644 index 000000000..14d95d766 --- /dev/null +++ b/out/out.SchedulerTaskMgr.php @@ -0,0 +1,67 @@ +$dms, 'user'=>$user)); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); +if (!$accessop->check_view_access($view, $_GET)) { + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); +} + +if(isset($_GET['task'])) { + $taskname = $_GET['task']; +} else { + $taskname = ''; +} + +if(isset($_GET['extension'])) { + $extname = $_GET['extension']; +} else { + $extname = ''; +} + +if(isset($_GET['taskid'])) { + $taskid = $_GET['taskid']; +} else { + $taskid = 0; +} + +$scheduler = new SeedDMS_Scheduler($dms->getDB()); + +if($view) { + $view->setParam('scheduler', $scheduler); + $view->setParam('accessobject', $accessop); + $view->setParam('taskname', $taskname); + $view->setParam('extname', $extname); + $view->setParam('taskid', $taskid); + $view($_GET); + exit; +} + +?> diff --git a/utils/schedulercli.php b/utils/schedulercli.php new file mode 100644 index 000000000..b5e4a59cc --- /dev/null +++ b/utils/schedulercli.php @@ -0,0 +1,108 @@ +]\n"; + echo "\n"; + echo "Description:\n"; + echo " Check for scheduled tasks.\n"; + echo "\n"; + echo "Options:\n"; + echo " -h, --help: print usage information and exit.\n"; + echo " -v, --version: print version and exit.\n"; + echo " --config: set alternative config file.\n"; + echo " --mode: set mode of operation (run, check, list).\n"; +} /* }}} */ + +$version = "0.0.1"; +$shortoptions = "hvc"; +$longoptions = array('help', 'version', 'config:', 'mode:'); +if(false === ($options = getopt($shortoptions, $longoptions))) { + usage(); + exit(0); +} + +/* Print help and exit */ +if(isset($options['h']) || isset($options['help'])) { + usage(); + exit(0); +} + +/* Print version and exit */ +if(isset($options['v']) || isset($options['verѕion'])) { + echo $version."\n"; + exit(0); +} + +/* Set alternative config file */ +if(isset($options['config'])) { + define('SEEDDMS_CONFIG_FILE', $options['config']); +} + +$mode = 'list'; +if(isset($options['mode'])) { + if(!in_array($options['mode'], array('run', 'check', 'list'))) { + usage(); + exit(1); + } + $mode = $options['mode']; +} + +include($myincpath."/inc/inc.Settings.php"); +include($myincpath."/inc/inc.Init.php"); +include($myincpath."/inc/inc.Extension.php"); +include($myincpath."/inc/inc.DBInit.php"); +include($myincpath."/inc/inc.Scheduler.php"); + +$scheduler = new SeedDMS_Scheduler($db); +$tasks = $scheduler->getTasks(); + +foreach($tasks as $task) { + if(is_object($taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()])) { + switch($mode) { + case "run": + if(method_exists($taskobj, 'execute')) { + if(!$task->getDisabled()) { + if($taskobj->execute($task, $dms)) { + $task->updateLastNextRun(); + } else { + echo "Execution of task failed, task has been disabled\n"; + $task->setDisabled(1); + } + } + } + break; + case "check": + echo "Checking ".$task->getExtension()."::".$task->getTask().":\n"; + if(!method_exists($taskobj, 'execute')) { + echo " Missing method execute()\n"; + } + if(get_parent_class($taskobj) != 'SeedDMS_SchedulerTaskBase') { + echo " wrong parent class\n"; + } + break; + case "list": + if(!$task->getDisabled()) { + if($task->isDue()) + echo "*"; + else + echo " "; + } else { + echo "-"; + } + echo " ".$task->getExtension()."::".$task->getTask().""; + echo " ".$task->getNextRun(); + echo "\n"; + break; + } + } + +} diff --git a/utils/seeddms-schedulercli b/utils/seeddms-schedulercli new file mode 100644 index 000000000..34bc8b219 --- /dev/null +++ b/utils/seeddms-schedulercli @@ -0,0 +1,6 @@ +#!/bin/sh +if [ -z ${SEEDDMS_HOME+x} ]; then + echo "Please set SEEDDMS_HOME before running this script"; + exit 1; +fi +php -f ${SEEDDMS_HOME}/utils/schedulercli.php -- "$@" diff --git a/views/bootstrap/class.SchedulerTaskMgr.php b/views/bootstrap/class.SchedulerTaskMgr.php new file mode 100644 index 000000000..8ada34273 --- /dev/null +++ b/views/bootstrap/class.SchedulerTaskMgr.php @@ -0,0 +1,315 @@ + + * @copyright Copyright (C) 2013 Uwe Steinmann + * @version Release: @package_version@ + */ + +/** + * Include parent class + */ +require_once("class.Bootstrap.php"); + +/** + * Class which outputs the html page for SchedulerTaskMgr view + * + * @category DMS + * @package SeedDMS + * @author Uwe Steinmann + * @copyright Copyright (C) 2013 Uwe Steinmann + * @version Release: @package_version@ + */ +class SeedDMS_View_SchedulerTaskMgr extends SeedDMS_Bootstrap_Style { + + function js() { /* {{{ */ + header('Content-Type: application/javascript'); +?> +$(document).ready( function() { + $('body').on('click', '.addtask', function(ev){ + ev.preventDefault(); + $('#editaddtask.ajax').trigger('update', {extension: $(this).data('extension'), task: $(this).data('task')}); + }); + $('body').on('click', '.listtasks', function(ev){ + ev.preventDefault(); + $('#listtasks.ajax').trigger('update', {extension: $(this).data('extension'), task: $(this).data('task')}); + }); + $('body').on('click', '.edittask', function(ev){ + ev.preventDefault(); + $('#editaddtask.ajax').trigger('update', {taskid: $(this).data('id'), action: $(this).data('action')}); + }); + $('#listtasks.ajax').trigger('update', {}); +}); +params['dms']; + $user = $this->params['user']; + $extname = $this->params['extname']; + $taskname = $this->params['taskname']; + if($extname && $taskname) { + $taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$extname][$taskname]; + if(method_exists($taskobj, 'getAdditionalParams')) + $additionalparams = $taskobj->getAdditionalParams(); + else + $additionalparams = null; +?> +
+ + + + +
+ +
+ :: +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+params['dms']; + $user = $this->params['user']; + $scheduler = $this->params['scheduler']; + $taskid = $this->params['taskid']; + + $task = $scheduler->getTask($taskid); + $taskobj = $GLOBALS['SEEDDMS_SCHEDULER']['tasks'][$task->getExtension()][$task->getTask()]; +?> +
+ + + + + +
+ +
+ getExtension() ?>::getTask() ?> +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+getAdditionalParams()) { + foreach($additionalparams as $param) { + switch($param['type']) { + default: +?> +
+ +
+ +
+
+ +
+ +
+ +
+
+
+params['dms']; + $user = $this->params['user']; + $extname = $this->params['extname']; + $taskname = $this->params['taskname']; + $scheduler = $this->params['scheduler']; + + if($extname && $taskname) + $tasks = $scheduler->getTasksByExtension($extname, $taskname); + else + $tasks = $scheduler->getTasks(); + if(!$tasks) + return; + + $this->contentHeading(getMLText("scheduler_class_tasks")); + echo "\n"; + print "\n\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + foreach($tasks as $task) { + echo "getDisabled() ? " class=\"success\"" : "").">"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
".getMLText('scheduler_class')."".getMLText('task_name')."".getMLText('task_description')."".getMLText('task_frequency')."".getMLText('task_next_run')."".getMLText('task_last_run')."
"; + echo $task->getExtension()."::".$task->getTask(); + echo ""; + echo $task->getName(); + echo ""; + echo $task->getDescription(); + echo ""; + echo $task->getFrequency(); + echo ""; + echo $task->getNextRun(); + echo ""; + echo $task->getLastRun(); + echo ""; + print ""; + echo "
\n"; + } /* }}} */ + + function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $extname = $this->params['extname']; + $taskname = $this->params['taskname']; + $scheduler = $this->params['scheduler']; + + $this->htmlStartPage(getMLText("admin_tools")); + $this->globalNavigation(); + $this->contentStart(); + $this->pageNavigation(getMLText("admin_tools"), "admin_tools"); + $this->contentHeading(getMLText("scheduler_task_manager")); +?> +
+
+\n"; + print "\n\n"; + print "".getMLText('scheduler_class')."\n"; + print "".getMLText('scheduler_class_description')."\n"; + print "".getMLText('scheduler_class_parameter')."\n"; + print "\n"; + print "\n"; + $errmsgs = array(); + foreach($GLOBALS['SEEDDMS_SCHEDULER']['tasks'] as $extname=>$tasks) { + foreach($tasks as $taskname=>$task) { + echo ""; + echo ""; + echo $extname."::".$taskname; + echo ""; + echo ""; + echo $task->getDescription(); + echo ""; + echo ""; + $params = $task->getAdditionalParams(); + foreach($params as $param) + $k[] = $param['name']; + echo implode(', ', $k); + echo ""; + echo ""; + print "
"; + $t = $scheduler->getTasksByExtension($extname, $taskname); + if($t) { + print ""; + } + print ""; + print "
"; + echo ""; + echo ""; + } + } + echo "\n"; +?> +
+
+
+
+
+
+ +contentEnd(); + $this->htmlEndPage(); + } /* }}} */ +} +?> From 9711cee70a12707318ad28c8d1c46a93573747ac Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 15:31:57 +0200 Subject: [PATCH 004/356] add example for scheduler --- ext/example/class.example.php | 17 +++++++++++++++-- ext/example/lang.php | 5 +++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/ext/example/class.example.php b/ext/example/class.example.php index fce09e0b0..31c892d95 100644 --- a/ext/example/class.example.php +++ b/ext/example/class.example.php @@ -117,8 +117,21 @@ class SeedDMS_ExtExample_ViewFolder { * @package SeedDMS * @subpackage example */ -class SeedDMS_ExtExample_Task { - public function execute() { +class SeedDMS_ExtExample_Task extends SeedDMS_SchedulerTaskBase { + public function execute($task, $dms) { + return true; + } + + public function getDescription() { + return 'Description'; + } + + public function getAdditionalParams() { + return array(array( + 'name'=>'email', + 'type'=>'string', + 'description'=> '', + )); } } diff --git a/ext/example/lang.php b/ext/example/lang.php index 55b3b860b..aca01c37d 100644 --- a/ext/example/lang.php +++ b/ext/example/lang.php @@ -1,5 +1,10 @@ 'Dies war mal "Ordner enthält". Wurde von sample Extension geändert.', + 'task_example_example_email' => 'Email', +); +$__lang['en_GB'] = array( + 'folder_contents' => 'This used to be "Folder contents". Was changed by sample Extension.', + 'task_example_example_email' => 'Email', ); ?> From eadce9145dd31f6fd2579e8879973508be839d90 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 17:46:44 +0200 Subject: [PATCH 005/356] do now allow to set disabled users as owner --- views/bootstrap/class.AddDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.AddDocument.php b/views/bootstrap/class.AddDocument.php index cc7736043..048a56941 100644 --- a/views/bootstrap/class.AddDocument.php +++ b/views/bootstrap/class.AddDocument.php @@ -271,7 +271,7 @@ $(document).ready(function() { getAllUsers($sortusersinlist); foreach ($allUsers as $currUser) { - if ($currUser->isGuest()) + if ($currUser->isGuest() || $currUser->isDisabled()) continue; print "\n"; From e728fcca841405381b2072277c658a66856789e9 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 17:47:32 +0200 Subject: [PATCH 006/356] set default for $defaulttext of printMLText() to null --- inc/inc.Language.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.Language.php b/inc/inc.Language.php index 8f5c4423a..820157666 100644 --- a/inc/inc.Language.php +++ b/inc/inc.Language.php @@ -118,7 +118,7 @@ function getMLText($key, $replace = array(), $defaulttext = null, $lang="") { /* return $tmpText; } /* }}} */ -function printMLText($key, $replace = array(), $defaulttext = "", $lang="") /* {{{ */ +function printMLText($key, $replace = array(), $defaulttext = null, $lang="") /* {{{ */ { print getMLText($key, $replace, $defaulttext, $lang); } From 7dc6cba8f207b76b1db962e54772bb76c1d82dc5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 21:46:45 +0200 Subject: [PATCH 007/356] make printPopupBox() public --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 1cac407df..e8a26658d 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2983,7 +2983,7 @@ $(document).ready(function() { $this->printTimelineHtml($height); } /* }}} */ - protected function printPopupBox($title, $content, $ret=false) { /* {{{ */ + public function printPopupBox($title, $content, $ret=false) { /* {{{ */ $id = md5(uniqid()); /* $this->addFooterJS(' From 6fb4b9b545b6e41ea848341f941ed758894f7f3b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 21:47:14 +0200 Subject: [PATCH 008/356] switch list AppRevOwner and DraftOwner --- views/bootstrap/class.MyDocuments.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/views/bootstrap/class.MyDocuments.php b/views/bootstrap/class.MyDocuments.php index cff5e9af7..6c0f9cab6 100644 --- a/views/bootstrap/class.MyDocuments.php +++ b/views/bootstrap/class.MyDocuments.php @@ -706,14 +706,16 @@ $(document).ready( function() { echo '
  • '.count($resArr).''.getMLText("documents_user_reception").'
  • '; $resArr = $dms->getDocumentList('NoReceiveOwner', $user); echo '
  • '.count($resArr).''.getMLText("documents_user_no_reception").'
  • '; - $resArr = $dms->getDocumentList('DraftOwner', $user); - echo '
  • '.count($resArr).''.getMLText("documents_user_draft").'
  • '; - echo ''; - $this->contentHeading(getMLText("documents_in_process")); - echo ''; + $this->contentHeading(getMLText("documents_in_process")); + echo '\n"; - print "

    ".htmlspecialchars($latestContent->getComment())."

    "; + $txt = $this->callHook('showVersionComment', $latestContent); + if($txt) { + echo $txt; + } else { + print "

    ".htmlspecialchars($latestContent->getComment())."

    "; + } print "
      \n"; $attributes = $latestContent->getAttributes(); if($attributes) { From 2b62fbcc1b1a47755a921626729b1f0e707a8c05 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 21:47:56 +0200 Subject: [PATCH 010/356] set styles for div.popupbox dt and div.popupbox dd --- styles/bootstrap/application.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/styles/bootstrap/application.css b/styles/bootstrap/application.css index 9c9f7d3a0..48423d6cc 100644 --- a/styles/bootstrap/application.css +++ b/styles/bootstrap/application.css @@ -248,6 +248,16 @@ div.popupbox { width: 250px; } +div.popupbox dt { + font-weight: normal; + font-size: 80%; +} + +div.popupbox dd { + margin-left: 0px; + margin-bottom: 5px; +} + div.popupbox span.closepopupbox { position: absolute; right: 5px; From ed48285da588f5e33a36f8f9d11e283c81d21fc0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 21:48:25 +0200 Subject: [PATCH 011/356] pass extension config to init() of extension --- inc/inc.Extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/inc.Extension.php b/inc/inc.Extension.php index ceb491587..b0e915333 100644 --- a/inc/inc.Extension.php +++ b/inc/inc.Extension.php @@ -37,7 +37,7 @@ foreach($EXT_CONF as $extname=>$extconf) { include($classfile); $obj = new $extconf['class']['name']; if(method_exists($obj, 'init')) - $obj->init(); + $obj->init(isset($settings->_extensions[$extname]) ? $settings->_extensions[$extname] : null); } if(isset($extconf['language']['file'])) { $langfile = $settings->_rootDir."/ext/".$extname."/".$extconf['language']['file']; From 867a5b8d7cca0591b37c53289f009763d694493f Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 21:49:48 +0200 Subject: [PATCH 012/356] add entries for 6.0.6 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 7c83aeef8..44a0f4d37 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,6 +12,8 @@ - remove ѕome unneeded code from AddDocument which just caused php warnings - do not set the uploader of new documents to owner if the owner is different from the uploader +- add scheduler +- add hook showVersionComment in out.ViewDocument.php - merge changes up to 5.1.6 -------------------------------------------------------------------------------- From c9d0ac3e73aced6d1c610486e90c8101325b0579 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 07:27:30 +0200 Subject: [PATCH 013/356] better error handling for extension list from repository --- inc/inc.ClassExtensionMgr.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/inc/inc.ClassExtensionMgr.php b/inc/inc.ClassExtensionMgr.php index eadf445cb..8b5081558 100644 --- a/inc/inc.ClassExtensionMgr.php +++ b/inc/inc.ClassExtensionMgr.php @@ -421,14 +421,15 @@ class SeedDMS_Extension_Mgr { $result = array(); $vcache = array(); // keep highest version of extension foreach($list as $e) { - if($e[0] != '#') { - $re = json_decode($e, true); - if(!isset($result[$re['name']])) { - $result[$re['name']] = $re; - $vcache[$re['name']] = $re['version']; - } elseif(self::cmpVersion($re['version'], $vcache[$re['name']]) > 0) { - $result[$re['name']] = $re; - $vcache[$re['name']] = $re['version']; + if($e[0] != '#' && trim($e)) { + if($re = json_decode($e, true)) { + if(!isset($result[$re['name']])) { + $result[$re['name']] = $re; + $vcache[$re['name']] = $re['version']; + } elseif(self::cmpVersion($re['version'], $vcache[$re['name']]) > 0) { + $result[$re['name']] = $re; + $vcache[$re['name']] = $re['version']; + } } } } From f9a00de8ee67a234c0b797166ade05c8e30dc4d5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 07:39:27 +0200 Subject: [PATCH 014/356] add SchedulerTaskMgr to list --- views/bootstrap/class.AdminTools.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index fe62004c1..bd17469a6 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -145,6 +145,9 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style { check_view_access('ExtensionMgr')) { ?>
      +check_view_access('SchedulerTaskMgr')) { ?> +
      + check_view_access('Info')) { ?>
      From d5c142aebb23b1f59826215accfde603db846590 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 07:41:52 +0200 Subject: [PATCH 015/356] update font-awesome to 3.2.1 --- .../font-awesome/css/font-awesome-ie7.css | 276 +++++++++-- .../font-awesome/css/font-awesome-ie7.min.css | 408 ++++++++++++++++- .../font-awesome/css/font-awesome.css | 295 ++++++++++-- .../font-awesome/css/font-awesome.min.css | 427 +++++++++++++++++- .../font-awesome/font/FontAwesome.otf | Bin 50204 -> 61896 bytes .../font-awesome/font/fontawesome-webfont.eot | Bin 29360 -> 37405 bytes .../font-awesome/font/fontawesome-webfont.svg | 82 +++- .../font-awesome/font/fontawesome-webfont.ttf | Bin 64960 -> 79076 bytes .../font/fontawesome-webfont.woff | Bin 34420 -> 43572 bytes 9 files changed, 1359 insertions(+), 129 deletions(-) diff --git a/styles/bootstrap/font-awesome/css/font-awesome-ie7.css b/styles/bootstrap/font-awesome/css/font-awesome-ie7.css index dae56755b..17f07766c 100644 --- a/styles/bootstrap/font-awesome/css/font-awesome-ie7.css +++ b/styles/bootstrap/font-awesome/css/font-awesome-ie7.css @@ -1,26 +1,27 @@ /*! - * Font Awesome 3.1.0 + * Font Awesome 3.2.1 * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io + * ------------------------------------------------------------------------------ + * The full suite of pictographic icons, examples, and documentation can be + * found at http://fontawesome.io. Stay up to date on Twitter at + * http://twitter.com/fontawesome. * * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - + * ------------------------------------------------------------------------------ + * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - + * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- + * + * Author - Dave Gandy + * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com + * Twitter: http://twitter.com/davegandy + * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ .icon-large { font-size: 1.3333333333333333em; @@ -52,14 +53,6 @@ margin-bottom: -5px; padding-bottom: 4px; } -ul.icons-ul { - text-indent: -1em; - margin-left: 2.142857142857143em; -} -ul.icons-ul > li .icon-li { - width: 1em; - margin-right: 0; -} .btn [class^="icon-"].pull-left, .btn [class*=" icon-"].pull-left, .btn [class^="icon-"].pull-right, @@ -83,7 +76,7 @@ a [class*=" icon-"] { .icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-envelope { +.icon-envelope-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-heart { @@ -125,19 +118,25 @@ a [class*=" icon-"] { .icon-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-power-off { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-gear { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-file { +.icon-file-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-time { @@ -164,6 +163,9 @@ a [class*=" icon-"] { .icon-repeat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-rotate-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-refresh { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -359,6 +361,9 @@ a [class*=" icon-"] { .icon-share-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-mail-forward { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-resize-full { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -452,13 +457,16 @@ a [class*=" icon-"] { .icon-cogs { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-gears { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-comments { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-thumbs-up { +.icon-thumbs-up-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-thumbs-down { +.icon-thumbs-down-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-star-half { @@ -500,6 +508,9 @@ a [class*=" icon-"] { .icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-unchecked { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-bookmark-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -599,6 +610,9 @@ a [class*=" icon-"] { .icon-paper-clip { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-paperclip { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-save { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -668,7 +682,7 @@ a [class*=" icon-"] { .icon-sort-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-envelope-alt { +.icon-envelope { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-linkedin { @@ -677,6 +691,9 @@ a [class*=" icon-"] { .icon-undo { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-rotate-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-legal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -731,7 +748,7 @@ a [class*=" icon-"] { .icon-food { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-file-alt { +.icon-file-text-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } .icon-building { @@ -812,6 +829,12 @@ a [class*=" icon-"] { .icon-reply { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-mail-reply { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-github-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-folder-close-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -857,10 +880,12 @@ a [class*=" icon-"] { .icon-mail-reply-all { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } -.icon-star-half-full, .icon-star-half-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-star-half-full { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} .icon-location-arrow { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } @@ -981,3 +1006,198 @@ a [class*=" icon-"] { .icon-share-sign { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); } +.icon-compass { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-collapse { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-collapse-top { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-expand { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-eur { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-euro { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gbp { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-usd { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dollar { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-inr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-rupee { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-jpy { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-yen { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-cny { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-renminbi { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-krw { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-won { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-btc { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitcoin { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-file-text { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-alphabet { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-alphabet-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-attributes { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-attributes-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-order { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sort-by-order-alt { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-thumbs-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-xing { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-xing-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-youtube-play { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dropbox { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-stackexchange { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-instagram { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-flickr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-adn { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitbucket { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bitbucket-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tumblr { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-tumblr-sign { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-down { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-up { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-left { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-long-arrow-right { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-apple { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-windows { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-android { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-linux { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-dribbble { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-skype { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-foursquare { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-trello { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-female { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-male { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-gittip { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-sun { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-moon { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-archive { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-bug { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-vk { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-weibo { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} +.icon-renren { + *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ''); +} diff --git a/styles/bootstrap/font-awesome/css/font-awesome-ie7.min.css b/styles/bootstrap/font-awesome/css/font-awesome-ie7.min.css index 47e050828..d3dae63bd 100644 --- a/styles/bootstrap/font-awesome/css/font-awesome-ie7.min.css +++ b/styles/bootstrap/font-awesome/css/font-awesome-ie7.min.css @@ -1,24 +1,384 @@ -/*! - * Font Awesome 3.1.0 - * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- - * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle}.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%}.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px}ul.icons-ul{text-indent:-1em;margin-left:2.142857142857143em}ul.icons-ul>li .icon-li{width:1em;margin-right:0}.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit}.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em}a [class^="icon-"],a [class*=" icon-"]{cursor:pointer}.icon-glass{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-music{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-search{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-film{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-large{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-in{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-out{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cog{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trash{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-home{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-time{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-road{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-inbox{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-repeat{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-refresh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-headphones{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-qrcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-barcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tags{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-book{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-print{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-font{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bold{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-italic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-height{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-width{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-center{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-justify{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facetime-video{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-picture{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pencil{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-map-marker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-adjust{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tint{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-edit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-move{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pause{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eject{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-question-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-info-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-screenshot{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ban-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-full{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-small{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-asterisk{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exclamation-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-gift{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-leaf{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fire{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-warning-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plane{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-calendar{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-random{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magnet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-retweet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-shopping-cart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bar-chart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera-retro{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-key{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cogs{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-half{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signout{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pushpin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-external-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trophy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lemon{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-credit-card{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rss{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hdd{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bullhorn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-certificate{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-globe{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-wrench{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tasks{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-filter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-briefcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fullscreen{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-group{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beaker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cut{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-copy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paper-clip{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-save{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sign-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reorder{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ul{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ol{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-strikethrough{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-underline{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-table{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-truck{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-money{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-columns{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-undo{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-legal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-dashboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bolt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sitemap{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-umbrella{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paste{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lightbulb{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exchange{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user-md{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stethoscope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-suitcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-coffee{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-food{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-building{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hospital{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ambulance{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-medkit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fighter-jet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beer{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-h-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-desktop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-laptop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tablet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-mobile-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-spinner{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reply{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-expand-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-collapse-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-smile{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-frown{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-meh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-gamepad{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-keyboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag-checkered{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-terminal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-code{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reply-all{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-mail-reply-all{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-half-full,.icon-star-half-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-location-arrow{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-crop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-code-fork{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlink{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-question{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-info{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exclamation{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-superscript{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-subscript{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eraser{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-puzzle-piece{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-microphone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-microphone-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-shield{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-calendar-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fire-extinguisher{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rocket{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-maxcdn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-sign-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-sign-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-sign-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-sign-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-html5{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-css3{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-anchor{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlock-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bullseye{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ellipsis-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ellipsis-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rss-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ticket{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-level-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-level-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-edit-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-external-link-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')} \ No newline at end of file +.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:middle;} +.nav [class^="icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;}.nav [class^="icon-"].icon-large,.nav [class*=" icon-"].icon-large{vertical-align:-25%;} +.nav-pills [class^="icon-"].icon-large,.nav-tabs [class^="icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large{line-height:.75em;margin-top:-7px;padding-top:5px;margin-bottom:-5px;padding-bottom:4px;} +.btn [class^="icon-"].pull-left,.btn [class*=" icon-"].pull-left,.btn [class^="icon-"].pull-right,.btn [class*=" icon-"].pull-right{vertical-align:inherit;} +.btn [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large{margin-top:-0.5em;} +a [class^="icon-"],a [class*=" icon-"]{cursor:pointer;} +.icon-glass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-music{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-search{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-envelope-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-heart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-user{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-film{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th-large{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-th-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-zoom-in{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-zoom-out{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-power-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cog{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gear{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trash{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-home{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-time{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-road{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-download-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-inbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-repeat{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rotate-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-refresh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-headphones{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-volume-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-qrcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-barcode{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tag{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tags{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-book{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bookmark{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-print{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-camera{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-font{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bold{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-italic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-text-height{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-text-width{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-center{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-align-justify{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-indent-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-indent-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facetime-video{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-picture{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pencil{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-map-marker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-adjust{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tint{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-edit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-move{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-step-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fast-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-backward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pause{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fast-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-step-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eject{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-question-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-info-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-screenshot{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-remove-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ok-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ban-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-forward{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-small{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-asterisk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exclamation-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gift{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-leaf{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fire{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eye-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eye-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-warning-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plane{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-calendar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-random{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comment{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-magnet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-retweet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-shopping-cart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-close{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-open{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-resize-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bar-chart{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-twitter-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facebook-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-camera-retro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-key{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cogs{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gears{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comments{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-up-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-down-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-heart-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signout{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linkedin-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pushpin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-external-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-signin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trophy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-upload-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lemon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unchecked{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bookmark-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-phone-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-twitter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-facebook{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlock{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-credit-card{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rss{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hdd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bullhorn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bell{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-certificate{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hand-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-globe{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-wrench{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tasks{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-filter{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-briefcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fullscreen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-group{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-link{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-beaker{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cut{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-copy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paper-clip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paperclip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-save{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sign-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reorder{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-ul{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-list-ol{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-strikethrough{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-underline{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-table{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-magic{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-truck{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pinterest{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-pinterest-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-google-plus-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-google-plus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-money{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-caret-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-columns{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-envelope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linkedin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-undo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rotate-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-legal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dashboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comment-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-comments-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bolt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sitemap{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-umbrella{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-paste{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-lightbulb{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud-download{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cloud-upload{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-user-md{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stethoscope{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-suitcase{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bell-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-coffee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-food{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-text-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-building{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-hospital{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ambulance{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-medkit{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fighter-jet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-beer{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-h-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-plus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-double-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-angle-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-desktop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-laptop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tablet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mobile-phone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle-blank{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-quote-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-quote-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-spinner{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-circle{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-reply{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-github-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-close-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-folder-open-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-expand-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-smile{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-frown{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-meh{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gamepad{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-keyboard{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flag-checkered{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-terminal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-code{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-mail-reply-all{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-star-half-full{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-location-arrow{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-crop{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-code-fork{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlink{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-question{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-info{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-exclamation{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-superscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-subscript{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eraser{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-puzzle-piece{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-microphone{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-microphone-off{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-shield{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-calendar-empty{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-fire-extinguisher{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rocket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-maxcdn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-chevron-sign-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-html5{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-css3{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-anchor{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-unlock-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bullseye{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ellipsis-horizontal{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ellipsis-vertical{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rss-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-play-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-ticket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-minus-sign-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-minus{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-level-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-level-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-check-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-edit-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-external-link-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-share-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-compass{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-collapse-top{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-expand{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-eur{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-euro{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gbp{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-usd{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dollar{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-inr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-rupee{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-jpy{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-yen{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-cny{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-renminbi{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-krw{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-won{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-btc{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitcoin{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-file-text{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-alphabet{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-alphabet-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-attributes{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-attributes-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-order{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sort-by-order-alt{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-thumbs-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-xing{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-xing-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-youtube-play{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dropbox{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-stackexchange{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-instagram{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-flickr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-adn{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitbucket{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bitbucket-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tumblr{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-tumblr-sign{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-down{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-up{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-left{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-long-arrow-right{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-apple{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-windows{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-android{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-linux{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-dribbble{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-skype{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-foursquare{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-trello{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-female{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-male{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-gittip{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-sun{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-moon{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-archive{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-bug{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-vk{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-weibo{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} +.icon-renren{*zoom:expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '');} diff --git a/styles/bootstrap/font-awesome/css/font-awesome.css b/styles/bootstrap/font-awesome/css/font-awesome.css index db4fd90d1..7ede1828a 100644 --- a/styles/bootstrap/font-awesome/css/font-awesome.css +++ b/styles/bootstrap/font-awesome/css/font-awesome.css @@ -1,33 +1,34 @@ /*! - * Font Awesome 3.1.0 + * Font Awesome 3.2.1 * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io + * ------------------------------------------------------------------------------ + * The full suite of pictographic icons, examples, and documentation can be + * found at http://fontawesome.io. Stay up to date on Twitter at + * http://twitter.com/fontawesome. * * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - + * ------------------------------------------------------------------------------ + * - The Font Awesome font is licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - + * - Font Awesome documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- + * + * Author - Dave Gandy + * ------------------------------------------------------------------------------ * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com + * Twitter: http://twitter.com/davegandy + * Work: Lead Product Designer @ Kyruus - http://kyruus.com */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; - src: url('../font/fontawesome-webfont.eot?v=3.1.0'); - src: url('../font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.1.0') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg'); + src: url('../font/fontawesome-webfont.eot?v=3.2.1'); + src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg'); font-weight: normal; font-style: normal; } @@ -55,31 +56,34 @@ } /* makes sure icons active on rollover in links */ a [class^="icon-"], -a [class*=" icon-"], -a [class^="icon-"]:before, -a [class*=" icon-"]:before { +a [class*=" icon-"] { display: inline; } /* increased font size for icon-large */ [class^="icon-"].icon-fixed-width, [class*=" icon-"].icon-fixed-width { display: inline-block; - width: 1.2857142857142858em; - text-align: center; + width: 1.1428571428571428em; + text-align: right; + padding-right: 0.2857142857142857em; } [class^="icon-"].icon-fixed-width.icon-large, [class*=" icon-"].icon-fixed-width.icon-large { - width: 1.5714285714285714em; + width: 1.4285714285714286em; } -ul.icons-ul { - list-style-type: none; - text-indent: -0.7142857142857143em; +.icons-ul { margin-left: 2.142857142857143em; + list-style-type: none; } -ul.icons-ul > li .icon-li { - width: 0.7142857142857143em; - display: inline-block; +.icons-ul > li { + position: relative; +} +.icons-ul .icon-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; text-align: center; + line-height: inherit; } [class^="icon-"].hide, [class*=" icon-"].hide { @@ -239,6 +243,11 @@ ul.icons-ul > li .icon-li { .btn.btn-large [class*=" icon-"].pull-right.icon-2x { margin-left: .2em; } +/* Fixes alignment in nav lists */ +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + line-height: inherit; +} /* EXTRAS * -------------------------- */ /* Stacked and layered icon */ @@ -273,6 +282,12 @@ ul.icons-ul > li .icon-li { -webkit-animation: spin 2s infinite linear; animation: spin 2s infinite linear; } +/* Prevent stack and spinners from being taken inline when inside a link */ +a .icon-stack, +a .icon-spin { + display: inline-block; + text-decoration: none; +} @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); @@ -352,6 +367,14 @@ ul.icons-ul > li .icon-li { -o-transform: scale(1, -1); transform: scale(1, -1); } +/* ensure rotation occurs inside anchor tags */ +a .icon-rotate-90:before, +a .icon-rotate-180:before, +a .icon-rotate-270:before, +a .icon-flip-horizontal:before, +a .icon-flip-vertical:before { + display: inline-block; +} /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .icon-glass:before { @@ -363,7 +386,7 @@ ul.icons-ul > li .icon-li { .icon-search:before { content: "\f002"; } -.icon-envelope:before { +.icon-envelope-alt:before { content: "\f003"; } .icon-heart:before { @@ -402,12 +425,14 @@ ul.icons-ul > li .icon-li { .icon-zoom-out:before { content: "\f010"; } +.icon-power-off:before, .icon-off:before { content: "\f011"; } .icon-signal:before { content: "\f012"; } +.icon-gear:before, .icon-cog:before { content: "\f013"; } @@ -417,7 +442,7 @@ ul.icons-ul > li .icon-li { .icon-home:before { content: "\f015"; } -.icon-file:before { +.icon-file-alt:before { content: "\f016"; } .icon-time:before { @@ -441,11 +466,10 @@ ul.icons-ul > li .icon-li { .icon-play-circle:before { content: "\f01d"; } -.icon-repeat:before, -.icon-rotate-right:before { +.icon-rotate-right:before, +.icon-repeat:before { content: "\f01e"; } -/* F020 doesn't work in Safari. all shifted one down */ .icon-refresh:before { content: "\f021"; } @@ -638,8 +662,8 @@ ul.icons-ul > li .icon-li { .icon-arrow-down:before { content: "\f063"; } -.icon-share-alt:before, -.icon-mail-forward:before { +.icon-mail-forward:before, +.icon-share-alt:before { content: "\f064"; } .icon-resize-full:before { @@ -732,16 +756,17 @@ ul.icons-ul > li .icon-li { .icon-key:before { content: "\f084"; } +.icon-gears:before, .icon-cogs:before { content: "\f085"; } .icon-comments:before { content: "\f086"; } -.icon-thumbs-up:before { +.icon-thumbs-up-alt:before { content: "\f087"; } -.icon-thumbs-down:before { +.icon-thumbs-down-alt:before { content: "\f088"; } .icon-star-half:before { @@ -780,6 +805,7 @@ ul.icons-ul > li .icon-li { .icon-phone:before { content: "\f095"; } +.icon-unchecked:before, .icon-check-empty:before { content: "\f096"; } @@ -879,6 +905,7 @@ ul.icons-ul > li .icon-li { .icon-copy:before { content: "\f0c5"; } +.icon-paperclip:before, .icon-paper-clip:before { content: "\f0c6"; } @@ -951,14 +978,14 @@ ul.icons-ul > li .icon-li { .icon-sort-up:before { content: "\f0de"; } -.icon-envelope-alt:before { +.icon-envelope:before { content: "\f0e0"; } .icon-linkedin:before { content: "\f0e1"; } -.icon-undo:before, -.icon-rotate-left:before { +.icon-rotate-left:before, +.icon-undo:before { content: "\f0e2"; } .icon-legal:before { @@ -1015,7 +1042,7 @@ ul.icons-ul > li .icon-li { .icon-food:before { content: "\f0f5"; } -.icon-file-alt:before { +.icon-file-text-alt:before { content: "\f0f6"; } .icon-building:before { @@ -1093,10 +1120,13 @@ ul.icons-ul > li .icon-li { .icon-circle:before { content: "\f111"; } -.icon-reply:before, -.icon-mail-reply:before { +.icon-mail-reply:before, +.icon-reply:before { content: "\f112"; } +.icon-github-alt:before { + content: "\f113"; +} .icon-folder-close-alt:before { content: "\f114"; } @@ -1266,3 +1296,184 @@ ul.icons-ul > li .icon-li { .icon-share-sign:before { content: "\f14d"; } +.icon-compass:before { + content: "\f14e"; +} +.icon-collapse:before { + content: "\f150"; +} +.icon-collapse-top:before { + content: "\f151"; +} +.icon-expand:before { + content: "\f152"; +} +.icon-euro:before, +.icon-eur:before { + content: "\f153"; +} +.icon-gbp:before { + content: "\f154"; +} +.icon-dollar:before, +.icon-usd:before { + content: "\f155"; +} +.icon-rupee:before, +.icon-inr:before { + content: "\f156"; +} +.icon-yen:before, +.icon-jpy:before { + content: "\f157"; +} +.icon-renminbi:before, +.icon-cny:before { + content: "\f158"; +} +.icon-won:before, +.icon-krw:before { + content: "\f159"; +} +.icon-bitcoin:before, +.icon-btc:before { + content: "\f15a"; +} +.icon-file:before { + content: "\f15b"; +} +.icon-file-text:before { + content: "\f15c"; +} +.icon-sort-by-alphabet:before { + content: "\f15d"; +} +.icon-sort-by-alphabet-alt:before { + content: "\f15e"; +} +.icon-sort-by-attributes:before { + content: "\f160"; +} +.icon-sort-by-attributes-alt:before { + content: "\f161"; +} +.icon-sort-by-order:before { + content: "\f162"; +} +.icon-sort-by-order-alt:before { + content: "\f163"; +} +.icon-thumbs-up:before { + content: "\f164"; +} +.icon-thumbs-down:before { + content: "\f165"; +} +.icon-youtube-sign:before { + content: "\f166"; +} +.icon-youtube:before { + content: "\f167"; +} +.icon-xing:before { + content: "\f168"; +} +.icon-xing-sign:before { + content: "\f169"; +} +.icon-youtube-play:before { + content: "\f16a"; +} +.icon-dropbox:before { + content: "\f16b"; +} +.icon-stackexchange:before { + content: "\f16c"; +} +.icon-instagram:before { + content: "\f16d"; +} +.icon-flickr:before { + content: "\f16e"; +} +.icon-adn:before { + content: "\f170"; +} +.icon-bitbucket:before { + content: "\f171"; +} +.icon-bitbucket-sign:before { + content: "\f172"; +} +.icon-tumblr:before { + content: "\f173"; +} +.icon-tumblr-sign:before { + content: "\f174"; +} +.icon-long-arrow-down:before { + content: "\f175"; +} +.icon-long-arrow-up:before { + content: "\f176"; +} +.icon-long-arrow-left:before { + content: "\f177"; +} +.icon-long-arrow-right:before { + content: "\f178"; +} +.icon-apple:before { + content: "\f179"; +} +.icon-windows:before { + content: "\f17a"; +} +.icon-android:before { + content: "\f17b"; +} +.icon-linux:before { + content: "\f17c"; +} +.icon-dribbble:before { + content: "\f17d"; +} +.icon-skype:before { + content: "\f17e"; +} +.icon-foursquare:before { + content: "\f180"; +} +.icon-trello:before { + content: "\f181"; +} +.icon-female:before { + content: "\f182"; +} +.icon-male:before { + content: "\f183"; +} +.icon-gittip:before { + content: "\f184"; +} +.icon-sun:before { + content: "\f185"; +} +.icon-moon:before { + content: "\f186"; +} +.icon-archive:before { + content: "\f187"; +} +.icon-bug:before { + content: "\f188"; +} +.icon-vk:before { + content: "\f189"; +} +.icon-weibo:before { + content: "\f18a"; +} +.icon-renren:before { + content: "\f18b"; +} diff --git a/styles/bootstrap/font-awesome/css/font-awesome.min.css b/styles/bootstrap/font-awesome/css/font-awesome.min.css index 389f3b7e5..866437fa4 100644 --- a/styles/bootstrap/font-awesome/css/font-awesome.min.css +++ b/styles/bootstrap/font-awesome/css/font-awesome.min.css @@ -1,24 +1,403 @@ -/*! - * Font Awesome 3.1.0 - * the iconic font designed for Bootstrap - * ------------------------------------------------------- - * The full suite of pictographic icons, examples, and documentation - * can be found at: http://fontawesome.io - * - * License - * ------------------------------------------------------- - * - The Font Awesome font is licensed under the SIL Open Font License v1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 License - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - - * Contact - * ------------------------------------------------------- - * Email: dave@fontawesome.io - * Twitter: http://twitter.com/fortaweso_me - * Work: Lead Product Designer @ http://kyruus.com - */@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.1.0');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.1.0') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}a [class^="icon-"],a [class*=" icon-"],a [class^="icon-"]:before,a [class*=" icon-"]:before{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.2857142857142858em;text-align:center}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.5714285714285714em}ul.icons-ul{list-style-type:none;text-indent:-0.7142857142857143em;margin-left:2.142857142857143em}ul.icons-ul>li .icon-li{width:.7142857142857143em;display:inline-block;text-align:center}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical:before{-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before,.icon-rotate-right:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before,.icon-mail-forward:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before,.icon-rotate-left:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before,.icon-mail-reply:before{content:"\f112"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"} \ No newline at end of file +@font-face{font-family:'FontAwesome';src:url('../font/fontawesome-webfont.eot?v=3.2.1');src:url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal;}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;} +[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none;} +.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em;} +a [class^="icon-"],a [class*=" icon-"]{display:inline;} +[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:0.2857142857142857em;}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em;} +.icons-ul{margin-left:2.142857142857143em;list-style-type:none;}.icons-ul>li{position:relative;} +.icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit;} +[class^="icon-"].hide,[class*=" icon-"].hide{display:none;} +.icon-muted{color:#eeeeee;} +.icon-light{color:#ffffff;} +.icon-dark{color:#333333;} +.icon-border{border:solid 1px #eeeeee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.icon-2x{font-size:2em;}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.icon-3x{font-size:3em;}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.icon-4x{font-size:4em;}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.icon-5x{font-size:5em;}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;} +.pull-right{float:right;} +.pull-left{float:left;} +[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em;} +[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em;} +[class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;} +.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none;} +.btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block;} +.nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em;} +.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em;} +.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em;} +.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em;} +.btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0;}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em;} +.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em;} +.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em;} +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit;} +.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%;}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em;} +.icon-stack .icon-stack-base{font-size:2em;*line-height:1em;} +.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;} +a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none;} +@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);} 100%{-moz-transform:rotate(359deg);}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);} 100%{-webkit-transform:rotate(359deg);}}@-o-keyframes spin{0%{-o-transform:rotate(0deg);} 100%{-o-transform:rotate(359deg);}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg);} 100%{-ms-transform:rotate(359deg);}}@keyframes spin{0%{transform:rotate(0deg);} 100%{transform:rotate(359deg);}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);} +.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);} +.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);} +.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1);} +.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1);} +a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block;} +.icon-glass:before{content:"\f000";} +.icon-music:before{content:"\f001";} +.icon-search:before{content:"\f002";} +.icon-envelope-alt:before{content:"\f003";} +.icon-heart:before{content:"\f004";} +.icon-star:before{content:"\f005";} +.icon-star-empty:before{content:"\f006";} +.icon-user:before{content:"\f007";} +.icon-film:before{content:"\f008";} +.icon-th-large:before{content:"\f009";} +.icon-th:before{content:"\f00a";} +.icon-th-list:before{content:"\f00b";} +.icon-ok:before{content:"\f00c";} +.icon-remove:before{content:"\f00d";} +.icon-zoom-in:before{content:"\f00e";} +.icon-zoom-out:before{content:"\f010";} +.icon-power-off:before,.icon-off:before{content:"\f011";} +.icon-signal:before{content:"\f012";} +.icon-gear:before,.icon-cog:before{content:"\f013";} +.icon-trash:before{content:"\f014";} +.icon-home:before{content:"\f015";} +.icon-file-alt:before{content:"\f016";} +.icon-time:before{content:"\f017";} +.icon-road:before{content:"\f018";} +.icon-download-alt:before{content:"\f019";} +.icon-download:before{content:"\f01a";} +.icon-upload:before{content:"\f01b";} +.icon-inbox:before{content:"\f01c";} +.icon-play-circle:before{content:"\f01d";} +.icon-rotate-right:before,.icon-repeat:before{content:"\f01e";} +.icon-refresh:before{content:"\f021";} +.icon-list-alt:before{content:"\f022";} +.icon-lock:before{content:"\f023";} +.icon-flag:before{content:"\f024";} +.icon-headphones:before{content:"\f025";} +.icon-volume-off:before{content:"\f026";} +.icon-volume-down:before{content:"\f027";} +.icon-volume-up:before{content:"\f028";} +.icon-qrcode:before{content:"\f029";} +.icon-barcode:before{content:"\f02a";} +.icon-tag:before{content:"\f02b";} +.icon-tags:before{content:"\f02c";} +.icon-book:before{content:"\f02d";} +.icon-bookmark:before{content:"\f02e";} +.icon-print:before{content:"\f02f";} +.icon-camera:before{content:"\f030";} +.icon-font:before{content:"\f031";} +.icon-bold:before{content:"\f032";} +.icon-italic:before{content:"\f033";} +.icon-text-height:before{content:"\f034";} +.icon-text-width:before{content:"\f035";} +.icon-align-left:before{content:"\f036";} +.icon-align-center:before{content:"\f037";} +.icon-align-right:before{content:"\f038";} +.icon-align-justify:before{content:"\f039";} +.icon-list:before{content:"\f03a";} +.icon-indent-left:before{content:"\f03b";} +.icon-indent-right:before{content:"\f03c";} +.icon-facetime-video:before{content:"\f03d";} +.icon-picture:before{content:"\f03e";} +.icon-pencil:before{content:"\f040";} +.icon-map-marker:before{content:"\f041";} +.icon-adjust:before{content:"\f042";} +.icon-tint:before{content:"\f043";} +.icon-edit:before{content:"\f044";} +.icon-share:before{content:"\f045";} +.icon-check:before{content:"\f046";} +.icon-move:before{content:"\f047";} +.icon-step-backward:before{content:"\f048";} +.icon-fast-backward:before{content:"\f049";} +.icon-backward:before{content:"\f04a";} +.icon-play:before{content:"\f04b";} +.icon-pause:before{content:"\f04c";} +.icon-stop:before{content:"\f04d";} +.icon-forward:before{content:"\f04e";} +.icon-fast-forward:before{content:"\f050";} +.icon-step-forward:before{content:"\f051";} +.icon-eject:before{content:"\f052";} +.icon-chevron-left:before{content:"\f053";} +.icon-chevron-right:before{content:"\f054";} +.icon-plus-sign:before{content:"\f055";} +.icon-minus-sign:before{content:"\f056";} +.icon-remove-sign:before{content:"\f057";} +.icon-ok-sign:before{content:"\f058";} +.icon-question-sign:before{content:"\f059";} +.icon-info-sign:before{content:"\f05a";} +.icon-screenshot:before{content:"\f05b";} +.icon-remove-circle:before{content:"\f05c";} +.icon-ok-circle:before{content:"\f05d";} +.icon-ban-circle:before{content:"\f05e";} +.icon-arrow-left:before{content:"\f060";} +.icon-arrow-right:before{content:"\f061";} +.icon-arrow-up:before{content:"\f062";} +.icon-arrow-down:before{content:"\f063";} +.icon-mail-forward:before,.icon-share-alt:before{content:"\f064";} +.icon-resize-full:before{content:"\f065";} +.icon-resize-small:before{content:"\f066";} +.icon-plus:before{content:"\f067";} +.icon-minus:before{content:"\f068";} +.icon-asterisk:before{content:"\f069";} +.icon-exclamation-sign:before{content:"\f06a";} +.icon-gift:before{content:"\f06b";} +.icon-leaf:before{content:"\f06c";} +.icon-fire:before{content:"\f06d";} +.icon-eye-open:before{content:"\f06e";} +.icon-eye-close:before{content:"\f070";} +.icon-warning-sign:before{content:"\f071";} +.icon-plane:before{content:"\f072";} +.icon-calendar:before{content:"\f073";} +.icon-random:before{content:"\f074";} +.icon-comment:before{content:"\f075";} +.icon-magnet:before{content:"\f076";} +.icon-chevron-up:before{content:"\f077";} +.icon-chevron-down:before{content:"\f078";} +.icon-retweet:before{content:"\f079";} +.icon-shopping-cart:before{content:"\f07a";} +.icon-folder-close:before{content:"\f07b";} +.icon-folder-open:before{content:"\f07c";} +.icon-resize-vertical:before{content:"\f07d";} +.icon-resize-horizontal:before{content:"\f07e";} +.icon-bar-chart:before{content:"\f080";} +.icon-twitter-sign:before{content:"\f081";} +.icon-facebook-sign:before{content:"\f082";} +.icon-camera-retro:before{content:"\f083";} +.icon-key:before{content:"\f084";} +.icon-gears:before,.icon-cogs:before{content:"\f085";} +.icon-comments:before{content:"\f086";} +.icon-thumbs-up-alt:before{content:"\f087";} +.icon-thumbs-down-alt:before{content:"\f088";} +.icon-star-half:before{content:"\f089";} +.icon-heart-empty:before{content:"\f08a";} +.icon-signout:before{content:"\f08b";} +.icon-linkedin-sign:before{content:"\f08c";} +.icon-pushpin:before{content:"\f08d";} +.icon-external-link:before{content:"\f08e";} +.icon-signin:before{content:"\f090";} +.icon-trophy:before{content:"\f091";} +.icon-github-sign:before{content:"\f092";} +.icon-upload-alt:before{content:"\f093";} +.icon-lemon:before{content:"\f094";} +.icon-phone:before{content:"\f095";} +.icon-unchecked:before,.icon-check-empty:before{content:"\f096";} +.icon-bookmark-empty:before{content:"\f097";} +.icon-phone-sign:before{content:"\f098";} +.icon-twitter:before{content:"\f099";} +.icon-facebook:before{content:"\f09a";} +.icon-github:before{content:"\f09b";} +.icon-unlock:before{content:"\f09c";} +.icon-credit-card:before{content:"\f09d";} +.icon-rss:before{content:"\f09e";} +.icon-hdd:before{content:"\f0a0";} +.icon-bullhorn:before{content:"\f0a1";} +.icon-bell:before{content:"\f0a2";} +.icon-certificate:before{content:"\f0a3";} +.icon-hand-right:before{content:"\f0a4";} +.icon-hand-left:before{content:"\f0a5";} +.icon-hand-up:before{content:"\f0a6";} +.icon-hand-down:before{content:"\f0a7";} +.icon-circle-arrow-left:before{content:"\f0a8";} +.icon-circle-arrow-right:before{content:"\f0a9";} +.icon-circle-arrow-up:before{content:"\f0aa";} +.icon-circle-arrow-down:before{content:"\f0ab";} +.icon-globe:before{content:"\f0ac";} +.icon-wrench:before{content:"\f0ad";} +.icon-tasks:before{content:"\f0ae";} +.icon-filter:before{content:"\f0b0";} +.icon-briefcase:before{content:"\f0b1";} +.icon-fullscreen:before{content:"\f0b2";} +.icon-group:before{content:"\f0c0";} +.icon-link:before{content:"\f0c1";} +.icon-cloud:before{content:"\f0c2";} +.icon-beaker:before{content:"\f0c3";} +.icon-cut:before{content:"\f0c4";} +.icon-copy:before{content:"\f0c5";} +.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6";} +.icon-save:before{content:"\f0c7";} +.icon-sign-blank:before{content:"\f0c8";} +.icon-reorder:before{content:"\f0c9";} +.icon-list-ul:before{content:"\f0ca";} +.icon-list-ol:before{content:"\f0cb";} +.icon-strikethrough:before{content:"\f0cc";} +.icon-underline:before{content:"\f0cd";} +.icon-table:before{content:"\f0ce";} +.icon-magic:before{content:"\f0d0";} +.icon-truck:before{content:"\f0d1";} +.icon-pinterest:before{content:"\f0d2";} +.icon-pinterest-sign:before{content:"\f0d3";} +.icon-google-plus-sign:before{content:"\f0d4";} +.icon-google-plus:before{content:"\f0d5";} +.icon-money:before{content:"\f0d6";} +.icon-caret-down:before{content:"\f0d7";} +.icon-caret-up:before{content:"\f0d8";} +.icon-caret-left:before{content:"\f0d9";} +.icon-caret-right:before{content:"\f0da";} +.icon-columns:before{content:"\f0db";} +.icon-sort:before{content:"\f0dc";} +.icon-sort-down:before{content:"\f0dd";} +.icon-sort-up:before{content:"\f0de";} +.icon-envelope:before{content:"\f0e0";} +.icon-linkedin:before{content:"\f0e1";} +.icon-rotate-left:before,.icon-undo:before{content:"\f0e2";} +.icon-legal:before{content:"\f0e3";} +.icon-dashboard:before{content:"\f0e4";} +.icon-comment-alt:before{content:"\f0e5";} +.icon-comments-alt:before{content:"\f0e6";} +.icon-bolt:before{content:"\f0e7";} +.icon-sitemap:before{content:"\f0e8";} +.icon-umbrella:before{content:"\f0e9";} +.icon-paste:before{content:"\f0ea";} +.icon-lightbulb:before{content:"\f0eb";} +.icon-exchange:before{content:"\f0ec";} +.icon-cloud-download:before{content:"\f0ed";} +.icon-cloud-upload:before{content:"\f0ee";} +.icon-user-md:before{content:"\f0f0";} +.icon-stethoscope:before{content:"\f0f1";} +.icon-suitcase:before{content:"\f0f2";} +.icon-bell-alt:before{content:"\f0f3";} +.icon-coffee:before{content:"\f0f4";} +.icon-food:before{content:"\f0f5";} +.icon-file-text-alt:before{content:"\f0f6";} +.icon-building:before{content:"\f0f7";} +.icon-hospital:before{content:"\f0f8";} +.icon-ambulance:before{content:"\f0f9";} +.icon-medkit:before{content:"\f0fa";} +.icon-fighter-jet:before{content:"\f0fb";} +.icon-beer:before{content:"\f0fc";} +.icon-h-sign:before{content:"\f0fd";} +.icon-plus-sign-alt:before{content:"\f0fe";} +.icon-double-angle-left:before{content:"\f100";} +.icon-double-angle-right:before{content:"\f101";} +.icon-double-angle-up:before{content:"\f102";} +.icon-double-angle-down:before{content:"\f103";} +.icon-angle-left:before{content:"\f104";} +.icon-angle-right:before{content:"\f105";} +.icon-angle-up:before{content:"\f106";} +.icon-angle-down:before{content:"\f107";} +.icon-desktop:before{content:"\f108";} +.icon-laptop:before{content:"\f109";} +.icon-tablet:before{content:"\f10a";} +.icon-mobile-phone:before{content:"\f10b";} +.icon-circle-blank:before{content:"\f10c";} +.icon-quote-left:before{content:"\f10d";} +.icon-quote-right:before{content:"\f10e";} +.icon-spinner:before{content:"\f110";} +.icon-circle:before{content:"\f111";} +.icon-mail-reply:before,.icon-reply:before{content:"\f112";} +.icon-github-alt:before{content:"\f113";} +.icon-folder-close-alt:before{content:"\f114";} +.icon-folder-open-alt:before{content:"\f115";} +.icon-expand-alt:before{content:"\f116";} +.icon-collapse-alt:before{content:"\f117";} +.icon-smile:before{content:"\f118";} +.icon-frown:before{content:"\f119";} +.icon-meh:before{content:"\f11a";} +.icon-gamepad:before{content:"\f11b";} +.icon-keyboard:before{content:"\f11c";} +.icon-flag-alt:before{content:"\f11d";} +.icon-flag-checkered:before{content:"\f11e";} +.icon-terminal:before{content:"\f120";} +.icon-code:before{content:"\f121";} +.icon-reply-all:before{content:"\f122";} +.icon-mail-reply-all:before{content:"\f122";} +.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123";} +.icon-location-arrow:before{content:"\f124";} +.icon-crop:before{content:"\f125";} +.icon-code-fork:before{content:"\f126";} +.icon-unlink:before{content:"\f127";} +.icon-question:before{content:"\f128";} +.icon-info:before{content:"\f129";} +.icon-exclamation:before{content:"\f12a";} +.icon-superscript:before{content:"\f12b";} +.icon-subscript:before{content:"\f12c";} +.icon-eraser:before{content:"\f12d";} +.icon-puzzle-piece:before{content:"\f12e";} +.icon-microphone:before{content:"\f130";} +.icon-microphone-off:before{content:"\f131";} +.icon-shield:before{content:"\f132";} +.icon-calendar-empty:before{content:"\f133";} +.icon-fire-extinguisher:before{content:"\f134";} +.icon-rocket:before{content:"\f135";} +.icon-maxcdn:before{content:"\f136";} +.icon-chevron-sign-left:before{content:"\f137";} +.icon-chevron-sign-right:before{content:"\f138";} +.icon-chevron-sign-up:before{content:"\f139";} +.icon-chevron-sign-down:before{content:"\f13a";} +.icon-html5:before{content:"\f13b";} +.icon-css3:before{content:"\f13c";} +.icon-anchor:before{content:"\f13d";} +.icon-unlock-alt:before{content:"\f13e";} +.icon-bullseye:before{content:"\f140";} +.icon-ellipsis-horizontal:before{content:"\f141";} +.icon-ellipsis-vertical:before{content:"\f142";} +.icon-rss-sign:before{content:"\f143";} +.icon-play-sign:before{content:"\f144";} +.icon-ticket:before{content:"\f145";} +.icon-minus-sign-alt:before{content:"\f146";} +.icon-check-minus:before{content:"\f147";} +.icon-level-up:before{content:"\f148";} +.icon-level-down:before{content:"\f149";} +.icon-check-sign:before{content:"\f14a";} +.icon-edit-sign:before{content:"\f14b";} +.icon-external-link-sign:before{content:"\f14c";} +.icon-share-sign:before{content:"\f14d";} +.icon-compass:before{content:"\f14e";} +.icon-collapse:before{content:"\f150";} +.icon-collapse-top:before{content:"\f151";} +.icon-expand:before{content:"\f152";} +.icon-euro:before,.icon-eur:before{content:"\f153";} +.icon-gbp:before{content:"\f154";} +.icon-dollar:before,.icon-usd:before{content:"\f155";} +.icon-rupee:before,.icon-inr:before{content:"\f156";} +.icon-yen:before,.icon-jpy:before{content:"\f157";} +.icon-renminbi:before,.icon-cny:before{content:"\f158";} +.icon-won:before,.icon-krw:before{content:"\f159";} +.icon-bitcoin:before,.icon-btc:before{content:"\f15a";} +.icon-file:before{content:"\f15b";} +.icon-file-text:before{content:"\f15c";} +.icon-sort-by-alphabet:before{content:"\f15d";} +.icon-sort-by-alphabet-alt:before{content:"\f15e";} +.icon-sort-by-attributes:before{content:"\f160";} +.icon-sort-by-attributes-alt:before{content:"\f161";} +.icon-sort-by-order:before{content:"\f162";} +.icon-sort-by-order-alt:before{content:"\f163";} +.icon-thumbs-up:before{content:"\f164";} +.icon-thumbs-down:before{content:"\f165";} +.icon-youtube-sign:before{content:"\f166";} +.icon-youtube:before{content:"\f167";} +.icon-xing:before{content:"\f168";} +.icon-xing-sign:before{content:"\f169";} +.icon-youtube-play:before{content:"\f16a";} +.icon-dropbox:before{content:"\f16b";} +.icon-stackexchange:before{content:"\f16c";} +.icon-instagram:before{content:"\f16d";} +.icon-flickr:before{content:"\f16e";} +.icon-adn:before{content:"\f170";} +.icon-bitbucket:before{content:"\f171";} +.icon-bitbucket-sign:before{content:"\f172";} +.icon-tumblr:before{content:"\f173";} +.icon-tumblr-sign:before{content:"\f174";} +.icon-long-arrow-down:before{content:"\f175";} +.icon-long-arrow-up:before{content:"\f176";} +.icon-long-arrow-left:before{content:"\f177";} +.icon-long-arrow-right:before{content:"\f178";} +.icon-apple:before{content:"\f179";} +.icon-windows:before{content:"\f17a";} +.icon-android:before{content:"\f17b";} +.icon-linux:before{content:"\f17c";} +.icon-dribbble:before{content:"\f17d";} +.icon-skype:before{content:"\f17e";} +.icon-foursquare:before{content:"\f180";} +.icon-trello:before{content:"\f181";} +.icon-female:before{content:"\f182";} +.icon-male:before{content:"\f183";} +.icon-gittip:before{content:"\f184";} +.icon-sun:before{content:"\f185";} +.icon-moon:before{content:"\f186";} +.icon-archive:before{content:"\f187";} +.icon-bug:before{content:"\f188";} +.icon-vk:before{content:"\f189";} +.icon-weibo:before{content:"\f18a";} +.icon-renren:before{content:"\f18b";} diff --git a/styles/bootstrap/font-awesome/font/FontAwesome.otf b/styles/bootstrap/font-awesome/font/FontAwesome.otf index 32dd8b1cd5410a0ce93305be80d53a63dbb9b5cd..70125459f7d593b79cabc75bd60b91943aa65e93 100644 GIT binary patch delta 35990 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 X@@`CUlCZfSk5mSRk5wypDCqt_>qBQo delta 24479 zcmaI82VhfG-#?ytZ+dPiND?SbPtrmG*&tx5bm>ruF|hY4P!Se((DyG`aKKbI#cFF8PCpEsUmx+RF|cBcaOTMa%orm96b5ScXn zc6HzmP2di#zn@N-6RG_wQs+{tV#VxOL8Z4gs1{|7|I_XMYa>#OwcOA%)-v{nGgPHI z;pwd&EvNSw>D;MGQ)Q@%RTZiljMj10X;ri8imFBRtm+ljyQ(i#Kd63F1ymumO082z zs&7#DRa?|H^+5G#^J946>fP#Gb%nZCeMo&meMWsj{h0bmb&L90_3P@7 z)nBW>SO2X3T^-a2n%8nn{|Onz@=qn$=FtCe2Pwj>fI2(j3;D)LhV9(LASl zP4l7V2hA^zZ{>>7LiUqI*a8tuCmK(8uU)`hohP`qBDH`kDG<{oVTI`c?Y1`Umyf^{M*Z z`fPo^zD!@Ouhs9@AJ?DLKdOI1|Fr%E{oDGl^}p)>5LALe=q*qoLAX&EBTN)#33m$f zg+;>s!bV}IkS1gaMM8;CBODe^JB7!E7NJ#mQ}{smO!!LpQMe{_h=Ld?_7yE+yf{!C zFWx3D5jTh_VuqM6mWkD3z1S$85uXsB6<-zK7C#g}6Wc_^Knx~BoME70s9}U5(J<98 z%dpU}%y7S9yx;aU_>YBOZv-;dO0q> z+-tp7a%|YSWp(O`HQRP?y*S6D)n1&}x0hDCV(b{Xf9xQqr~xfUsd}s8Rijj6ReMzX zu&VP^C7`$}Rg>zh>N(YmsxMVPs}!|C-2>D$R6R<)2h>!fKC6CAbE9U2<|fTl&2-Hy z&Fz{6nw6TTH7{yj*Sw{9PdgIiFiCrt_HOMx+AM9cwp3fGtdj zWZiPzYRvmi-CkXpu2xsCYt)_8ozY#?UD37ZzS8}uyQT~1I`uvDz4d+dvHFGjC7AA& znCNs&vqxX4uhAdSAJ!kmB)_VEOaGz%d;RbF048^cFapy%UYH^z39E&5LNTVaQ8*?% zBAgQ*#e9A#d?)pJaMtOOuS!A$3)hO$1sf-#TM~(@h$NigMi5! zVYt~a!*IJ{zG1Q9UPGE8%TQ+U8X648F>NmyJ~4c6@JHw)A|rZ7^o@v(h>sW;aZ|+Y zn6YgUX%Sfwg%PC@O%azOS|i?x_$cD5i0>nQk8t{lM66^C8Am3Q>Et%DfGj7gNDA3W zGDra_B~_%393jWaDRPcnB2STjkQc~1!gpQ&!rzFzZ8np zL<*5TBTbRfk#rbI7M9TDTS)7zL^8)wX);xOo2X(RPMB{Dk;*7DQfA*knQuFlg#Nhb zjfKz7DkIM>d}AZE`n`SrzI%Kd>J{Q>8>|lM;wc(&y(F z=H$lYmgQ9BTcwdCHjtG->*-)B4HI(m@^Wm$#GJ}JueD9^R#tj#(jD}SR8B&aji7$2 zugK3S%eCa>?x+5Bp>_A-8D(VQvv05nYDLQx-a^?Td&k#OJZi(%6K87ZiLD!~QvLq@ z^-}k}xjBXT`8NKV_U_lT<2BE0J+VQqh?|m}gAOGPB(Y!y=y8;wj8)9|jJ2^?%CN=8 zS_8fzL~2?2*kY@cUtwK(bsP<$FT=wcQ{k&z~ux6-{NiAoRC8e$9CL-t)HXqq8Uioa{P8~?0jhcaujYS&y^ zabe@f2FViI=nicRZH$o=(>;`#FeP(|wBf{7xjlZd^H$>bttXPWib(I1kXM+!V8Lu# z$RsvUzc-IacDgH%qHj~FWKN-qz=UyB`4pc7mavnA?1QM^F0lTT@3T+Yr+5+ngKqyu z|ArXpU|roosn0^(Zc@9MNm@vf?Ih%zL0WIev7VURSfPhX(mQJoBNuY zn=y1I@g_8|mniXy$V3+3OstZynxaD)X*TI92}~A862;Vp!5B;flhcTFBMq1o-;Gof zAEeR@@)G){uW|0JOt;_&k=}Ur**B!IGiS0M2@9NSoXg@#B>7_?9PFqetQpe}E4^`r&nV88{^cd)tblSVtP|%J=Bo`jQtdxM% z6%#YbzkfHuxs+lxoUv{tQWkC!iz*8%@+&%)1(rpp9NnFR(FG;?hI2Y$rmjDU=?LpZ zr7vc_Io8U@*DA&8vLtgZ=m?ic;z=6vhP=@!Deec3rug~h9z43}09D>(Z|W=Zu)Zua zsZFsL=+IP#U;k7;ei?p;a2gO*Qf_{BLAFJ)3)$J_a=tBJ zF0L;1zQ)p`S0CB>=+zi3Rf$OyMC4^722NA}vEo2!S@OQNfljQScPaYKsV@IOeN27Dfg0R7`?&?LW6jIn z(uxWz^D&>kqN3C*$4IHEm+6B|5_98opOkXceevi~NwJHPc@TzmgOY^L2L8*E*oJ+C zZD8ReR>^#DUtPL2R!OpxV>G>P-$6E%O4Uvpvit4psdQ{_qoc~2TD7epZI7g!RnqV| zE3qQh0@}FFPCyyj3Q(rGnktwBkh}>~DN6cAM=N!t+NLMz8>zz@uu12S9BY0eCRX2) zY(C;_*i&QOQ|<8V&dw{$%FoO*NP#bvL^J1~D%a9@XdU(jg zKmPczUV0JJ!5l#!b4Zz)?%lPSQUD8q-QK`W}v7mR8cW7_E zu>VQE9xVkxn-vvh6{VH^q<>&#fsW@7NpPke+E(t!?w6Xq*Rdm}n_qxF!X%4pBuCAz z!%k~KRdrFdr5cN_=0GL0kvwOOO}d@7iVMN1$O@41BlK|s4n2xW?U+C5!8fo3Q%M;W z)9Nw~Vu?0AZ(*v2qM}2#3RhWiSy5?GNxmmvnzdu+&K)~;9y!LQFpAHVV@G!G!0a%G zIE*MhtU<*QGD+%|SfP(LR!Ej=Yu$%4YbBw6|Gspal#=p*JLRaHHMEa$xiV$uygO&@ zOH1EZo?-x-b;ZcXhsHZu51N)Csog=ZHt3a{cyo#MCj3_`ea-h2(Y2>Yzjmd2nPr-C zLupB_O%jxzg9a%*Z5=*Q>G{hb*3&9s9RKUTWPSy%){>5TIqA* zAc5xBIiJJmJ28m-k)~Uy6zZqE%IQcM|GP4fjUOT9k*G}sRFR6coIzs)Eh$8rMPh?l zgQ!$PA-`-=%vP+eX693xMJZ$#5-_ZfVI{LDkheKj(5R*K{Jl;mxWGsPM&?z#l3Y<; zX{)aH9;~T1yzP8Oa#vZ{7&~Y4;g1z;0zCo`wg$Yy8AwyS@beVo01lXM$j{F$%&{mY zAw5HSkTClyD(M|fES^aElSJA`AIEznijc)pHUv149w$nX(juiVQTsu~N9?>Q*#aO`zt+p<&3w;f88gd&g%(MlqiH5UU?CNWFm52O`y zdmtmt0~T=bVAav1F_J#Dkuz$E&&F5@E6pT5xG`p<6yRJFD_D?zBm$UAn9JBCaRObA zCjV^M^*NC&vy{gdD?cl{l<|_{-iNo`xYQBqu&4Q{jTwL<1?n#K2!TT6Z(D`T_62i z^w<4*_eX;8Kv6j)6)3H10O!}iW$-3CO*;;FT!TOE0(>BmH(RP>3 zZF?oo7H5y!8{aQ}Yy40BZ|>hYVA+6U3Fd^|311AHIdJd5uLoWm)MHS};4y>0xN*jf z?L&JEtr=z?_UG`2hQBhxI%3s`vXOTru(03P&9utsUJk`r9!nH;o+o;@IED zk@3sN?;QWqgy;$N6MIcuG_hvVw8@(%`=)eEZJhe{G|ja9n@8Tf{pQQJ+;B@;(#WJM z)2B~=eTHx56SH2M{pB3y}sG9 zdEe$wxAfZb)Ye5?*|v4twcEFDuiF0P_Fs00J7RW>*fDoU;f|^uO*_6xv8PlzQ?8|I zQ!T0EQom1acWiWQa-7?F@6NM3Kif5SSN^WX-P89Z?fD_?xAYs*Gtz(FyL0b9_f6dQ zd4`fXDbtzxrE|8kE-O3h-R$kz&*hkMUddgZ`%0dWHzjXZ-s${a`784S1-BHG6r3vf zXW`63Ptn+-yNf(UKNim|&UXo}HLg!wpLNKOjvi{fhjt{!230~-Z1An9IIb_M<)257 zP^)D+X0pBk>?}`SKE^uoOBzb_CkkB}aVRmA$jnfVhZ8?Gg~gApY_T$^$bMWSPNz2c z*qF0@zNA=6UFvf^Od8N)1EW-4chg{};u9aGK@%GSjR7np5E+QnA3of8;zUeT!!C6e zVOFBOhsNsT%v^=e&T$pxSUY@*SN}lfwsoswI`4gg29}BeFU!`4PCr4T;-Dx5O_!h) zGq2W31NOmWKe0tYYH_g>@V-jw>8UF4!K57|;1%T_W4DeeBrJ}c&tH*(1$&M&%V1Ip z>GXX^qZ;@yG@&uYWcJbRBXf`Dg{~{$zpI1{?P-i(&({$`*@{au0*d+R2 zCmJ7mnJ9nqb~y8v$0Wu$2U4aQ%EsCPodO%nR6nrsHpLgbVI_%TLlp0aT-oUok}#^! zX|3OsJe>r+9o}Q4)9a)UQ3r`tvL1r^8^9sIDP)??`EKI(=y?m6zK~Q!;~I7`Bi_*O zHP59^s+)^J4w=H+R_sJIH0)|3elKf=`fJzq@794kO!Y+mF0sFJ4dt6_y3YMS7iU6z znzx`6s(NxG?cPH(TQIeCvAUyb)+1Jkf=n$8-fupdeKhT$Rf%P>he$_4$3W!?_T)Lj zI+acqtHeG}7|sMX1U9f38m0VMx=YP8vGTcb(asq9_gj@G_=i1#TfXd%Q^2bjQqAFeiaU!{QN{J4VunYJ?%k+a7ybcUv|AC({d zQ~da4__cOm%FN#qZfRj#S1(5aF2JNn+QMb{cH(*+Mapr`Z)d`hE>-Pql&5N-FaO=N+Ov;Vs zd$(^ZV55lq(8OW3MxwkZ%w|*cS9Z_4xY(ljgvIk7Shm|XTbZI)UR*B!IWf{)#W5iV3^NlSix9pCQlwV zY-4vs`-h8n%L^tgTt0y8CR%3dvjF-nM&8F9{$}RDNc^>34x;{4mrPhBRa&49Kq0W< zJ(|rB);?h*88(ZApO!e7w!yT+5(4G>n0+^qznv5(^doF8>nBG|j#KxOM@^2#_id90 zkHq1ltRFoLMv~^q$Vj&Y?815Z(uweN$B@jh9)mU26IzOs$VVnyR;GgswTvOkd%+&& z#%#xd9Tvq40~pq%7hSL`UXk^NH5#%H-R~Pq*2$BnOpRSfSv#|fwKZ~0 zxlQ@a-!PUm?1G+dhcz!(Oj)8mgA3cH44U;UtuC#ovSIvu`oq;V4UI7v*Ky=+0+oPW&e)|miHen;F@m#F_8^6O` zpRu3ykk3yY5Ve_%BtKIi52Eq4bRvH-b%5F>i_>m*?h4=4z**N{A6Smq=7R|y#@ge7 z3hCmyzPL4H-odx8f0;T=*ZH!~!^ip!3ayNpg1-M?$)P{p7-eQxqiH)Bm|Yvdk2zuK z)>W%_T3=JrN^^>{@^kxDQfmnGXU5n812~2!4SQYwa9Y0!#b8ol>Bjq}1*!C<9Ftl@ z?mN2rf&*q-R2bcg)%_-3Xgu2dc-XYMlgLAE9;2r6y*Cdr*MlfPqITR1Lx>Zbww}s$ zHxG#n;~Rb-OqXQ4{PN9X$1bL)L?-?8Ayc2QvAZ5Qd_{lpr^DBnIwq>qd8(eM-2t!m zW)cQIlK9hUW6Z+u8x);yJcAaJLp;2TT&`p+5Goe6kEVn z#4v9k_PmnJPAX?u4;C$Jlcu7dNl6xCHn-IN{^?yHZ%yi}u@bp3DN&szUrCy#cFMt| zmCl7UE8Cqlht_!A)t2w(k?N|jWTyANAf@9r}%{rlJ0pi*7Gni`k3 zWHlagH^3;EM;p6u;rHT5?|EGt-{DO7k_C3UX|sFt9BRz!scJcO(tXnMlD(@R^0(7( zjGW0A^GtBnK93POb_P{j<;gQFfIQq6>lAl3OW17>c3OFGl@1< z=W&o^3LOR#-{dChu*C^sihU4bAFd%_xpv~DIe;%E5$6&^CV_dAW!W>+8o!B#nv=!; ziHZGfp~PDt6O_cKa7kD)pi|jYZk;(mGnL4{%p5RwFR^u+#LtM;LD(P?G>KcOwZjex zZRV)VeNB}ADfh8KT$uQ8WIdVj;;pmxYI`1}#+XxW^1H_m8R`yy`?CDn9JBZkDLrfR z-Yfqw#}c`kD31%uCXe12^O0=4?ZJh(;fcR)U^`x>hO(4mC02=uDPN&imK7@rg`=$x zk+QQk`Cht2bg|)jM6*{ul3%?o**S%TOrJqT zQzbx_gIRmA6U5Fvz}>pe0CRQH8MN!dPE!KLpI?V{cYFBW4jc-Y_yvBi4j}FIrn>g7 zx7B^_ug0(sl-4^T{Ee@u+aRPN|Cq!41f;7j{IvoiO%=P+Jpk?g=yE%+%HM3?8;FjiEme7#zF4~Rmgb#<&omhQC$T5+I)gUyLbcc1? zWYS^(H-Ot=hedcD!nF?}Y_jMd92%_O!>RIDaDbqF5rAk=RKOIpACc?t=r_bc#5N~2 zhw%ewyyBCfnN8qcZkXSqhuF9l99GZdkMFpD@-I|zvP^wbYAa23*p$i2B(6fU$!zj* z(&2PcC=_0dM*!5i5`*1`0V-lJ@lR2CSMq=n>j+M@nUg_%J}AJDh;g_L%wBQs>g~P; z4Zt|xSnl`wO#r>+=aWZb!T*tbljaK|554n2%~~o~-#J(_iONskIeuktzBtwgp26!t zs9!SI=2Sb&tV%7beu(+L&jB_-vy^Np7eU#&OnFRiXU z5EBNyI0lV>k^L2U5@p$eLi17JW`I$W?^>XR6)zvUD<(=JckJ%XBw~Emco{13Kkphi zwg+|&lYmdyzrVO}zs*%z>M8{^UrVoCk>%2=;_80IRe9c=GDH2k2jmAV9X|BiI(Md% zkB}PLzxNC%6*9&o0+2okngs7R3Hf2=_$*Bz>6LqHoVIIpDXl+HSyKZIf_b?pQ*e_X z+C32Du0v5B&fmZ`0qCrc)u);t;DYEqNQ|z7vBI0*k-)O|$OAO6>;j4F^&4eTv4Q|q z_wMis`Iou4&-qYjFDs(?0Wz}-=~FTo z1 zgmyoLsB8t1hJ~-2`M|?{T7E-^7w>=K46HAvp#V9%F1wA&-_KvJu@U*U1xY>c0o>@N z#)eqEF7Oz$$TbTF&VP=wUCJ*1aR0F9=+|Qa+E=8f#{eE4zlR!MYoWl9ysZH{x?tk+ zBGG&Zo+*(DuvSIp4J4YC;R6=jveLSI`_^TS7`J#xmKM%);w}e7x&xhYfaBvdnDNfZ@R(8M2+7=A>e7%+tr@wQ1!fss~=O2T8@!LpJ$6L1{v4q{c*!eel(;3!LY%z$g)w%JYjFsVhBu#%yb z$CLz|NT5tDuy2_CPNEDDma$FBG&W7ybj831Tz|j-QQ5RinWjuzrff1O18~Ox;fk^e zmrY}vmf^@>jXQA@+jNDYi7RXqnwUY?ks!uH8~n(BA3PrlpwwuNr@l`6DTCOc&+&tU z{4n1fqzr-|goTeN+$F+r1Wu7K0*j-36L;y^CYEd-N4ndN)yaYNVO9~7a&+LY@N;mY zRE{ghqm{vIaM!NV_r0=RGF z;CM$I6Xgc`9Rm!c$zf%W!)OGLpLsv9xwCZ6<#}&fq4z6~D~|(Am!lT-ANm^gzxWI7 zumx=3%MaGFQ8W|08Lis%+#Rr~Db@OR5rF;;WKd1<9 zF38rMME+>e9dqH^!p>#_qb^YBcPyZRBZ2lsBuWuu^-;+-LSR(jO`zye}l-?*<&=cLA+ZG zEf0KZ=DxS-^mJ2NX0?s=R>tZ5*=;PA$TuvB)-)1%*pjis?65~?khbfvPY@1Ze_|WA z5Fu8v;y!5t0Idr6%n3v;STbD4@nE@miNiuE8v+Csk~`5n4BV!r%b*6cyj7lg&pZvZ zY41Iw)lKqq_Y73OBDdXBj_-X-eK!7X%mhHj%f|6ndYA4$Xk!b-gLV54THC3-ec96C z_fX;TqfHkYZH*T^Pwu>60I0w@pgvt2t6z!#=Hyl-F?rZ9ZvD&GmJQG@QI^P-dlUPF zbp%^m8-C%D=(m_HW=q%-`GI=}Id`(1ZEdYAF}by0R2-ly*4zpv#hU*hr&>>eQzYUX zpn&kU2{M#%!02bv+UFbfSCQn+I|ys`(AGC7p!$HLv!PN?kmGSj3uN2ee;6(G?Bo_ z;6*d*KS=5Ov2v>gXvY;IuwkuA52eR*wu|32fBTQm48dT>MRTs4wLC#M0y5O)$|sk{ zX>q0e%5v%iwWRIOIMNLrg?&@(kI+DNA(V^HK;@!xjSVK&w`h54!`>q$4TK9g=wla& zlB{gZS-Dc#=w-=Pi0F$XG@QMoT=6gPFJSMmEB@iuPHzC-j*tnKH23L3y9|2$roSI? z&Y*EDBKY8Iu;k3AGagB8vUXsFUteY6CCWWw-OID7(dJM0r*UBwUasMF3e%y5w-E6C zeSvae7E1T0V_jmEV_o7}tV`Q*!iGQ-!0>ScVt^ME?FArk%3N6_7gku6L}u4l=4Zom z8uCH)unRZIy8HXji5Uvz5NiS=A*Eo=IV<<_22B1$aA&(eQGk3nT7F@j6;5FIY4b{R z%L;4^OHrR&QB~-*_w`H!D%dc}Rtju(N2@+#>++j7qnB7jLulu4q3UoQz=Fn{ zqlHJT!4oV>Z`|-mS<~@T;AcR3n2|%CiJyXy*OG3J6%63vSi+3TqgKomK83NgmdJZn z#ICLg4;6G)dp!XcJ4iac(5?Re)Gu@bc0)s0O1j|>K0`ZkM9fF;&eFe>GB(5k(_|6- zkjmFqOc?ki`AfxSfGL4{URSK4J}@5`X*267FI-unfm-s_%3F2uq~TY2^eWrZC7`&gz%sMD~!87v+&f=8)gQS_AFN<-!LD?kw70D@te+4xo}m&SN%r7 zUpOq-z^5E;qA(J`f3*Q$&})t#H!gnbw#u3v)|wra+qTB=efjfM2gbU&f@$i_aWmu1 zK@-q9C~G0FdG^8uvt}=N_Kp4I_2&Qz2EDq!j$AyqdW?G2H8O#)8;J4dgR6edIc#Mr z0{d2XjTmQ4AjTY=={jzli!)tFEqsK)JV(}u|dc6ns23S{CB@YrKo3B#qPG{P3so+NFsW-7}bzTIB+k&wC?r= z+lem>>kfqdV`?*>TT_r?MF_~)nQwk!3)p`Jdk`*XzIwcV-~M#K>i@ez*L{sGnCNf5 zU%q#Jo-Lk){^WDRmwKYs?|^#PMI~0hUA&vh9qaq)_LFakY}wGyNp1ccg?GSN_LkOW z9k94PZuf!O+5;ulr~JG1{^_9S4`7yZfG?TL$hBaD{{)wx1jZJtYv3lpUu%NRQf76; zb;MykL7}^e2I2y7{20^n+2N~04Oqbh?Xe+Xx}Rf#?O)2LH$Wce+77zDoJNnQHr+Qf!L4XhV(xv!eF|#@&%qM=4}`SUNkX>>)3?uBG!cwO zm^ka1x3=3txBMF~U2g7j((?F+=vrrb#a{XS2PMOESP^hL554%~gHzPH1dNzGd~@UU z4`{F*nA{g{&KwITImXT>KzJs8iSdY~|4VdLA_+M;Z{TAEj}PlBM{Kd^lBrDPpxI0!ro#taFHEEIGh40BZafjDlO1db>)6f`tH7)?NZpHU zsr-;_)sbzNp5&1z_ikUYa;H_^{-UxpBPM7MG@HM{EZ92|iwQu#$#fWm0Ki6WIknCJ zg9J=4kQ>(CFa#Pae2RFOuqXaHze=U`qGs{Nf#;qk0-@ z7c*&WFpinboQ+_Zxz%dk4RI+%u>=qn0|t?|?d6yg7}Y-b(kXZeJO>H^;M98Z29-B& zpF3g`sV7ymA!uPe)G#1TKrW$h`c2~dP{tIy;^Q$9mXIR_1F%W{X8ULn?lYX;C|h@o zHSrbFdpBwQ-~*_O4rVgGe1Xbqcg!9!nHo=X&YD@8S)OHMgQ@Xl44+(OuZc( zXKCvATfh~J+s<_}otJ)ExAO(t+TX8jW;)BiNW;0>i=~em*ffE~F$0TWakeP5f0Y?W zGSeJpegF@8H8n>q%L^S@l(TQH#NqK=LmJ79>}m@!ezP)@0RQ{h@%h*&pjn*Dvu5$7 zb3YwFo%)b7kRm?8#EJNpI-L8E-!%>6?elXUY2rIiKyAm{OhFCkSK;akb9R2lS`t{cgTUROU+De>H z&*PyO3ctng5{#E&O?$hn>2S+lv|MJqCswbAEV7W%qZK&V(74mNH$UBCyhpCvO~-2~ zZdDer1-$ithJA2fkLGqW+Gk~bjF;m`HsuY4ZS8VyYnx$f|F9b@&+iiX!`sMV%KP>8 z*H`h2M|9s^?t;<%Z3~yb;g<}zFrT+zM0a>+Mvrd8FYDybhUMP%BH}a*ga{maLHI?( z9Vz!*Z|aXTyP9^fiIpucI@uWb3CA2@u}5~*A8guxpoI-S={?hs)v&v=`6rC5x1p8= zn{p~!9zI{$R9AVV>Y2PcM!c0(#+#QnsA6>w2X~r{SqP9X@wioaRslmnLhx$KY zHmc&1RD1^l#N|R~JRX~0>O5g~i5^jz6sx;{OA=0~LWrPq{vRQ9{>`yUf3vHo$mQ{% z0n6}FO4J>SCDkAox+?ZtT%KZ&%TwX4sB~4k^0VdQio&YOLlxd~Z%uhgRY?in5|6Gq z;wdpy)Z%UGTqQ-Nt_p)ur7@^nl@+qfTkOrR^i(+w?y_RHwXme92H0F-g}c&Y@D!F6 z6vmWSl~z|)l~>f2m6YPX8%mNYy+`Y-vT8E7?c47x^A^@t%Jm29_SNK86qc8j7uDpK z=T_(Dmz}CEcNwZ&2Qv#|_PZWRb)|b$wd3LPYILTTX1=E^ zRW9uQZfq58w%vSx?S#q1BMchr^MnpwBtZo&E8tik*xiB zRlDjk%X7SY_LtS>l$Ll)oZg-JSx=SL8r;QhPfS@|-plnKgR|&(MX9a4sIsWi<0|wN zxQd=SsHmQGxyoc$Wqw6^M%m#)?+NXIES0 zYJw>hp%=(@!#VMtgpjPbV>?kS9a~5Xh zO$kL;!-)cM6Ry%)|JRr6>>>sVO3G}o|0m3QB9qz)axlLIOHlb6j$X`)PSN} zvb_0K`48uoW*LeLoh8MVnp}BrT7F&mQRnX5%F`gE2|1TuG*#wSEb97R$W|_ zSL*TPVHCj`axrhE*_oD_oXS1>3k`Dd;hMcMrDdh1o*2)*%Jh1SEay$`lHEl`)`EPe zE5CS8UO}!iedj~>r>Eo?jO8jrTtRW3C$A{WS&+Fm!{aT?1qxqNQdw7BStB3z?k}t^ zsw&JttY>yvUa_I7xVEq;+h9aWRNV3Ob$ilE3|`l^y`Grt{7iRVc8;@V_ujI+%#_OP zebt$%d$Q`Y3d)^X`Q`bZyxfA4lDe!Cm%&wlf1dJvS^KhbvU5{%ii&opXKp*=%mcx! z_qePjnH6hO>#{2HA1ee34s>(m*sxGUm zD6T25t*EQ4Jm7h}#JPTL!S2FL_uirmLvcm9r@~TJTJ9>dR%SOAl-C)`3JyD5F-BEv zg9`MYTas(Y_0;F3TK3g%E-1BC?XJsgsxGN0bC(twTv>Upn39~LoWfjCXsM?pd&izj zMRIXrQBh%Wc5NCML}5jdx1iFHFXzfNF&TNAt1~JS9W}+LwiOr<80Cx=HmMt8g^h3} zwoW2}X#YgB()a29?MqnSj%gj!qB#n24aT}CFU%O{+(#9J55xWEhLpPn&c9n!XATd|`!*(d&PQSZzM~yLnGkuAO$A_%?Qm@=?Tp8Qg?JK3qSDU2 zTp?2h6@ga9>b1e$(PoyQBrFA>2d}lQvFbqMu^3oXBZ=IQIYNs_0{QjKffN6SvKzvA z1ko(~Pho(`6L=uPVCam9Ugx{f3eM?y@EATkQVM>%kxn}uNdFkh62s9{iGT25s!ngL zu45LAu8?V^eAqcjJxhMiIUZ_cudIPu9+Ng9Yp&)^IKi{dIDrg`Sz7!7kYjf!MmAiz z`J(mM#r;n_^&?GQ;8?T5%I4h+_j+IDLCYzc;o0ZOuqnf5#VezfIWgC#)*AE)`w(Up z#}$1w>%#{XHk+P(VGg+ir}h2;t>Otn%9pbjYG0&3 zT1R(;<+xS69qm=qpi4Qsh;C%kR^>0GSP03Ra&rZr2`9cygtL($0QV+Ig>H+}QE zb+*v(&~W{_b(^Ozj_H778+Z7dmFB0Q_rpSwEqTLi7y^XnnL>#oP6kY!?Pl%@2R3D7 zqxtYWkoOtFa+vpjcu$BtH@}~GGVQ<&hZ2==G)D;S`h8>MefhCYZYg!y7|agq1+GZb zCUeUc-`ew5HvYawcG3|F;X}@da1Z zC*c!%K1R>bFD@-3zx`NS=H8dRecg=qiD>8xU0AdTDB2pkW zkhGj4(dVBR*A=eOjDkxD4mQD9Qbb!fa4+F1j!IzifV=ZW%S>J#cf}HC!wIQdCI^a# z#xDa21iZ^&t?34E^P?-W1(DgEKKO<8NmcSJ*TQ}_Qc+W5i`5JGkD&Mpq$nR z4MRxKE>0#<;9vGup6MgM>#67k%gW2U#GQU^!ek<+mCRBnUVN%Vs~!lapi${UrM)m* zfv=j{Sfam~{|q2+Jj+QvOa7*Go)b|O2%!)VOX2s5Qz;NB0U;J4FCu~h9NP@25Y4V2 zn!N&n2^~)6^ZVWdRxpRagUjRG-s3p&Y})xJXQt{_zmNOreP$QoNmF{KGmqO;+$#)# zCu9fQ(tV{HSNeScr^);<{Kh=80}dDf7jVEJ?j#Hmq0<4=@5D5bCH6T=Y{B*bTr64e z!6UFV)Q+H2Q)j!tfl2U35Pb?K#IE^8M={O2-vd*d!^vVc4kYuw@_lr?>m)oTvk8S$ z$U&NToWqpzY3lFf^zt`{yv-xi5Y1(L4H1TZ1aC0}Zz)TayQeCM>9Q()nE8JYw8d_a zcU7#{AZ+H7imQp>|J%3k-MlttW8H(?3-)J7b>02+2UEfOMfR+XVk-}#kFbX)J z1aQvol;4u44*G`Lwvp>-q%H7Ltg_Ag7Y=zVjq3PQ@dDbL=*`&VCZ_EbaIU;gIFiD1 z(wMz%3;+ypF2$El+Y~#Xvv8W4Vjsrij(uHuhv6%5kKc>q>6rQMoBs0nc)+byfXhAKtK+Qwh9GU1>+b1~yV&R5NDCP#SRPa?wNsf?O5*E#NRK;aW)F zzYk6vzVsaM5Qm#e^fVdtuc?zM!|P8*L@Rv)s327N^QgT$;uNAemi8^aNQ z_paK$W~U7gfL&kU$+sY%&?_p7*c5nnwrsa5(W0^enp+YAxRBsw_1i@BtwI>b1R(M^1qqBo74(XJQ?U6{nv9)Rcv7@+ zK+%4z8|55K{~I*xg3Nft86Qpl$2CSCZwSTUp)*#0B7?O0 z+jfUZoc#2RceYzQ4kK3-c>yGFSbXQ9r+pvB1iS$g99>?45jY5%dFUKgEWhYm8geS8 zr}=w?gMJ}1fRA_BmxJVQ$BNZ0B*U-ob(%uWW`qQzSDY4HR9ygBYGRIfejy@Ay{)6= zZ3hz6Bk(=bIe2;#Y{pq0Y=^m(KdSHNghKZyE)kGAEFkTvKR!YU zUme|IhhLz^W6O4ak{exid7{wNZfTNqTaj4VO zXVb^@lz;(%wScAa7j^eZR1!IP`$X2x$$JxaPO;%~>A~@up$PLjI4BvGj6GGKtC%)z zIz~@z(iTebjljp31x0na8ok@Q4(-_3wRvAH2eA4*F8DsNvS=gbS*}zKLuKw3`b_(1(a_JJw34 z53*x%L&BoBNH~Qb9dx%cQ!9&vUm58DeaIvX7k9#R;L4yKQW3Xy+IcXz-5kzw?m)}D ze*s?=?R2`IWQk8A81htD2Yt1{2CF3G#Y^E6;#UA)FoCa%s3+}S!1Ll8cymxxT z8Smd-4|EE^d_?}H3mkxlP~ zFvw%__9Hisf-im+d_>Rop&U3%ADSC_u{;?=7! zTIF|+(8;iLnqhhKTqo{M38zyTd&4MG*7)t_6Wnq_P!Af6yB;(YD+~>X4avhAWBNh6 z^@hCvsomnhE<`IeCNANrEIgV3Ujw=mtI*q6VucwLPPGr(U%{9OEsw2SY{N`}+t~j% zzdu^R`(q7q7QzO|k2Tqcyh8lGt{as^(O;}gFgF!6W;a+{x6C<-_yec}!b>C^Cou77 zg7bffmzY8rP>2A<0heRAJ^)k;hlnh6I4Z*lIXu1Bih=>?qyte!uqb?IK~Ld+nOU#F zKP$bg=Q(-v4w+!B4u>TfOoSXhkJk{puW0K`JWGI0G@C=d<#22NlSV~A*RbOrdx8Af z(K*sU>Y#q?GwhE&HV64xj<8i#0Os$v-$^=5u-gNONkLSWeIO@(kUnb$t=qvs?GTq> zotFbX%n%aa?a;A|d$3{RQG)hkw1^rnGZRW;*k7Uue_4e~5Qn%LZdt!C89W`NWH#;z z7p6do4CCdP$KiP5dZKa9^^jj2?KBAp{53u_vHw>P5qRS+;l-!G*m(-@g-yjnZI5S_*EBgB}Jr25<5=yKH~WF&v@ z@Kq2NXl?sIT*5cywueTIt*0<`!tp3p$XNkix=zFe;Al8Vf;BNy4MutgQo_+Skr?lX zu0Qv9(w%)tC?vu<3OsB!-rtpgVKrthKeqb(PM(7i&ZIDY%(F1gQ>MXv9}wfmdz{W) zJ7YT1MPuf(w1%gSkgOs9*)(t1 zc*l8a%tqrMkiQ!4Zq|4Q8h-Q{(okJ@qzQ5d0w zI2fgg)h}0Hjui)K{T+j5KtG z{yAdxcVHm{hgoJ0#rxxr;>vh`fBkDY)G60L9HYsh^5uuesNa#lf4Er3p+9-|$=Rbb zi9Vd624=)V7s5=*{|qP!vf>+k=o_)abUC~&`k(1YMBv_6C*zz*IO0p~3ISDw7g?ZP zadd5={6+V2gH%JEjC#^`s;#%X4Rr2?hR_Cs%-F`m-(tzb#EQg1&Ze*hi^0TMiIF`_ zY;9pp-D+&(8tSYIcRl-{tyozbze1Tif7!l8>2lF2Qns4Yn=iuiC(}xjcaNFrwy()#usJN5L^{1`9eB|`O^Olw; zHY~9jpJhXc{L<+mJ#eM(ZOShbcGAi-bdZlca_~aeRk$Y2v(H+#UGJ~%#zewKmlnFy zj5AAkG~|IZA3DJ?w*y=7K{a1W#C?duM{)^sgQGw_KTDM>;F(3Nd6Tsi@4-RjS-da{ zB1uRXHo*okR5lAAUaw`Awaes+X1#bO6>L+$8BP8#%sFTC&tE|5Sh&$!_RoCicIz*{ z=z~8w{Xc=ICw+vfC$Y*%{72=Jk0wQbL0KiMjDCIP2U|bQF_ea73wpDUPM>|~)Ld&@ zo8Ec)T;6%h^~WMKO=KOcLm%qJfDK38uaGYltA(2ju)YH7fLf1Ko^Xa$&<8^&=z~I~ z3{*_=)^pJ!SLnI6TXJr|ds?f-fxcUw?fKmoEz~<9Deqhi^jawY%#^pl~H<=}pS7j$Y3n@h0sz@K??q@aTWv z%8sD)R(8^glg78ZPII{r3HtX;z+f|s-VO)U`erhe zv7>vRcsrhiLDQb8GOtTkRuq`I>zl8p}^* zFo9H7mR7m^_38dep-J_jdINhjcy~O=4a#A6*tdMoV_W*23`bmWV(IjEHZ?u!Zc6RP zqc$FuKYr}~2f7n6x(n;P09%P^q2&tKjUj~(u(u1&Gkpr)0#%vL3W3R)JZ7s^pDbBT|@2#kH+BjnjoeZ7)Ybl-dpXA5(94t6q)zq)Cs`0=v zi{H^zz$D~=1?l&OTTcXIN(@h9JE8=G+5S0Z1lZ)ITXJ(s77)LONu9;_az9;=?Hen7oWou(+olVyalMW=+Ru%JfZ2-YP5oupa94i?X+;!yb|q2RLg78zJPKdL}%1R>!#`E z=`wY>x*}Z#ih~@|IbYMgtNUE{r(UO@jmmgyQ34SK3-m6OKRl#Ara!H}tiPgf7lxsJ zNTM)Fm?q3X!NUc@8ew<1)M15CCDaMWQ5Wxd;SJO{{9e?F22?nlC?<)wipk=9agn$~ z+$ru8kBX0rPl^8!pBMinz9GINej7C1k{DEyxRop>_mj0`BiTmsP!R7lX(m_6bL3_6I{A_~nPiaqNpamZ z@a9O#(%sS;X{(efrAscUT=Gi$r3UGQbWVCydO~VJHWT$SX(270l!6rA;!ArP5SXatmj9R&c;)1ZobU)*ccx$MT2nro7Zp z*m8%9NBKb$f=PhSC7MA1JcJ4X4o>AE4Ba#~2w?LZkLWM!(xgsnu z{#&EzM>==@&Ij&8VU(%LJS5YsfhSqM{aZ`#F!qY~e}O)NM~oy=p}e5K8ITS}n^%!T zQ7vAH>~4&#on~jbvr(Dt`avLdu0S{(Ri|lFTX+7HrU z_2<@2Ke^ZvYVLL?@I0NURE#F7OuS2ZSv=_6HoV!-v@1>0$u&h@>F;__GOzB(k6{e2 zL-6sRjk|X3v(K(sB^z`qV9)?mU@jo;I2mEbAyXURAHH>#hTS!Q0s*o($hV-&y;MR_ zfk_$w;Sw^Zq4wXTo&nQ?z69Upa0_)8(0;K*T4fQHkeG zNT+~K!1m~_%>}3l#nv9!48r21nhn<^Sl%Hqg&&}r?B^`6$*r|Oqm$st3;8f)6HwF=)y7O&gjZY~D}C|in_oyuwBiM>4ciShg1jsm z(cq`h(IR#wMp{E=p(r7*sVToVXb9Bv|M$b+-XvA?FLNf9c7s-=^u2jbC!QmmK|Q_3 zx<^jONUuNl-0LV{sE8<>*uo2ed6_=^lDqhw`h#gGGh<0f$xg#^=}I;5{Ys?^Km7$WTc{%CuUdC!=8kznu*jY!SF0DViV#WIP zD^{Fcf9cZMvzM$=SGpZX-lVROU1%!ESVkw|(~?F~zexd-!wUokTTpKlnQ}xLgaw5# zb6DLS_O4o)K)p~cl%eeEA%eO9vHwvbN5WM~uffj2N-vJ?DLsE4#Cq`rNY?9TUXn~o zL%TfLc_iV9SZBd?jzD)LI!TC9 z=WsF@D@4Mx!11IG&?<_!<`?DllX!h7TMJU6P(yV%3IB9OxnQ{A?nvOVF7iV^#v{8G z|)TbRpsUXYIqg4kF+9Vi^ zDAI-&!yi<`9Q2EVDtqvl|C^lU|F4C!32h>X0>HrsfzKBuaP0^PZHvv{3jWO|?I9L;pu% zc_rp8EW56$254bzxwXe%qKBxFD$Z5wUHmLj&U$sOsEL&$**@8Gcz0-s1}f>fxK#8! zti_{jJ)Jh?b8XkxX#ULgiA$4aW4e;b#Ln8M&e`0+CQd@jqXWcGlDiQ@o6q6VH84Tl z{vaMh*939qap3Wa{JjpUX1Uq$?))}_xEiS_r8E{-Xg+OBiJXfRB+y-)Lsb<}J72=AE#RrTsak?NCG-&O*Lb zdk|hKE2Fs>6WxCh*-Y)rg%f@><@d%fU#Z-`X2~>MC$Sr-Pao@yAuae_WmS zw@bQ^$&q~@@b?Mfkngs?5}PdxpC~N7t5uvIzFut{L+NNCJFI=7hQbx|&%2Op`3KaS BPQd^G diff --git a/styles/bootstrap/font-awesome/font/fontawesome-webfont.eot b/styles/bootstrap/font-awesome/font/fontawesome-webfont.eot index c080283bdd786eb40d77cb00eab751e2098f51c5..0662cb96bfb78cb2603df4bc9995314bd6806312 100755 GIT binary patch literal 37405 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�-A&iY%khEsGVMaq&$BJA^QAs8x>7-g_ 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 diff --git a/styles/bootstrap/font-awesome/font/fontawesome-webfont.svg b/styles/bootstrap/font-awesome/font/fontawesome-webfont.svg index 10a1e1bbf..2edb4ec34 100755 --- a/styles/bootstrap/font-awesome/font/fontawesome-webfont.svg +++ b/styles/bootstrap/font-awesome/font/fontawesome-webfont.svg @@ -52,8 +52,8 @@ - - + + @@ -63,7 +63,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -178,7 +178,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -250,7 +250,7 @@ - + @@ -277,7 +277,7 @@ - + @@ -317,8 +317,8 @@ - - + + @@ -333,7 +333,67 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/styles/bootstrap/font-awesome/font/fontawesome-webfont.ttf b/styles/bootstrap/font-awesome/font/fontawesome-webfont.ttf index 908f69ec9a701858116376eee7b3e4ecb76da25b..d3659246915cacb0c9204271f1f9fc5f77049eac 100755 GIT binary patch delta 17946 zcma)j31A!5neeRR9XoMs$FWI54v7$s z(v~BJ6hd19r4VkG0Hs^nx&>N#1cTk_n~|}Md2OWyZ4Mhy@{gef526om5j8$_QOM;YNpS+W<4EQ_eS2!P1NH>2Ju7jzr?fR2Zn1Y zG=b>$(`WE==B!8sC@StV`~2ag*@t}L2!fy4!UYO7iB#MdQ*6kMatx(*mDQ;f&Y^ue zgZcwQDW>YmKAJ46t1H8~vMv{@bCuChg-)uuQUjW6(5d~?InvB#%IeBo>Wi)}fSfv) z<0v*qStu`61(Tb7Sp!O><|8vX#T4pTi%p_)lAulsk|az?LPn6#$%&d4mqbsgP$<@P z!A)MB_}6Cl>07KXav~!-iPn~a8TEfSK5MmCMfq|X`IyH1`yv+^;wk*qSsk?DkBGWYEYV=gx_waba= z$M;?cNo*bliBTB-sIG|)<@N~+J z;z}x_6uNM>umIzuh@Xs^f;$+;jcqU-hT(WRAhxt(3-eIo0S-U8 zvAJg(|*pv+u+JU9gOKl6PAOP{+Js^E))Ymu5M&=)8wqgVE*uIy4Yq* zrQyj`l8Ypw7?u~HBX0-1a8`c=rqM`~*Apm7OES@j3bjZ{r2*K0lA3t@N=vp8NCYL4 z(1Tzgor=WL{wNBhNM9Jfa7iT!I8Oyg1;GNjhUruqUI-gk5cZp~ji&81Hs}!tq^Q$z z2#XleG|OptL~}HUX+15PbexvvStMF$O#-ewGP)SrL9;xM5yvvLUS@c$jbno)K91uJ zG^Vx4z|#SdH8NVA%nG#Dpk?W-LDcAw*`z^QR->U^I@!rPITq=4MhwJn)WIuRRzve% z9b-4M41;Lc4AD6p$C|KT!wMV^Q{pir3K|o4Y(391nAT}IR4HTF8zw~aJb;I3v(e}S z&?N)I7&O?1V1v*lG|FOz!wwPCEXEpmjMfPj%$YP=g=0C4jRp(NIyE|jnH61pP{ypD z$E<^ejuwsJkysjIMvFOwESObT+6b7!NXucpLFN$yGxzgG8Bj|b7)+oCL?XVD6L}W1 zcDjVk(l9qxhxHm>gUFxA>vTvkGggjg5MW%(vn;DM@Eq%*c}z13Hq*3Z)R}05mNsKi zF@NjKEwoHa9OAVm8tWK6$CK5<$SSf1t)62sY#EjowE|+;0F57S9 z5i-FX^vGpqVA%v%N#u<%$WTqwWg3L_T8_;IIL@U7wnZMomWmRFwK6okj<=c=%sDMO zO_1Y_oDKut8JMk~ku}ID>1j^l7*=D)bgAe=TA&?XVl;MIi-DAZ3Q9E$@L~W#rbP`+ zV@6Y9()r9LEYh&b@B&QJT27xeA~WlhXodzNrddH(26tvXuhD8Xv?Oa0t6^l57G9;N zP1vB*Xn3B(fLK<8^b9t_9ALvCtmD|}Bf&f1MLgmS1Y8X)H6b?|UI3d5b1aZ@2?rZk zkF_*og4xiznBM3ymxv0(J2l+t%B#W^Yz@@{;-TH?HK9u+`NWZj=G#9_Tu=P$A)o70 zB{fA^CK?|rJso-Y9VrV67l`c~OHq2tM%7a5K;Bpc1Z)p@WK3Z$y0<050pQ(!;Fo@o zA#NJvc_S@bc!3G{qf8{6Or*&Hd>UA=tq}x=)xs+{SJJSip@f|99p`Vqal;kmCl)`P zU3`1x6*pvhj$PYvs^i*YJ(;P7@O2a4J-%sW?*1FD-{EV#-Weafcjv@Cw;mn1cW2yr zJ?d{?)7rY`#2R~u3lCx2-VB3Mw*unt{ABgXgRsOaod6eFaPbXj&);w ztJVa(9V`3B)~-GY^90@NwCy{LD@C0%@kC?esmq`?5e8AD#6W%Fxq!b0aUgml zBAd2tJY>Pwg&jFZ_^bZ$iMM}ivRDpn+-8z35>?PD7|_C~z=ZNzc%uC^=fuI+yr&;| z?N#1cTxkka4h(aZC^u+m)d={DndoE&(Eg}%6w0X-?IqfnfF^S}v?~AlISRYg-+?CP zD!-uP8L3jL8U|2!1O$PKIFQXiAwHlD^Tdr)N|xC#+0;q7Sym@)l9{NIx68)qj8T@2 z^rTTn)B}5`GkYI+U@twn_W}CyfJe{QhHg<0zbKUa6cfN5P zcHwpqnmV?ktNOBjR7;SdzJ$Ia3HQKS-lX0_dL9SL&dSEC1?dkD{r-@qM3)6U9&1@w zaP#tCO2XAfS-s{dcoG;5q7vsQ`W4u&Jy5W4yww6$3RyqGO<@s$n&yyY1BEu3h|-a$ z2Ea?tfLMy$Ou?`r^8gM^STbXCbMz}exJweQGs?{e+FMIlumrdBCQ*xb9|?t4A8?1- z6RAk`%9`f#Xo>mxFU!X31ZnQhmU@XZ8&+#X!ARTEjcY5m>@!z{mPKolbzSL&AqU!W z$L}1E5qvzRt*VaO;bqr>T+`#N4o&AOSIl2-vznxUv#NaV{I>ENUUolelqKPD&hM+p znmEaFOayI?mI9@=&Q?cN#2Jt!i>)TyxL{q8Y0*bu-5LQ41r&g$tN?2v$cRvp8F~hd zA1qfw+i_pGh^C?uOO~z@DYiH)+Yw1PWqb9(`%zHPX{^tgwCb7cq*gYL9KBmnFC*)N zzC8EeZXv+Yg>Cp&jrk#9x)ptbbn}yzC)5)rNiv|}pJh1-VD z5H1U>ls*RlFQh0RP!`zNvw$UM?&c%H6M>R!a#jIRn3f9#V3z=8k=CpisLsOSjSmB1 zOc9Dg-s1Ha>UT66o%B6f_e(jXE9bwXv3|#_(`wWo{IWoJzeoP!73PB4Bw@QzzDyGO zjWTXFnM{(pHoVrp&W!HO$|k{_|CVg*7o^K%<90z(pEk-M1U%>dyN1vU-CBcSlvSaSX znhM6HVHC|`R%hTHtj9CY7k5V#n;xB`2x^%EpPMR(HA#Si3NC_+7-g6D=(EorMN@tM za@`fH+bXMN6VRUJ38S3_CC^}VmXuXDF55KPED0ycaBxy7B4;y#l$GfBXDh*-RCLXN zsE75_PzLZIm4GZ80u0CjS+Up>DLL)4`QniPsjw(B6>Nbp=>kd8fxr?Kjl$D2YhQ_YxWjn$UCTiI91EzgdC}dU3oJr+t-NP7)C~L7U-~g1;OF=9 z_Pgx-eLuS&u6i>*`7)W@W4;^7W!HMp`c0p8up7|!Zr*;_&i9~Qm$Qz~nshpL<1p!R zi~lstA6@8K;&Ms7T@6VBj#kHIVd2tO2t>T$x4bcr0y> zhXZEVwntd@knt9>Y+6B>Cx4gI{SRY$jxqxTq z`^TR>#I6b}Gb^LRS2N%^S%(;)yG<6PrJ&ukcVDm&__kh~W5*jiSKi;gXtEeBs=7@)UX7H{l zELGPy>q_&2JFQfuJ7TCVMpM&MvktU8+~rVSjHxfi2y2-cSOh;;Emb%1;mv{U$J}-o z4bM=LkcV}W1UyO37w*vo7v9D1Jz3~XPKc~;VI?Ir^eMmqH2!lGcPI-YN=F5$W~u|` z8VAOZ4DcYY5Yc-;FD~-B84sV;48+Y^eMyvRLP=O%*fT&5J}Uwp#Y&iBQifL8V0@fh z<+#k;|1V1n#1Llkf7hws)fo+Xb&@E=lLcNdnH40uHUA9S4JI_$O9tsL`*2#li4*mL z)_V38b!u77f7C2f|G4PQd){RFe^X;(EXZ&8$ZasF-_>eS29#sAi_G@JlhQSBZNO$p z3sx(==g;f&?`R}F#&|D%)s7uE-@Ic7KAzt}n8eJ?ixbaM2{QB0g_*OTI&*Z%-01%i z6aU-HVd7s_r?MB#PySRqoS*pXpEPfE`oaX6?0-Xo4s6rC6ie2-U<#E`<K;qMH~&2PhN;2%-e3 z>yzevBlIdzk%Zp=Uv9~|U%-HP0RvgW{V$epq5om|Ki*Tmdo5Dh5610RT_<7T#b-TXx3($?6b{8v74+7f=pQP)1curV98 zOA*l&3a{xkVe9Iu9oOEx>%hHkweo%ho+qiXWAeZsns&5}E>CrS(yY^sdv|rznl$`w zo-vNEwYhHU9XR$aTr)a~9_Q_>$zYV`b$%m1O4h%y@6XRZO=gc0+4HmipE=$o6O{ia zg!~_7|MKhvvt)+P6>;&2s9*KC(6b@5hFyPgY@AtAlCGhlL++U!e=33 z081}_Obh{&2k(wm0jEB3>~nl224M-y4^D1a=z`y$c+uep1mK1(1Zq8a;6d$0RM_DR zg`AG?$*@D6B8nRFI>OA!v`9zIW-+3jm$@dm+}!-7wJQz;9N}!R#NJ=q>XRH=Ew6W3 zWJh#qjZf4fS(d<6$RO*=(Md8242qrk9J$4Xb7xbPcX>ly!`#rw!sXcGbW|b~a^R~< zLKu%`*7~ISP(`Gw-XdE)v9fx%J-oci&)F?PfffihD8L4loka&R5@#v;A~RnB2T&@c zSPK?3gf1}56>MxUFUgN!WELqTt}vg5{Q(gWf;r2lp<*D7cCS?bAEOayNy=J~R`k^@ zjXGqDOV4Yy4$0SA+ix!kh8=+eE7pFg*}Ob>O=g}pBAU%nnx4f){?A1$6fp8w!@8BD zg2m2-%2tH!?)tKr$0}Rut0EPlddasoGm3Gj1YhL{AynybdhqgvBcZu~y5(M&zo9@F zMBmX;A~*^wsRkgAZP4<0>MPU})c1f?k_m7RT7gi~@nphp4T1Ux|49}Oq9lN65jR_i zF`G66F%%qX(1qxN#5X}|icU5#BGTZ@0W&FJwLtGgDw{}xh2e*W7)lUqhJD^b1j}kE z1cST`GCF+`K+b2ai`VljMtW0pK57Q zEFwZJoE}C;A6)Dl%f9vHm}$!NkUt*(%OZ6>x_{AO^_H?~mnn?=>ic#qdXRniSi)LS z9z=h;yR5?cw6;`Gq_VJc{#Emx;jnAo@&$1RGFbI=-IwC=FD3HyzkH@@J}Zjs{HnE& zJiex~p4``0t^uEJ*>lg?HrckPf4J|+ywY&Ebl#D9S-3ju(Wv@oj|tn6N&Rg|a#kbF z#SSUrKz5#^*gu2dxIiNtsjbu@>a*0H)MLO%trnmIGpsiY3SlA^ii1`dH^+USurjmj zmjnt)W(m=xLdigZY8nvG*CmUaPC-!54{IF*4h?*U^A^YiywN0v=`BzRiqk*=5ble_ z=yVp9}bB#SyWY?z+6Q+;t@8}hDS?}i`&TCXug=cLdhT5~E^ zxqf~1oRnFMIyM4>i=K8yT3REn(#XOkV0z&E$<9vvl0#TG@0q;gnR)At4!EEHb^K=G ze%jHuf16Mfa_v}*o_2*6wuD`-aLdAw3$5Cij75!_jVMb?PB#kvTZ@9KmDXsq_4ww^ z`5&Nn)N3oOv=D1ES zdu8FmR~F^hzCAX-owHiG_W2|4kbB-@;o+VUz-|2=65DRrzDE78MUSn9r^D@!W!uRp z9jYZ1p@NK^XAR^AP(nWxwH(=`?Ttrdw8f!Hl+epOGLcq)wwdG{3!g zqkp#9}h$Tq^4-kM6sT#OVfHlQ~ z3%$s-P>@K??0JfgVhGDzplLT^DYr^_{63#avL!=t5K&asgJTz)S=qc2hdvd zminkF(GBWL>Yq@P`o^I8Tj&UKd9Vw)Nc>EFgZY*EC-r3{sPC)qsozD}Qu?s^UG;r5 z2QURPnLP|lh6aSqf)fDoV`Y=b%v*gC;236~*@*a%%)$YoSct=gWC+Bb%s0?aqK|G3 zp#Aj8>0jYVW4@^aKNQJd_9NWAB7YZp3f*{6-Hn^~-?sm{FQPA^jro=U0JL^0e;n^v zx8V2!^vc(deI324-hKr2qo3x#ei>f!R(`Pqe*+XpqB;@cvjTo(%KDwlogsca7YtgQ6W(z3$o z(XrJZ-LQIWY&CPm>aihweN*eo5T|IGBou=bqJ?6tI2?x+}w|K=%Y(Q-}Eu{ z%oIMIUvU!EPINzK$+ojsv0nu@ghEw7RCGIxtbpU2ILSfeM@c3MaCz7oGN@cZ78FgA zm;&mSEYQ#fN*E2CzX>Vcv>S0UgqR_29)fCyv@|l1P!nWHh6!Dx8Baz^UE$!;^sw;# zo~C6qGqGu7_R2RbOR8$s->HAAjAkVFrgZ%quQeq%b!tRoRj~7=7q&+icVsLjUQYT0 zPET1m(^HPi*s4n3w0h#~G0|#dd8`ds9a_57Ul(*AdKMi(<#*Pb5dK=za<93g!z>x* zn|F>@x%MyInA2!($5%Q7T1`zYuk$-x0d1Bqb!jw#Y01&sveYuChBj*~{$!x*d6V|m zTRDFn{mlKU-JNim4~Ly2hSG9pLK}PWz{5)%)o!<_k4mAn(dCv#66KsBQ%!+O&I1d7 zfN)A+I-ruK(h9*9IDS)#OfWKIbkoz8mPpl|4^)L)tj4I{{ry*b!C0N174KI2 z?=i3rvF6MFb=vP1uhW_apq;aPNuK5-CCrW;oZ&>>YG-t-ykH0Z zK~hQknw$o|Xqn?~{rr!DY{KH#w_CEVjYdn@iu5Q}+!TcPA0W&dQ7g~o7_zs34I$t? zRv+Qs1x*(+M+zz@K@+&vA+rkp(Y3z?nSHBZjKo^T_w+4a(KWDoW&J#>^5DiyCK6$D z>cRKaE3OZQY@X%s&oRr+l2|;IP3^?aU%ON36)VY03l7Kvy9t2v6_oFp*FY>H=`#o5 zweSzhRRNF!D5*=AgxR{TGaf3{>5-(qbFaR%w02Hw)@-h*Y-n8B(l{5reKAtA*{AAk zW|w;_iadn^8|KcfD6@T49b8#i5e!)@f{|hW8&>FZ8Jq`tvjMmyP7J!=rH(@UPm@u- zM`sjt>X(fgt!1jrx<^bJ5Q zC>cyqAE5r@);ub>SsFLSYVtK`BU+?g2egBPPH@n?_|AJtqCBAw0!S6FyHY{7#l#=w^ZG$_@ zX~<{+laa_ost{wML2&Cq_JF561Q`cDIEq*NV7`+aTyA=t{@nC9mh$79aW($;{4Si# z@11_<5WbBbntl^!zYJ(4+zU1udl-fjAx$<-t)MnSeJoXwTFlIqEef}yWMd070!vE5 zQ(#d7uEI$YuSuFAiNopxR|U!8@Q?%o;B!E!L@pMe1;-Woo!4gbDk%G`S5dsS>5nSv z=XciEGpjPy%j!GpZ>X=Vs7Gzl41RQHZhC8Oa4~N%@=Lb7x@8GZQjU(3_WFv-dZyGy z1}gqus;^KxD(mYj(W4dha=tH``4cJqsd&yr@d3+@qc1rer5NL0W!(gWT@YSJl)&BJ5G z9|vOG3Yn&uWTV2E@VX+Xg{W$Z2&#A^X!8Uht741s99WlRPE1jrK|&}DO^bv7B zr{R>6kV~hRK>0A2D5jkf(w0M>rQhW&g~UiRuj3#W&kXsJcC!T`MXQM*BdZe>ol~hv z;|iyj)#@R@YOpNTR%IO}DIFy7l~kC+exFk@V$5-R-blMvr4(z0LL+ynQL?SlK+37c z>SZvb$uYqwTgF&UK`x}nt*H>A5ynWeHFeQ_*Hqc`1`O}yth5dC`LH4eQOnBw-L#(5 zLe?k^iLL0XSZn53E#yzqLbgKE>YvmZXo1HVa;oZBBcxG6)+*#?V+QwbtMelS0!Alvn%#D5(i`_{jS@CM zHi@66{g$f&_H7Gnm6fz)(e0npTCHcYzyl>WuL&t(%a8!sj*0fjg5-|i+=VPC6I;{k zMbJs~I;S(`mz)x0>ndT%WRZ1s8_MQ4EKSbQN4!2CEkM4d!{lUok&HN)3leF)kyAU6 z#tfOYki==y(HgSkSUn-x#S*8fROja_**Qa5i>2wFu`%}v>n^iuY0Y5~G7I^+;JKRX5vx3qDXc}Mvf@S+K}gUw*pT30H8v5F zQ_RSqHA8wkfI@Q~MrJ@&g=`+k%Qcu}Q42Y>kY$tQXdVgm4uihY1KGwUO>z$_#4hMHcp2MuS}|Hii}P!v_EwFFWTEm2lei?T;i4riwo)XId94HM9a6}v zrz^}3NEaoU%iq)Rkm93*m?Ac%86-{V&5$<=L085}vwy{$CJUMBMkB`F& zy9egKyta068OHt);9VmdO4*RGCcWs;g2k+_Hc$c+E79xQ78^Wqw^I)y558xaQMm=m z3yz5>6@yflPLlK!3e%7(&hQZ>9;3q%#zzFUt&wg*kf0up0K4$AVQ>{Ug8YS?do~QR z9!iWHj*!O+3<%ORA@3)3k#WUP6+IZ6QnwzyJ|I5x_R$8bSN)-S9Ib1QP26xG9Ac#H z`wreP=|xfcwO4+ywtV>3>G#0?#;d+@cKNES_bj|}alQBkeGF+WEz1rqERiAP8eFks zQEPp&(yhDl5<4wO9_6en*50^6e;iNLHeSvP2miQ!{hgaz1tVgA@$;`Oc>jy<)_dN4 zbJ?HiT?pNBul(Svj)kdutLp#D6Ub1KnY+}Ltl(@wV~{Bgx!5mGWE!2>Mrtz%G01v? zd^IMSfCvJlPmnYyFsB7@u)DE`m>~su9)-9Q!5rkSVU`H*2pqvM(TIxSCmSe4j3SYA zROYtGymc#T``xYzNxZqTwJccWsF^$Ra93+?xFy`yS$}MU;%#4$jjyh)h?U0T|9D{O zwZqM5=O6Dn(!XNqP3lMA8aB1h6c9@a=-08&q^j(CJI|X;4)Y4T&u`CEr`Jb4O~XqY zHr9uPpdwhxB5`kZwYR={)77Cx<2T>+$9B{3w-9^N(iQzjiUsu}QUGm+==Rwh@K0h< z)Pt|3m}5!Q(U?t3B$yvWB>29O;(>gkG>8%l$lF3pvX%tkP&fhEWAKp+oY)`dpGtf& znSUyo#LJS$lSr$MK3g$&e)+zN3Uu5Z;#~C+yb~vn>=T51*lc02WKai$ox*-&l`xGP z#R^QFe;7tcsvoGkpRFk0Up9YUh1&1ZGUa$Doji^k_K6i@J}e?^K(~t(!ah-)#!ceK zTo1%C0&WrTfE3b1iw+Sqah21P#SjQp3;H>l5{mK8^CgH9eOL(RuyCGaD5AwrlQX&z z=SZOt4W)$(ox*^|0v^GA#ZEyU#atk!0%gzvt4yfoT*p#?K?3O)%U zskNYm5+xMeMxS^EmkmVHW&vcVy7szE^QPv)0rw;AIM+U+P8GnRGvo^|_<*ZxdZYl# z%jz6*rEgYG7V1y7XGccRPYaL~0Gah<`Cz$#7lASZyohY9DEX>Lu>~(;H#CbjL(HV6 zth2!$te+pWH*}UqA&$bVyM$G|jef1Pb$J}1fRvTF{K(roN=UapuZBFCgiTDzoJ4 z+<5H6Tdx=@_Xzx3FrC!XlV7V>AN}Q#zdh7<;JF|F$CcSL$n~W=knJajI9y)tS^3hQ zTR%J&mpnolY~T#YuSwuWBq&@-7NoF$3%mDHr^2N%VkQ%IoTCa6Udn;{F5bw{@?oKc zgL4+&SIB!u)O3dQF2pd=ediwy!;Z$3_uNUY3#|WUNH?Q^_A9}-C5(@d0(^x4o5df+ zH8Ye7U&cY664}3y030FP*n@mP7$nRFIZ6mDKd-`dg&k8ZFUwh3N=e^mEt%$?Ik|Z6 z()oh;b&Ja`%e47N^QH(yQ;*2ug!~A-{1G`3mLHjNsEhKsZzA0{@rFeBp}jwo6S6G7 zz?#av4mvlTb4DUY;U!3lO5|}ICg$ABSTyzKw6k>INih*q*Fi-eHwnyyc*_8&f$DAQ*z!zd*aA+#R=O}x| zVsW?6U0|nmc3DL5<&PBDv-tS#%k3q)z+nFu>N%PbE0APRSk|PmBt%nbs^^DG{JfOOUsEP_7vfhD_fi-)4^AhXB`bK|^M~fLp<;KST{W=k%HZ-XB zm=(1o6hobRko$mL2Cil+Y+6UaxK6aW#O|Wfz@yB>k9h6 zvE}kj&eEsqyKY@1*#35`c)79lrmOoKTlRi^a1UZ~4_w=pxkWGlDd71HO?!-j9;j;G zKo)P=e4q|q4?r|^8R7Nza@M%2E5FC-kYdh`CtDXLCC*b`8Q)Z@TJ|9w%OS?n_@(b+aA3>dWAMBtes_-7ohgo41Jd z|D^Olf$;ZJ@~QaD_1w9M``&Qd&%qy`D?CA3X8zF8)33ep?+l_Qo`0);;^dnq@=X_U zy^$k9AAu`PFf%0ry z;W}G}_pO9}n_)f_O%BqTJXGia56yJclfeqd%s>Pf0`SaBs%EYk0M5(jVA9YA6E6Tj zO`x}TWRGd4v`e(7w5qN{ceCy{`YQbiL#tt*;YY@lag*_0p;b5~D&lhSKGQnW4W`%4 z73K$}R_SSZpQX-ntL5+3HtW60N@da(v-R1Yu>Ge!Xm7XQUScY_vE;0y%W<>g7f#OU zcXm3*ocB84b~#+jU01m7b^X0GSbDg0(p`~tAMs#Mzvo$x>P>lvyr;ac`@+5}eBbv? z`|bV_|FeN`;P$}lkV`xnGKKoW-te>G=}1@P^O0xED$0(O-BrCr5tvj{uAL}#gcdWm4{kPZuWy72ehc`UCk=dBqcx>Z4n>sg* zZF=VN)aCmwe|>Xi^YxqmbIZ0Z-|Gr?bKOUK%6j^HUfvqpn%nx|R(0E8Z+-8ry}#(w z^^Nttw%xG(`1UvZ*Y#&_?*GR?&%hG{Q#-snx^~>N7vojq zr>^i{anD}=-jn;>`|jOec4ggxIR~yd@bW?L!M=k}91;#S9~wJsKRkK(!)#l2Y+m*& z*%!0#=h||kxwBV)|7hRQzg)BOn%l2==i1n{qu2iBy1MHQUiaqp4}bRXXJ4QFrw~Z@ z>u|~GQ-1|3ICffjCyqjEsa{B;@=|ToIDCTO1s)bFoaX>9OM-WM9+Yb*hTg42*PTA` z?yWeB>v02a#7#JZ7vN^xf?M%Iya+GGOYlxcm-aGSK)TN8h7B&;5GO%+=cpASw&A@)g+7K4 znrNM|@W@#2zOmEoANJ5$e(UhAk?uWvG+T!U2fIi1^crSwwu}vrFk9laX}WiOl-}Mm zLXYp+Mh^^)(mO`>(_4r3(>q7^(mi8a88W2y{J5q)!=qzcdiKLRNBX;addFap*j(v+ z?bz7pK+pJC?;ZuJvc;a~>jXMA1je|7%!e6r=(&3@c7txPw$pJ1KWrA znF6zKU}(FRoC?+F`-}{B@8`FT4v+K)yJvci+}*fA`S#UhTjTRBRvZ-o^C| z4s6{yN_TG?V)|;+wL;IpSkE|g9V-mRjRArONA<-^p-LPahBtMOjt=kLLQrkIs60M$ zaqD1j-c1$teLMn?kFf`TS~%`v0Fn=ZydW delta 4045 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 literal 34420 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 r!_X=QvG%?Baxjc;O2S{ Date: Thu, 5 Apr 2018 07:42:47 +0200 Subject: [PATCH 016/356] add entry for 5.1.7 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index c637dcd7a..ddf668ff5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,7 @@ - do not remove user when transfering objects - do not periodically count tasks if task list in menu is turned off - use utf8_basename() in op.ImportFS.php +- update font-awesome from 3.1.0 to 3.2.1 -------------------------------------------------------------------------------- Changes in version 5.1.6 From 1ba06eeb277f9a3c3489daf8d7ca2093848f34da Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 07:48:22 +0200 Subject: [PATCH 017/356] new icon for timeline --- views/bootstrap/class.AdminTools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.AdminTools.php b/views/bootstrap/class.AdminTools.php index bd17469a6..487d5e745 100644 --- a/views/bootstrap/class.AdminTools.php +++ b/views/bootstrap/class.AdminTools.php @@ -134,7 +134,7 @@ class SeedDMS_View_AdminTools extends SeedDMS_Bootstrap_Style {
      check_view_access('Timeline')) { ?> -
      +
      callHook('endOfRow', 6); ?> From a54f6f416bce6b8021d6c508a0fab33c94b81fd3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 08:16:28 +0200 Subject: [PATCH 018/356] minor fixes in translation phrases --- views/bootstrap/class.SchedulerTaskMgr.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/views/bootstrap/class.SchedulerTaskMgr.php b/views/bootstrap/class.SchedulerTaskMgr.php index 8ada34273..345e6ed48 100644 --- a/views/bootstrap/class.SchedulerTaskMgr.php +++ b/views/bootstrap/class.SchedulerTaskMgr.php @@ -96,7 +96,7 @@ $(document).ready( function() { default: ?>

      - +
      @@ -258,7 +258,7 @@ $(document).ready( function() { $this->globalNavigation(); $this->contentStart(); $this->pageNavigation(getMLText("admin_tools"), "admin_tools"); - $this->contentHeading(getMLText("scheduler_task_manager")); + $this->contentHeading(getMLText("scheduler_task_mgr")); ?>
      @@ -292,7 +292,7 @@ $(document).ready( function() { if($t) { print ""; } - print ""; + print ""; print "
      "; echo ""; echo ""; From 88e4c0f3b98feb0682af46e7547e4178d8555b5c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 08:22:12 +0200 Subject: [PATCH 019/356] new phrase for scheduler, some updates to taiwan --- languages/ar_EG/lang.inc | 14 ++++++++++++++ languages/bg_BG/lang.inc | 14 ++++++++++++++ languages/ca_ES/lang.inc | 14 ++++++++++++++ languages/cs_CZ/lang.inc | 14 ++++++++++++++ languages/de_DE/lang.inc | 18 ++++++++++++++++-- languages/el_GR/lang.inc | 14 ++++++++++++++ languages/en_GB/lang.inc | 20 +++++++++++++++++--- languages/es_ES/lang.inc | 14 ++++++++++++++ languages/fr_FR/lang.inc | 18 ++++++++++++++++-- languages/hr_HR/lang.inc | 14 ++++++++++++++ languages/hu_HU/lang.inc | 14 ++++++++++++++ languages/it_IT/lang.inc | 14 ++++++++++++++ languages/ko_KR/lang.inc | 14 ++++++++++++++ languages/nl_NL/lang.inc | 14 ++++++++++++++ languages/pl_PL/lang.inc | 14 ++++++++++++++ languages/pt_BR/lang.inc | 14 ++++++++++++++ languages/ro_RO/lang.inc | 14 ++++++++++++++ languages/ru_RU/lang.inc | 14 ++++++++++++++ languages/sk_SK/lang.inc | 14 ++++++++++++++ languages/sv_SE/lang.inc | 14 ++++++++++++++ languages/tr_TR/lang.inc | 14 ++++++++++++++ languages/uk_UA/lang.inc | 14 ++++++++++++++ languages/zh_CN/lang.inc | 14 ++++++++++++++ languages/zh_TW/lang.inc | 32 +++++++++++++++++++++++--------- 24 files changed, 352 insertions(+), 16 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index ca3270aea..fe66aece2 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'إضافة مجلد فرعي', +'add_task' => '', 'add_to_clipboard' => 'اضف الى لوحة القصاصات', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -447,6 +448,7 @@ URL: [url]', 'edit_folder_props' => 'تعديل مجلد', 'edit_group' => 'تعديل مجموعة', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'تعديل المستخدم', 'edit_user_details' => 'تعديل بيانات المستخدم', @@ -459,6 +461,7 @@ URL: [url]', 'email_not_given' => 'من فضلك ادخل بريد الكتروني صحيح.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'لايوجد مستندات او مجلدات', +'empty_list' => '', 'empty_notify_list' => 'لايوجد مدخلات', 'en_GB' => 'الإنكليزية (GB)', 'equal_transition_states' => 'حالة البداية والنهاية متشابهة', @@ -694,6 +697,7 @@ URL: [url]', 'list_access_rights' => 'ﻉﺮﺿ ﻚﻟ ﺎﻠﺻﻼﺤﻳﺎﺗ', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'ملف محلي', 'locked_by' => 'محمي بواسطة', 'lock_document' => 'حماية', @@ -1054,6 +1058,10 @@ URL: [url]', 'saturday' => 'السبت', 'saturday_abbr' => 'س', 'save' => 'حفظ', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'البحث', 'search_fulltext' => 'بحث في النص الكامل', 'search_in' => 'بحث في', @@ -1491,6 +1499,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1574,6 +1583,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 64bc9aa77..a05b6e92b 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -66,6 +66,7 @@ $text = array( 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Добави подпапка', +'add_task' => '', 'add_to_clipboard' => 'Добави към clipboard', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -400,6 +401,7 @@ $text = array( 'edit_folder_props' => 'Редактирай папка', 'edit_group' => 'Редактирай група', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Редактирай потребител', 'edit_user_details' => 'Редактирай данните на потребителя', @@ -412,6 +414,7 @@ $text = array( 'email_not_given' => 'Въведете настоящ email.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Няма документи или папки', +'empty_list' => '', 'empty_notify_list' => 'Няма записи', 'en_GB' => 'Английски (Великобритания)', 'equal_transition_states' => 'Началното и крайно състояние са еднакви', @@ -623,6 +626,7 @@ $text = array( 'list_access_rights' => 'Списък на права', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Локален файл', 'locked_by' => 'Блокиран', 'lock_document' => 'Блокирай', @@ -917,6 +921,10 @@ $text = array( 'saturday' => 'събота', 'saturday_abbr' => '', 'save' => 'Съхрани', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Търсене', 'search_fulltext' => 'Пълнотекстово търсене', 'search_in' => 'Търси в', @@ -1354,6 +1362,7 @@ $text = array( 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1437,6 +1446,11 @@ $text = array( 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index ea8c434cd..3b5975144 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -66,6 +66,7 @@ $text = array( 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Afegir subdirectori', +'add_task' => '', 'add_to_clipboard' => 'Emmagatzemar al portapapers', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -405,6 +406,7 @@ URL: [url]', 'edit_folder_props' => 'Editar directori', 'edit_group' => 'Editar grup...', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Editar usuari...', 'edit_user_details' => 'Editar detalls d\'usuari', @@ -417,6 +419,7 @@ URL: [url]', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sense documents o carpetes', +'empty_list' => '', 'empty_notify_list' => 'No hi ha entrades', 'en_GB' => 'Anglès (Regne Unit)', 'equal_transition_states' => '', @@ -628,6 +631,7 @@ URL: [url]', 'list_access_rights' => 'Llista tots els tipus d\'accés...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Arxiu local', 'locked_by' => 'Locked by', 'lock_document' => 'Bloquejar', @@ -922,6 +926,10 @@ URL: [url]', 'saturday' => 'Dissabte', 'saturday_abbr' => '', 'save' => 'Guardar', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Cercar', 'search_fulltext' => 'Search in fulltext', 'search_in' => 'Buscar a', @@ -1359,6 +1367,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1442,6 +1451,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 992784ca3..f0763921d 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Přidat podsložku', +'add_task' => '', 'add_to_clipboard' => 'Přidat do schránky', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -454,6 +455,7 @@ URL: [url]', 'edit_folder_props' => 'Upravit adresář', 'edit_group' => 'Upravit skupinu', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Upravit uživatele', 'edit_user_details' => 'Upravit podrobnosti uživatele', @@ -466,6 +468,7 @@ URL: [url]', 'email_not_given' => 'Zadejte prosím platnou emailovou adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Žádné dokumenty nebo složky', +'empty_list' => '', 'empty_notify_list' => 'Žádné položky', 'en_GB' => 'Angličtina (GB)', 'equal_transition_states' => 'Počáteční a konečný stav jsou stejné', @@ -701,6 +704,7 @@ URL: [url]', 'list_access_rights' => 'Seznam všech přístupových práv ...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Lokální soubor', 'locked_by' => 'Zamčeno kým', 'lock_document' => 'Zamknout', @@ -1063,6 +1067,10 @@ URL: [url]', 'saturday' => 'Sobota', 'saturday_abbr' => 'So', 'save' => 'Uložit', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Hledat', 'search_fulltext' => 'Vyhledat fulltextově', 'search_in' => 'Prohledávat', @@ -1500,6 +1508,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Změny složky uloženy', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1583,6 +1592,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Tento mail slouží pouze pro test konfigurace SeedDMS', 'testmail_subject' => 'Testovací mail', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 1f05409d1..a6a1a2544 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2602), dgrutsch (22) +// Translators: Admin (2618), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Wiederholungsprüfung hinzufügen', 'add_role' => 'Neue Rolle anlegen', 'add_subfolder' => 'Unterordner anlegen', +'add_task' => 'Neue Task für diese Klasse hinzufügen', 'add_to_clipboard' => 'Zur Zwischenablage hinzufügen', 'add_to_transmittal' => 'Zur Dokumentenliste hinzufügen', 'add_transmittal' => 'Dokumentenliste hinzufügen', @@ -477,6 +478,7 @@ Der Link ist bis zum [valid] gültig. 'edit_folder_props' => 'Bearbeiten', 'edit_group' => 'Gruppe bearbeiten', 'edit_online' => 'Online editieren', +'edit_task' => 'Task editieren', 'edit_transmittal_props' => 'Attribute der Dokumentenliste bearbeiten', 'edit_user' => 'Benutzer bearbeiten', 'edit_user_details' => 'Benutzerdetails bearbeiten', @@ -489,6 +491,7 @@ Der Link ist bis zum [valid] gültig. 'email_not_given' => 'Bitte geben Sie eine gültige E-Mail-Adresse ein.', 'empty_attribute_group_list' => 'Keine Attributgruppen', 'empty_folder_list' => 'Keine Dokumente oder Ordner', +'empty_list' => 'Keine Einträge', 'empty_notify_list' => 'Keine Beobachter', 'en_GB' => 'Englisch (GB)', 'equal_transition_states' => 'Start- und Endstatus ѕind gleich', @@ -731,6 +734,7 @@ URL: [url]', 'list_access_rights' => 'Alle Zugriffsrechte auflisten ...', 'list_contains_no_access_docs' => 'Die Liste enthält weitere Dokumente auf die Sie keinen Zugriff haben und deshalb nicht angezeigt werden.', 'list_hooks' => 'Liste interne Aufrufe', +'list_tasks' => 'Tasks auflisten', 'local_file' => 'Lokale Datei', 'locked_by' => 'Gesperrt von', 'lock_document' => 'Sperren', @@ -1138,6 +1142,10 @@ URL: [url]', 'saturday' => 'Samstag', 'saturday_abbr' => 'Sa', 'save' => 'Speichern', +'scheduler_class' => 'Klasse', +'scheduler_class_description' => 'Beschrebung', +'scheduler_class_parameter' => 'Parameter', +'scheduler_task_mgr' => 'Planer', 'search' => 'Suchen', 'search_fulltext' => 'Suche im Volltext', 'search_in' => 'Suchen in', @@ -1330,7 +1338,7 @@ Name: [username] 'settings_enableRecursiveCount' => 'Rekursive Dokumenten-/Ordner-Zählung', 'settings_enableRecursiveCount_desc' => 'Wenn diese Option eingeschaltet ist, wird die Anzahl der Dokumente und Ordner in der Ordner-Ansicht rekursiv, unter Berücksichtigung der Zugriffsrechte ermittelt.', 'settings_enableRevisionOnVoteReject' => 'Ablehnung durch einen Wiederholungsprüfer', -'settings_enableRevisionOnVoteReject_desc' => '', +'settings_enableRevisionOnVoteReject_desc' => 'Diese Einstellung setzen, wenn die Ablehnung einer Wiederholungsprüfung zur Ablehnung des Dokuments führen soll und nicht den Status \'Korrektur erforderlich\' setzt.', 'settings_enableRevisionWorkflow' => 'Ermögliche Wiederholungsprüfung von Dokumenten', 'settings_enableRevisionWorkflow_desc' => 'Anwählen, um den Workflow der Wiederholungsprüfung von Dokumenten nach einer einstellbaren Zeit zu ermöglichen.', 'settings_enableSelfReceipt' => 'Erlaube Empfangsbestätigung durch angemeldeten Benutzer', @@ -1580,6 +1588,7 @@ Name: [username] 'splash_extension_getlist' => 'Liste der Erweiterungen im Repositorium aktualisiert.', 'splash_extension_import' => 'Erweiterung installiert', 'splash_extension_refresh' => 'Liste der Erweiterungen neu geladen', +'splash_extension_upload' => 'Erweiterung installiert', 'splash_folder_edited' => 'Änderungen am Ordner gespeichert', 'splash_importfs' => '[docs] Dokumente und [folders] Ordner importiert', 'splash_inherit_access' => 'Zugriffsrechte werden geerbt', @@ -1663,6 +1672,11 @@ Name: [username] 'takeOverIndApprover' => 'Übernehme Einzelfreigebende von letzter Version.', 'takeOverIndReviewer' => 'Übernehme die Einzelprüfer von der letzten Version.', 'tasks' => 'Aufgaben', +'task_description' => 'Beschreibung', +'task_frequency' => 'Häufigkeit', +'task_last_run' => 'Letzte Ausführung', +'task_name' => 'Name', +'task_next_run' => 'Nächste Ausführung', 'temp_jscode' => 'Temporärer Javascript-Code', 'testmail_body' => 'Diese Mail ist lediglich zum Test der Mail-Konfiguration von SeedDMS', 'testmail_subject' => 'Test Mail', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 16546ab8e..0975563b6 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -66,6 +66,7 @@ $text = array( 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Νέος υποφάκελος', +'add_task' => '', 'add_to_clipboard' => 'Προσθήκη στο πρόχειρο', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -400,6 +401,7 @@ $text = array( 'edit_folder_props' => 'Επεξεργασία φακέλου', 'edit_group' => '', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => '', 'edit_user_details' => '', @@ -412,6 +414,7 @@ $text = array( 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => '', +'empty_list' => '', 'empty_notify_list' => '', 'en_GB' => 'English (GB)/Αγγλικά', 'equal_transition_states' => '', @@ -623,6 +626,7 @@ $text = array( 'list_access_rights' => '', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => '', 'locked_by' => '', 'lock_document' => 'Κλείδωμα', @@ -928,6 +932,10 @@ URL: [url]', 'saturday' => 'Σαββάτο', 'saturday_abbr' => 'Σα', 'save' => 'Αποθήκευση', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Αναζήτηση', 'search_fulltext' => '', 'search_in' => '', @@ -1365,6 +1373,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1448,6 +1457,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index 26a81aeda..df65474a2 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1720), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1736), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Add revision', 'add_role' => 'Add new role', 'add_subfolder' => 'Add subfolder', +'add_task' => 'Add new task for this class', 'add_to_clipboard' => 'Add to clipboard', 'add_to_transmittal' => 'Add to transmittal', 'add_transmittal' => 'Add transmittal', @@ -478,6 +479,7 @@ The link is valid until [valid]. 'edit_folder_props' => 'Edit folder', 'edit_group' => 'Edit group', 'edit_online' => 'Edit online', +'edit_task' => 'Edit task', 'edit_transmittal_props' => 'Edit transmittal properties', 'edit_user' => 'Edit user', 'edit_user_details' => 'Edit User Details', @@ -490,6 +492,7 @@ The link is valid until [valid]. 'email_not_given' => 'Please enter a valid email address.', 'empty_attribute_group_list' => 'No attribute groups', 'empty_folder_list' => 'No documents or folders', +'empty_list' => 'No entries', 'empty_notify_list' => 'No entries', 'en_GB' => 'English (GB)', 'equal_transition_states' => 'Start and end state are equal', @@ -732,6 +735,7 @@ URL: [url]', 'list_access_rights' => 'List all access rights ...', 'list_contains_no_access_docs' => 'The list contains more documents you have no access to and are not displayed.', 'list_hooks' => 'List hooks', +'list_tasks' => 'List tasks', 'local_file' => 'Local file', 'locked_by' => 'Locked by', 'lock_document' => 'Lock', @@ -1133,6 +1137,10 @@ URL: [url]', 'saturday' => 'Saturday', 'saturday_abbr' => 'Sa', 'save' => 'Save', +'scheduler_class' => 'Class', +'scheduler_class_description' => 'Description', +'scheduler_class_parameter' => 'Parameter', +'scheduler_task_mgr' => 'Scheduler', 'search' => 'Search', 'search_fulltext' => 'Search in fulltext', 'search_in' => 'Search in', @@ -1288,8 +1296,8 @@ Name: [username] 'settings_enableDuplicateDocNames_desc' => 'Allows to have duplicate document names in a folder.', 'settings_enableEmail' => 'Enable E-mail', 'settings_enableEmail_desc' => 'Enable/disable automatic email notification', -'settings_enableFilterReceipt' => '', -'settings_enableFilterReceipt_desc' => '', +'settings_enableFilterReceipt' => 'Filter out owner, reviewer, ... from reception list', +'settings_enableFilterReceipt_desc' => 'Enable, in order to filter out some recipients from a reception list if members of a group are selected.', 'settings_enableFolderTree' => 'Enable Folder Tree', 'settings_enableFolderTree_desc' => 'Enable/Disable the folder tree on the \'View Folder\' page', 'settings_enableFullSearch' => 'Enable Full text search', @@ -1575,6 +1583,7 @@ Name: [username] 'splash_extension_getlist' => 'Updated list of extensions from repository', 'splash_extension_import' => 'Extensition installed', 'splash_extension_refresh' => 'Refreshed list of extensions', +'splash_extension_upload' => 'Extension installed', 'splash_folder_edited' => 'Save folder changes', 'splash_importfs' => 'Imported [docs] documents and [folders] folders', 'splash_inherit_access' => 'Access right will be inherited', @@ -1658,6 +1667,11 @@ Name: [username] 'takeOverIndApprover' => 'Take over individual approver from last version.', 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'tasks' => 'Tasks', +'task_description' => 'Description', +'task_frequency' => 'Frequency', +'task_last_run' => 'Last run', +'task_name' => 'Name', +'task_next_run' => 'Next run', 'temp_jscode' => 'Temporary javascript code', 'testmail_body' => 'This mail is just for testing the mail configuration of SeedDMS', 'testmail_subject' => 'Test mail', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index d9149f94d..b45c60f6c 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Añadir subcarpeta', +'add_task' => '', 'add_to_clipboard' => 'Añadir al portapapeles', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -454,6 +455,7 @@ URL: [url]', 'edit_folder_props' => 'Editar carpeta', 'edit_group' => 'Editar grupo...', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Editar usuario...', 'edit_user_details' => 'Editar detalles de usuario', @@ -466,6 +468,7 @@ URL: [url]', 'email_not_given' => 'Por favor, introduzca una dirección de correo válida.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Sin documentos o carpetas', +'empty_list' => '', 'empty_notify_list' => 'Sin entradas', 'en_GB' => 'Ingless (GB)', 'equal_transition_states' => 'Estado inicial y final son iguales', @@ -701,6 +704,7 @@ URL: [url]', 'list_access_rights' => 'Listar los derechos de acceso', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Fichero local', 'locked_by' => 'Bloqueado por', 'lock_document' => 'Bloquear', @@ -1069,6 +1073,10 @@ URL: [url]', 'saturday' => 'Sábado', 'saturday_abbr' => 'S', 'save' => 'Guardar', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Buscar', 'search_fulltext' => 'Buscar en texto completo', 'search_in' => 'Buscar en', @@ -1506,6 +1514,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Cambios a la carpeta guardados', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1589,6 +1598,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => 'Tomar control de la revisión de la última versión', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'El propósito de este e-mail es probar la configuración del DMS', 'testmail_subject' => 'E-mail de prueba', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index d1637bd0c..09527244b 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1083), jeromerobert (50), lonnnew (9), Oudiceval (674) +// Translators: Admin (1083), jeromerobert (50), lonnnew (9), Oudiceval (675) $text = array( '2_factor_auth' => 'Authentification forte', @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Confirmer l’approbation', 'add_role' => 'Ajouter un rôle', 'add_subfolder' => 'Ajouter un sous-dossier', +'add_task' => '', 'add_to_clipboard' => 'Ajouter au presse-papier', 'add_to_transmittal' => 'Ajouter à la transmission', 'add_transmittal' => 'Ajouter une transmission', @@ -341,7 +342,7 @@ URL: [url]', 'documents_to_receipt' => 'Documents en attente de confirmation de réception', 'documents_to_review' => 'Documents en attente de vérification', 'documents_to_revise' => 'Documents en attente de votre révision', -'documents_to_trigger_workflow' => '', +'documents_to_trigger_workflow' => 'Documents en Workflow', 'documents_user_draft' => 'Ébauches', 'documents_user_expiration' => 'Documents expirés', 'documents_user_needs_correction' => 'Documents nécessitant une correction', @@ -478,6 +479,7 @@ Le lien est valide jusqu’au [valid]. 'edit_folder_props' => 'Modifier le dossier', 'edit_group' => 'Modifier un groupe', 'edit_online' => 'Modification en ligne', +'edit_task' => '', 'edit_transmittal_props' => 'Modifier les propriétés de la transmission', 'edit_user' => 'Modifier un utilisateur', 'edit_user_details' => 'Modifier les détails d\'utilisateur', @@ -490,6 +492,7 @@ Le lien est valide jusqu’au [valid]. 'email_not_given' => 'Veuillez entrer une adresse e-mail valide.', 'empty_attribute_group_list' => 'Aucun groupe d’attributs', 'empty_folder_list' => 'Pas de documents ou de dossier', +'empty_list' => '', 'empty_notify_list' => 'Aucune entrée', 'en_GB' => 'Anglais (RU)', 'equal_transition_states' => 'Etat de début et fin identique', @@ -732,6 +735,7 @@ URL: [url]', 'list_access_rights' => 'Liste des droits d’accès…', 'list_contains_no_access_docs' => 'La liste contient des documents auxquels vous n’avez pas accès et qui ne sont donc pas affichés.', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Fichier local', 'locked_by' => 'Verrouillé par', 'lock_document' => 'Verrouiller', @@ -1117,6 +1121,10 @@ URL : [url]', 'saturday' => 'Samedi', 'saturday_abbr' => 'Sam.', 'save' => 'Enregistrer', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Recherche', 'search_fulltext' => 'Rechercher dans le texte', 'search_in' => 'Rechercher dans', @@ -1559,6 +1567,7 @@ Nom : [username] 'splash_extension_getlist' => '', 'splash_extension_import' => 'Extension installée', 'splash_extension_refresh' => 'Liste des extensions actualisée', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Dossier modifié', 'splash_importfs' => '[docs] documents et [folders] dossiers importés', 'splash_inherit_access' => 'Droits d’accès hérités', @@ -1642,6 +1651,11 @@ Nom : [username] 'takeOverIndApprover' => 'Récupérer les approbateurs de la dernière version.', 'takeOverIndReviewer' => 'Récupérer les examinateurs de la dernière version.', 'tasks' => 'Tâches', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => 'Code javascript temporaire', 'testmail_body' => 'Ce message est un test pour vérifier la configuration mail de SeedDMS.', 'testmail_subject' => 'E-mail test', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index b8ec42921..4345328fe 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -70,6 +70,7 @@ Internet poveznica: [url]', 'add_revision' => 'Dodaj reviziju', 'add_role' => '', 'add_subfolder' => 'Dodaj podmapu', +'add_task' => '', 'add_to_clipboard' => 'Dodaj u međuspremnik', 'add_to_transmittal' => 'Dodaj u proslijeđivanje', 'add_transmittal' => 'Dodaj proslijeđivanje', @@ -459,6 +460,7 @@ Internet poveznica: [url]', 'edit_folder_props' => 'Uredi mapu', 'edit_group' => 'Uredi mapu', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => 'Izmjena postavki proslijeđivanja', 'edit_user' => 'Uredi korisnika', 'edit_user_details' => 'Uredi detalje korisnika', @@ -471,6 +473,7 @@ Internet poveznica: [url]', 'email_not_given' => 'Molimo unesite valjanu email adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nema dokumenata ili mapa', +'empty_list' => '', 'empty_notify_list' => 'Nema zapisa', 'en_GB' => 'Engleski (GB)', 'equal_transition_states' => 'Početni i završni status su jednaki', @@ -706,6 +709,7 @@ Internet poveznica: [url]', 'list_access_rights' => 'Izlistaj sve dozvole pristupa', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Lokalna datoteka', 'locked_by' => 'Zaključao', 'lock_document' => 'Zaključaj', @@ -1090,6 +1094,10 @@ Internet poveznica: [url]', 'saturday' => 'Subota', 'saturday_abbr' => 'Su', 'save' => 'Spremi', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Traži', 'search_fulltext' => 'Traži u cijelom tekstu', 'search_in' => 'Traži u', @@ -1527,6 +1535,7 @@ Internet poveznica: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Pohrani izmjene mape', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1610,6 +1619,11 @@ Internet poveznica: [url]', 'takeOverIndApprover' => 'Preuzimanje pojedinačnog odobravatelja iz zadnje verzije.', 'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.', 'tasks' => 'Zadaci', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Ova poruka služi samo za testiranje konfiguracije ProsperaDMS-a', 'testmail_subject' => 'Testna poruka', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 4a1f58e43..42a2174ef 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => 'szerepkör hozzáadása', 'add_subfolder' => 'Alkönyvtár hozzáadása', +'add_task' => '', 'add_to_clipboard' => 'Vágólaphoz hozzáad', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -454,6 +455,7 @@ URL: [url]', 'edit_folder_props' => 'Mappa szerkesztése', 'edit_group' => 'Csoport szerkesztése', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Felhasználó szerkesztése', 'edit_user_details' => 'Felhasználó részletes adatainak szerkesztése', @@ -466,6 +468,7 @@ URL: [url]', 'email_not_given' => 'Kérem adjon meg egy érvényes email címet.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Mappa vagy dokumentum nem található', +'empty_list' => '', 'empty_notify_list' => 'Nincsenek bejegyzések', 'en_GB' => 'Angol (GB)', 'equal_transition_states' => 'A kezdő- és végállapot megegyezik', @@ -701,6 +704,7 @@ URL: [url]', 'list_access_rights' => 'Összes jogosultság felsorolása...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Helyi állomány', 'locked_by' => 'Zárolta', 'lock_document' => 'Zárol', @@ -1068,6 +1072,10 @@ URL: [url]', 'saturday' => 'Szombat', 'saturday_abbr' => 'Szo', 'save' => 'Mentés', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Keresés', 'search_fulltext' => 'Keresés a teljes szövegben', 'search_in' => 'Keresés ebben a könyvtárban', @@ -1505,6 +1513,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Mappa változásainak mentése', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1588,6 +1597,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Ez az üzenet a SeedDMS levelezési beállításainak tesztelésére szolgál', 'testmail_subject' => 'Teszt üzenet', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index cdc3c821b..c4636c268 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Aggiungi approvazione', 'add_role' => 'Aggiungi nuova responsabilità', 'add_subfolder' => 'Aggiungi sottocartella', +'add_task' => '', 'add_to_clipboard' => 'Aggiungi agli appunti', 'add_to_transmittal' => 'Aggiungi alla trasmissione', 'add_transmittal' => 'Aggiungi trasmissione', @@ -460,6 +461,7 @@ URL: [url]', 'edit_folder_props' => 'Modifica proprietà cartella', 'edit_group' => 'Modifica il gruppo', 'edit_online' => 'Modifica online', +'edit_task' => '', 'edit_transmittal_props' => 'Modifica proprietà trasmissione', 'edit_user' => 'Modifica l\'utente', 'edit_user_details' => 'Modifica i dettagli utente', @@ -472,6 +474,7 @@ URL: [url]', 'email_not_given' => 'Inserisci un indirizzo email valido.', 'empty_attribute_group_list' => 'Nessun gruppo di attributi', 'empty_folder_list' => 'Cartella vuota', +'empty_list' => '', 'empty_notify_list' => 'Nessun record', 'en_GB' => 'Inglese (GB)', 'equal_transition_states' => 'Lo stato iniziale e quello finale sono identici', @@ -707,6 +710,7 @@ URL: [url]', 'list_access_rights' => 'Elenca tutti i diritti di accesso...', 'list_contains_no_access_docs' => '', 'list_hooks' => 'Lista ganci', +'list_tasks' => '', 'local_file' => 'File locale', 'locked_by' => 'Bloccato da', 'lock_document' => 'Blocca', @@ -1102,6 +1106,10 @@ URL: [url]', 'saturday' => 'Sabato', 'saturday_abbr' => 'Sab', 'save' => 'Salva', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Ricerca', 'search_fulltext' => 'Ricerca fulltext', 'search_in' => 'Cerca in', @@ -1539,6 +1547,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Cartella modificata', 'splash_importfs' => 'Importati [Documenti] documenti e cartelle [cartelle]', 'splash_inherit_access' => '', @@ -1622,6 +1631,11 @@ URL: [url]', 'takeOverIndApprover' => 'Riprendi l\'approvatore dall\'ultima versione.', 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'tasks' => 'Compiti', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => 'Codice javascript temporaneo', 'testmail_body' => 'Questo messaggio di posta elettronica è solo un test per verificare la configurazione del repository', 'testmail_subject' => 'Messaggio di test', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index ce8052189..873407a71 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '승인 추가', 'add_role' => '새 역할 더하기', 'add_subfolder' => '하위 폴더 추가', +'add_task' => '', 'add_to_clipboard' => '클립 보드에 추가', 'add_to_transmittal' => '전송', 'add_transmittal' => '전송', @@ -460,6 +461,7 @@ URL: [url]', 'edit_folder_props' => '폴더 편집', 'edit_group' => '편집 그룹', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '전송 속성 편집', 'edit_user' => '사용자 편집', 'edit_user_details' => '사용자 세부 사항 편집', @@ -472,6 +474,7 @@ URL: [url]', 'email_not_given' => '유효한 전자우편을 기입해주세요.', 'empty_attribute_group_list' => '', 'empty_folder_list' => '문서 또는 폴더 입력', +'empty_list' => '', 'empty_notify_list' => '항목을 입력하세요', 'en_GB' => '영어 (GB)', 'equal_transition_states' => '시작 및 종료가 동일한 상태', @@ -707,6 +710,7 @@ URL: [url]', 'list_access_rights' => '모든 접근 권한 나열', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => '로컬 파일', 'locked_by' => '잠근이', 'lock_document' => '잠그기', @@ -1084,6 +1088,10 @@ URL : [url]', 'saturday' => '토요일', 'saturday_abbr' => '토', 'save' => '저장', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => '검색', 'search_fulltext' => '전체 텍스트 검색', 'search_in' => '검색내', @@ -1521,6 +1529,7 @@ URL : [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '저장 폴더 변경', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1604,6 +1613,11 @@ URL : [url]', 'takeOverIndApprover' => '마지막 버전의 개별 승인자를 인수 합니다.', 'takeOverIndReviewer' => '최종 버전의 개인별 검수자를 상속합니다.', 'tasks' => '작업', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '본 메일은 SeedDMS의 메일 구성을 단순 테스트한 것입니다', 'testmail_subject' => '테스트 메일', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 8363639ed..4ad4f5671 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Voeg goedkeuring toe', 'add_role' => 'Voeg een rol toe', 'add_subfolder' => 'Submap toevoegen', +'add_task' => '', 'add_to_clipboard' => 'Toevoegen aan klembord', 'add_to_transmittal' => 'Toevoegen aan verzending', 'add_transmittal' => 'Verzending toevoegen', @@ -459,6 +460,7 @@ De link is geldig tot [valid]. 'edit_folder_props' => 'Wijzig Map eigenschappen', 'edit_group' => 'Wijzig Groep', 'edit_online' => 'Online bewerken', +'edit_task' => '', 'edit_transmittal_props' => 'Opmerkingen bij verzending', 'edit_user' => 'Wijzig gebruiker', 'edit_user_details' => 'Wijzig gebruiker Details', @@ -471,6 +473,7 @@ De link is geldig tot [valid]. 'email_not_given' => 'Voer aub een geldig email adres in.', 'empty_attribute_group_list' => 'Lege lijst van attributen', 'empty_folder_list' => 'Geen documenten of mappen', +'empty_list' => '', 'empty_notify_list' => 'Geen gegevens', 'en_GB' => 'Engels (GB)', 'equal_transition_states' => 'Begin- en eind-status zijn hetzelfde', @@ -706,6 +709,7 @@ URL: [url]', 'list_access_rights' => 'Toegangsrechten', 'list_contains_no_access_docs' => 'Geen toegankelijke documenten', 'list_hooks' => 'Hooks', +'list_tasks' => '', 'local_file' => 'Lokaal bestand', 'locked_by' => 'In gebruik door', 'lock_document' => 'Blokkeer', @@ -1105,6 +1109,10 @@ URL: [url]', 'saturday' => 'Zaterdag', 'saturday_abbr' => 'ZA', 'save' => 'Opslaan', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Zoeken', 'search_fulltext' => 'Zoek in volledige tekst', 'search_in' => 'Zoek in', @@ -1551,6 +1559,7 @@ Name: [username] 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Opslaan mapwijzigingen', 'splash_importfs' => 'Geïmporteerd: [docs] documenten en [folders] mappen', 'splash_inherit_access' => '', @@ -1634,6 +1643,11 @@ Name: [username] 'takeOverIndApprover' => 'Onthoud de laatste groep individuele goedkeurders', 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'tasks' => 'taken', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => 'Tijdelijke jscode', 'testmail_body' => 'Deze mail dient enkel voor het testen van de mail configuratie van SeedDMS', 'testmail_subject' => 'Test mail', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index bc6048254..dc2fc1b45 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Dodaj podfolder', +'add_task' => '', 'add_to_clipboard' => 'Dodaj do schowka', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -447,6 +448,7 @@ URL: [url]', 'edit_folder_props' => 'Edytuj folder', 'edit_group' => 'Edytuj grupę', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Edytuj użytkownika', 'edit_user_details' => 'Zmień dane użytkownika', @@ -459,6 +461,7 @@ URL: [url]', 'email_not_given' => 'Proszę podać poprawny adres email.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nie ma dokumentów lub folderów', +'empty_list' => '', 'empty_notify_list' => 'Brak elementów', 'en_GB' => 'Angielski (GB)', 'equal_transition_states' => 'Stan rozpoczęcia i ukończenia jest taki sam', @@ -694,6 +697,7 @@ URL: [url]', 'list_access_rights' => 'Pokaż uprawnienia dostępu', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Lokalny plik', 'locked_by' => 'Zablokowane przez', 'lock_document' => 'Zablokuj', @@ -1048,6 +1052,10 @@ URL: [url]', 'saturday' => 'Sobota', 'saturday_abbr' => 'So', 'save' => 'Zapisz', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Szukaj', 'search_fulltext' => 'Przeszukaj całe teksty', 'search_in' => 'Szukaj w', @@ -1485,6 +1493,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Zapisz zmiany folderu', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1568,6 +1577,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'To jest mail testowy SeedDMS', 'testmail_subject' => 'Wiadomość testowa', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 807340648..517796458 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Criar sub-pasta', +'add_task' => '', 'add_to_clipboard' => 'Adicionar ao clipboard', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -453,6 +454,7 @@ URL: [url]', 'edit_folder_props' => 'Editar pasta', 'edit_group' => 'Editar grupo', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Editar usuário', 'edit_user_details' => 'Editar Perfil', @@ -465,6 +467,7 @@ URL: [url]', 'email_not_given' => 'Por favor insira um endereço de e-mail válido.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nenhum documento ou pasta', +'empty_list' => '', 'empty_notify_list' => 'Sem entradas', 'en_GB' => 'Inglês (GB)', 'equal_transition_states' => 'Estado de início e fim são iguais', @@ -700,6 +703,7 @@ URL: [url]', 'list_access_rights' => 'Listar todos os direitos de acesso...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Arquivo local', 'locked_by' => 'Bloqueado por', 'lock_document' => 'Travar', @@ -1066,6 +1070,10 @@ URL: [url]', 'saturday' => 'Saturday', 'saturday_abbr' => 'Sa', 'save' => 'Salvar', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Busca', 'search_fulltext' => 'Pesquisa em texto completo', 'search_in' => 'Busca em', @@ -1503,6 +1511,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Salvar modificação de pastas', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1586,6 +1595,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Este e-mail é apenas para testar a configuração de correio de SeedDMS', 'testmail_subject' => 'Email Teste', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 3d6f42435..c707e9fba 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Adaugă subfolder', +'add_task' => '', 'add_to_clipboard' => 'Adaugă in clipboard', 'add_to_transmittal' => '', 'add_transmittal' => 'Adauga transmitere', @@ -459,6 +460,7 @@ URL: [url]', 'edit_folder_props' => 'Editează folder', 'edit_group' => 'Editează grup', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => 'Editeaza proprietatile de transmitere', 'edit_user' => 'Editează utilizator', 'edit_user_details' => 'Editează detalii utilizator', @@ -471,6 +473,7 @@ URL: [url]', 'email_not_given' => 'Vă rugăm să introduceți o adresă de email validă.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Nu există documente sau foldere', +'empty_list' => '', 'empty_notify_list' => 'Nu există înregistrări', 'en_GB' => 'Engleza (GB)', 'equal_transition_states' => 'Starea de start și de stop sunt egale', @@ -706,6 +709,7 @@ URL: [url]', 'list_access_rights' => 'Listeaza toate drepturile de acces', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Fișier local', 'locked_by' => 'Blocat de', 'lock_document' => 'Blocare', @@ -1091,6 +1095,10 @@ URL: [url]', 'saturday' => 'Sâmbătă', 'saturday_abbr' => 'Sâ', 'save' => 'Salvează', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Caută', 'search_fulltext' => 'Caută în tot textul', 'search_in' => 'Caută în', @@ -1528,6 +1536,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Salvați modificările folderului', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1611,6 +1620,11 @@ URL: [url]', 'takeOverIndApprover' => 'Preia aprobatorul individual din ultima versiune.', 'takeOverIndReviewer' => 'Preia revizuitorul individual din ultima versiune.', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Acest e-mail este doar pentru testarea configurarea email din SeedDMS', 'testmail_subject' => 'Mail de test', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index e160f1286..4a0fc7790 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Добавить утверждение', 'add_role' => 'Добавить роль', 'add_subfolder' => 'Добавить подкаталог', +'add_task' => '', 'add_to_clipboard' => 'Добавить в буфер', 'add_to_transmittal' => 'Добавить к передаче', 'add_transmittal' => 'Добавить передачу', @@ -459,6 +460,7 @@ URL: [url]', 'edit_folder_props' => 'Изменить свойства', 'edit_group' => 'Изменить группу', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => 'Редактировать группы получателей', 'edit_user' => 'Редактировать пользователя', 'edit_user_details' => 'Изменить данные пользователя', @@ -471,6 +473,7 @@ URL: [url]', 'email_not_given' => 'Введите настоящий адрес e-mail.', 'empty_attribute_group_list' => 'Пустой список группы атрибутов', 'empty_folder_list' => 'Нет документов или каталогов', +'empty_list' => '', 'empty_notify_list' => 'Нет записей', 'en_GB' => 'English (GB)', 'equal_transition_states' => 'Одинаковые начальный и конечный статусы', @@ -706,6 +709,7 @@ URL: [url]', 'list_access_rights' => 'Показать все права доступа', 'list_contains_no_access_docs' => '', 'list_hooks' => 'Список хуков', +'list_tasks' => '', 'local_file' => 'Локальный файл', 'locked_by' => 'Заблокирован', 'lock_document' => 'Заблокировать', @@ -1098,6 +1102,10 @@ URL: [url]', 'saturday' => 'Суббота', 'saturday_abbr' => 'Сб', 'save' => 'Сохранить', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Поиск', 'search_fulltext' => 'Полнотекстовый поиск', 'search_in' => 'Поиск', @@ -1535,6 +1543,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Изменения каталога сохранены', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1618,6 +1627,11 @@ URL: [url]', 'takeOverIndApprover' => 'Использовать утверждающих из прошлой версии', 'takeOverIndReviewer' => 'Использовать рецензентов из прошлой версии', 'tasks' => 'Задания', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Это тестовое письмо для проверки настроек почты SeedDMS', 'testmail_subject' => 'Тестовое письмо', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index c9142b77b..ff4f01a51 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Pridať schválenie', 'add_role' => 'Pridať novú rolu', 'add_subfolder' => 'Pridať podzložku', +'add_task' => '', 'add_to_clipboard' => 'Pridaj do schránky', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -412,6 +413,7 @@ URL: [url]', 'edit_folder_props' => 'Uprav priečinok', 'edit_group' => 'Upraviť skupinu', 'edit_online' => 'Upraviť online', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Upraviť používateľa', 'edit_user_details' => 'Upraviť podrobnosti používateľa', @@ -424,6 +426,7 @@ URL: [url]', 'email_not_given' => 'Prosím, zadajte platnú emailovú adresu.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Žiadne dokumenty alebo priečinky', +'empty_list' => '', 'empty_notify_list' => 'Žiadne položky', 'en_GB' => 'Angličtina (UK)', 'equal_transition_states' => 'Začiatok a koniec sú rovnaké', @@ -635,6 +638,7 @@ URL: [url]', 'list_access_rights' => 'Uveďte všetky prístupové práva', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Lokálny súbor', 'locked_by' => 'Uzamkol', 'lock_document' => 'Zamknúť', @@ -929,6 +933,10 @@ URL: [url]', 'saturday' => 'Sobota', 'saturday_abbr' => 'So', 'save' => 'Uložiť', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Hľadať', 'search_fulltext' => 'Vyhľadávanie vo fulltexte', 'search_in' => 'Prehľadávať', @@ -1366,6 +1374,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Uložiť zmeny zložky', 'splash_importfs' => 'Importované dokumenty [docs] a zložky [folders]', 'splash_inherit_access' => '', @@ -1449,6 +1458,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => 'Úlohy', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => 'Dočasný javascript kód', 'testmail_body' => '', 'testmail_subject' => 'Testovací E-mail', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index e51797584..407fa18da 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -71,6 +71,7 @@ URL: [url]', 'add_revision' => 'Lägg till godkännande', 'add_role' => 'Lägg till ny roll', 'add_subfolder' => 'Lägg till katalog', +'add_task' => '', 'add_to_clipboard' => 'Flytta till Urklipp', 'add_to_transmittal' => 'Lägg till i meddelande', 'add_transmittal' => 'Lägg till meddelande', @@ -472,6 +473,7 @@ Länken är giltig t o m [valid]. 'edit_folder_props' => 'Ändra katalog', 'edit_group' => 'Ändra grupp', 'edit_online' => 'Uppdatera online', +'edit_task' => '', 'edit_transmittal_props' => 'Ändra egenskaper för meddelande', 'edit_user' => 'Ändra användare', 'edit_user_details' => 'Ändra användarens information', @@ -484,6 +486,7 @@ Länken är giltig t o m [valid]. 'email_not_given' => 'Skriv in en giltig e-postadress.', 'empty_attribute_group_list' => 'Grupp för attribut saknas', 'empty_folder_list' => 'Inga dokument eller mappar', +'empty_list' => '', 'empty_notify_list' => 'Inga meddelanden', 'en_GB' => 'Engelska (GB)', 'equal_transition_states' => 'Status för start och slut är lika', @@ -719,6 +722,7 @@ URL: [url]', 'list_access_rights' => 'Lista alla rättigheter...', 'list_contains_no_access_docs' => 'Listan innehåller fler dokument som inte visas då du saknar rättigheter till dessa.', 'list_hooks' => 'Lista hooks', +'list_tasks' => '', 'local_file' => 'Lokal fil', 'locked_by' => 'Låst av', 'lock_document' => 'Lås', @@ -1106,6 +1110,10 @@ URL: [url]', 'saturday' => 'Lördag', 'saturday_abbr' => 'Lö', 'save' => 'Spara', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Sök', 'search_fulltext' => 'Fulltext-sökning', 'search_in' => 'Sök i', @@ -1548,6 +1556,7 @@ Kommentar: [comment]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Spara ändringar i katalog', 'splash_importfs' => 'Importerade [docs] dokument och [folders] kataloger', 'splash_inherit_access' => '', @@ -1631,6 +1640,11 @@ Kommentar: [comment]', 'takeOverIndApprover' => 'Ta över individuell godkännare från senaste version', 'takeOverIndReviewer' => 'Ta över individuell granskare från senaste version', 'tasks' => 'Uppgifter', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => 'Tillfälligt javascript', 'testmail_body' => 'Denna e-post avser bara test av e-postfunktion i SeedDMS.', 'testmail_subject' => 'Test e-post', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 4a5564cf4..e4cd79f37 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -69,6 +69,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => 'Alt klasör ekle', +'add_task' => '', 'add_to_clipboard' => 'Panoya ekle', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -453,6 +454,7 @@ URL: [url]', 'edit_folder_props' => 'Klasörü düzenle', 'edit_group' => 'Grubu düzenle', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => 'Kullanıcıyı düzenle', 'edit_user_details' => 'Kullanıcı Detaylarını Düzenle', @@ -465,6 +467,7 @@ URL: [url]', 'email_not_given' => 'Lütfen geçerli bir e-posta adresi giriniz.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Hiç klasör veya doküman yok', +'empty_list' => '', 'empty_notify_list' => 'Giriş yok', 'en_GB' => 'İngilizce', 'equal_transition_states' => 'Başlangıç ve bitiş durumları eşit', @@ -700,6 +703,7 @@ URL: [url]', 'list_access_rights' => 'Tüm erişim haklarini listele', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Yerel dosya', 'locked_by' => 'Kilitleyen', 'lock_document' => 'Kilitle', @@ -1070,6 +1074,10 @@ URL: [url]', 'saturday' => 'Cumartesi', 'saturday_abbr' => 'Ct', 'save' => 'Kaydet', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Ara', 'search_fulltext' => 'Tam metinde ara', 'search_in' => 'Şurada ara', @@ -1507,6 +1515,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Klasör değişiklikleri kaydedildi', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1590,6 +1599,11 @@ URL: [url]', 'takeOverIndApprover' => 'Bir önceki versiyonu onaylayanı al.', 'takeOverIndReviewer' => 'Bir önceki versiyonu kontrol edeni al.', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Bu mail SeedDMS mail sisteminin kontrolü amacıyla gönderilmiştir.', 'testmail_subject' => 'Test e-posta', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index c78521ba5..558ccedab 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => 'Додати підтвердження', 'add_role' => '', 'add_subfolder' => 'Додати підкаталог', +'add_task' => '', 'add_to_clipboard' => 'Додати до буферу', 'add_to_transmittal' => 'Додати до передачі', 'add_transmittal' => 'Додати передачу', @@ -459,6 +460,7 @@ URL: [url]', 'edit_folder_props' => 'Змінити каталог', 'edit_group' => 'Змінити групу', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => 'Редагувати налаштування перенесення', 'edit_user' => 'Редагувати користувача', 'edit_user_details' => 'Змінити дані користувача', @@ -471,6 +473,7 @@ URL: [url]', 'email_not_given' => 'Введіть справжній e-mail.', 'empty_attribute_group_list' => '', 'empty_folder_list' => 'Немає документів або каталогів', +'empty_list' => '', 'empty_notify_list' => 'Немає записів', 'en_GB' => 'English (GB)', 'equal_transition_states' => 'Однакові початковий і кінцевий статуси', @@ -706,6 +709,7 @@ URL: [url]', 'list_access_rights' => '', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => 'Локальний файл', 'locked_by' => 'Заблоковано', 'lock_document' => 'Заблокувати', @@ -1091,6 +1095,10 @@ URL: [url]', 'saturday' => 'Субота', 'saturday_abbr' => 'Сб', 'save' => 'Зберегти', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => 'Пошук', 'search_fulltext' => 'Повнотекстовий пошук', 'search_in' => 'Пошук', @@ -1528,6 +1536,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => 'Зміни каталогу збережено', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1611,6 +1620,11 @@ URL: [url]', 'takeOverIndApprover' => 'Використати затверджувачів з попередньої версії', 'takeOverIndReviewer' => 'Використати рецензентів з попередньої версії', 'tasks' => 'Завдання', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => 'Це тестовий лист для перевірки налаштувань пошти SeedDMS', 'testmail_subject' => 'Тестовий лист', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index f317045e1..c3feb2a34 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '添加审核人', 'add_role' => '新建角色', 'add_subfolder' => '添加子文件夹', +'add_task' => '', 'add_to_clipboard' => '复制', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -459,6 +460,7 @@ URL: [url]', 'edit_folder_props' => '编辑文件夹', 'edit_group' => '编辑组别', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => '编辑用户', 'edit_user_details' => '编辑用户详情', @@ -471,6 +473,7 @@ URL: [url]', 'email_not_given' => '请输入有效的 Email 地址', 'empty_attribute_group_list' => '', 'empty_folder_list' => '没有文件或子目录', +'empty_list' => '', 'empty_notify_list' => '没有条目', 'en_GB' => '英语', 'equal_transition_states' => '开始日期和结束日期相同', @@ -702,6 +705,7 @@ URL: [url]', 'list_access_rights' => '列出所有的访问权限', 'list_contains_no_access_docs' => '', 'list_hooks' => '钩子列表', +'list_tasks' => '', 'local_file' => '本地文件', 'locked_by' => '锁定人', 'lock_document' => '锁定', @@ -1067,6 +1071,10 @@ URL: [url]', 'saturday' => 'Saturday', 'saturday_abbr' => '', 'save' => '保存', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => '搜索', 'search_fulltext' => '全文检索', 'search_in' => '搜索于', @@ -1509,6 +1517,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '更新文件夹', 'splash_importfs' => '已导入文档 [docs] 和文件夹 [folders]', 'splash_inherit_access' => '', @@ -1592,6 +1601,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '', 'tasks' => '任务', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '测试邮件配置', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 6241d0fd9..0417417da 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2394) +// Translators: Admin (2402) $text = array( '2_factor_auth' => '', @@ -70,6 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => '', 'add_subfolder' => '添加子資料夾', +'add_task' => '', 'add_to_clipboard' => '複製', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -404,6 +405,7 @@ URL: [url]', 'edit_folder_props' => '編輯資料夾', 'edit_group' => '編輯組別', 'edit_online' => '', +'edit_task' => '', 'edit_transmittal_props' => '', 'edit_user' => '編輯用戶', 'edit_user_details' => '編輯用戶詳情', @@ -416,6 +418,7 @@ URL: [url]', 'email_not_given' => '', 'empty_attribute_group_list' => '', 'empty_folder_list' => '沒有檔或子目錄', +'empty_list' => '', 'empty_notify_list' => '沒有條目', 'en_GB' => '英語', 'equal_transition_states' => '', @@ -456,13 +459,13 @@ URL: [url]', 'expiry_changed_email_subject' => '', 'export' => '', 'extension_archive' => '', -'extension_changelog' => '', +'extension_changelog' => '修改紀錄', 'extension_loading' => '', 'extension_manager' => '整體索引進度', -'extension_mgr_installed' => '', -'extension_mgr_no_upload' => '', -'extension_mgr_repository' => '', -'extension_version_list' => '', +'extension_mgr_installed' => '已安裝', +'extension_mgr_no_upload' => '無法上傳新的套件因為套件目錄無法寫入', +'extension_mgr_repository' => '可用', +'extension_version_list' => '版本', 'february' => '二 月', 'file' => '文件', 'files' => '文件', @@ -493,7 +496,7 @@ URL: [url]', 'folder_renamed_email_body' => '', 'folder_renamed_email_subject' => '', 'folder_title' => '資料夾 \'[foldername]\'', -'force_update' => '', +'force_update' => '更新', 'friday' => 'Friday', 'friday_abbr' => '', 'from' => '從', @@ -545,7 +548,7 @@ URL: [url]', 'index_error' => '', 'index_folder' => '索引目錄', 'index_pending' => '', -'index_waiting' => '', +'index_waiting' => '請稍後', 'individuals' => '個人', 'indivіduals_in_groups' => '', 'info_recipients_tab_not_released' => '', @@ -627,6 +630,7 @@ URL: [url]', 'list_access_rights' => '列出權限', 'list_contains_no_access_docs' => '', 'list_hooks' => '', +'list_tasks' => '', 'local_file' => '本地檔', 'locked_by' => '鎖定人', 'lock_document' => '鎖定', @@ -921,6 +925,10 @@ URL: [url]', 'saturday' => 'Saturday', 'saturday_abbr' => '', 'save' => '保存', +'scheduler_class' => '', +'scheduler_class_description' => '', +'scheduler_class_parameter' => '', +'scheduler_task_mgr' => '', 'search' => '搜索', 'search_fulltext' => '', 'search_in' => '搜索於', @@ -1321,7 +1329,7 @@ URL: [url]', 'set_password' => '', 'set_workflow' => '', 'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_version_list' => '版本列表', 'signed_in_as' => '登錄為', 'sign_in' => '', 'sign_out' => '登出', @@ -1358,6 +1366,7 @@ URL: [url]', 'splash_extension_getlist' => '', 'splash_extension_import' => '', 'splash_extension_refresh' => '', +'splash_extension_upload' => '', 'splash_folder_edited' => '', 'splash_importfs' => '', 'splash_inherit_access' => '', @@ -1441,6 +1450,11 @@ URL: [url]', 'takeOverIndApprover' => '', 'takeOverIndReviewer' => '從上個版本接管個別審稿人', 'tasks' => '', +'task_description' => '', +'task_frequency' => '', +'task_last_run' => '', +'task_name' => '', +'task_next_run' => '', 'temp_jscode' => '', 'testmail_body' => '', 'testmail_subject' => '', From 276245a39544dec1dad1f0040eace2b3e57de683 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 08:54:08 +0200 Subject: [PATCH 020/356] do not show table of scheduler classes if none exists --- views/bootstrap/class.SchedulerTaskMgr.php | 68 +++++++++++----------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/views/bootstrap/class.SchedulerTaskMgr.php b/views/bootstrap/class.SchedulerTaskMgr.php index 345e6ed48..c68f55abf 100644 --- a/views/bootstrap/class.SchedulerTaskMgr.php +++ b/views/bootstrap/class.SchedulerTaskMgr.php @@ -263,42 +263,44 @@ $(document).ready( function() {
      \n"; - print "\n\n"; - print "".getMLText('scheduler_class')."\n"; - print "".getMLText('scheduler_class_description')."\n"; - print "".getMLText('scheduler_class_parameter')."\n"; - print "\n"; - print "\n"; - $errmsgs = array(); - foreach($GLOBALS['SEEDDMS_SCHEDULER']['tasks'] as $extname=>$tasks) { - foreach($tasks as $taskname=>$task) { - echo ""; - echo ""; - echo $extname."::".$taskname; - echo ""; - echo ""; - echo $task->getDescription(); - echo ""; - echo ""; - $params = $task->getAdditionalParams(); - foreach($params as $param) - $k[] = $param['name']; - echo implode(', ', $k); - echo ""; - echo ""; - print "
      "; - $t = $scheduler->getTasksByExtension($extname, $taskname); - if($t) { - print ""; + if(!empty($GLOBALS['SEEDDMS_SCHEDULER']['tasks'])) { + echo "\n"; + print "\n\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + print "\n"; + $errmsgs = array(); + foreach($GLOBALS['SEEDDMS_SCHEDULER']['tasks'] as $extname=>$tasks) { + foreach($tasks as $taskname=>$task) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; } - print ""; - print ""; - echo ""; - echo ""; } + echo "
      ".getMLText('scheduler_class')."".getMLText('scheduler_class_description')."".getMLText('scheduler_class_parameter')."
      "; + echo $extname."::".$taskname; + echo ""; + echo $task->getDescription(); + echo ""; + $params = $task->getAdditionalParams(); + foreach($params as $param) + $k[] = $param['name']; + echo implode(', ', $k); + echo ""; + print "
      "; + $t = $scheduler->getTasksByExtension($extname, $taskname); + if($t) { + print ""; + } + print ""; + print "
      "; + echo "
      \n"; } - echo "\n"; ?>
      From d47f4c5ca9b79cf55b894cca7ae5ae5c2de1cff3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 11:24:23 +0200 Subject: [PATCH 021/356] reopen database after COMMIT --- install/update.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install/update.php b/install/update.php index a99990757..67fac1654 100644 --- a/install/update.php +++ b/install/update.php @@ -92,6 +92,10 @@ if($rec = $res->fetch(PDO::FETCH_ASSOC)) { $e = $db->ErrorInfo(); $errorMsg .= $query.": ".$e[2] . "
      "; } + if($settings->_dbDriver == 'sqlite' && $query == 'COMMIT') { + unset($db); + $db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass); + } } } } From 1652d9a237aef9214b305a006e405bce85c98807 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 11:58:25 +0200 Subject: [PATCH 022/356] fetch all records from tblVersion if not, the database will be locked when e.g. droping a table --- install/update.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install/update.php b/install/update.php index afc7e3e46..f8e91ee5a 100644 --- a/install/update.php +++ b/install/update.php @@ -61,7 +61,9 @@ if (!$db) { $errorMsg = ''; $res = $db->query('select * from tblVersion'); -if($rec = $res->fetch(PDO::FETCH_ASSOC)) { +$recs = $res->fetchAll(PDO::FETCH_ASSOC); +if(!empty($recs)) { + $rec = $recs[0]; if($_GET['version'] > $rec['major'].'.'.$rec['minor'].'.'.$rec['subminor']) { if(file_exists('update-'.$_GET['version'].'/'.$sqlfile)) { From a3705fb9db9dfbe00fa27d3a3651ff785265badb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 12:00:17 +0200 Subject: [PATCH 023/356] add entry to 4.3.37 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 7a7da4509..00b6825dd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,8 @@ - translation updates - search result contains documents without a status log - fix setting categories in utils/adddoc.php +- fetch all records from tblVersion in install/update.php. If not, the database + will be locked and e.g. a drop table in the update script will not work -------------------------------------------------------------------------------- Changes in version 4.3.36 From 314baace12264c7bed32d04227f4497bceaa73c5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 12:01:34 +0200 Subject: [PATCH 024/356] add some missing phrases --- languages/ar_EG/lang.inc | 2 ++ languages/bg_BG/lang.inc | 2 ++ languages/ca_ES/lang.inc | 2 ++ languages/cs_CZ/lang.inc | 2 ++ languages/de_DE/lang.inc | 4 +++- languages/el_GR/lang.inc | 2 ++ languages/en_GB/lang.inc | 4 +++- languages/es_ES/lang.inc | 2 ++ languages/fr_FR/lang.inc | 2 ++ languages/hr_HR/lang.inc | 2 ++ languages/hu_HU/lang.inc | 2 ++ languages/it_IT/lang.inc | 2 ++ languages/ko_KR/lang.inc | 2 ++ languages/nl_NL/lang.inc | 2 ++ languages/pl_PL/lang.inc | 2 ++ languages/pt_BR/lang.inc | 2 ++ languages/ro_RO/lang.inc | 2 ++ languages/ru_RU/lang.inc | 2 ++ languages/sk_SK/lang.inc | 2 ++ languages/sv_SE/lang.inc | 2 ++ languages/tr_TR/lang.inc | 2 ++ languages/uk_UA/lang.inc | 2 ++ languages/zh_CN/lang.inc | 2 ++ languages/zh_TW/lang.inc | 2 ++ 24 files changed, 50 insertions(+), 2 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index fe66aece2..1fdefcb1a 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -1061,6 +1061,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'البحث', 'search_fulltext' => 'بحث في النص الكامل', @@ -1584,6 +1585,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index a05b6e92b..347e291af 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -924,6 +924,7 @@ $text = array( 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Търсене', 'search_fulltext' => 'Пълнотекстово търсене', @@ -1447,6 +1448,7 @@ $text = array( 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index 3b5975144..afd5ebac0 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -929,6 +929,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Cercar', 'search_fulltext' => 'Search in fulltext', @@ -1452,6 +1453,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index f0763921d..1db96b7d8 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -1070,6 +1070,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Hledat', 'search_fulltext' => 'Vyhledat fulltextově', @@ -1593,6 +1594,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index a6a1a2544..7fd1db0b0 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2618), dgrutsch (22) +// Translators: Admin (2620), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -1145,6 +1145,7 @@ URL: [url]', 'scheduler_class' => 'Klasse', 'scheduler_class_description' => 'Beschrebung', 'scheduler_class_parameter' => 'Parameter', +'scheduler_class_tasks' => 'Tasks der Klasse', 'scheduler_task_mgr' => 'Planer', 'search' => 'Suchen', 'search_fulltext' => 'Suche im Volltext', @@ -1673,6 +1674,7 @@ Name: [username] 'takeOverIndReviewer' => 'Übernehme die Einzelprüfer von der letzten Version.', 'tasks' => 'Aufgaben', 'task_description' => 'Beschreibung', +'task_disabled' => 'Deaktiviert', 'task_frequency' => 'Häufigkeit', 'task_last_run' => 'Letzte Ausführung', 'task_name' => 'Name', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index 0975563b6..c4200008b 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -935,6 +935,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Αναζήτηση', 'search_fulltext' => '', @@ -1458,6 +1459,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index df65474a2..ee2b9f96e 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1736), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1738), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -1140,6 +1140,7 @@ URL: [url]', 'scheduler_class' => 'Class', 'scheduler_class_description' => 'Description', 'scheduler_class_parameter' => 'Parameter', +'scheduler_class_tasks' => 'Tasks of class', 'scheduler_task_mgr' => 'Scheduler', 'search' => 'Search', 'search_fulltext' => 'Search in fulltext', @@ -1668,6 +1669,7 @@ Name: [username] 'takeOverIndReviewer' => 'Take over individual reviewer from last version.', 'tasks' => 'Tasks', 'task_description' => 'Description', +'task_disabled' => 'Disabled', 'task_frequency' => 'Frequency', 'task_last_run' => 'Last run', 'task_name' => 'Name', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index b45c60f6c..50bc4388a 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -1076,6 +1076,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Buscar', 'search_fulltext' => 'Buscar en texto completo', @@ -1599,6 +1600,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Tomar control de la revisión de la última versión', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 09527244b..1f1875e13 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -1124,6 +1124,7 @@ URL : [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Recherche', 'search_fulltext' => 'Rechercher dans le texte', @@ -1652,6 +1653,7 @@ Nom : [username] 'takeOverIndReviewer' => 'Récupérer les examinateurs de la dernière version.', 'tasks' => 'Tâches', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 4345328fe..9ce305e38 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -1097,6 +1097,7 @@ Internet poveznica: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Traži', 'search_fulltext' => 'Traži u cijelom tekstu', @@ -1620,6 +1621,7 @@ Internet poveznica: [url]', 'takeOverIndReviewer' => 'Preuzimanje pojedinačnog revizora iz zadnje verzije.', 'tasks' => 'Zadaci', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index 42a2174ef..d9effaefa 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -1075,6 +1075,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Keresés', 'search_fulltext' => 'Keresés a teljes szövegben', @@ -1598,6 +1599,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index c4636c268..cdcb35654 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -1109,6 +1109,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Ricerca', 'search_fulltext' => 'Ricerca fulltext', @@ -1632,6 +1633,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Riprendi il revisore dall\'ultima versione.', 'tasks' => 'Compiti', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 873407a71..68e5b0801 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -1091,6 +1091,7 @@ URL : [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => '검색', 'search_fulltext' => '전체 텍스트 검색', @@ -1614,6 +1615,7 @@ URL : [url]', 'takeOverIndReviewer' => '최종 버전의 개인별 검수자를 상속합니다.', 'tasks' => '작업', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index 4ad4f5671..f6678d7a6 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -1112,6 +1112,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Zoeken', 'search_fulltext' => 'Zoek in volledige tekst', @@ -1644,6 +1645,7 @@ Name: [username] 'takeOverIndReviewer' => 'Onthoud de laatste groep individuele herzieners', 'tasks' => 'taken', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index dc2fc1b45..87694c2c5 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -1055,6 +1055,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Szukaj', 'search_fulltext' => 'Przeszukaj całe teksty', @@ -1578,6 +1579,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 517796458..955a29f6f 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -1073,6 +1073,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Busca', 'search_fulltext' => 'Pesquisa em texto completo', @@ -1596,6 +1597,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index c707e9fba..0acc0fe25 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -1098,6 +1098,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Caută', 'search_fulltext' => 'Caută în tot textul', @@ -1621,6 +1622,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Preia revizuitorul individual din ultima versiune.', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index 4a0fc7790..bc43a12f4 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -1105,6 +1105,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Поиск', 'search_fulltext' => 'Полнотекстовый поиск', @@ -1628,6 +1629,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Использовать рецензентов из прошлой версии', 'tasks' => 'Задания', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index ff4f01a51..9f33a6479 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -936,6 +936,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Hľadať', 'search_fulltext' => 'Vyhľadávanie vo fulltexte', @@ -1459,6 +1460,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => 'Úlohy', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 407fa18da..cc49c83d6 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -1113,6 +1113,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Sök', 'search_fulltext' => 'Fulltext-sökning', @@ -1641,6 +1642,7 @@ Kommentar: [comment]', 'takeOverIndReviewer' => 'Ta över individuell granskare från senaste version', 'tasks' => 'Uppgifter', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index e4cd79f37..2dae950b2 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -1077,6 +1077,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Ara', 'search_fulltext' => 'Tam metinde ara', @@ -1600,6 +1601,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Bir önceki versiyonu kontrol edeni al.', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 558ccedab..aca102044 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -1098,6 +1098,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => 'Пошук', 'search_fulltext' => 'Повнотекстовий пошук', @@ -1621,6 +1622,7 @@ URL: [url]', 'takeOverIndReviewer' => 'Використати рецензентів з попередньої версії', 'tasks' => 'Завдання', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index c3feb2a34..d1b8c7e79 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -1074,6 +1074,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => '搜索', 'search_fulltext' => '全文检索', @@ -1602,6 +1603,7 @@ URL: [url]', 'takeOverIndReviewer' => '', 'tasks' => '任务', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 0417417da..ab7cd8e71 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -928,6 +928,7 @@ URL: [url]', 'scheduler_class' => '', 'scheduler_class_description' => '', 'scheduler_class_parameter' => '', +'scheduler_class_tasks' => '', 'scheduler_task_mgr' => '', 'search' => '搜索', 'search_fulltext' => '', @@ -1451,6 +1452,7 @@ URL: [url]', 'takeOverIndReviewer' => '從上個版本接管個別審稿人', 'tasks' => '', 'task_description' => '', +'task_disabled' => '', 'task_frequency' => '', 'task_last_run' => '', 'task_name' => '', From 3379a2510cca497d0c6de7c563d7d87c77f634a0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 12:04:07 +0200 Subject: [PATCH 025/356] take out reconnect code not needed anymore --- install/update.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/install/update.php b/install/update.php index 1b610698d..c2674ea7a 100644 --- a/install/update.php +++ b/install/update.php @@ -94,10 +94,6 @@ if(!empty($recs)) { $e = $db->ErrorInfo(); $errorMsg .= $query.": ".$e[2] . "
      "; } - if($settings->_dbDriver == 'sqlite' && $query == 'COMMIT') { - unset($db); - $db = new PDO($dsn, $settings->_dbUser, $settings->_dbPass); - } } } } From 5882fc10a998a1426aaf8ee95bbe33708bb5089b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 28 Mar 2018 17:04:39 +0200 Subject: [PATCH 026/356] major change of workflow/document management --- SeedDMS_Core/Core/inc.ClassDocument.php | 181 +++++++++++++---------- install/update-6.0.0/update.sql | 18 +++ views/bootstrap/class.RewindWorkflow.php | 2 +- views/bootstrap/class.ViewDocument.php | 7 +- 4 files changed, 130 insertions(+), 78 deletions(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index fbe7647a5..67d4750fa 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -2270,11 +2270,14 @@ class SeedDMS_Core_Document extends SeedDMS_Core_Object { /* {{{ */ return false; } + /* Will be deleted automatically when record will be deleted + * from tblWorkflowDocumentContent $queryStr = "DELETE FROM `tblWorkflowLog` WHERE `document` = '". $this->getID() ."' AND `version` = '" . $version->_version."'"; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; } + */ // remove document files attached to version $res = $this->getDocumentFiles($version->_version); @@ -5407,7 +5410,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db = $this->_document->_dms->getDB(); if($this->_workflow) { - $queryStr = "UPDATE `tblWorkflowDocumentContent` set `state`=". $state->getID() ." WHERE `workflow`=". intval($this->_workflow->getID()). " AND `document`=". intval($this->_document->getID()) ." AND version=". intval($this->_version) .""; + $queryStr = "UPDATE `tblWorkflowDocumentContent` set `state`=". $state->getID() ." WHERE `id`=". $this->_workflow['id']; if (!$db->getResult($queryStr)) { return false; } @@ -5434,9 +5437,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (!$this->_workflowState) { $queryStr= - "SELECT b.* FROM `tblWorkflowDocumentContent` a LEFT JOIN `tblWorkflowStates` b ON a.`state` = b.id WHERE `workflow`=". intval($this->_workflow->getID()) - ." AND a.`version`='".$this->_version - ."' AND a.`document` = '". $this->_document->getID() ."' "; + "SELECT b.* FROM `tblWorkflowDocumentContent` a LEFT JOIN `tblWorkflowStates` b ON a.`state` = b.id WHERE `a`.`id`=". $this->_workflow['id']; $recs = $db->getResultArray($queryStr); if (is_bool($recs) && !$recs) return false; @@ -5455,6 +5456,9 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db = $this->_document->_dms->getDB(); $this->getWorkflow(); + if($this->_workflow) + return false; + if($workflow && is_object($workflow)) { $db->startTransaction(); $initstate = $workflow->getInitState(); @@ -5463,7 +5467,11 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $this->_workflow = $workflow; + $this->getWorkflow(); + if($workflow->getID() != $this->_workflow['workflow']->getID()) { + $db->rollbackTransaction(); + return false; + } if(!$this->setStatus(S_IN_WORKFLOW, "Added workflow '".$workflow->getName()."'", $user)) { $db->rollbackTransaction(); return false; @@ -5471,15 +5479,19 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->commitTransaction(); return true; } - return true; + return false; } /* }}} */ /** * Get workflow assigned to the document content * * The method returns the last workflow if one was assigned. - * If a the document version is in a sub workflow, it will have + * If the document version is in a sub workflow, it will have * a never date and therefore will be found first. + * The methods also sets $this->_workflow['id'] and + * $this->_workflow['parent']. $this->_workflow['id'] is the + * id from table tblWorkflowDocumentContent which is used to + * get log entries for this workflow. * * @return object/boolean an object of class SeedDMS_Core_Workflow * or false in case of error, e.g. the version has not a workflow @@ -5489,18 +5501,19 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (!isset($this->_workflow)) { $queryStr= - "SELECT b.* FROM `tblWorkflowDocumentContent` a LEFT JOIN `tblWorkflows` b ON a.`workflow` = b.id WHERE a.`version`='".$this->_version + "SELECT a.id as wdcid, a.parent, b.* FROM `tblWorkflowDocumentContent` a LEFT JOIN `tblWorkflows` b ON a.`workflow` = b.id WHERE a.`version`='".$this->_version ."' AND a.`document` = '". $this->_document->getID() ."' " + ." AND a.`state` IS NOT NULL" ." ORDER BY `date` DESC LIMIT 1"; $recs = $db->getResultArray($queryStr); if (is_bool($recs) && !$recs) return false; if(!$recs) return false; - $this->_workflow = new SeedDMS_Core_Workflow($recs[0]['id'], $recs[0]['name'], $this->_document->_dms->getWorkflowState($recs[0]['initstate']), $recs[0]["layoutdata"]); - $this->_workflow->setDMS($this->_document->_dms); + $this->_workflow = array('id'=>(int)$recs[0]['wdcid'], 'parent'=>(int)$recs[0]['parent'], 'workflow'=>new SeedDMS_Core_Workflow($recs[0]['id'], $recs[0]['name'], $this->_document->_dms->getWorkflowState($recs[0]['initstate']), $recs[0]["layoutdata"])); + $this->_workflow['workflow']->setDMS($this->_document->_dms); } - return $this->_workflow; + return $this->_workflow['workflow']; } /* }}} */ /** @@ -5516,10 +5529,18 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ function rewriteWorkflowLog($workflowlog) { /* {{{ */ $db = $this->_document->_dms->getDB(); + /* Get the workflowdocumentcontent */ + $queryStr = "SELECT `id` FROM `tblWorkflowDocumentContent` WHERE `tblWorkflowDocumentContent`.`document` = '". $this->_document->getID() ."' AND `tblWorkflowDocumentContent`.`version` = '". $this->_version ."'"; + $recs = $db->getResultArray($queryStr); + if (is_bool($recs) && !$recs) + return false; + if (!$recs) + return false; + $db->startTransaction(); /* First, remove the old entries */ - $queryStr = "DELETE FROM `tblWorkflowLog` WHERE `tblWorkflowLog`.`document` = '". $this->_document->getID() ."' AND `tblWorkflowLog`.`version` = '". $this->_version ."'"; + $queryStr = "DELETE FROM `tblWorkflowLog` WHERE `tblWorkflowLog`.`workflowdocumentcontent` IN (SELECT `id` FROM `tblWorkflowDocumentContent` WHERE `tblWorkflowDocumentContent`.`document` = '". $this->_document->getID() ."' AND `tblWorkflowDocumentContent`.`version` = '". $this->_version ."')"; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; @@ -5532,8 +5553,8 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->rollbackTransaction(); return false; } - $queryStr = "INSERT INTO `tblWorkflowLog` (`document`, `version`, `workflow`, `transition`, `comment`, `date`, `userid`) ". - "VALUES ('".$this->_document->getID() ."', '".(int) $this->_version."', '".(int) $log['workflow']->getID()."', '".(int) $log['transition']->getID()."', ".$db->qstr($log['comment']) .", ".$db->qstr($log['date']).", ".$log['user']->getID().")"; + $queryStr = "INSERT INTO `tblWorkflowLog` (`workflowdocumentcontent`, `transition`, `comment`, `date`, `userid`) ". + "VALUES ('".$recs[0]['id'] ."', '".(int) $log['transition']->getID()."', ".$db->qstr($log['comment']) .", ".$db->qstr($log['date']).", ".$log['user']->getID().")"; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; @@ -5558,15 +5579,16 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if (!isset($this->_workflow)) { return true; } + $workflow = $this->_workflow['workflow']; $db->startTransaction(); - $queryStr = "DELETE from `tblWorkflowLog` WHERE `document` = ". $this->_document->getID() ." AND `version` = ".$this->_version." AND `workflow` = ".$this->_workflow->getID(); + $queryStr = "DELETE from `tblWorkflowLog` WHERE `workflowdocumentcontent` = ".$this->_workflow['id']; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; } - $this->setWorkflowState($this->_workflow->getInitState()); + $this->setWorkflowState($workflow->getInitState()); $db->commitTransaction(); return true; @@ -5578,7 +5600,8 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ * Fully removing a workflow including entries in the workflow log is * only allowed if the workflow is still its initial state. * At a later point of time only unlinking the document from the - * workflow is allowed. It will keep any log entries. + * workflow is allowed. It will keep any log entries and set the state + * to NULL. * A workflow is unlinked from a document when enterNextState() * succeeds. * @@ -5600,27 +5623,35 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return true; } - if(SeedDMS_Core_DMS::checkIfEqual($this->_workflow->getInitState(), $this->getWorkflowState()) || $unlink == true) { + $workflow = $this->_workflow['workflow']; + + if(SeedDMS_Core_DMS::checkIfEqual($workflow->getInitState(), $this->getWorkflowState()) || $unlink == true) { $db->startTransaction(); - $queryStr= - "DELETE FROM `tblWorkflowDocumentContent` WHERE " - ."`version`='".$this->_version."' " - ." AND `document` = '". $this->_document->getID() ."' " - ." AND `workflow` = '". $this->_workflow->getID() ."' "; - if (!$db->getResult($queryStr)) { - $db->rollbackTransaction(); - return false; - } - if(!$unlink) { + if($unlink) { $queryStr= - "DELETE FROM `tblWorkflowLog` WHERE " - ."`version`='".$this->_version."' " - ." AND `document` = '". $this->_document->getID() ."' " - ." AND `workflow` = '". $this->_workflow->getID() ."' "; + "UPDATE `tblWorkflowDocumentContent` SET `state` = NULL WHERE `id`=".$this->_workflow['id']; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; } + } else { + $queryStr= + "DELETE FROM `tblWorkflowDocumentContent` WHERE `id`=".$this->_workflow['id']; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + /* will be deleted automatically when tblWorkflowDocumentContent is deleted + $queryStr= + "DELETE FROM `tblWorkflowLog` WHERE " + ."`version`='".$this->_version."' " + ." AND `document` = '". $this->_document->getID() ."' " + ." AND `workflow` = '". $workflow->getID() ."' "; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + */ } $this->_workflow = null; $this->_workflowState = null; @@ -5644,19 +5675,19 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if(!$this->_workflow) return false; + if(!$this->_workflow['parent']) + return false; + $queryStr= - "SELECT * FROM `tblWorkflowDocumentContent` WHERE " - ."`version`='".$this->_version."' " - ." AND `document` = '". $this->_document->getID() ."' " - ." AND `workflow` = '". $this->_workflow->getID() ."' "; + "SELECT * FROM `tblWorkflowDocumentContent` WHERE `parent`=".$this->_workflow['parent']; $recs = $db->getResultArray($queryStr); if (is_bool($recs) && !$recs) return false; if(!$recs) return false; - if($recs[0]['parentworkflow']) - return $this->_document->_dms->getWorkflow($recs[0]['parentworkflow']); + if($recs[0]['workflow']) + return $this->_document->_dms->getWorkflow((int)$recs[0]['workflow']); return false; } /* }}} */ @@ -5680,11 +5711,11 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if($subworkflow) { $initstate = $subworkflow->getInitState(); - $queryStr = "INSERT INTO `tblWorkflowDocumentContent` (`parentworkflow`, `workflow`, `document`, `version`, `state`, `date`) VALUES (". $this->_workflow->getID(). ", ". $subworkflow->getID(). ", ". $this->_document->getID() .", ". $this->_version .", ".$initstate->getID().", ".$db->getCurrentDatetime().")"; + $queryStr = "INSERT INTO `tblWorkflowDocumentContent` (`parent`, `workflow`, `document`, `version`, `state`, `date`) VALUES (". $this->_workflow['id']. ", ". $subworkflow->getID(). ", ". $this->_document->getID() .", ". $this->_version .", ".$initstate->getID().", ".$db->getCurrentDatetime().")"; if (!$db->getResult($queryStr)) { return false; } - $this->_workflow = $subworkflow; + $this->_workflow = array('id'=>$db->getInsertID('tblWorkflowDocumentContent'), 'parent'=>$this->_workflow['id'], 'workflow'=>$subworkflow); return true; } return true; @@ -5709,30 +5740,23 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return false; if (isset($this->_workflow)) { + $workflow = $this->_workflow['workflow']; $db->startTransaction(); - $queryStr= - "SELECT * FROM `tblWorkflowDocumentContent` WHERE `workflow`=". intval($this->_workflow->getID()) - . " AND `version`='".$this->_version - ."' AND `document` = '". $this->_document->getID() ."' "; - $recs = $db->getResultArray($queryStr); - if (is_bool($recs) && !$recs) { - $db->rollbackTransaction(); - return false; - } - if(!$recs) { - $db->rollbackTransaction(); - return false; - } - - $queryStr = "DELETE FROM `tblWorkflowDocumentContent` WHERE `workflow` =". intval($this->_workflow->getID())." AND `document` = '". $this->_document->getID() ."' AND `version` = '" . $this->_version."'"; + $queryStr = "UPDATE `tblWorkflowDocumentContent` SET `state` = NULL WHERE `id` = '" . $this->_workflow['id']."'"; if (!$db->getResult($queryStr)) { $db->rollbackTransaction(); return false; } - $this->_workflow = $this->_document->_dms->getWorkflow($recs[0]['parentworkflow']); - $this->_workflow->setDMS($this->_document->_dms); + /* Calling getWorkflow() should find the parent workflow, better check */ + $parent = $this->_workflow['parent']; + unset($this->_workflow); + $this->getWorkflow(); + if($this->_workflow['id'] != $parent) { + $db->rollbackTransaction(); + return false; + } if($transition) { if(false === $this->triggerWorkflowTransition($user, $transition, $comment)) { @@ -5743,7 +5767,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $db->commitTransaction(); } - return $this->_workflow; + return $this->_workflow['workflow']; } /* }}} */ /** @@ -5770,7 +5794,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /* Check if the user has already triggered the transition */ $queryStr= - "SELECT * FROM `tblWorkflowLog` WHERE `version`='".$this->_version ."' AND `document` = '". $this->_document->getID() ."' AND `workflow` = ". $this->_workflow->getID(). " AND userid = ".$user->getID(); + "SELECT * FROM `tblWorkflowLog` WHERE `workflowdocumentcontent` = ".$this->_workflow['id']." AND userid = ".$user->getID(); $queryStr .= " AND `transition` = ".$transition->getID(); $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) @@ -5918,8 +5942,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ if(!$this->triggerWorkflowTransitionIsAllowed($user, $transition)) return false; - $state = $this->_workflowState; - $queryStr = "INSERT INTO `tblWorkflowLog` (`document`, `version`, `workflow`, `userid`, `transition`, `date`, `comment`) VALUES (".$this->_document->getID().", ".$this->_version.", " . (int) $this->_workflow->getID() . ", " .(int) $user->getID(). ", ".(int) $transition->getID().", ".$db->getCurrentDatetime().", ".$db->qstr($comment).")"; + $queryStr = "INSERT INTO `tblWorkflowLog` (`workflowdocumentcontent`, `userid`, `transition`, `date`, `comment`) VALUES (".$this->_workflow['id'].", ".(int) $user->getID(). ", ".(int) $transition->getID().", ".$db->getCurrentDatetime().", ".$db->qstr($comment).")"; if (!$db->getResult($queryStr)) return false; @@ -5970,8 +5993,9 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ * the next state will be reached if one of the transitions * leading to the given state can be processed. */ - if($nextstate->getPreCondFunc() == '') { - $transitions = $this->_workflow->getPreviousTransitions($nextstate); + if($nextstate->getPreCondFunc() == '') { + $workflow = $this->_workflow['workflow']; + $transitions = $workflow->getPreviousTransitions($nextstate); foreach($transitions as $transition) { // echo "transition ".$transition->getID()." led to state ".$nextstate->getName()."
      "; if($this->executeWorkflowTransitionIsAllowed($transition)) { @@ -5996,7 +6020,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /* make sure the users and groups allowed to trigger the next * transitions are also allowed to read the document */ - $transitions = $this->_workflow->getNextTransitions($nextstate); + $transitions = $workflow->getNextTransitions($nextstate); foreach($transitions as $tran) { // echo "checking access for users/groups allowed to trigger transition ".$tran->getID()."
      "; $transusers = $tran->getUsers(); @@ -6035,24 +6059,27 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ /** * Get the so far logged operations on the document content within the - * workflow + * workflow. If the document content is currently in a workflow and + * a transition is passed, then the + * log entries will be restricted on the workflow and returned as one + * dimensional list. Without a running workflow the log entries of + * all workflows in the past are returned grouped by workflow. * * @return array list of operations */ function getWorkflowLog($transition = null) { /* {{{ */ $db = $this->_document->_dms->getDB(); -/* if(!$this->_workflow) $this->getWorkflow(); - if(!$this->_workflow) - return false; -*/ $queryStr= - "SELECT * FROM `tblWorkflowLog` WHERE `version`='".$this->_version ."' AND `document` = '". $this->_document->getID() ."'"; // AND `workflow` = ". $this->_workflow->getID(); - if($transition) - $queryStr .= " AND `transition` = ".$transition->getID(); + "SELECT `a`.`id`, `a`.`userid`, `a`.`transition`, `a`.`date`, `a`.`comment`, `a`.`workflowdocumentcontent`, `b`.`version`, `b`.`document`, `b`.`workflow` FROM `tblWorkflowLog` `a` LEFT JOIN `tblWorkflowDocumentContent` `b` ON `a`.`workflowdocumentcontent` = `b`.`id` WHERE `b`.`version`='".$this->_version ."' AND `b`.`document` = '". $this->_document->getID() ."'"; // AND `workflow` = ". $this->_workflow->getID(); + if($transition) { + $queryStr .= " AND `a`.`transition` = ".$transition->getID(); + } + if($this->_workflow) + $queryStr .= " AND `a`.`workflowdocumentcontent` = ".$this->_workflow['id']; $queryStr .= " ORDER BY `date`"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) @@ -6063,7 +6090,10 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ $workflow = $this->_document->_dms->getWorkflow($resArr[$i]["workflow"]); $workflowlog = new SeedDMS_Core_Workflow_Log($resArr[$i]["id"], $this->_document->_dms->getDocument($resArr[$i]["document"]), $resArr[$i]["version"], $workflow, $this->_document->_dms->getUser($resArr[$i]["userid"]), $workflow->getTransition($resArr[$i]["transition"]), $resArr[$i]["date"], $resArr[$i]["comment"]); $workflowlog->setDMS($this); - $workflowlogs[$i] = $workflowlog; + if($this->_workflow && $transition) + $workflowlogs[] = $workflowlog; + else + $workflowlogs[$resArr[$i]["workflowdocumentcontent"]][] = $workflowlog; } return $workflowlogs; @@ -6085,7 +6115,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return false; $queryStr= - "SELECT * FROM `tblWorkflowLog` WHERE `version`='".$this->_version ."' AND `document` = '". $this->_document->getID() ."' AND `workflow` = ". $this->_workflow->getID(); + "SELECT * FROM `tblWorkflowLog` WHERE `workflowdocumentcontent` = ". $this->_workflow['id']; $queryStr .= " ORDER BY `id` DESC LIMIT 1"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) @@ -6111,10 +6141,11 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ function needsWorkflowAction($user) { /* {{{ */ $needwkflaction = false; if($this->_workflow) { + $workflow = $this->_workflow['workflow']; if (!$this->_workflowState) $this->getWorkflowState(); $workflowstate = $this->_workflowState; - $transitions = $this->_workflow->getNextTransitions($workflowstate); + $transitions = $workflow->getNextTransitions($workflowstate); foreach($transitions as $transition) { if($this->triggerWorkflowTransitionIsAllowed($user, $transition)) { $needwkflaction = true; diff --git a/install/update-6.0.0/update.sql b/install/update-6.0.0/update.sql index ea9b70c9a..0c71415fe 100644 --- a/install/update-6.0.0/update.sql +++ b/install/update-6.0.0/update.sql @@ -6,6 +6,24 @@ ALTER TABLE `tblUsers` ADD COLUMN `secret` varchar(50) DEFAULT NULL AFTER `pwd`; ALTER TABLE `tblWorkflows` ADD COLUMN `layoutdata` text DEFAULT NULL AFTER `initstate`; +ALTER TABLE `tblWorkflowDocumentContent` ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT UNIQUE FIRST; + +ALTER TABLE `tblWorkflowLog` ADD COLUMN `workflowdocumentcontent` int(11) NOT NULL DEFAULT '0' AFTER `id`; + +UPDATE `tblWorkflowLog` a, `tblWorkflowDocumentContent` b SET a.`workflowdocumentcontent` = b.`id` WHERE a.`document` = b.`document` AND a.`version` = b.`version` AND a.`workflow` = b.`workflow`; + +INSERT INTO `tblWorkflowDocumentContent` (`parentworkflow`, `workflow`, `document`, `version`, `state`, `date`) SELECT 0 as `parentworkflow`, `workflow`, `document`, `version`, NULL as `state`, max(`date`) as `date` FROM `tblWorkflowLog` WHERE `workflowdocumentcontent` = 0 GROUP BY `workflow`, `document`, `version`; + +UPDATE `tblWorkflowLog` a, `tblWorkflowDocumentContent` b SET a.`workflowdocumentcontent` = b.`id` WHERE a.`document` = b.`document` AND a.`version` = b.`version` AND a.`workflow` = b.`workflow`; + +ALTER TABLE `tblWorkflowLog` ADD CONSTRAINT `tblWorkflowLog_workflowdocumentcontent` FOREIGN KEY (`workflowdocumentcontent`) REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE; + +ALTER TABLE `tblWorkflowDocumentContent` ADD COLUMN `parent` int(11) DEFAULT NULL AFTER `id`; + +ALTER TABLE `tblWorkflowDocumentContent` ADD CONSTRAINT `tblWorkflowDocumentContent_parent` FOREIGN KEY (`parent`) REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE; + +ALTER TABLE `tblWorkflowDocumentContent` DROP COLUMN `parentworkflow`; + CREATE TABLE `tblUserSubstitutes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` int(11) DEFAULT null, diff --git a/views/bootstrap/class.RewindWorkflow.php b/views/bootstrap/class.RewindWorkflow.php index 93bfe0432..7cb405a66 100644 --- a/views/bootstrap/class.RewindWorkflow.php +++ b/views/bootstrap/class.RewindWorkflow.php @@ -46,7 +46,7 @@ class SeedDMS_View_RewindWorkflow extends SeedDMS_Bootstrap_Style { $this->contentHeading(getMLText("rewind_workflow")); $currentstate = $latestContent->getWorkflowState(); - $wkflog = $latestContent->getWorkflowLog(); + $wkflog = array_pop($latestContent->getWorkflowLog()); $workflow = $latestContent->getWorkflow(); $msg = "The document is currently in state: ".$currentstate->getName()."
      "; diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 93b2e4df2..a61342d8e 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -750,11 +750,13 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { if($wkflogs) { $this->contentHeading(getMLText("workflow_summary")); $this->contentContainerStart(); + foreach($wkflogs as $wkflogt) { echo ""; - echo "\n"; + echo "\n"; echo ""; - foreach($wkflogs as $wkflog) { + foreach($wkflogt as $wkflog) { echo ""; + echo ""; echo ""; echo ""; $loguser = $wkflog->getUser(); @@ -763,6 +765,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { echo ""; } print "\n
      ".getMLText('date')."".getMLText('action')."".getMLText('user')."".getMLText('comment')."
      ".getMLText('workflow')."".getMLText('date')."".getMLText('action')."".getMLText('user')."".getMLText('comment')."
      ".$wkflog->getWorkflow()->getName()."".$wkflog->getDate()."".$wkflog->getTransition()->getAction()->getName()."
      \n"; + } $this->contentContainerEnd(); } } From 54ce5a7e16bc0a826f3c29a5e754e31cac308aad Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 29 Mar 2018 11:03:34 +0200 Subject: [PATCH 027/356] adding sql statements for updating to new workflow layout --- install/update-6.0.0/update-postgres.sql | 24 ++++++++++++++++ install/update-6.0.0/update-sqlite3.sql | 35 ++++++++++++++++++++++++ install/update-6.0.0/update.sql | 8 +++++- 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/install/update-6.0.0/update-postgres.sql b/install/update-6.0.0/update-postgres.sql index aa0068bac..cf5a4c3fd 100644 --- a/install/update-6.0.0/update-postgres.sql +++ b/install/update-6.0.0/update-postgres.sql @@ -6,6 +6,30 @@ ALTER TABLE "tblUsers" ADD COLUMN "secret" varchar(50) default NULL; ALTER TABLE "tblWorkflows" ADD COLUMN "layoutdata" text default NULL; +ALTER TABLE "tblWorkflowDocumentContent" ADD COLUMN "id" SERIAL UNIQUE; + +ALTER TABLE "tblWorkflowLog" ADD COLUMN "workflowdocumentcontent" INTEGER NOT NULL DEFAULT '0'; + +UPDATE "tblWorkflowLog" SET "workflowdocumentcontent" = "tblWorkflowDocumentContent"."id" FROM "tblWorkflowDocumentContent" WHERE "tblWorkflowLog"."document" = "tblWorkflowDocumentContent"."document" AND "tblWorkflowLog"."version" = "tblWorkflowDocumentContent"."version" AND "tblWorkflowLog"."workflow" = "tblWorkflowDocumentContent"."workflow"; + +INSERT INTO "tblWorkflowDocumentContent" ("parentworkflow", "workflow", "document", "version", "state", "date") SELECT 0 AS "parentworkflow", "workflow", "document", "version", NULL AS "state", max("date") AS "date" FROM "tblWorkflowLog" WHERE "workflowdocumentcontent" = 0 GROUP BY "workflow", "document", "version"; + +UPDATE "tblWorkflowLog" SET "workflowdocumentcontent" = "tblWorkflowDocumentContent"."id" FROM "tblWorkflowDocumentContent" WHERE "tblWorkflowLog"."document" = "tblWorkflowDocumentContent"."document" AND "tblWorkflowLog"."version" = "tblWorkflowDocumentContent"."version" AND "tblWorkflowLog"."workflow" = "tblWorkflowDocumentContent"."workflow"; + +ALTER TABLE "tblWorkflowLog" ADD CONSTRAINT "tblWorkflowLog_workflowdocumentcontent" FOREIGN KEY ("workflowdocumentcontent") REFERENCES "tblWorkflowDocumentContent" ("id") ON DELETE CASCADE; + +ALTER TABLE "tblWorkflowDocumentContent" ADD COLUMN "parent" INTEGER DEFAULT NULL; + +ALTER TABLE "tblWorkflowDocumentContent" ADD CONSTRAINT "tblWorkflowDocumentContent_parent" FOREIGN KEY ("parent") REFERENCES "tblWorkflowDocumentContent" ("id") ON DELETE CASCADE; + +ALTER TABLE "tblWorkflowDocumentContent" DROP COLUMN "parentworkflow"; + +ALTER TABLE "tblWorkflowLog" DROP COLUMN "document"; + +ALTER TABLE "tblWorkflowLog" DROP COLUMN "version"; + +ALTER TABLE "tblWorkflowLog" DROP COLUMN "workflow"; + CREATE TABLE "tblUserSubstitutes" ( "id" SERIAL UNIQUE, "user" INTEGER default null, diff --git a/install/update-6.0.0/update-sqlite3.sql b/install/update-6.0.0/update-sqlite3.sql index c55358638..835206910 100644 --- a/install/update-6.0.0/update-sqlite3.sql +++ b/install/update-6.0.0/update-sqlite3.sql @@ -6,6 +6,39 @@ ALTER TABLE `tblUsers` ADD COLUMN `secret` varchar(50) default NULL; ALTER TABLE `tblWorkflows` ADD COLUMN `layoutdata` text default NULL; +CREATE TABLE `new_tblWorkflowDocumentContent` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `parent` INTEGER DEFAULT NULL REFERENCES `new_tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, + `workflow` INTEGER DEFAULT NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, + `document` INTEGER DEFAULT NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, + `version` INTEGER DEFAULT NULL, + `state` INTEGER DEFAULT NULL REFERENCES `tblWorkflowStates` (`id`) ON DELETE CASCADE, + `date` datetime NOT NULL +) ; + +INSERT INTO `new_tblWorkflowDocumentContent` (`parent`, `workflow`, `document`, `version`, `state`, `date`) SELECT NULL as `parent`, `workflow`, `document`, `version`, `state`, `date` FROM `tblWorkflowDocumentContent`; + +INSERT INTO `new_tblWorkflowDocumentContent` (`parent`, `workflow`, `document`, `version`, `state`, `date`) SELECT NULL, `a`.`workflow`, `a`.`document`, `a`.`version`, NULL AS `state`, max(`a`.`date`) FROM `tblWorkflowLog` `a` LEFT JOIN `tblWorkflowDocumentContent` `b` ON `a`.`document`=`b`.`document` AND `a`.`version`=`b`.`version` AND `a`.`workflow`=`b`.`workflow` WHERE `b`.`document` IS NULL GROUP BY `a`.`document`, `a`.`version`, `a`.`workflow`; + +CREATE TABLE `new_tblWorkflowLog` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `workflowdocumentcontent` INTEGER DEFAULT NULL REFERENCES `new_tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, + `userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, + `transition` INTEGER default NULL REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, + `date` datetime NOT NULL, + `comment` text +) ; + +INSERT INTO `new_tblWorkflowLog` (`id`, `workflowdocumentcontent`, `userid`, `transition`, `date`, `comment`) SELECT `a`.`id`, `b`.`id`, `a`.`userid`, `a`.`transition`, `a`.`date`, `a`.`comment` FROM `tblWorkflowLog` `a` LEFT JOIN `new_tblWorkflowDocumentContent` `b` ON `a`.`document`=`b`.`document` AND `a`.`version`=`b`.`version` AND `a`.`workflow`=`b`.`workflow` WHERE `b`.`document` IS NOT NULL; + +DROP TABLE `tblWorkflowLog`; + +ALTER TABLE `new_tblWorkflowLog` RENAME TO `tblWorkflowLog`; + +DROP TABLE `tblWorkflowDocumentContent`; + +ALTER TABLE `new_tblWorkflowDocumentContent` RENAME TO `tblWorkflowDocumentContent`; + CREATE TABLE `tblUserSubstitutes` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `user` INTEGER NOT NULL default '0' REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, @@ -121,6 +154,8 @@ ALTER TABLE tblUsers RENAME TO old_tblUsers; ALTER TABLE new_tblUsers RENAME TO tblUsers; +DROP TABLE old_tblUsers; + CREATE TABLE `tblAros` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `parent` INTEGER, diff --git a/install/update-6.0.0/update.sql b/install/update-6.0.0/update.sql index 0c71415fe..54bfe3430 100644 --- a/install/update-6.0.0/update.sql +++ b/install/update-6.0.0/update.sql @@ -12,7 +12,7 @@ ALTER TABLE `tblWorkflowLog` ADD COLUMN `workflowdocumentcontent` int(11) NOT NU UPDATE `tblWorkflowLog` a, `tblWorkflowDocumentContent` b SET a.`workflowdocumentcontent` = b.`id` WHERE a.`document` = b.`document` AND a.`version` = b.`version` AND a.`workflow` = b.`workflow`; -INSERT INTO `tblWorkflowDocumentContent` (`parentworkflow`, `workflow`, `document`, `version`, `state`, `date`) SELECT 0 as `parentworkflow`, `workflow`, `document`, `version`, NULL as `state`, max(`date`) as `date` FROM `tblWorkflowLog` WHERE `workflowdocumentcontent` = 0 GROUP BY `workflow`, `document`, `version`; +INSERT INTO `tblWorkflowDocumentContent` (`parentworkflow`, `workflow`, `document`, `version`, `state`, `date`) SELECT 0 AS `parentworkflow`, `workflow`, `document`, `version`, NULL AS `state`, max(`date`) AS `date` FROM `tblWorkflowLog` WHERE `workflowdocumentcontent` = 0 GROUP BY `workflow`, `document`, `version`; UPDATE `tblWorkflowLog` a, `tblWorkflowDocumentContent` b SET a.`workflowdocumentcontent` = b.`id` WHERE a.`document` = b.`document` AND a.`version` = b.`version` AND a.`workflow` = b.`workflow`; @@ -24,6 +24,12 @@ ALTER TABLE `tblWorkflowDocumentContent` ADD CONSTRAINT `tblWorkflowDocumentCont ALTER TABLE `tblWorkflowDocumentContent` DROP COLUMN `parentworkflow`; +ALTER TABLE `tblWorkflowLog` DROP COLUMN `document`; + +ALTER TABLE `tblWorkflowLog` DROP COLUMN `version`; + +ALTER TABLE `tblWorkflowLog` DROP COLUMN `workflow`; + CREATE TABLE `tblUserSubstitutes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user` int(11) DEFAULT null, From 90762b9e1331c3a6f6058d9a3ebbe6db8698ec53 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 29 Mar 2018 14:43:32 +0200 Subject: [PATCH 028/356] drop tables after commit --- install/update-6.0.0/update-sqlite3.sql | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/install/update-6.0.0/update-sqlite3.sql b/install/update-6.0.0/update-sqlite3.sql index 835206910..6bc037102 100644 --- a/install/update-6.0.0/update-sqlite3.sql +++ b/install/update-6.0.0/update-sqlite3.sql @@ -1,6 +1,6 @@ BEGIN; -ALTER TABLE `tblDocumentContent` ADD COLUMN `revisiondate` TEXT NOT NULL; +ALTER TABLE `tblDocumentContent` ADD COLUMN `revisiondate` TEXT default NULL; ALTER TABLE `tblUsers` ADD COLUMN `secret` varchar(50) default NULL; @@ -31,11 +31,11 @@ CREATE TABLE `new_tblWorkflowLog` ( INSERT INTO `new_tblWorkflowLog` (`id`, `workflowdocumentcontent`, `userid`, `transition`, `date`, `comment`) SELECT `a`.`id`, `b`.`id`, `a`.`userid`, `a`.`transition`, `a`.`date`, `a`.`comment` FROM `tblWorkflowLog` `a` LEFT JOIN `new_tblWorkflowDocumentContent` `b` ON `a`.`document`=`b`.`document` AND `a`.`version`=`b`.`version` AND `a`.`workflow`=`b`.`workflow` WHERE `b`.`document` IS NOT NULL; -DROP TABLE `tblWorkflowLog`; +ALTER TABLE `tblWorkflowLog` RENAME TO `old_tblWorkflowLog`; ALTER TABLE `new_tblWorkflowLog` RENAME TO `tblWorkflowLog`; -DROP TABLE `tblWorkflowDocumentContent`; +ALTER TABLE `tblWorkflowDocumentContent` RENAME TO `old_tblWorkflowDocumentContent`; ALTER TABLE `new_tblWorkflowDocumentContent` RENAME TO `tblWorkflowDocumentContent`; @@ -154,8 +154,6 @@ ALTER TABLE tblUsers RENAME TO old_tblUsers; ALTER TABLE new_tblUsers RENAME TO tblUsers; -DROP TABLE old_tblUsers; - CREATE TABLE `tblAros` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `parent` INTEGER, @@ -205,3 +203,9 @@ CREATE TABLE `tblSchedulerTask` ( UPDATE tblVersion set major=6, minor=0, subminor=0; COMMIT; + +DROP TABLE `old_tblUsers`; + +DROP TABLE `old_tblWorkflowLog`; + +DROP TABLE `old_tblWorkflowDocumentContent`; From e5376d144d9d3aedecd9f9140286e9d0302a55d8 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 29 Mar 2018 15:13:21 +0200 Subject: [PATCH 029/356] add changelog for 6.0.6 --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index ff17ee08a..af70882d8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,8 @@ the uploader - add scheduler - add hook showVersionComment in out.ViewDocument.php +- Various minor corrections of database tables tblWorkflowLog and + tblWorkflowDocumentContent - merge changes up to 5.1.6 -------------------------------------------------------------------------------- From 7c9f5d381984f927df0d4d884f96fc36f6691cf3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 15:32:59 +0200 Subject: [PATCH 030/356] some infos about the update --- install/update-6.0.0/update.txt | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 install/update-6.0.0/update.txt diff --git a/install/update-6.0.0/update.txt b/install/update-6.0.0/update.txt new file mode 100644 index 000000000..13fa50e5f --- /dev/null +++ b/install/update-6.0.0/update.txt @@ -0,0 +1,52 @@ +Caution when you update seeddms with workflow mode `advanced` +============================================================= + +The previous database layout for tracking the workflow state of a +document content was not very well done. It did not allow to run +the document through another workflow at a later time, expecially +the same workflow, e.g. for a scheduled revision of a document. + +Technical details +================== +This update modifies the tables tblWorkflowDocumentContent and +tblWorkflowLog. It adds a new autoincrement field as a primary key +(id) to tblWorkflowDocumentContent and references that field in +tblWorkflowLog (workflowdocumentcontent). Till now the two tables +where linked by the fields `document`, `version`, and `workflow` which will +be replaced by the two new fields. The fields `document`, `version`, and +`workflow` will be removed from tblWorkflowLog. tblWorkflowDocumentContent +contained just the workflows currently active for a particlar document. +From now on the table will also contain finished workflows, which +will have the field `state` set to null. This allows to run even the +same workflow again and still be able to distinguish the log entries. + +MySQL +------ + +The update process will first add the new auto incrementing, primary +field to tblWorkflowDocumentContent and a referencing field to +tblWorkflowLog. It will then fill out the referencing field with the +automatically incremented field value from tblWorkflowDocumentContent +by joining the two tables with its common fields document, version, +and workflow. This will not fill out all referencing field values, +because once a workflow has ended the record in +tblWorkflowDocumentContent will be deleted and just the records in +tblWorkflowLog are kept. The still missing records in +tblWorkflowDocumentContent for already completed workflows will be +reconstructed from the records in tblWorkflowLog which do not have a +reference to tblWorkflowDocumentContent yet. Once that is done the +referencing field in tblWorkflowLog can be filled in a second pass. +The date of the new records in tblWorkflowDocumentContent will be +taken from the last record for that workflow in tblWorkflowLog. The +state of the new records will be set null, indicating that this +workflow is no longer active. + +SQLite +------- + +The update process will first create new table for tblWorkflowDocumentContent +containing a new field for the primary key field. It then copies the +records from the old table to the new table. The missing records for +workflows which has been finished already are recreated from the old +table `tblWorkflowLog`. Which is then replaced by a new table having +the foreign key to table `tblWorkflowDocumentContent`. From 63a1ae0c134b02c7a0ab8124ca83de9b24f87610 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 4 Apr 2018 17:07:25 +0200 Subject: [PATCH 031/356] add sql statements for workflow --- install/create_tables-innodb.sql | 16 +++++++--------- install/create_tables-postgres.sql | 9 ++++----- install/create_tables-sqlite3.sql | 8 ++++---- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/install/create_tables-innodb.sql b/install/create_tables-innodb.sql index 245b62487..3994dba1f 100644 --- a/install/create_tables-innodb.sql +++ b/install/create_tables-innodb.sql @@ -811,22 +811,18 @@ CREATE TABLE `tblWorkflowTransitionGroups` ( CREATE TABLE `tblWorkflowLog` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `document` int(11) DEFAULT NULL, - `version` smallint(5) DEFAULT NULL, - `workflow` int(11) DEFAULT NULL, + `workflowdocumentcontent` int(11) NOT NULL DEFAULT '0', `userid` int(11) DEFAULT NULL, `transition` int(11) DEFAULT NULL, `date` datetime NOT NULL, `comment` text, PRIMARY KEY (`id`), - KEY `tblWorkflowLog_document` (`document`), - KEY `tblWorkflowLog_workflow` (`workflow`), KEY `tblWorkflowLog_userid` (`userid`), KEY `tblWorkflowLog_transition` (`transition`), - CONSTRAINT `tblWorkflowLog_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, + KEY `tblWorkflowLog_workflowdocumentcontent` (`workflowdocumentcontent`), + CONSTRAINT `tblWorkflowLog_workflowdocumentcontent` FOREIGN KEY (`workflowdocumentcontent`) REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, CONSTRAINT `tblWorkflowLog_transition` FOREIGN KEY (`transition`) REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, - CONSTRAINT `tblWorkflowLog_userid` FOREIGN KEY (`userid`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, - CONSTRAINT `tblWorkflowLog_workflow` FOREIGN KEY (`workflow`) REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE + CONSTRAINT `tblWorkflowLog_userid` FOREIGN KEY (`userid`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -836,7 +832,8 @@ CREATE TABLE `tblWorkflowLog` ( -- CREATE TABLE `tblWorkflowDocumentContent` ( - `parentworkflow` int(11) DEFAULT '0', + `id` int(11) NOT NULL AUTO_INCREMENT, + `parent` int(11) DEFAULT NULL, `workflow` int(11) DEFAULT NULL, `document` int(11) DEFAULT NULL, `version` smallint(5) DEFAULT NULL, @@ -847,6 +844,7 @@ CREATE TABLE `tblWorkflowDocumentContent` ( KEY `tblWorkflowDocument_state` (`state`), CONSTRAINT `tblWorkflowDocument_document` FOREIGN KEY (`document`) REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, CONSTRAINT `tblWorkflowDocument_state` FOREIGN KEY (`state`) REFERENCES `tblWorkflowStates` (`id`) ON DELETE CASCADE, + CONSTRAINT `tblWorkflowDocumentContent_parent` FOREIGN KEY (`parent`) REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, CONSTRAINT `tblWorkflowDocument_workflow` FOREIGN KEY (`workflow`) REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/install/create_tables-postgres.sql b/install/create_tables-postgres.sql index 7a36a63b2..a1150b0fa 100644 --- a/install/create_tables-postgres.sql +++ b/install/create_tables-postgres.sql @@ -536,7 +536,7 @@ CREATE TABLE "tblSessions" ( "theme" varchar(30) NOT NULL default '', "language" varchar(30) NOT NULL default '', "clipboard" text default NULL, - "su" INTEGER DEFAULT NULL, + "su" INTEGER DEFAULT NULL, "splashmsg" text default NULL ) ; @@ -669,9 +669,7 @@ CREATE TABLE "tblWorkflowTransitionGroups" ( CREATE TABLE "tblWorkflowLog" ( "id" SERIAL UNIQUE, - "document" INTEGER default NULL REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, - "version" INTEGER default NULL, - "workflow" INTEGER default NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, + "workflowdocumentcontent" INTEGER DEFAULT NULL REFERENCES "tblWorkflowDocumentContent" ("id") ON DELETE CASCADE, "userid" INTEGER default NULL REFERENCES "tblUsers" ("id") ON DELETE CASCADE, "transition" INTEGER default NULL REFERENCES "tblWorkflowTransitions" ("id") ON DELETE CASCADE, "date" TIMESTAMP default NULL, @@ -685,7 +683,8 @@ CREATE TABLE "tblWorkflowLog" ( -- CREATE TABLE "tblWorkflowDocumentContent" ( - "parentworkflow" INTEGER DEFAULT 0, + "id" SERIAL UNIQUE, + "parent" INTEGER DEFAULT NULL REFERENCES "tblWorkflowDocumentContent" ("id") ON DELETE CASCADE, "workflow" INTEGER DEFAULT NULL REFERENCES "tblWorkflows" ("id") ON DELETE CASCADE, "document" INTEGER DEFAULT NULL REFERENCES "tblDocuments" ("id") ON DELETE CASCADE, "version" INTEGER DEFAULT NULL, diff --git a/install/create_tables-sqlite3.sql b/install/create_tables-sqlite3.sql index 15e471de0..15bddbb78 100644 --- a/install/create_tables-sqlite3.sql +++ b/install/create_tables-sqlite3.sql @@ -545,7 +545,7 @@ CREATE TABLE `tblSessions` ( `theme` varchar(30) NOT NULL default '', `language` varchar(30) NOT NULL default '', `clipboard` text default NULL, - `su` INTEGER DEFAULT NULL, + `su` INTEGER DEFAULT NULL, `splashmsg` text default NULL ) ; @@ -678,9 +678,7 @@ CREATE TABLE `tblWorkflowTransitionGroups` ( CREATE TABLE `tblWorkflowLog` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, - `document` INTEGER default NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, - `version` INTEGER default NULL, - `workflow` INTEGER default NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, + `workflowdocumentcontent` INTEGER DEFAULT NULL REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, `userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `transition` INTEGER default NULL REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, `date` datetime NOT NULL, @@ -694,7 +692,9 @@ CREATE TABLE `tblWorkflowLog` ( -- CREATE TABLE `tblWorkflowDocumentContent` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT, `parentworkflow` INTEGER DEFAULT 0, + `parent` INTEGER DEFAULT NULL REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, `workflow` INTEGER DEFAULT NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, `document` INTEGER DEFAULT NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, `version` INTEGER DEFAULT NULL, From 8ea8c0086eccc6687173ec89753915916fcc6d14 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 11:19:13 +0200 Subject: [PATCH 032/356] set references to right table name a reference to a temp. table will not be changed when the table name is changed. Hence, use the right table name from the beginning and make sure foreign keys are not checked --- install/update-6.0.0/update-sqlite3.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/update-6.0.0/update-sqlite3.sql b/install/update-6.0.0/update-sqlite3.sql index 6bc037102..3c4996a3b 100644 --- a/install/update-6.0.0/update-sqlite3.sql +++ b/install/update-6.0.0/update-sqlite3.sql @@ -8,7 +8,7 @@ ALTER TABLE `tblWorkflows` ADD COLUMN `layoutdata` text default NULL; CREATE TABLE `new_tblWorkflowDocumentContent` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, - `parent` INTEGER DEFAULT NULL REFERENCES `new_tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, + `parent` INTEGER DEFAULT NULL REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, `workflow` INTEGER DEFAULT NULL REFERENCES `tblWorkflows` (`id`) ON DELETE CASCADE, `document` INTEGER DEFAULT NULL REFERENCES `tblDocuments` (`id`) ON DELETE CASCADE, `version` INTEGER DEFAULT NULL, @@ -22,7 +22,7 @@ INSERT INTO `new_tblWorkflowDocumentContent` (`parent`, `workflow`, `document`, CREATE TABLE `new_tblWorkflowLog` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, - `workflowdocumentcontent` INTEGER DEFAULT NULL REFERENCES `new_tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, + `workflowdocumentcontent` INTEGER DEFAULT NULL REFERENCES `tblWorkflowDocumentContent` (`id`) ON DELETE CASCADE, `userid` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE, `transition` INTEGER default NULL REFERENCES `tblWorkflowTransitions` (`id`) ON DELETE CASCADE, `date` datetime NOT NULL, From f1fb23c7e737d9036aed0c3708c109a7760eaf76 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 12:21:09 +0200 Subject: [PATCH 033/356] fix sql statement to retrieve workflow log --- SeedDMS_Core/Core/inc.ClassDocument.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 67d4750fa..37c5f2535 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -6080,7 +6080,7 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ } if($this->_workflow) $queryStr .= " AND `a`.`workflowdocumentcontent` = ".$this->_workflow['id']; - $queryStr .= " ORDER BY `date`"; + $queryStr .= " ORDER BY `a`.`date`"; $resArr = $db->getResultArray($queryStr); if (is_bool($resArr) && !$resArr) return false; From 4007692a6864353aa61306c27a7e0fc879a5d6a5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 16:11:47 +0200 Subject: [PATCH 034/356] add entry for 5.0.14 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 53a4d7b05..922b94dde 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ -------------------------------------------------------------------------------- - use cmd timeout when indexing documents (Closes #344) - add change password function to rest api (merge from sebbuku) +- merged changes from 4.3.37 -------------------------------------------------------------------------------- Changes in version 5.0.13 From 294b93fdf6b55be32b6042b2ca0c6663629d8b49 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 16:22:29 +0200 Subject: [PATCH 035/356] add entry for 5.1.7 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index 009597e94..0ab4bcdd0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,6 +15,7 @@ - do not periodically count tasks if task list in menu is turned off - use utf8_basename() in op.ImportFS.php - update font-awesome from 3.1.0 to 3.2.1 +- merged changes up to 5.0.14 -------------------------------------------------------------------------------- Changes in version 5.1.6 From 798a4b99b3680ad312e28155a5a681fb2222f335 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 16:30:06 +0200 Subject: [PATCH 036/356] new version 5.1.7 --- Makefile | 2 +- SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- SeedDMS_Core/package.xml | 28 ++++++++++++++++++++++------ inc/inc.Version.php | 2 +- install/install.php | 2 +- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index dad42bf62..1ac1be809 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION=5.1.6 +VERSION=5.1.7 SRC=CHANGELOG inc conf utils index.php languages views op out controllers doc styles TODO LICENSE webdav install restapi pdfviewer # webapp diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index d7f896639..3a8100ab3 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -376,7 +376,7 @@ class SeedDMS_Core_DMS { $this->callbacks = array(); $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.1.6'; + $this->version = '5.1.7'; } /* }}} */ /** diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 01073c353..4689815b7 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -12,11 +12,11 @@ uwe@steinmann.cx yes - 2018-02-14 + 2018-04-05 - 5.1.6 - 5.1.6 + 5.1.7 + 5.1.7 stable @@ -24,9 +24,7 @@ GPL License -add SeedDMS_Core_Folder::getDocumentsMinMax() -add lots of DocBlocks from merge request #8 -add SeedDMS_Core_AttributeDefinition::removeValue() +just bump version @@ -1564,5 +1562,23 @@ returns just users which are not disabled SeedDMS_Core_Document::removeCategories() + + 2018-02-14 + + + 5.1.6 + 5.1.6 + + + stable + stable + + GPL License + +add SeedDMS_Core_Folder::getDocumentsMinMax() +add lots of DocBlocks from merge request #8 +add SeedDMS_Core_AttributeDefinition::removeValue() + + diff --git a/inc/inc.Version.php b/inc/inc.Version.php index ddf140bb2..447b3bf06 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { - public $_number = "5.1.6"; + public $_number = "5.1.7"; private $_string = "SeedDMS"; function __construct() { diff --git a/install/install.php b/install/install.php index 6fbb6dc3c..fa2fefba1 100644 --- a/install/install.php +++ b/install/install.php @@ -123,7 +123,7 @@ function fileExistsInIncludePath($file) { /* {{{ */ * Load default settings + set */ define("SEEDDMS_INSTALL", "on"); -define("SEEDDMS_VERSION", "5.1.6"); +define("SEEDDMS_VERSION", "5.1.7"); require_once('../inc/inc.ClassSettings.php'); From 2413da8c0b73a723db5ad73eab65aaafaffba964 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 5 Apr 2018 17:28:00 +0200 Subject: [PATCH 037/356] start new version 5.1.8 --- Makefile | 2 +- SeedDMS_Core/Core/inc.ClassDMS.php | 2 +- SeedDMS_Core/package.xml | 20 ++++++++++++++++++-- inc/inc.Version.php | 2 +- install/install.php | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 1ac1be809..2f37dcb9b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION=5.1.7 +VERSION=5.1.8 SRC=CHANGELOG inc conf utils index.php languages views op out controllers doc styles TODO LICENSE webdav install restapi pdfviewer # webapp diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index 3a8100ab3..df9161db3 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -376,7 +376,7 @@ class SeedDMS_Core_DMS { $this->callbacks = array(); $this->version = '@package_version@'; if($this->version[0] == '@') - $this->version = '5.1.7'; + $this->version = '5.1.8'; } /* }}} */ /** diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 4689815b7..3a62fe77e 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -15,8 +15,8 @@ 2018-04-05 - 5.1.7 - 5.1.7 + 5.1.8 + 5.1.8 stable @@ -1580,5 +1580,21 @@ add lots of DocBlocks from merge request #8 add SeedDMS_Core_AttributeDefinition::removeValue() + + 2018-04-05 + + + 5.1.7 + 5.1.7 + + + stable + stable + + GPL License + +just bump version + + diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 447b3bf06..74c53de32 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -20,7 +20,7 @@ class SeedDMS_Version { - public $_number = "5.1.7"; + public $_number = "5.1.8"; private $_string = "SeedDMS"; function __construct() { diff --git a/install/install.php b/install/install.php index fa2fefba1..892cd3941 100644 --- a/install/install.php +++ b/install/install.php @@ -123,7 +123,7 @@ function fileExistsInIncludePath($file) { /* {{{ */ * Load default settings + set */ define("SEEDDMS_INSTALL", "on"); -define("SEEDDMS_VERSION", "5.1.7"); +define("SEEDDMS_VERSION", "5.1.8"); require_once('../inc/inc.ClassSettings.php'); From 801bda35604b7aa625f8fa30f47c9df3abf4a007 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 06:40:29 +0200 Subject: [PATCH 038/356] fix typo --- CHANGELOG | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index fd5f3335c..87088f07f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -16,7 +16,7 @@ - add hook showVersionComment in out.ViewDocument.php - Various minor corrections of database tables tblWorkflowLog and tblWorkflowDocumentContent -- merge changes up to 5.1.6 +- merge changes up to 5.1.7 -------------------------------------------------------------------------------- Changes in version 6.0.5 From 2e647fb4eceba0e539700d4425bdc33fa17129e0 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 08:13:06 +0200 Subject: [PATCH 039/356] fix update of tblWorkflowLog foreign key must be removed before droping field --- install/update-6.0.0/update.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install/update-6.0.0/update.sql b/install/update-6.0.0/update.sql index 54bfe3430..e4ce97ffc 100644 --- a/install/update-6.0.0/update.sql +++ b/install/update-6.0.0/update.sql @@ -24,10 +24,14 @@ ALTER TABLE `tblWorkflowDocumentContent` ADD CONSTRAINT `tblWorkflowDocumentCont ALTER TABLE `tblWorkflowDocumentContent` DROP COLUMN `parentworkflow`; +ALTER TABLE `tblWorkflowLog` DROP FOREIGN KEY `tblWorkflowLog_document`; + ALTER TABLE `tblWorkflowLog` DROP COLUMN `document`; ALTER TABLE `tblWorkflowLog` DROP COLUMN `version`; +ALTER TABLE `tblWorkflowLog` DROP FOREIGN KEY `tblWorkflowLog_workflow`; + ALTER TABLE `tblWorkflowLog` DROP COLUMN `workflow`; CREATE TABLE `tblUserSubstitutes` ( From 97d08ef1b4b9c0212ad19a418a1b6666e9f60027 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 08:31:11 +0200 Subject: [PATCH 040/356] call parent class in class.Bootstrap.php, move imgpath in parent --- inc/inc.ClassViewCommon.php | 32 +++++++++++++++++++---------- views/bootstrap/class.Bootstrap.php | 10 ++++----- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/inc/inc.ClassViewCommon.php b/inc/inc.ClassViewCommon.php index b51645d2a..37ba3d28e 100644 --- a/inc/inc.ClassViewCommon.php +++ b/inc/inc.ClassViewCommon.php @@ -31,12 +31,18 @@ class SeedDMS_View_Common { protected $params; - function __construct($params, $theme='blue') { + protected $baseurl; + + protected $imgpath; + + public function __construct($params, $theme='bootstrap') { $this->theme = $theme; $this->params = $params; + $this->baseurl = ''; + $this->imgpath = '../views/'.$theme.'/images/'; } - function __invoke($get=array()) { + public function __invoke($get=array()) { if(isset($get['action']) && $get['action']) { if(method_exists($this, $get['action'])) { $this->{$get['action']}(); @@ -47,26 +53,30 @@ class SeedDMS_View_Common { $this->show(); } - function setParams($params) { + public function setParams($params) { $this->params = $params; } - function setParam($name, $value) { + public function setParam($name, $value) { $this->params[$name] = $value; } - function getParam($name) { + public function getParam($name) { if(isset($this->params[$name])) return $this->params[$name]; return null; } - function unsetParam($name) { + public function unsetParam($name) { if(isset($this->params[$name])) unset($this->params[$name]); } - function show() { + public function setBaseUrl($baseurl) { + $this->baseurl = $baseurl; + } + + public function show() { } /** @@ -86,7 +96,7 @@ class SeedDMS_View_Common { * @return string concatenated string, merged arrays or whatever the hook * function returns */ - function callHook($hook) { /* {{{ */ + public function callHook($hook) { /* {{{ */ $tmp = explode('_', get_class($this)); $ret = null; if(isset($GLOBALS['SEEDDMS_HOOKS']['view'][lcfirst($tmp[2])])) { @@ -142,7 +152,7 @@ class SeedDMS_View_Common { * @params string $classname name of class (current class if left empty) * @return array list of hook objects registered for the class */ - function getHookObjects($classname='') { /* {{{ */ + public function getHookObjects($classname='') { /* {{{ */ if($classname) $tmp = explode('_', $classname); else @@ -161,7 +171,7 @@ class SeedDMS_View_Common { * true if all hooks succedded, * null if no hook was called */ - function hasHook($hook) { /* {{{ */ + public function hasHook($hook) { /* {{{ */ $tmp = explode('_', get_class($this)); if(isset($GLOBALS['SEEDDMS_HOOKS']['view'][lcfirst($tmp[2])])) { foreach($GLOBALS['SEEDDMS_HOOKS']['view'][lcfirst($tmp[2])] as $hookObj) { @@ -173,7 +183,7 @@ class SeedDMS_View_Common { return false; } /* }}} */ - function jsTranslations($keys) { + public function jsTranslations($keys) { echo "var trans = {\n"; foreach($keys as $key) { echo " '".$key."': '".str_replace("'", "\\\'", getMLText($key))."',\n"; diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 8a79545f8..2b2ec5d91 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -21,8 +21,6 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { - var $imgpath; - /** * @var string $extraheader extra html code inserted in the html header * of the page @@ -32,9 +30,7 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { protected $extraheader; function __construct($params, $theme='bootstrap') { - $this->theme = $theme; - $this->params = $params; - $this->imgpath = '../views/'.$theme.'/images/'; + parent::__construct($params, $theme); $this->extraheader = array('js'=>'', 'css'=>''); $this->footerjs = array(); } @@ -80,7 +76,9 @@ class SeedDMS_Bootstrap_Style extends SeedDMS_View_Common { echo "\n"; echo ''."\n"; if($base) - echo ''."\n"; + echo ''."\n"; + elseif($this->baseurl) + echo ''."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; From fd34d8759538ea66ae3016431bfd75bcd7ec53e4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 09:10:11 +0200 Subject: [PATCH 041/356] add entry for 5.1.8 --- CHANGELOG | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 7215814ab..f5c903ed3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +-------------------------------------------------------------------------------- + Changes in version 5.1.8 +-------------------------------------------------------------------------------- +- fix javascript errors when an error page was shown + -------------------------------------------------------------------------------- Changes in version 5.1.7 -------------------------------------------------------------------------------- From 305a980e44813e2d5c6e61b61a157802d31ee722 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 09:27:58 +0200 Subject: [PATCH 042/356] ??? --- views/bootstrap/class.Bootstrap.php | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 2b2ec5d91..2289526ea 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1351,10 +1351,30 @@ $(document).ready(function() { echo "
      \n"; } /* }}} */ - function exitError($pagetitle, $error, $noexit=false) { /* {{{ */ - $this->htmlStartPage($pagetitle); - $this->globalNavigation(); - $this->contentStart(); + function exitError($pagetitle, $error, $noexit=false, $plain=false) { /* {{{ */ + + /* This is just a hack to prevent creation of js files in an error + * case, because they will contain this error page again. It would be much + * better, if there was extra error() function similar to show() and calling + * $view() after setting the action to 'error'. This would also allow to + * set separate error pages for each view. + */ + if(!$noexit) { + if(in_array($_REQUEST['action'], array('js', 'footerjs'))) { + exit; + } + + if($_REQUEST['action'] == 'webrootjs') { + $this->webrootjs(); + exit; + } + } + + if(!$plain) { + $this->htmlStartPage($pagetitle); + $this->globalNavigation(); + $this->contentStart(); + } print "
      "; print "

      ".getMLText('error')."!

      "; From 9ea9289fdfe8d8ca70eb827f1d10a3466b5acc78 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 09:32:16 +0200 Subject: [PATCH 043/356] fix editing of document attachments --- CHANGELOG | 6 ++++++ out/out.EditDocumentFile.php | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 70d90e774..1fe1294a5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +-------------------------------------------------------------------------------- + Changes in version 6.0.7 +-------------------------------------------------------------------------------- +- fix editing of document attachments +- merge changes up to 5.1.7 + -------------------------------------------------------------------------------- Changes in version 6.0.6 -------------------------------------------------------------------------------- diff --git a/out/out.EditDocumentFile.php b/out/out.EditDocumentFile.php index baab461d9..0ffc8c82e 100644 --- a/out/out.EditDocumentFile.php +++ b/out/out.EditDocumentFile.php @@ -30,7 +30,7 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); -$accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); +$accessop = new SeedDMS_AccessOperation($dms, $user, $settings); if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); From d97ef62ff176db7a828a4378312e73f619caf52c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 09:45:08 +0200 Subject: [PATCH 044/356] make user action is set in exitError() --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index 2289526ea..ed3c7a620 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1359,7 +1359,7 @@ $(document).ready(function() { * $view() after setting the action to 'error'. This would also allow to * set separate error pages for each view. */ - if(!$noexit) { + if(!$noexit && isset($_REQUEST['action'])) { if(in_array($_REQUEST['action'], array('js', 'footerjs'))) { exit; } From bfc59dc90c1beed1e05866bef41db5c885125ae7 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 16:34:01 +0200 Subject: [PATCH 045/356] use ErrorDlg view for error messages this will also fix the js errors when the error page was shown --- inc/inc.ClassUI.php | 13 +++++++---- op/op.Login.php | 3 +-- out/out.Calendar.php | 2 +- out/out.Timeline.php | 2 +- out/out.ViewDocument.php | 8 +++---- out/out.ViewFolder.php | 2 +- views/bootstrap/class.Bootstrap.php | 34 ++++++++++++++++++++++++++++- views/bootstrap/class.ErrorDlg.php | 23 +++++++++++++++++++ 8 files changed, 73 insertions(+), 14 deletions(-) diff --git a/inc/inc.ClassUI.php b/inc/inc.ClassUI.php index a06f120bb..41f606fe1 100644 --- a/inc/inc.ClassUI.php +++ b/inc/inc.ClassUI.php @@ -136,12 +136,17 @@ class UI extends UI_Default { return $themes; } /* }}} */ - static function exitError($pagetitle, $error) { + static function exitError($pagetitle, $error, $noexit=false, $plain=false) { global $theme, $dms; - $tmp = 'ErrorDlg'; - $view = UI::factory($theme, $tmp); + $view = UI::factory($theme, 'ErrorDlg'); $view->setParam('dms', $dms); - $view->exitError($pagetitle, $error); + $view->setParam('pagetitle', $pagetitle); + $view->setParam('errormsg', $error); + $view->setParam('plain', $plain); + $view(); + if($noexit) + return; + exit; } } diff --git a/op/op.Login.php b/op/op.Login.php index b558e8af9..bf7603656 100644 --- a/op/op.Login.php +++ b/op/op.Login.php @@ -33,8 +33,7 @@ include $settings->_rootDir . "languages/" . $settings->_language . "/lang.inc"; function _printMessage($heading, $message) { /* {{{ */ global $dms, $theme; - $view = UI::factory($theme, 'Login', array('dms'=>$dms)); - $view->exitError($heading, $message, true); + UI::exitError($heading, $message, true); return; } /* }}} */ diff --git a/out/out.Calendar.php b/out/out.Calendar.php index 9ada3263b..fbc9e96c8 100644 --- a/out/out.Calendar.php +++ b/out/out.Calendar.php @@ -38,7 +38,7 @@ else $end = ''; if(isset($_GET['documentid']) && $_GET['documentid'] && is_numeric($_GET['documentid'])) { $document = $dms->getDocument($_GET["documentid"]); if (!is_object($document)) { - $view->exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } } else $document = null; diff --git a/out/out.Timeline.php b/out/out.Timeline.php index 798be2079..17b5412ab 100644 --- a/out/out.Timeline.php +++ b/out/out.Timeline.php @@ -30,7 +30,7 @@ include("../inc/inc.Authentication.php"); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if (!$user->isAdmin()) { - $view->exitError(getMLText("admin_tools"),getMLText("access_denied")); + UI::exitError(getMLText("admin_tools"),getMLText("access_denied")); } $rootfolder = $dms->getFolder($settings->_rootFolderID); diff --git a/out/out.ViewDocument.php b/out/out.ViewDocument.php index a05b1c391..1fd66e748 100644 --- a/out/out.ViewDocument.php +++ b/out/out.ViewDocument.php @@ -34,24 +34,24 @@ $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user)); if (!isset($_GET["documentid"]) || !is_numeric($_GET["documentid"]) || intval($_GET["documentid"])<1) { - $view->exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $document = $dms->getDocument($_GET["documentid"]); if (!is_object($document)) { - $view->exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); + UI::exitError(getMLText("document_title", array("documentname" => getMLText("invalid_doc_id"))),getMLText("invalid_doc_id")); } $accessop = new SeedDMS_AccessOperation($dms, $document, $user, $settings); $folder = $document->getFolder(); if ($document->getAccessMode($user) < M_READ || !$document->getLatestContent()) { - $view->exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } /* Could be that the advanced access rights prohibit access on the content */ if (!$document->getLatestContent()) { - $view->exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); + UI::exitError(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))),getMLText("access_denied")); } /* Recalculate the status of a document and reload the page if the status diff --git a/out/out.ViewFolder.php b/out/out.ViewFolder.php index 18916c729..021e418ba 100644 --- a/out/out.ViewFolder.php +++ b/out/out.ViewFolder.php @@ -41,7 +41,7 @@ else { $folder = $dms->getFolder($folderid); if (!is_object($folder)) { - UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))),getMLText("invalid_folder_id")); + UI::exitError(getMLText("folder_title", array("foldername" => getMLText("invalid_folder_id"))), getMLText("invalid_folder_id")); } if (isset($_GET["orderby"]) && strlen($_GET["orderby"])==1 ) { diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index ed3c7a620..ceaa80103 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -1351,7 +1351,7 @@ $(document).ready(function() { echo "
      \n"; } /* }}} */ - function exitError($pagetitle, $error, $noexit=false, $plain=false) { /* {{{ */ + function ___exitError($pagetitle, $error, $noexit=false, $plain=false) { /* {{{ */ /* This is just a hack to prevent creation of js files in an error * case, because they will contain this error page again. It would be much @@ -2445,6 +2445,38 @@ mayscript> parent::show(); } /* }}} */ + function error(){ /* {{{ */ + parent::error(); + $dms = $this->params['dms']; + $user = $this->params['user']; + $pagetitle = $this->params['pagetitle']; + $errormsg = $this->params['errormsg']; + $plain = $this->params['plain']; + $noexit = $this->params['noexit']; + + if(!$plain) { + $this->htmlStartPage($pagetitle); + $this->globalNavigation(); + $this->contentStart(); + } + + print "
      "; + print "

      ".getMLText('error')."!

      "; + print htmlspecialchars($errormsg); + print "
      "; + print "
      "; + + $this->contentEnd(); + $this->htmlEndPage(); + + add_log_line(" UI::exitError error=".$errormsg." pagetitle=".$pagetitle, PEAR_LOG_ERR); + + if($noexit) + return; + + exit; + } /* }}} */ + /** * Return HTML Template for jumploader * diff --git a/views/bootstrap/class.ErrorDlg.php b/views/bootstrap/class.ErrorDlg.php index beb0d4bec..10873999e 100644 --- a/views/bootstrap/class.ErrorDlg.php +++ b/views/bootstrap/class.ErrorDlg.php @@ -32,7 +32,30 @@ require_once("class.Bootstrap.php"); class SeedDMS_View_ErrorDlg extends SeedDMS_Bootstrap_Style { function show() { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $pagetitle = $this->params['pagetitle']; + $errormsg = $this->params['errormsg']; + $plain = $this->params['plain']; + if(!$plain) { + $this->htmlStartPage($pagetitle); + $this->globalNavigation(); + $this->contentStart(); + } + + print "
      "; + print "

      ".getMLText('error')."!

      "; + print htmlspecialchars($errormsg); + print "
      "; + print "
      "; + + $this->contentEnd(); + $this->htmlEndPage(); + + add_log_line(" UI::exitError error=".$errormsg." pagetitle=".$pagetitle, PEAR_LOG_ERR); + + return; } /* }}} */ } ?> From ea99276a9cb0c7004fcc63bc52e32ee2810adc3b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 6 Apr 2018 16:36:09 +0200 Subject: [PATCH 046/356] 2FA will come in 6.0.x --- op/op.Login.php | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/op/op.Login.php b/op/op.Login.php index bf7603656..5b11515f7 100644 --- a/op/op.Login.php +++ b/op/op.Login.php @@ -129,17 +129,6 @@ if ($user->isAdmin() && ($_SERVER['REMOTE_ADDR'] != $settings->_adminIP ) && ( $ exit; } -if($settings->_enable2FactorAuthentication) { - if($secret = $user->getSecret()) { - require "vendor/autoload.php"; - $tfa = new \RobThree\Auth\TwoFactorAuth('SeedDMS'); - if($tfa->verifyCode($secret, $_POST['twofactauth']) !== true) { - _printMessage(getMLText("login_error_title"), getMLText("login_error_text")); - exit; - } - } -} - /* Clear login failures if login was successful */ $user->clearLoginFailures(); From 162353b5e04d6255ff7ec9f056e2fcc55179c7ab Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 10 Apr 2018 19:13:57 +0200 Subject: [PATCH 047/356] increase timeout of noty error --- views/bootstrap/class.Indexer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index 9c850df45..2ef1c4bee 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -82,11 +82,11 @@ function check_queue() { $('#status_'+data.data).html(''); noty({ text: data.message, - type: (data.success) ? 'success' : 'error', + type: 'error', dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 25000, }); } }, From 2cc48d491e4e86ba6838d3c60906e674dc2a233a Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 08:39:01 +0200 Subject: [PATCH 048/356] fix output of review/approval log if updating user doesn't exist anymore --- views/bootstrap/class.Bootstrap.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index f24a9fabc..7f388b82c 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -2887,7 +2887,7 @@ $(document).ready(function() { echo ""; echo "".$rec['date']." - "; $updateuser = $dms->getUser($rec["userID"]); - if(!is_object($required)) + if(!is_object($updateuser)) echo getMLText("unknown_user"); else echo htmlspecialchars($updateuser->getFullName()." (".$updateuser->getLogin().")"); From e592d0e3d00f0253de22a6abfd6c9c6e95955e57 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 09:44:45 +0200 Subject: [PATCH 049/356] remove list of documents --- views/bootstrap/class.IndexInfo.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/views/bootstrap/class.IndexInfo.php b/views/bootstrap/class.IndexInfo.php index e7a11dd6c..897306cfc 100644 --- a/views/bootstrap/class.IndexInfo.php +++ b/views/bootstrap/class.IndexInfo.php @@ -46,6 +46,7 @@ class SeedDMS_View_IndexInfo extends SeedDMS_Bootstrap_Style { $numDocs = $index->count(); echo "".$numDocs." ".getMLText('documents').""; + /* $this->contentContainerStart(); for ($id = 0; $id < $numDocs; $id++) { if (!$index->isDeleted($id)) { @@ -54,6 +55,7 @@ class SeedDMS_View_IndexInfo extends SeedDMS_Bootstrap_Style { } } $this->contentContainerEnd(); + */ $terms = $index->terms(); echo "".count($terms)." Terms"; From 5064c24388dbc6201062e2f5b94a99872d5686aa Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 10:20:27 +0200 Subject: [PATCH 050/356] show noty message longer in case of an error --- views/bootstrap/class.Indexer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index 9c850df45..2ef1c4bee 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -82,11 +82,11 @@ function check_queue() { $('#status_'+data.data).html(''); noty({ text: data.message, - type: (data.success) ? 'success' : 'error', + type: 'error', dismissQueue: true, layout: 'topRight', theme: 'defaultTheme', - timeout: 1500, + timeout: 25000, }); } }, From 0d3596d23780bbf1bfbd7ff02f8843ab4b114ec6 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 15:31:35 +0200 Subject: [PATCH 051/356] better error reporting when indexing fails --- SeedDMS_Lucene/Lucene/IndexedDocument.php | 22 ++++++++++++++++ SeedDMS_Lucene/package.xml | 24 +++++++++++++++--- .../SQLiteFTS/IndexedDocument.php | 25 +++++++++++++++++++ SeedDMS_SQLiteFTS/package.xml | 24 +++++++++++++++--- op/op.Ajax.php | 2 +- views/bootstrap/class.Indexer.php | 2 +- 6 files changed, 89 insertions(+), 10 deletions(-) diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index c20acdf9f..237150097 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -29,6 +29,16 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { */ protected $errormsg; + /** + * @var string + */ + protected $mimetype; + + /** + * @var string + */ + protected $cmd; + /** * @param $cmd * @param int $timeout @@ -88,6 +98,8 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { */ public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */ $this->errormsg = ''; + $this->cmd = ''; + $this->mimetype = ''; $_convcmd = array( 'application/pdf' => 'pdftotext -enc UTF-8 -nopgbrk %s - |sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', 'application/postscript' => 'ps2pdf14 %s - | pdftotext -enc UTF-8 -nopgbrk - - | sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', @@ -148,6 +160,7 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { $path = $dms->contentDir . $version->getPath(); $content = ''; $mimetype = $version->getMimeType(); + $this->mimetype = $mimetype; $cmd = ''; $mimeparts = explode('/', $mimetype, 2); if(isset($_convcmd[$mimetype])) { @@ -158,6 +171,7 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { $cmd = sprintf($_convcmd[$mimetype], $path); } if($cmd) { + $this->cmd = $cmd; try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { @@ -175,5 +189,13 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { public function getErrorMsg() { /* {{{ */ return $this->errormsg; } /* }}} */ + + public function getMimeType() { /* {{{ */ + return $this->mimetype; + } /* }}} */ + + public function getCmd() { /* {{{ */ + return $this->cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_Lucene/package.xml b/SeedDMS_Lucene/package.xml index f0dd0f558..4f55862ad 100644 --- a/SeedDMS_Lucene/package.xml +++ b/SeedDMS_Lucene/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2018-01-30 + 2018-04-11 - 1.1.12 - 1.1.12 + 1.1.13 + 1.1.13 stable @@ -23,7 +23,7 @@ GPL License -execWithTimeout() reads data from stderr and saves it into error msg +IndexedDocument() remembers cmd and mimetype @@ -283,5 +283,21 @@ catch exception in execWithTimeout() allow conversion commands for mimetypes with wildcards + + 2018-01-30 + + + 1.1.12 + 1.1.12 + + + stable + stable + + GPL License + +execWithTimeout() reads data from stderr and saves it into error msg + + diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index cf40b4a95..fb87503b8 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -29,8 +29,21 @@ require_once('Document.php'); */ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { + /** + * @var string + */ protected $errormsg; + /** + * @var string + */ + protected $mimetype; + + /** + * @var string + */ + protected $cmd; + static function execWithTimeout($cmd, $timeout=2) { /* {{{ */ $descriptorspec = array( 0 => array("pipe", "r"), @@ -79,6 +92,8 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { */ public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */ $this->errormsg = ''; + $this->cmd = ''; + $this->mimetype = ''; $_convcmd = array( 'application/pdf' => 'pdftotext -enc UTF-8 -nopgbrk %s - |sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', 'application/postscript' => 'ps2pdf14 %s - | pdftotext -enc UTF-8 -nopgbrk - - | sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', @@ -139,6 +154,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $path = $dms->contentDir . $version->getPath(); $content = ''; $mimetype = $version->getMimeType(); + $this->mimetype = $mimetype; $cmd = ''; $mimeparts = explode('/', $mimetype, 2); if(isset($_convcmd[$mimetype])) { @@ -149,6 +165,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $cmd = sprintf($_convcmd[$mimetype], $path); } if($cmd) { + $this->cmd = $cmd; try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { @@ -166,5 +183,13 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { public function getErrorMsg() { /* {{{ */ return $this->errormsg; } /* }}} */ + + public function getMimeType() { /* {{{ */ + return $this->mimetype; + } /* }}} */ + + public function getCmd() { /* {{{ */ + return $this->cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_SQLiteFTS/package.xml b/SeedDMS_SQLiteFTS/package.xml index f83232424..ed2256393 100644 --- a/SeedDMS_SQLiteFTS/package.xml +++ b/SeedDMS_SQLiteFTS/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2018-01-30 + 2018-04-11 - 1.0.9 - 1.0.9 + 1.0.10 + 1.0.10 stable @@ -23,7 +23,7 @@ GPL License -execWithTimeout() reads data from stderr and saves it into error msg +IndexedDocument() remembers cmd and mimetype @@ -210,5 +210,21 @@ catch exception in execWithTimeout() allow conversion commands for mimetypes with wildcards + + 2018-01-30 + + + 1.0.9 + 1.0.9 + + + stable + stable + + GPL License + +execWithTimeout() reads data from stderr and saves it into error msg + + diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 1c4c60ea6..b36aff730 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -881,7 +881,7 @@ switch($command) { echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$document->getID())); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID())); + echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID(), 'mimetype'=>$idoc->getMimeType(), 'cmd'=>$idoc->getCmd())); } } else { header('Content-Type: application/json'); diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index 2ef1c4bee..de392db62 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -81,7 +81,7 @@ function check_queue() { } else { $('#status_'+data.data).html(''); noty({ - text: data.message, + text: '

      Docid: ' + data.data + ' (' + data.mimetype + ')

      ' + '

      Cmd: ' + data.cmd + '

      ' + data.message, type: 'error', dismissQueue: true, layout: 'topRight', From 9fb899a61ad301d6fdf49c01ef4a246606f4a666 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 15:31:35 +0200 Subject: [PATCH 052/356] better error reporting when indexing fails --- SeedDMS_Lucene/Lucene/IndexedDocument.php | 22 ++++++++++++++++ SeedDMS_Lucene/package.xml | 24 +++++++++++++++--- .../SQLiteFTS/IndexedDocument.php | 25 +++++++++++++++++++ SeedDMS_SQLiteFTS/package.xml | 24 +++++++++++++++--- op/op.Ajax.php | 2 +- views/bootstrap/class.Indexer.php | 2 +- 6 files changed, 89 insertions(+), 10 deletions(-) diff --git a/SeedDMS_Lucene/Lucene/IndexedDocument.php b/SeedDMS_Lucene/Lucene/IndexedDocument.php index c20acdf9f..237150097 100644 --- a/SeedDMS_Lucene/Lucene/IndexedDocument.php +++ b/SeedDMS_Lucene/Lucene/IndexedDocument.php @@ -29,6 +29,16 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { */ protected $errormsg; + /** + * @var string + */ + protected $mimetype; + + /** + * @var string + */ + protected $cmd; + /** * @param $cmd * @param int $timeout @@ -88,6 +98,8 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { */ public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */ $this->errormsg = ''; + $this->cmd = ''; + $this->mimetype = ''; $_convcmd = array( 'application/pdf' => 'pdftotext -enc UTF-8 -nopgbrk %s - |sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', 'application/postscript' => 'ps2pdf14 %s - | pdftotext -enc UTF-8 -nopgbrk - - | sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', @@ -148,6 +160,7 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { $path = $dms->contentDir . $version->getPath(); $content = ''; $mimetype = $version->getMimeType(); + $this->mimetype = $mimetype; $cmd = ''; $mimeparts = explode('/', $mimetype, 2); if(isset($_convcmd[$mimetype])) { @@ -158,6 +171,7 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { $cmd = sprintf($_convcmd[$mimetype], $path); } if($cmd) { + $this->cmd = $cmd; try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { @@ -175,5 +189,13 @@ class SeedDMS_Lucene_IndexedDocument extends Zend_Search_Lucene_Document { public function getErrorMsg() { /* {{{ */ return $this->errormsg; } /* }}} */ + + public function getMimeType() { /* {{{ */ + return $this->mimetype; + } /* }}} */ + + public function getCmd() { /* {{{ */ + return $this->cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_Lucene/package.xml b/SeedDMS_Lucene/package.xml index f0dd0f558..4f55862ad 100644 --- a/SeedDMS_Lucene/package.xml +++ b/SeedDMS_Lucene/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2018-01-30 + 2018-04-11 - 1.1.12 - 1.1.12 + 1.1.13 + 1.1.13 stable @@ -23,7 +23,7 @@ GPL License -execWithTimeout() reads data from stderr and saves it into error msg +IndexedDocument() remembers cmd and mimetype @@ -283,5 +283,21 @@ catch exception in execWithTimeout() allow conversion commands for mimetypes with wildcards + + 2018-01-30 + + + 1.1.12 + 1.1.12 + + + stable + stable + + GPL License + +execWithTimeout() reads data from stderr and saves it into error msg + + diff --git a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php index cf40b4a95..fb87503b8 100644 --- a/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php +++ b/SeedDMS_SQLiteFTS/SQLiteFTS/IndexedDocument.php @@ -29,8 +29,21 @@ require_once('Document.php'); */ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { + /** + * @var string + */ protected $errormsg; + /** + * @var string + */ + protected $mimetype; + + /** + * @var string + */ + protected $cmd; + static function execWithTimeout($cmd, $timeout=2) { /* {{{ */ $descriptorspec = array( 0 => array("pipe", "r"), @@ -79,6 +92,8 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { */ public function __construct($dms, $document, $convcmd=null, $nocontent=false, $timeout=5) { /* {{{ */ $this->errormsg = ''; + $this->cmd = ''; + $this->mimetype = ''; $_convcmd = array( 'application/pdf' => 'pdftotext -enc UTF-8 -nopgbrk %s - |sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', 'application/postscript' => 'ps2pdf14 %s - | pdftotext -enc UTF-8 -nopgbrk - - | sed -e \'s/ [a-zA-Z0-9.]\{1\} / /g\' -e \'s/[0-9.]//g\'', @@ -139,6 +154,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $path = $dms->contentDir . $version->getPath(); $content = ''; $mimetype = $version->getMimeType(); + $this->mimetype = $mimetype; $cmd = ''; $mimeparts = explode('/', $mimetype, 2); if(isset($_convcmd[$mimetype])) { @@ -149,6 +165,7 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { $cmd = sprintf($_convcmd[$mimetype], $path); } if($cmd) { + $this->cmd = $cmd; try { $content = self::execWithTimeout($cmd, $timeout); if($content['stdout']) { @@ -166,5 +183,13 @@ class SeedDMS_SQLiteFTS_IndexedDocument extends SeedDMS_SQLiteFTS_Document { public function getErrorMsg() { /* {{{ */ return $this->errormsg; } /* }}} */ + + public function getMimeType() { /* {{{ */ + return $this->mimetype; + } /* }}} */ + + public function getCmd() { /* {{{ */ + return $this->cmd; + } /* }}} */ } ?> diff --git a/SeedDMS_SQLiteFTS/package.xml b/SeedDMS_SQLiteFTS/package.xml index f83232424..ed2256393 100644 --- a/SeedDMS_SQLiteFTS/package.xml +++ b/SeedDMS_SQLiteFTS/package.xml @@ -11,11 +11,11 @@ uwe@steinmann.cx yes - 2018-01-30 + 2018-04-11 - 1.0.9 - 1.0.9 + 1.0.10 + 1.0.10 stable @@ -23,7 +23,7 @@ GPL License -execWithTimeout() reads data from stderr and saves it into error msg +IndexedDocument() remembers cmd and mimetype @@ -210,5 +210,21 @@ catch exception in execWithTimeout() allow conversion commands for mimetypes with wildcards + + 2018-01-30 + + + 1.0.9 + 1.0.9 + + + stable + stable + + GPL License + +execWithTimeout() reads data from stderr and saves it into error msg + + diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 0fa50486a..24cfccf3b 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -805,7 +805,7 @@ switch($command) { echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$document->getID())); } else { header('Content-Type: application/json'); - echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID())); + echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID(), 'mimetype'=>$idoc->getMimeType(), 'cmd'=>$idoc->getCmd())); } } else { header('Content-Type: application/json'); diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index 2ef1c4bee..de392db62 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -81,7 +81,7 @@ function check_queue() { } else { $('#status_'+data.data).html(''); noty({ - text: data.message, + text: '

      Docid: ' + data.data + ' (' + data.mimetype + ')

      ' + '

      Cmd: ' + data.cmd + '

      ' + data.message, type: 'error', dismissQueue: true, layout: 'topRight', From 5571fc43852800744548cac85a006ad3a43fd291 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 16:35:26 +0200 Subject: [PATCH 053/356] add note when document content was not indexed --- op/op.Ajax.php | 7 +++++-- views/bootstrap/class.Indexer.php | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/op/op.Ajax.php b/op/op.Ajax.php index 24cfccf3b..b9092b8c0 100644 --- a/op/op.Ajax.php +++ b/op/op.Ajax.php @@ -800,9 +800,12 @@ switch($command) { } } } - $index->addDocument($idoc); header('Content-Type: application/json'); - echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$document->getID())); + if(false === $index->addDocument($idoc)) { + echo json_encode(array('success'=>false, 'message'=>getMLText('error_document_indexed'), 'data'=>$document->getID())); + } else { + echo json_encode(array('success'=>true, 'message'=>getMLText('splash_document_indexed'), 'data'=>$document->getID(), 'cmd'=>$idoc->getCmd())); + } } else { header('Content-Type: application/json'); echo json_encode(array('success'=>false, 'message'=>$error, 'data'=>$document->getID(), 'mimetype'=>$idoc->getMimeType(), 'cmd'=>$idoc->getCmd())); diff --git a/views/bootstrap/class.Indexer.php b/views/bootstrap/class.Indexer.php index de392db62..31a2a62da 100644 --- a/views/bootstrap/class.Indexer.php +++ b/views/bootstrap/class.Indexer.php @@ -77,7 +77,10 @@ function check_queue() { success: function(data) { // console.log('success ' + data.data); if(data.success) { - $('#status_'+data.data).html(''); + if(data.cmd) + $('#status_'+data.data).html(''); + else + $('#status_'+data.data).html(''); } else { $('#status_'+data.data).html(''); noty({ From f2694d67df7440ccd39238a2efc37aaf2fd4c010 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 16:37:08 +0200 Subject: [PATCH 054/356] various updates --- languages/ar_EG/lang.inc | 1 + languages/bg_BG/lang.inc | 1 + languages/ca_ES/lang.inc | 1 + languages/cs_CZ/lang.inc | 1 + languages/de_DE/lang.inc | 3 ++- languages/el_GR/lang.inc | 1 + languages/en_GB/lang.inc | 3 ++- languages/es_ES/lang.inc | 19 ++++++++++--------- languages/fr_FR/lang.inc | 31 ++++++++++++++++--------------- languages/hr_HR/lang.inc | 1 + languages/hu_HU/lang.inc | 29 +++++++++++++++-------------- languages/it_IT/lang.inc | 27 ++++++++++++++------------- languages/ko_KR/lang.inc | 1 + languages/nl_NL/lang.inc | 1 + languages/pl_PL/lang.inc | 13 +++++++------ languages/pt_BR/lang.inc | 21 +++++++++++---------- languages/ro_RO/lang.inc | 1 + languages/ru_RU/lang.inc | 1 + languages/sk_SK/lang.inc | 1 + languages/sv_SE/lang.inc | 1 + languages/tr_TR/lang.inc | 17 +++++++++-------- languages/uk_UA/lang.inc | 7 ++++--- languages/zh_CN/lang.inc | 1 + languages/zh_TW/lang.inc | 1 + 24 files changed, 104 insertions(+), 80 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 1fdefcb1a..43e3bbbb3 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -614,6 +614,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'ﻒﻫﺮﺳﺓ ﺎﻠﻤﺠﻟﺩ', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'افراد', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 347e291af..0b8428b30 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -543,6 +543,7 @@ $text = array( 'index_done' => '', 'index_error' => '', 'index_folder' => 'Индекс на директорията', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Личности', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index afd5ebac0..ae3b1abfe 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -548,6 +548,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Carpeta d\'índex', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Individuals', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index 1db96b7d8..f48a8b46f 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -621,6 +621,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Složka indexu', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Jednotlivci', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index 7fd1db0b0..ae6b77948 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2620), dgrutsch (22) +// Translators: Admin (2621), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -651,6 +651,7 @@ URL: [url]', 'index_done' => 'Fertig', 'index_error' => 'Fehler', 'index_folder' => 'Indiziere Ordner', +'index_no_content' => 'Inhalt nicht indiziert', 'index_pending' => 'Vorgemerkt', 'index_waiting' => 'Warte', 'individuals' => 'Einzelpersonen', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index c4200008b..a7fdc3e7c 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -543,6 +543,7 @@ $text = array( 'index_done' => '', 'index_error' => '', 'index_folder' => 'Ταξινόμηση φακέλου', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Άτομα', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index ee2b9f96e..ba06e9408 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1738), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1739), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -652,6 +652,7 @@ URL: [url]', 'index_done' => 'Done', 'index_error' => 'Error', 'index_folder' => 'Index folder', +'index_no_content' => 'Did not index content', 'index_pending' => 'Pending', 'index_waiting' => 'Waiting', 'individuals' => 'Individuals', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 50bc4388a..d19ea21fe 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (1058), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (1066), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -513,13 +513,13 @@ URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Fecha de caducidad modificada', 'export' => '', 'extension_archive' => '', -'extension_changelog' => '', -'extension_loading' => '', +'extension_changelog' => 'Log de Cambios', +'extension_loading' => 'Cargando extensiones', 'extension_manager' => 'Administrar extensiones', -'extension_mgr_installed' => '', -'extension_mgr_no_upload' => '', -'extension_mgr_repository' => '', -'extension_version_list' => '', +'extension_mgr_installed' => 'Instalada', +'extension_mgr_no_upload' => 'No es posible cargar mas extensiones porque el directorio de extensiones no se puede escribir', +'extension_mgr_repository' => 'Disponible', +'extension_version_list' => 'Versiones', 'february' => 'Febrero', 'file' => 'Fichero', 'files' => 'Ficheros', @@ -570,7 +570,7 @@ Usuario: [username] URL: [url]', 'folder_renamed_email_subject' => '[sitename]: [name] - Carpeta renombrada', 'folder_title' => 'Carpeta \'[foldername]\'', -'force_update' => '', +'force_update' => 'Actualizar', 'friday' => 'Viernes', 'friday_abbr' => 'V', 'from' => 'Desde', @@ -621,6 +621,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Índice de carpetas', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => 'Esperando', 'individuals' => 'Individuales', @@ -1478,7 +1479,7 @@ URL: [url]', 'set_password' => 'Establecer contraseña', 'set_workflow' => 'Establecer Flujo de Trabajo', 'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_version_list' => 'Lista corta de versiones', 'signed_in_as' => 'Conectado como', 'sign_in' => 'Conectar', 'sign_out' => 'Salir', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index 1f1875e13..e90a53071 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1083), jeromerobert (50), lonnnew (9), Oudiceval (675) +// Translators: Admin (1085), jeromerobert (50), lonnnew (9), Oudiceval (687) $text = array( '2_factor_auth' => 'Authentification forte', @@ -280,20 +280,20 @@ URL: [url]', 'confirm_move_folder' => 'Veuillez confirmer le déplacement du dossier.', 'confirm_pwd' => 'Confirmer le mot de passe', 'confirm_rm_attr_value' => 'Voulez-vous vraiment supprimer la valeur d’attribut ?', -'confirm_rm_backup' => 'Voulez-vous vraiment supprimer le fichier "[arkname]"?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_document' => 'Voulez-vous réellement supprimer le document \'[documentname]\'?
      Attention : cette action ne peut être annulée.', -'confirm_rm_dump' => 'Voulez-vous vraiment supprimer le fichier "[dumpname]"?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_event' => 'Voulez-vous vraiment supprimer l\'événement "[name]"?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_file' => 'Voulez-vous vraiment supprimer le fichier "[name]" du document "[documentname]"?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_folder' => 'Voulez-vous réellement supprimer \'[foldername]\' et son contenu ?
      Attention : cette action ne peut être annulée.', -'confirm_rm_folder_files' => 'Voulez-vous vraiment supprimer tous les fichiers du dossier "[foldername]" et ses sous-dossiers?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_group' => 'Voulez-vous vraiment supprimer le groupe "[groupname]"?
      Attention: Cette action ne peut pas être annulée.', -'confirm_rm_log' => 'Voulez-vous vraiment supprimer le fichier log "[logname]"?
      Attention: Cette action ne peut pas être annulée.', +'confirm_rm_backup' => 'Voulez-vous vraiment supprimer le fichier « [arkname] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_document' => 'Voulez-vous vraiment supprimer le document « [documentname] » ?
      Attention : cette action est irréversible.', +'confirm_rm_dump' => 'Voulez-vous vraiment supprimer le fichier « [dumpname] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_event' => 'Voulez-vous vraiment supprimer l’événement « [name] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_file' => 'Voulez-vous vraiment supprimer le fichier « [name] » du document « [documentname] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_folder' => 'Voulez-vous vraiment supprimer « [foldername] » et son contenu ?
      Attention : Cette action est irréversible.', +'confirm_rm_folder_files' => 'Voulez-vous vraiment supprimer tous les fichiers du dossier « [foldername] » et ses sous-dossiers ?
      Attention : Cette action est irréversible.', +'confirm_rm_group' => 'Voulez-vous vraiment supprimer le groupe « [groupname] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_log' => 'Voulez-vous vraiment supprimer le fichier journal « [logname] » ?
      Attention : Cette action est irréversible.', 'confirm_rm_transmittal' => 'Veuillez confirmer la suppression de la transmission.', 'confirm_rm_transmittalitem' => 'Confirmer la suppression', -'confirm_rm_user' => 'Voulez-vous vraiment supprimer l\'utilisateur "[username]"?
      Attention: Cette action ne peut pas être annulée.', +'confirm_rm_user' => 'Voulez-vous vraiment supprimer l’utilisateur « [username] » ?
      Attention : Cette action est irréversible.', 'confirm_rm_user_from_processes' => 'Voulez-vous vraiment retirer l’utilisateur « [username] » de tous les processus ?
      Attention : Cette action peut entrainer la publication des documents si l’utilisateur était le seul (ou dernier) approbateur.', -'confirm_rm_version' => 'Voulez-vous réellement supprimer la version [version] du document « [documentname] » ?
      Attention : Cette action est irréversible.', +'confirm_rm_version' => 'Voulez-vous vraiment supprimer la version [version] du document « [documentname] » ?
      Attention : Cette action est irréversible.', 'confirm_transfer_objects' => 'Voulez-vous vraiment transférer les documents, dossiers, etc. de l’utilisateur « [username] » ?
      Attention : Cette action est irréversible.', 'confirm_update_transmittalitem' => 'Confirmer la mise à jour', 'content' => 'Contenu', @@ -652,6 +652,7 @@ URL: [url]', 'index_done' => 'Terminé', 'index_error' => 'Erreur', 'index_folder' => 'Dossier Index', +'index_no_content' => '', 'index_pending' => 'En attente', 'index_waiting' => 'Chargement…', 'individuals' => 'Individuels', @@ -696,7 +697,7 @@ URL: [url]', 'js_invalid_email' => 'L\'adresse e-mail est invalide', 'js_no_approval_group' => 'Veuillez sélectionner un groupe d’approbation', 'js_no_approval_status' => 'Veuillez sélectionner le statut d’approbation', -'js_no_comment' => 'Il n\'y a pas de commentaires', +'js_no_comment' => 'Il n’y a pas de commentaire', 'js_no_currentpwd' => 'Veuillez entrer votre mot de passe actuel', 'js_no_email' => 'Saisissez votre adresse e-mail', 'js_no_file' => 'Veuillez sélectionner un fichier', @@ -1446,8 +1447,8 @@ Nom : [username] 'settings_quota_desc' => 'Espace maximum (en octets) qu’un utilisateur peut occuper sur le disque. Définir à 0 pour un espace illimité. Une valeur spécifique peut être définie par utilisateur depuis son profil.', 'settings_removeFromDropFolder' => 'Supprimer le fichier du dossier de dépôt après un chargement réussi', 'settings_removeFromDropFolder_desc' => 'Activez ceci si un fichier pris du dossier de dépôt doit être supprimé après un upload réussi.', -'settings_repositoryUrl' => '', -'settings_repositoryUrl_desc' => '', +'settings_repositoryUrl' => 'URL du référentiel', +'settings_repositoryUrl_desc' => 'URL du référentiel pour les extensions', 'settings_restricted' => 'Accès restreint', 'settings_restricted_desc' => 'Autoriser les utilisateurs à se connecter seulement s\'ils ont une entrée dans la BD locale (independamment d\'une authentification réussie avec LDAP)', 'settings_rootDir' => 'Répertoire racine', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 9ce305e38..94e5b2184 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -626,6 +626,7 @@ Internet poveznica: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Mapa indeksa', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Pojedinci', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index d9effaefa..b371d52e5 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -19,10 +19,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (622), ribaz (1023) +// Translators: Admin (622), ribaz (1036) $text = array( -'2_factor_auth' => '', +'2_factor_auth' => 'Kétfaktoros azonosítás', '2_factor_auth_info' => '', '2_fact_auth_secret' => '', 'accept' => 'Elfogad', @@ -70,7 +70,7 @@ URL: [url]', 'add_revision' => '', 'add_role' => 'szerepkör hozzáadása', 'add_subfolder' => 'Alkönyvtár hozzáadása', -'add_task' => '', +'add_task' => 'Feladat hozzáadása', 'add_to_clipboard' => 'Vágólaphoz hozzáad', 'add_to_transmittal' => '', 'add_transmittal' => '', @@ -215,7 +215,7 @@ URL: [url]', 'cannot_retrieve_review_snapshot' => 'Nem lehet lekérdezni a felülvizsgálati állapot pillanatfelvételt erről a dokumentum változatról.', 'cannot_rm_root' => 'Hiba: A gyökér mappa nem törölhető.', 'categories' => 'Kategóriák', -'categories_loading' => '', +'categories_loading' => 'kategóriák betöltése', 'category' => 'Kategória', 'category_exists' => 'Kategória már létezik', 'category_filter' => 'Kizárólag kategóriák', @@ -261,7 +261,7 @@ URL: [url]', 'class_name' => '', 'clear_cache' => 'Gyorsítótár törlése', 'clear_clipboard' => 'Vágólap törlése', -'clear_password' => '', +'clear_password' => 'jelszó törlése', 'clipboard' => 'Vágólap', 'close' => 'Bezár', 'command' => '', @@ -328,7 +328,7 @@ URL: [url]', 'documents_checked_out_by_you' => '', 'documents_expired' => 'Lejárt dokumentumok', 'documents_in_process' => 'Feldolgozás alatt lévő dokumentumok', -'documents_locked' => '', +'documents_locked' => 'dokumentum zárolva', 'documents_locked_by_you' => 'Ön által zárolt dokumentumok', 'documents_only' => 'Csak dokumentumok', 'documents_to_approve' => 'Jóváhagyására váró dokumentumok', @@ -511,7 +511,7 @@ Szülő mappa: [folder_path] Felhasználó: [username] URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Lejárati dátum módosítva', -'export' => '', +'export' => 'exportálás', 'extension_archive' => '', 'extension_changelog' => '', 'extension_loading' => '', @@ -598,7 +598,7 @@ URL: [url]', 'group_review_summary' => 'Csoport felülvizsgálat összefoglaló', 'guest_login' => 'Bejelentkezés vendégként', 'guest_login_disabled' => 'Vendég bejelentkezés letiltva.', -'hash' => '', +'hash' => 'hash', 'help' => 'Segítség', 'home_folder' => '', 'hook_name' => '', @@ -621,6 +621,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Mappa indexelése', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Egyedek', @@ -737,7 +738,7 @@ URL: [url]', 'minutes' => 'perc', 'misc' => 'Vegyes', 'missing_checksum' => 'Hiányzó ellenőrzőösszeg', -'missing_file' => '', +'missing_file' => 'hiányzó állomány', 'missing_filesize' => 'Hiányzó állomány méret', 'missing_reception' => '', 'missing_request_object' => '', @@ -898,7 +899,7 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'preset_expires' => 'Érvényesség beállítása', 'preview' => 'Előnézet', 'preview_converters' => '', -'preview_images' => '', +'preview_images' => 'előnézeti képek', 'preview_markdown' => '', 'preview_pdf' => '', 'preview_plain' => '', @@ -929,7 +930,7 @@ Amennyiben problémákba ütközik a bejelentkezés során, kérjük vegye fel a 'reception_noaction' => '', 'reception_rejected' => '', 'recipients' => '', -'redraw' => '', +'redraw' => 'újrarajzol', 'refresh' => 'Frissítés', 'rejected' => 'Elutasított', 'released' => 'Kiadott', @@ -1053,7 +1054,7 @@ URL: [url]', 'role' => 'Szerepkör', 'role_admin' => 'Adminisztrátor', 'role_guest' => 'Vendég', -'role_info' => '', +'role_info' => 'szerepkör információ', 'role_management' => '', 'role_name' => '', 'role_type' => '', @@ -1120,11 +1121,11 @@ URL: [url]', 'select_users' => 'Kattintson a felhasználó kiválasztásához', 'select_value' => '', 'select_workflow' => 'Munkafolyamat választás', -'send_email' => '', +'send_email' => 'email küldés', 'send_login_data' => '', 'send_login_data_body' => '', 'send_login_data_subject' => '', -'send_test_mail' => '', +'send_test_mail' => 'teszt email küldése', 'september' => 'September', 'sequence' => 'Sorrend', 'seq_after' => '"[prevname]" utßn', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index cdcb35654..01c76f637 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1593), rickr (144), s.pnt (26) +// Translators: Admin (1605), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -627,6 +627,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Indicizza cartella', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => 'Attendi', 'individuals' => 'Singoli', @@ -1174,8 +1175,8 @@ URL: [url]', 'settings_Advanced' => 'Avanzate', 'settings_advancedAcl' => 'Avanzate controlo accesso', 'settings_advancedAcl_desc' => 'Avanzatoa controlo di accesso consente di attivare / diattivare alcuni moduli di software. Non può essere utilizzato per i diritti di accesso su documenti e cartelle.', -'settings_allowReviewerOnly' => '', -'settings_allowReviewerOnly_desc' => '', +'settings_allowReviewerOnly' => 'Abilita l\'impostazione del solo revisore', +'settings_allowReviewerOnly_desc' => 'Abilita se si vuole concedere di impostare solo un revisore ma non un apporvatore nel workflow tradizionale', 'settings_apache_mod_rewrite' => 'Apache - Mod Rewrite', 'settings_Authentication' => 'Impostazioni di Autenticazione', 'settings_autoLoginUser' => 'Login automatico', @@ -1223,8 +1224,8 @@ URL: [url]', 'settings_dbVersion' => 'Schema del database obsoleto', 'settings_defaultAccessDocs' => 'Diritto di accesso per i nuovi documenti', 'settings_defaultAccessDocs_desc' => 'Quando si crea un nuovo documento, questo sarà il diritto di accesso predefinito', -'settings_defaultDocPosition' => '', -'settings_defaultDocPosition_desc' => '', +'settings_defaultDocPosition' => 'Posizione del documento creato', +'settings_defaultDocPosition_desc' => 'Questa è la posizione predefinita all\'interno di una cartella, quando viene creato un documento', 'settings_defaultDocPosition_val_end' => 'fine', 'settings_defaultDocPosition_val_start' => 'inizio', 'settings_defaultSearchMethod' => 'Metodo di ricerca predefinito', @@ -1253,8 +1254,8 @@ URL: [url]', 'settings_enableClipboard_desc' => 'Abilita/disabilita la clipboard sulla pagina \'Vista cartella\'', 'settings_enableConverting' => 'Abilita conversione', 'settings_enableConverting_desc' => 'Abilita/disabilita la conversione dei files', -'settings_enableDropFolderList' => '', -'settings_enableDropFolderList_desc' => '', +'settings_enableDropFolderList' => 'Abilita lista dei file nella cartella di rilasco', +'settings_enableDropFolderList_desc' => 'Abilita la lista dei file nella cartella di rilascio. La lista viene mostrata nel menù principale.', 'settings_enableDropUpload' => 'Abilita upload veloce', 'settings_enableDropUpload_desc' => 'Abilita/disabilita l\'area di rilascio nella pagina \'Vista cartella\' per caricare i files con drag&drop (trascina e rilascia).', 'settings_enableDuplicateDocNames' => 'Permetti documenti con lo stesso nome', @@ -1306,7 +1307,7 @@ URL: [url]', 'settings_enableSelfRevApp' => 'Permetti revisione/approvazione all\'utente registrato', 'settings_enableSelfRevApp_desc' => 'Abilitare se si desidera aggiungere l\'utente attualmente registrato alla lista dei revisori/approvatori e per le transizioni del flusso di lavoro.', 'settings_enableSessionList' => 'Abilita lista utenti online nel menu', -'settings_enableSessionList_desc' => '', +'settings_enableSessionList_desc' => 'Abilita lista degli utenti loggati nel menu', 'settings_enableThemeSelector' => 'Selezione tema grafico', 'settings_enableThemeSelector_desc' => 'Abilita/disabilita il selettore di tema grafico nella finestra di login', 'settings_enableUpdateReceipt' => '', @@ -1426,8 +1427,8 @@ URL: [url]', 'settings_quota_desc' => 'La quantità Max di spazio su disco che può essere occupata da ciascun utente. Impostare il valore 0 offre spazio illimitato.', 'settings_removeFromDropFolder' => 'Rimuovere file dalla cartella di ricezione dopo il successo di posto', 'settings_removeFromDropFolder_desc' => 'Attivare questa, se un file è preso dalla cartella di ricezione, si è cancellata dopo il caricamento di successo.', -'settings_repositoryUrl' => '', -'settings_repositoryUrl_desc' => '', +'settings_repositoryUrl' => 'URL del repository', +'settings_repositoryUrl_desc' => 'URL del repository per le estensioni', 'settings_restricted' => 'Accesso limitato', 'settings_restricted_desc' => 'Permette agli utenti di entrare nel sistema soltanto se hanno un record nel database locale (ignora l\'autenticazione positiva attraverso LDAP)', 'settings_rootDir' => 'Cartella principale', @@ -1669,11 +1670,11 @@ URL: [url]', 'toggle_qrcode' => 'Mostri / nascondi codice QR', 'to_before_from' => 'La data di fine non può essere antecedente a quella di inizio', 'transfer_document' => 'Trasferisci Documento', -'transfer_no_read_access' => '', -'transfer_no_write_access' => '', +'transfer_no_read_access' => 'L`utente non ha i permessi in lettura per la cartella', +'transfer_no_write_access' => 'L`utente non ha i permessi in scrittura per la cartella', 'transfer_objects' => '', 'transfer_objects_to_user' => '', -'transfer_to_user' => '', +'transfer_to_user' => 'Trasferisci all`utente', 'transition_triggered_email' => 'Inizio transizione del flusso di lavoro', 'transition_triggered_email_body' => 'Transizione del flusso di lavoro iniziata Documento: [name] diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 68e5b0801..883b8ebc1 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -627,6 +627,7 @@ URL: [url]', 'index_done' => '마침', 'index_error' => '오류', 'index_folder' => '인덱스 폴더', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '기다리는 중', 'individuals' => '개인', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index f6678d7a6..bcb880b14 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -626,6 +626,7 @@ URL: [url]', 'index_done' => 'Indexering gereed', 'index_error' => 'Fout bij indexering', 'index_folder' => 'Inhoud', +'index_no_content' => '', 'index_pending' => 'Indexering moet nog gebeuren', 'index_waiting' => 'Indexering wacht', 'individuals' => 'Individuen', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 87694c2c5..2a9e4cf5a 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (791), netixw (84), romi (93), uGn (112) +// Translators: Admin (796), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', @@ -614,8 +614,9 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Indeksuj folder', +'index_no_content' => '', 'index_pending' => '', -'index_waiting' => '', +'index_waiting' => 'Oczekiwanie', 'individuals' => 'Indywidualni', 'indivіduals_in_groups' => '', 'info_recipients_tab_not_released' => '', @@ -879,7 +880,7 @@ Jeśli nadal będą problemy z zalogowaniem, prosimy o kontakt z administratorem 'password_strength' => 'Siła hasła', 'password_strength_insuffient' => 'Niewystarczająca siła hasła', 'password_wrong' => 'Złe hasło', -'pdf_converters' => '', +'pdf_converters' => 'Konwertery PDF', 'pending_approvals' => '', 'pending_receipt' => '', 'pending_reviews' => '', @@ -1171,9 +1172,9 @@ URL: [url]', 'settings_defaultAccessDocs_desc' => '', 'settings_defaultDocPosition' => '', 'settings_defaultDocPosition_desc' => '', -'settings_defaultDocPosition_val_end' => '', -'settings_defaultDocPosition_val_start' => '', -'settings_defaultSearchMethod' => '', +'settings_defaultDocPosition_val_end' => 'koniec', +'settings_defaultDocPosition_val_start' => 'początek', +'settings_defaultSearchMethod' => 'Domyślna metoda wyszukiwania', 'settings_defaultSearchMethod_desc' => '', 'settings_defaultSearchMethod_valdatabase' => 'baza danych', 'settings_defaultSearchMethod_valfulltext' => 'pewłnotekstowe', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 955a29f6f..647438f13 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (976), flaviove (627), lfcristofoli (352) +// Translators: Admin (985), flaviove (627), lfcristofoli (352) $text = array( '2_factor_auth' => '', @@ -512,13 +512,13 @@ URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Data de validade mudou', 'export' => '', 'extension_archive' => '', -'extension_changelog' => '', -'extension_loading' => '', +'extension_changelog' => 'Alterações no Log', +'extension_loading' => 'Carregando Extensões', 'extension_manager' => 'Gerenciar extensões', -'extension_mgr_installed' => '', -'extension_mgr_no_upload' => '', -'extension_mgr_repository' => '', -'extension_version_list' => '', +'extension_mgr_installed' => 'Instalado', +'extension_mgr_no_upload' => 'Uploading de novas extensões não esta disponível pois o diretório Extensões recebeu a atribuição de Somente Leitura.', +'extension_mgr_repository' => 'Disponível', +'extension_version_list' => 'Versões', 'february' => 'February', 'file' => 'Arquivo', 'files' => 'Arquivos', @@ -569,7 +569,7 @@ Usuário: [username] URL: [url]', 'folder_renamed_email_subject' => '[sitename]: [name] - Pasta renomeada', 'folder_title' => 'Pasta [foldername]', -'force_update' => '', +'force_update' => 'Atualizar', 'friday' => 'Friday', 'friday_abbr' => 'Fr', 'from' => 'From', @@ -620,8 +620,9 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Pasta Raiz', +'index_no_content' => '', 'index_pending' => '', -'index_waiting' => '', +'index_waiting' => 'Aguarde...', 'individuals' => 'Individuals', 'indivіduals_in_groups' => '', 'info_recipients_tab_not_released' => '', @@ -1475,7 +1476,7 @@ URL: [url]', 'set_password' => 'Definir Senha', 'set_workflow' => 'Definir fluxo de trabalho', 'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_version_list' => 'Exibir Lista de Versões', 'signed_in_as' => 'Logado como', 'sign_in' => 'Entrar', 'sign_out' => 'Sair', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index 0acc0fe25..a5d29fcb3 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -626,6 +626,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Index folder', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Individuals', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index bc43a12f4..c3d234a08 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -626,6 +626,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Полнотекстовый индекс', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => 'Ожидание', 'individuals' => 'Пользователи', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index 9f33a6479..cecdde5fe 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -555,6 +555,7 @@ URL: [url]', 'index_done' => 'Hotovo', 'index_error' => 'Chyba', 'index_folder' => 'Indexovať zložku', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => 'Čakajte', 'individuals' => 'Jednotlivci', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index cc49c83d6..227a4a71f 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -639,6 +639,7 @@ URL: [url]', 'index_done' => 'Klart', 'index_error' => 'Fel', 'index_folder' => 'Indexeringskatalog', +'index_no_content' => '', 'index_pending' => 'Förestående', 'index_waiting' => 'Väntar', 'individuals' => 'Personer', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 2dae950b2..3fc95269e 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1065), aydin (83) +// Translators: Admin (1072), aydin (83) $text = array( '2_factor_auth' => '', @@ -512,13 +512,13 @@ URL: [url]', 'expiry_changed_email_subject' => '[sitename]: [name] - Bitiş tarihi değişti', 'export' => '', 'extension_archive' => '', -'extension_changelog' => '', -'extension_loading' => '', +'extension_changelog' => 'Değişiklik Listesi', +'extension_loading' => 'Uzantı yüklendi', 'extension_manager' => 'Uzantıları düzenle', -'extension_mgr_installed' => '', +'extension_mgr_installed' => 'Yüklendi', 'extension_mgr_no_upload' => '', -'extension_mgr_repository' => '', -'extension_version_list' => '', +'extension_mgr_repository' => 'Mevcut', +'extension_version_list' => 'Veysionlar', 'february' => 'Şubat', 'file' => 'Dosya', 'files' => 'Dosyalar', @@ -569,7 +569,7 @@ Kullanıcı: [username] URL: [url]', 'folder_renamed_email_subject' => '[sitename]: [name] - Klasörün adı değişti', 'folder_title' => 'Klasör \'[foldername]\'', -'force_update' => '', +'force_update' => 'Güncelendi', 'friday' => 'Cuma', 'friday_abbr' => 'Cu', 'from' => 'Kimden', @@ -620,6 +620,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Klasörü indeksle', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => 'Bekliyor', 'individuals' => 'Bireysel', @@ -1479,7 +1480,7 @@ URL: [url]', 'set_password' => 'Parola Belirle', 'set_workflow' => 'İş Akışı Tanımla', 'show_extension_changelog' => '', -'show_extension_version_list' => '', +'show_extension_version_list' => 'Versiyonları görüntüle', 'signed_in_as' => 'Giriş yapan kullanıcı', 'sign_in' => 'Giriş', 'sign_out' => 'Çıkış', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index aca102044..6b9d515de 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1330) +// Translators: Admin (1332) $text = array( '2_factor_auth' => '', @@ -626,6 +626,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => 'Каталог індексу', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '', 'individuals' => 'Користувачі', @@ -706,7 +707,7 @@ URL: [url]', 'linked_to_this_version' => '', 'link_alt_updatedocument' => 'Для завантаження файлів, які перевищують обмеження розміру, використовуйте інший метод.', 'link_to_version' => '', -'list_access_rights' => '', +'list_access_rights' => 'Повний список прав...', 'list_contains_no_access_docs' => '', 'list_hooks' => '', 'list_tasks' => '', @@ -1662,7 +1663,7 @@ URL: [url]', 'transfer_no_write_access' => '', 'transfer_objects' => '', 'transfer_objects_to_user' => '', -'transfer_to_user' => '', +'transfer_to_user' => 'Передати користувачу', 'transition_triggered_email' => 'Змінено стан процесу', 'transition_triggered_email_body' => 'Змінено стан процесу Документ: [name] diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index d1b8c7e79..95d60abef 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -622,6 +622,7 @@ URL: [url]', 'index_done' => '已完成', 'index_error' => '系统错误', 'index_folder' => '索引目录', +'index_no_content' => '', 'index_pending' => '待处理', 'index_waiting' => '', 'individuals' => '个人', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index ab7cd8e71..41a6680d9 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -547,6 +547,7 @@ URL: [url]', 'index_done' => '', 'index_error' => '', 'index_folder' => '索引目錄', +'index_no_content' => '', 'index_pending' => '', 'index_waiting' => '請稍後', 'individuals' => '個人', From e98dc5e4f2e890a58000d5afeb5e30708c940531 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Wed, 11 Apr 2018 17:35:59 +0200 Subject: [PATCH 055/356] removeFromIndex() returns null, otherwise the removeFolder is canceled --- controllers/class.RemoveFolder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controllers/class.RemoveFolder.php b/controllers/class.RemoveFolder.php index 15ee910c8..860fd9b0e 100644 --- a/controllers/class.RemoveFolder.php +++ b/controllers/class.RemoveFolder.php @@ -43,7 +43,7 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common { $result = $this->callHook('removeFolder', $folder); if($result === null) { /* Register a callback which removes each document from the fulltext index - * The callback must return true other the removal will be canceled. + * The callback must return null other the removal will be canceled. */ function removeFromIndex($arr, $document) { $index = $arr[0]; @@ -53,7 +53,7 @@ class SeedDMS_Controller_RemoveFolder extends SeedDMS_Controller_Common { $index->delete($hit->id); $index->commit(); } - return true; + return null; } if($index) $dms->setCallback('onPreRemoveDocument', 'removeFromIndex', array($index, $indexconf)); From dfe2e3f1671cfe161ee18a70e4602547cfe4ae19 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 06:41:51 +0200 Subject: [PATCH 056/356] add new option for configuring replacement of documents in webdav --- conf/settings.xml.template | 3 +++ inc/inc.ClassSettings.php | 13 +++++++++++++ op/op.Settings.php | 3 +++ views/bootstrap/class.Settings.php | 9 +++++++++ 4 files changed, 28 insertions(+) diff --git a/conf/settings.xml.template b/conf/settings.xml.template index ea35e3c2f..452c847fe 100644 --- a/conf/settings.xml.template +++ b/conf/settings.xml.template @@ -71,6 +71,9 @@ calendarDefaultView = "y" firstDayOfWeek = "0" /> + + + "> + : + _enableWebdavReplaceDoc) echo "checked" ?> /> + + From 0b4b3fb9d95229229362e09f83b48d2beb9d2e7e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 06:46:35 +0200 Subject: [PATCH 057/356] check if xml node in configuration exists before accessing it --- inc/inc.ClassSettings.php | 176 +++++++++++++++++++++----------------- 1 file changed, 96 insertions(+), 80 deletions(-) diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index 55b52c6f5..ce15f283d 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -476,51 +476,57 @@ class Settings { /* {{{ */ // XML Path: /configuration/site/calendar $node = $xml->xpath('/configuration/site/calendar'); - $tab = $node[0]->attributes(); - $this->_enableCalendar = Settings::boolVal($tab["enableCalendar"]); - $this->_calendarDefaultView = strval($tab["calendarDefaultView"]); - $this->_firstDayOfWeek = intval($tab["firstDayOfWeek"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_enableCalendar = Settings::boolVal($tab["enableCalendar"]); + $this->_calendarDefaultView = strval($tab["calendarDefaultView"]); + $this->_firstDayOfWeek = intval($tab["firstDayOfWeek"]); + } // XML Path: /configuration/system/server $node = $xml->xpath('/configuration/system/server'); - $tab = $node[0]->attributes(); - $this->_rootDir = strval($tab["rootDir"]); - $this->_httpRoot = strval($tab["httpRoot"]); - $this->_contentDir = strval($tab["contentDir"]); - if($this->_contentDir && substr($this->_contentDir, -1, 1) != DIRECTORY_SEPARATOR) - $this->_contentDir .= DIRECTORY_SEPARATOR; - $this->_cacheDir = strval($tab["cacheDir"]); - $this->_stagingDir = strval($tab["stagingDir"]); - $this->_luceneDir = strval($tab["luceneDir"]); - $this->_dropFolderDir = strval($tab["dropFolderDir"]); - $this->_backupDir = strval($tab["backupDir"]); - $this->_repositoryUrl = strval($tab["repositoryUrl"]); - $this->_logFileEnable = Settings::boolVal($tab["logFileEnable"]); - $this->_logFileRotation = strval($tab["logFileRotation"]); - $this->_enableLargeFileUpload = Settings::boolVal($tab["enableLargeFileUpload"]); - $this->_partitionSize = strval($tab["partitionSize"]); - $this->_maxUploadSize = strval($tab["maxUploadSize"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_rootDir = strval($tab["rootDir"]); + $this->_httpRoot = strval($tab["httpRoot"]); + $this->_contentDir = strval($tab["contentDir"]); + if($this->_contentDir && substr($this->_contentDir, -1, 1) != DIRECTORY_SEPARATOR) + $this->_contentDir .= DIRECTORY_SEPARATOR; + $this->_cacheDir = strval($tab["cacheDir"]); + $this->_stagingDir = strval($tab["stagingDir"]); + $this->_luceneDir = strval($tab["luceneDir"]); + $this->_dropFolderDir = strval($tab["dropFolderDir"]); + $this->_backupDir = strval($tab["backupDir"]); + $this->_repositoryUrl = strval($tab["repositoryUrl"]); + $this->_logFileEnable = Settings::boolVal($tab["logFileEnable"]); + $this->_logFileRotation = strval($tab["logFileRotation"]); + $this->_enableLargeFileUpload = Settings::boolVal($tab["enableLargeFileUpload"]); + $this->_partitionSize = strval($tab["partitionSize"]); + $this->_maxUploadSize = strval($tab["maxUploadSize"]); + } // XML Path: /configuration/system/authentication $node = $xml->xpath('/configuration/system/authentication'); - $tab = $node[0]->attributes(); - $this->_enableGuestLogin = Settings::boolVal($tab["enableGuestLogin"]); - $this->_enableGuestAutoLogin = Settings::boolVal($tab["enableGuestAutoLogin"]); - $this->_enablePasswordForgotten = Settings::boolVal($tab["enablePasswordForgotten"]); - $this->_passwordStrength = intval($tab["passwordStrength"]); - $this->_passwordStrengthAlgorithm = strval($tab["passwordStrengthAlgorithm"]); - $this->_passwordExpiration = intval($tab["passwordExpiration"]); - $this->_passwordHistory = intval($tab["passwordHistory"]); - $this->_loginFailure = intval($tab["loginFailure"]); - $this->_autoLoginUser = intval($tab["autoLoginUser"]); - $this->_quota = intval($tab["quota"]); - $this->_undelUserIds = strval($tab["undelUserIds"]); - $this->_encryptionKey = strval($tab["encryptionKey"]); - $this->_cookieLifetime = intval($tab["cookieLifetime"]); - $this->_defaultAccessDocs = intval($tab["defaultAccessDocs"]); - $this->_restricted = Settings::boolVal($tab["restricted"]); - $this->_enableUserImage = Settings::boolVal($tab["enableUserImage"]); - $this->_disableSelfEdit = Settings::boolVal($tab["disableSelfEdit"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_enableGuestLogin = Settings::boolVal($tab["enableGuestLogin"]); + $this->_enableGuestAutoLogin = Settings::boolVal($tab["enableGuestAutoLogin"]); + $this->_enablePasswordForgotten = Settings::boolVal($tab["enablePasswordForgotten"]); + $this->_passwordStrength = intval($tab["passwordStrength"]); + $this->_passwordStrengthAlgorithm = strval($tab["passwordStrengthAlgorithm"]); + $this->_passwordExpiration = intval($tab["passwordExpiration"]); + $this->_passwordHistory = intval($tab["passwordHistory"]); + $this->_loginFailure = intval($tab["loginFailure"]); + $this->_autoLoginUser = intval($tab["autoLoginUser"]); + $this->_quota = intval($tab["quota"]); + $this->_undelUserIds = strval($tab["undelUserIds"]); + $this->_encryptionKey = strval($tab["encryptionKey"]); + $this->_cookieLifetime = intval($tab["cookieLifetime"]); + $this->_defaultAccessDocs = intval($tab["defaultAccessDocs"]); + $this->_restricted = Settings::boolVal($tab["restricted"]); + $this->_enableUserImage = Settings::boolVal($tab["enableUserImage"]); + $this->_disableSelfEdit = Settings::boolVal($tab["disableSelfEdit"]); + } // XML Path: /configuration/system/authentication/connectors/connector // attributs mandatories : type enable @@ -566,13 +572,15 @@ class Settings { /* {{{ */ // XML Path: /configuration/system/database $node = $xml->xpath('/configuration/system/database'); - $tab = $node[0]->attributes(); - $this->_dbDriver = strval($tab["dbDriver"]); - $this->_dbHostname = strval($tab["dbHostname"]); - $this->_dbDatabase = strval($tab["dbDatabase"]); - $this->_dbUser = strval($tab["dbUser"]); - $this->_dbPass = strval($tab["dbPass"]); - $this->_doNotCheckDBVersion = Settings::boolVal($tab["doNotCheckDBVersion"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_dbDriver = strval($tab["dbDriver"]); + $this->_dbHostname = strval($tab["dbHostname"]); + $this->_dbDatabase = strval($tab["dbDatabase"]); + $this->_dbUser = strval($tab["dbUser"]); + $this->_dbPass = strval($tab["dbPass"]); + $this->_doNotCheckDBVersion = Settings::boolVal($tab["doNotCheckDBVersion"]); + } // XML Path: /configuration/system/smtp $node = $xml->xpath('/configuration/system/smtp'); @@ -601,34 +609,40 @@ class Settings { /* {{{ */ // XML Path: /configuration/advanced/display $node = $xml->xpath('/configuration/advanced/display'); - $tab = $node[0]->attributes(); - $this->_siteDefaultPage = strval($tab["siteDefaultPage"]); - $this->_rootFolderID = intval($tab["rootFolderID"]); - $this->_titleDisplayHack = Settings::boolval($tab["titleDisplayHack"]); - $this->_showMissingTranslations = Settings::boolval($tab["showMissingTranslations"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_siteDefaultPage = strval($tab["siteDefaultPage"]); + $this->_rootFolderID = intval($tab["rootFolderID"]); + $this->_titleDisplayHack = Settings::boolval($tab["titleDisplayHack"]); + $this->_showMissingTranslations = Settings::boolval($tab["showMissingTranslations"]); + } // XML Path: /configuration/advanced/authentication $node = $xml->xpath('/configuration/advanced/authentication'); - $tab = $node[0]->attributes(); - $this->_guestID = intval($tab["guestID"]); - $this->_adminIP = strval($tab["adminIP"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_guestID = intval($tab["guestID"]); + $this->_adminIP = strval($tab["adminIP"]); + } // XML Path: /configuration/advanced/edition $node = $xml->xpath('/configuration/advanced/edition'); - $tab = $node[0]->attributes(); - $this->_enableAdminRevApp = Settings::boolval($tab["enableAdminRevApp"]); - $this->_enableOwnerRevApp = Settings::boolval($tab["enableOwnerRevApp"]); - $this->_enableSelfRevApp = Settings::boolval($tab["enableSelfRevApp"]); - $this->_enableUpdateRevApp = Settings::boolval($tab["enableUpdateRevApp"]); - $this->_presetExpirationDate = strval($tab["presetExpirationDate"]); - $this->_versioningFileName = strval($tab["versioningFileName"]); - $this->_workflowMode = strval($tab["workflowMode"]); - $this->_allowReviewerOnly = Settings::boolval($tab["allowReviewerOnly"]); - $this->_enableVersionDeletion = Settings::boolval($tab["enableVersionDeletion"]); - $this->_enableVersionModification = Settings::boolval($tab["enableVersionModification"]); - $this->_enableDuplicateDocNames = Settings::boolval($tab["enableDuplicateDocNames"]); - $this->_overrideMimeType = Settings::boolval($tab["overrideMimeType"]); - $this->_removeFromDropFolder = Settings::boolval($tab["removeFromDropFolder"]); + if($node) { + $tab = $node[0]->attributes(); + $this->_enableAdminRevApp = Settings::boolval($tab["enableAdminRevApp"]); + $this->_enableOwnerRevApp = Settings::boolval($tab["enableOwnerRevApp"]); + $this->_enableSelfRevApp = Settings::boolval($tab["enableSelfRevApp"]); + $this->_enableUpdateRevApp = Settings::boolval($tab["enableUpdateRevApp"]); + $this->_presetExpirationDate = strval($tab["presetExpirationDate"]); + $this->_versioningFileName = strval($tab["versioningFileName"]); + $this->_workflowMode = strval($tab["workflowMode"]); + $this->_allowReviewerOnly = Settings::boolval($tab["allowReviewerOnly"]); + $this->_enableVersionDeletion = Settings::boolval($tab["enableVersionDeletion"]); + $this->_enableVersionModification = Settings::boolval($tab["enableVersionModification"]); + $this->_enableDuplicateDocNames = Settings::boolval($tab["enableDuplicateDocNames"]); + $this->_overrideMimeType = Settings::boolval($tab["overrideMimeType"]); + $this->_removeFromDropFolder = Settings::boolval($tab["removeFromDropFolder"]); + } // XML Path: /configuration/advanced/notification $node = $xml->xpath('/configuration/advanced/notification'); @@ -641,18 +655,20 @@ class Settings { /* {{{ */ // XML Path: /configuration/advanced/server $node = $xml->xpath('/configuration/advanced/server'); - $tab = $node[0]->attributes(); - $this->_coreDir = strval($tab["coreDir"]); - $this->_luceneClassDir = strval($tab["luceneClassDir"]); - $this->_extraPath = strval($tab["extraPath"]); - $this->_contentOffsetDir = strval($tab["contentOffsetDir"]); - $this->_maxDirID = intval($tab["maxDirID"]); - $this->_updateNotifyTime = intval($tab["updateNotifyTime"]); - $this->_cmdTimeout = intval($tab["cmdTimeout"]); - if (isset($tab["maxExecutionTime"])) - $this->_maxExecutionTime = intval($tab["maxExecutionTime"]); - else - $this->_maxExecutionTime = ini_get("max_execution_time"); + if($node) { + $tab = $node[0]->attributes(); + $this->_coreDir = strval($tab["coreDir"]); + $this->_luceneClassDir = strval($tab["luceneClassDir"]); + $this->_extraPath = strval($tab["extraPath"]); + $this->_contentOffsetDir = strval($tab["contentOffsetDir"]); + $this->_maxDirID = intval($tab["maxDirID"]); + $this->_updateNotifyTime = intval($tab["updateNotifyTime"]); + $this->_cmdTimeout = intval($tab["cmdTimeout"]); + if (isset($tab["maxExecutionTime"])) + $this->_maxExecutionTime = intval($tab["maxExecutionTime"]); + else + $this->_maxExecutionTime = ini_get("max_execution_time"); + } // XML Path: /configuration/system/advanced/converters $convertergroups = $xml->xpath('/configuration/advanced/converters'); From 1bd5c9e3e4aa41d4a5f299c9e17407f8863c3dac Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 11:30:57 +0200 Subject: [PATCH 058/356] fix typos, add info about davfs2 --- doc/README.WebDAV | 70 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 55 insertions(+), 15 deletions(-) diff --git a/doc/README.WebDAV b/doc/README.WebDAV index 4211bae73..12670a283 100644 --- a/doc/README.WebDAV +++ b/doc/README.WebDAV @@ -13,17 +13,45 @@ and its content, while a file system knows just files. In SeedDMS a document is uniquely identified by its document id and not neccessarily by its name. A filesystem requires a unique paths for each file. Two identical files in the -same folder are not possible. SeedDMS can handle identifcally named +same folder are not possible. SeedDMS can handle identically named documents in one folder. In order to prevent any problems arising from this, you should always disallow identical document names in the settings. By definition a file in WebDAV is mapped on the latest version of a document in SeedDMS. There is no way to access previous -versions of a document via WebDAV. Whenever you modify a file, +versions of a document via WebDAV. Whenever you modify a file and +upload it with the web gui, a new version will be created. Unfortunately, this has some very -nasty side effects when you often save a file, because any save -operation will create a new version. This is because the WebDAV -server replaces the content of document instead of creating a new -version if a document is saved again. +nasty side effects when you edit a document version via WebDAV and +often save it, because any save +operation will create a new version. This is why the WebDAV +server has a configuration option which allows to either replace +the content of document or creating a new +version if a document is saved. + +Configuring davfs2 +=================== + +On Linux it is quite simple to mount the SeedDMS WebDAV server with +davfs2. Just place a line like the following in your /etc/fstab + +http://seeddms.your-domain.com/webdav/index.php /media/webdav davfs noauto,user,rw,uid=1000,gid=1000 + +and mount it as root with + +mount /media/webdav davfs + +You may as well want to configure davfs2 in /etc/davfs2/davfs2.conf by setting + +[/media/webdav] +use_locks 0 +gui_optimize 1 + +and possibly add your login data to /etc/davfs2/secrets + +/media/webdav admin secret + +Making applications work with WebDAV +===================================== Various programms have differnt strategies to save files to disk and prevent data lost under all circumstances. Those strategies often don't @@ -35,19 +63,31 @@ VIM vim does a lot more than just reading and writing the file you want to edit. It creates swap and backup files for data recovery if vim crashes -or is being kill unexpectivly. On a low bandwidth connection this can +or is being killed unexpectively. On a low bandwidth connection this can slow down the editing. For that reason you should either not create the swap file at all or create it outside the WebDAV server. A second problem arises from how vim modifіes the file you are editing. Before a file -is saved a backup is created and the new content is written into a new -file with the name of the original file. On a file system you -won't see a difference between the file before and after saveing, though -is actually a new one. In SeedDMS you won't notice a difference either -if just looking at the document name. It's still the same, but the +is saved a backup is created by renaming the file to the same name with a +'~' at the end and writing the file content into a new +file with the name of the original file. Afterwards vim deleteѕ the backup +file. On a regular file system you +won't see a difference between the file before and after saving, though +it is actually a new one. In SeedDMS you won't notice a difference either +by just looking at the document name. It's still the same, but the document id has changed. So saving a document will delete the old document and create a new one instead of creating a new version of the old document. If you don't want this behaviour, then tell vim -to not create the backup. Creating the backup file in a directory -outside of WebDAV doesn't help in this case. +to not create the backup file. You can do that by either passing additional +parameters to vim -vi "+set nobackup" "+set nobackuwrite" -n test.txt +vi "+set nobackup" "+set nowritebackup" -n test.txt + +or by setting them in your .vimrc + +set nobackup +set nowritebackup +set noswapfile + +Creating the backup file in a directory outside of WebDAV doesn't help in +this case, because it still does the file renaming which is turned of by +'nowritebackup'. From 453dfcd71eee74d9ca7e53a9291a871d1fd8688b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 11:32:10 +0200 Subject: [PATCH 059/356] check for _enableWebdavReplaceDoc in settings --- webdav/webdav.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/webdav/webdav.php b/webdav/webdav.php index c0790d390..e077e4858 100644 --- a/webdav/webdav.php +++ b/webdav/webdav.php @@ -91,7 +91,14 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server */ function log_options($methode, $options) { /* {{{ */ if($this->logger) { - $this->logger->log($methode.': '.$options['path'], PEAR_LOG_INFO); + switch($methode) { + case 'MOVE': + $msg = $methode.': '.$options['path'].' -> '.$options['dest']; + break; + default: + $msg = $methode.': '.$options['path']; + } + $this->logger->log($msg, PEAR_LOG_INFO); foreach($options as $key=>$option) { if(is_array($option)) { $this->logger->log($methode.': '.$key.'='.var_export($option, true), PEAR_LOG_DEBUG); @@ -613,7 +620,8 @@ class HTTP_WebDAV_Server_SeedDMS extends HTTP_WebDAV_Server if($this->user->getID() == $lc->getUser()->getID() && $name == $lc->getOriginalFileName() && $fileType == $lc->getFileType() && - $mimetype == $lc->getMimeType()) { + $mimetype == $lc->getMimeType() && + $settings->_enableWebdavReplaceDoc) { if($this->logger) $this->logger->log('PUT: replacing latest version', PEAR_LOG_INFO); if(!$document->replaceContent($lc->getVersion(), $this->user, $tmpFile, $name, $fileType, $mimetype)) { From 70015878d0f0379f1abb1cc63a05dd9bd3b4cafb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 12:32:32 +0200 Subject: [PATCH 060/356] search() returns false in case of an error --- SeedDMS_Core/Core/inc.ClassDMS.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.ClassDMS.php b/SeedDMS_Core/Core/inc.ClassDMS.php index df9161db3..0601688d7 100644 --- a/SeedDMS_Core/Core/inc.ClassDMS.php +++ b/SeedDMS_Core/Core/inc.ClassDMS.php @@ -1677,13 +1677,17 @@ class SeedDMS_Core_DMS { // Send the complete search query to the database. $resArr = $this->db->getResultArray($searchQuery); + if($resArr === false) + return false; } else { $resArr = array(); } } else { // Send the complete search query to the database. $resArr = $this->db->getResultArray($searchQuery); - } + if($resArr === false) + return false; + } // ------------------- Ausgabe der Ergebnisse ---------------------------- $numResults = count($resArr); From 8f62039994c30178e6c0909f67079084473ed618 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 12:33:06 +0200 Subject: [PATCH 061/356] do not use views --- SeedDMS_Core/Core/inc.DBAccessPDO.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SeedDMS_Core/Core/inc.DBAccessPDO.php b/SeedDMS_Core/Core/inc.DBAccessPDO.php index 4042f52de..ce1efd7bc 100644 --- a/SeedDMS_Core/Core/inc.DBAccessPDO.php +++ b/SeedDMS_Core/Core/inc.DBAccessPDO.php @@ -205,7 +205,7 @@ class SeedDMS_Core_DatabaseAccess { $this->_ttapproveid = false; $this->_ttstatid = false; $this->_ttcontentid = false; - $this->_useviews = true; + $this->_useviews = false; $this->_debug = false; } /* }}} */ From a074aa66069c2e597822041ab3f338ce8588ec76 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 12:33:46 +0200 Subject: [PATCH 062/356] check if search() returns false --- restapi/index.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/restapi/index.php b/restapi/index.php index 5013842d5..39e8ffe9a 100644 --- a/restapi/index.php +++ b/restapi/index.php @@ -427,7 +427,7 @@ function createFolder($id) { /* {{{ */ if($folder = $parent->addSubFolder($name, $comment, $userobj, 0, $newattrs)) { $rec = __getFolderData($folder); - $app->response()->status(201); + $app->response()->status(201); $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$rec)); } else { @@ -747,10 +747,10 @@ function uploadDocumentFile($documentId) { /* {{{ */ $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'No access', 'data'=>'')); } - } else { - if($document === null) + } else { + if($document === null) $app->response()->status(400); - else + else $app->response()->status(500); $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>false, 'message'=>'No such document', 'data'=>'')); @@ -1226,6 +1226,10 @@ function doSearch() { /* {{{ */ if(!$limit = $app->request()->get('limit')) $limit = 5; $resArr = $dms->search($querystr); + if($resArr === false) { + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array()); + } $entries = array(); $count = 0; if($resArr['folders']) { @@ -1377,7 +1381,7 @@ function getUsers() { /* {{{ */ $users = $dms->getAllUsers(); $data = []; foreach($users as $u) - $data[] = __getUserData($u); + $data[] = __getUserData($u); $app->response()->header('Content-Type', 'application/json'); echo json_encode(array('success'=>true, 'message'=>'', 'data'=>$data)); @@ -1803,12 +1807,12 @@ function changeFolderAccess($id, $operationType, $userOrGroup) { /* {{{ */ function getCategories() { /* {{{ */ global $app, $dms, $userobj; - if(false === ($categories = $dms->getDocumentCategories())) { + if(false === ($categories = $dms->getDocumentCategories())) { $app->response()->status(500); - $app->response()->header('Content-Type', 'application/json'); - echo json_encode(array('success'=>false, 'message'=>'Could not get categories', 'data'=>null)); + $app->response()->header('Content-Type', 'application/json'); + echo json_encode(array('success'=>false, 'message'=>'Could not get categories', 'data'=>null)); return; - } + } $data = []; foreach($categories as $category) $data[] = ['id' => (int)$category->getId(), 'name' => $category->getName()]; From fdd2e3ab37e2297f1b425f846c0179564f934702 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 12:34:48 +0200 Subject: [PATCH 063/356] changes for 5.1.8 --- SeedDMS_Core/package.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 3a62fe77e..fa24a7360 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -24,7 +24,8 @@ GPL License -just bump version +SeedDMS_Core_DMS::search() returns false in case of an error +do not use views in DBAccessPDO by default anymore, use temp. tables From 18bd1fdf55d7e129452cd3b1896d1838eed43d22 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 16:02:40 +0200 Subject: [PATCH 064/356] sync with package file from 5.1.7 --- SeedDMS_Core/package.xml | 70 ++++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 25 deletions(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 85277b185..27f467b82 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -1244,8 +1244,8 @@ do not sort some temporary tables anymore, because it causes an error in mysql i 5.0.1 - stable - stable + stable + stable GPL License @@ -1253,8 +1253,8 @@ do not sort some temporary tables anymore, because it causes an error in mysql i - 2016-03-09 - + 2016-04-26 + 5.0.2 5.0.2 @@ -1270,7 +1270,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i 2016-04-04 - + 5.0.3 5.0.3 @@ -1281,6 +1281,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License +- use classname from SeedDMS_Core_DMS::_classnames for SeedDMS_Core_DocumentContent - all changes from 4.3.26 merged @@ -1298,7 +1299,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License - all changes from 4.3.27 merged - + 2016-08-09 @@ -1314,7 +1315,7 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License - all changes from 4.3.28 merged - + 2016-09-06 @@ -1363,18 +1364,18 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License - all changes from 4.3.31 merged - + - 2016-11-08 - + 2016-11-02 + - 5.0.9 - 5.0.9 + 5.0.9 + 5.0.9 - stable - stable + stable + stable GPL License @@ -1476,11 +1477,11 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License - all changes from 5.0.11 merged - + 2017-03-23 - + 5.1.2 5.1.2 @@ -1491,15 +1492,14 @@ do not sort some temporary tables anymore, because it causes an error in mysql i GPL License -- all changes from 5.0.12 merged -- SeedDMS_Core_DMS::filterDocumentFiles() returns also documents which are not public +SeedDMS_Core_DMS::filterDocumentFiles() returns also documents which are not public if the owner tries to access them -- Check return value of onPreRemove[Document|Folder], return from calling method if bool -- Add SeedDMS_Core_DMS::getDocumentList() -- Limit number of duplicate files to 1000 -- Add hook on(Pre|Post)RemoveContent -- Add hook onAttributeValidate - +Check return value of onPreRemove[Document|Folder], return from calling method if bool +Add SeedDMS_Core_DMS::getDocumentList() +Limit number of duplicate files to 1000 +Add hook on(Pre|Post)RemoveContent +Add hook onAttributeValidate + 2017-08-23 @@ -1535,10 +1535,14 @@ returns just users which are not disabled GPL License +- add virtual access mode for document links and attachments plus callbacks to + check access mode in a hook +- add new method SeedDMS_Core_DMS::getDocumentsExpired() +- all changes from 5.0.14 merged - 2017-11-24 + 2017-11-07 5.1.5 @@ -1582,6 +1586,22 @@ add lots of DocBlocks from merge request #8 add SeedDMS_Core_AttributeDefinition::removeValue() + + 2018-04-05 + + + 5.1.7 + 5.1.7 + + + stable + stable + + GPL License + +just bump version + + 2018-04-11 From c225350fa72697aa74a7345c74ccf63c61fbd677 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 12 Apr 2018 17:18:18 +0200 Subject: [PATCH 065/356] add methods majorVersion(), minorVersion() and subminorVersion() --- inc/inc.Version.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/inc/inc.Version.php b/inc/inc.Version.php index 74c53de32..1701926b9 100644 --- a/inc/inc.Version.php +++ b/inc/inc.Version.php @@ -30,6 +30,20 @@ class SeedDMS_Version { return $this->_number; } + function majorVersion() { + $tmp = explode('.', $this->_number, 3); + return (int) $tmp[0]; + } + + function minorVersion() { + $tmp = explode('.', $this->_number, 3); + return (int) $tmp[1]; + } + + function subminorVersion() { + $tmp = explode('.', $this->_number, 3); + return (int) $tmp[2]; + } function banner() { return $this->_string .", ". $this->_number; } From 23d2f534808ec6f0ed5abf99613544d1bb3f4b17 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 13 Apr 2018 14:53:06 +0200 Subject: [PATCH 066/356] call new hook extraTabs --- views/bootstrap/class.ViewDocument.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/views/bootstrap/class.ViewDocument.php b/views/bootstrap/class.ViewDocument.php index 3df187b6e..112f3e36e 100644 --- a/views/bootstrap/class.ViewDocument.php +++ b/views/bootstrap/class.ViewDocument.php @@ -513,6 +513,14 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { ?>
    • +callHook('extraTabs', $document); + if($tabs) { + foreach($tabs as $tabid=>$tab) { + echo '
    • '.$tab['title'].'
    • '; + } + } +?>
    @@ -1429,6 +1437,15 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style { } ?>
    +$tab) { + echo '
    '; + echo $tab['content']; + echo "
    \n"; + } + } +?>
    isAdmin()) { From cd46057356aedfe0621b705a0208ffc55b43a205 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 13 Apr 2018 14:53:47 +0200 Subject: [PATCH 067/356] add entry for 5.1.8 --- CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG b/CHANGELOG index f5c903ed3..7cd7f9b6d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ Changes in version 5.1.8 -------------------------------------------------------------------------------- - fix javascript errors when an error page was shown +- add new extraTabs in ViewDocument for adding more tabs -------------------------------------------------------------------------------- Changes in version 5.1.7 From e7fe899ebfbc8e1c557aba8506fc3155535b9e6c Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 17 Apr 2018 18:34:30 +0200 Subject: [PATCH 068/356] use function to output a config line --- views/bootstrap/class.Settings.php | 789 ++++++++--------------------- 1 file changed, 211 insertions(+), 578 deletions(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 6494d85eb..a004f88ad 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -49,6 +49,86 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { } } /* }}} */ + /** + * Place arbitrary html in a headline + * + * @param string $text html code to be shown as headline + */ + protected function showRawConfigHeadline($text) { /* {{{ */ +?> + +showRawConfigHeadline(htmlspecialchars(getMLText($title))); + } /* }}} */ + + /** + * Show a text input configuration option + * + * @param string $title title of the option + * @param string $name name of html input field + */ + protected function showConfigText($title, $name) { /* {{{ */ + $settings = $this->params['settings']; +?> + "> + : + showTextField($name, $settings->{"_".$name}); ?> + +params['settings']; +?> + "> + : + {"_".$name}) echo "checked" ?> /> + +params['settings']; + $isass = count(array_filter(array_keys($values), 'is_string')) > 0; +// var_dump($values); +// echo $isass ? 'asso' : 'indexed'; +?> + "> + : + + + +$value) { + $optval = trim($isass ? $i : $value); + echo ''; + } +?> + + + +_configFilePath)) { - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - + --> +showConfigHeadline('settings_Display'); ?> +showConfigText('settings_siteName', 'siteName'); ?> +showConfigText('settings_footNote', 'footNote'); ?> +showConfigCheckbox('settings_printDisclaimer', 'printDisclaimer'); ?> +showConfigOption('settings_available_languages', 'availablelanguages', getAvailableLanguages(), true, true); ?> +showConfigOption('settings_language', 'language', getAvailableLanguages(), false, true); ?> +showConfigOption('settings_theme', 'theme', UI::getStyles(), false, false); ?> +showConfigText('settings_previewWidthList', 'previewWidthList'); ?> +showConfigText('settings_previewWidthMenuList', 'previewWidthMenuList'); ?> +showConfigText('settings_previewWidthDropFolderList', 'previewWidthDropFolderList'); ?> +showConfigText('settings_previewWidthDetail', 'previewWidthDetail'); ?> +showConfigCheckbox('settings_showFullPreview', 'showFullPreview'); ?> +showConfigCheckbox('settings_convertToPdf', 'convertToPdf'); ?> +showConfigText('settings_maxItemsPerPage', 'maxItemsPerPage'); ?> +showConfigText('settings_incItemsPerPage', 'incItemsPerPage'); ?> - - "> - - - +showConfigHeadline('settings_Edition'); ?> +showConfigCheckbox('settings_strictFormCheck', 'strictFormCheck'); ?> "> @@ -232,174 +228,45 @@ if(!is_writeable($settings->_configFilePath)) { - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - - "> - - - "> - - - "> - - +showConfigCheckbox('settings_enableConverting', 'enableConverting'); ?> +showConfigCheckbox('settings_enableEmail', 'enableEmail'); ?> +showConfigCheckbox('settings_enableUsersView', 'enableUsersView'); ?> +showConfigCheckbox('settings_enableFullSearch', 'enableFullSearch'); ?> +showConfigText('settings_maxSizeForFullText', 'maxSizeForFullText'); ?> +showConfigOption('settings_fullSearchEngine', 'fullSearchEngine', array('lucene'=>'settings_fullSearchEngine_vallucene', 'sqlitefts'=>'settings_fullSearchEngine_valsqlitefts'), false, true); ?> +showConfigOption('settings_defaultSearchMethod', 'defaultSearchMethod', array('database'=>'settings_defaultSearchMethod_valdatabase', 'fulltext'=>'settings_defaultSearchMethod_valfulltext'), false, true); ?> +showConfigCheckbox('settings_showSingleSearchHit', 'showSingleSearchHit'); ?> +showConfigText('settings_stopWordsFile', 'stopWordsFile'); ?> +showConfigCheckbox('settings_enableClipboard', 'enableClipboard'); ?> +showConfigCheckbox('settings_enableMenuTasks', 'enableMenuTasks'); ?> +showConfigCheckbox('settings_enableDropFolderList', 'enableDropFolderList'); ?> +showConfigCheckbox('settings_enableSessionList', 'enableSessionList'); ?> +showConfigCheckbox('settings_enableDropUpload', 'enableDropUpload'); ?> +showConfigCheckbox('settings_enableMultiUpload', 'enableMultiUpload'); ?> +showConfigCheckbox('settings_enableFolderTree', 'enableFolderTree'); ?> +showConfigOption('settings_expandFolderTree', 'expandFolderTree', array(' 0'=>'settings_expandFolderTree_val0', ' 1'=>'settings_expandFolderTree_val1', ' 2'=>'settings_expandFolderTree_val2'), false, true); ?> +showConfigCheckbox('settings_enableRecursiveCount', 'enableRecursiveCount'); ?> +showConfigText('settings_maxRecursiveCount', 'maxRecursiveCount'); ?> +showConfigCheckbox('settings_enableLanguageSelector', 'enableLanguageSelector'); ?> +showConfigCheckbox('settings_enableHelp', 'enableHelp'); ?> +showConfigCheckbox('settings_enableThemeSelector', 'enableThemeSelector'); ?> +showConfigOption('settings_sortUsersInList', 'sortUsersInList', array(' '=>'settings_sortUsersInList_val_login', 'fullname'=>'settings_sortUsersInList_val_fullname'), false, true); ?> +showConfigOption('settings_sortFoldersDefault', 'sortFoldersDefault', array('u'=>'settings_sortFoldersDefault_val_unsorted', 's'=>'settings_sortFoldersDefault_val_sequence', 'n'=>'settings_sortFoldersDefault_val_name'), false, true); ?> +showConfigOption('settings_defaultDocPosition', 'defaultDocPosition', array('end'=>'settings_defaultDocPosition_val_end', 'start'=>'settings_defaultDocPosition_val_start'), false, true); ?> - - "> - - - +showConfigHeadline('settings_webdav'); ?> +showConfigCheckbox('settings_enableWebdavReplaceDoc', 'enableWebdavReplaceDoc'); ?> - - "> - - - - "> - - - "> - - +showConfigHeadline('settings_Calendar'); ?> +showConfigCheckbox('settings_enableCalendar', 'enableCalendar'); ?> +showConfigOption('settings_calendarDefaultView', 'calendarDefaultView', array('w'=>'week_view', 'm'=>'month_view', 'y'=>'year_view'), false, true); ?> +showConfigOption('settings_firstDayOfWeek', 'firstDayOfWeek', array(' 0'=>'sunday', ' 1'=>'monday', ' 2'=>'tuesday', ' 3'=>'wednesday', ' 4'=>'thursday', ' 5'=>'friday', ' 6'=>'saturday'), false, true); ?>
    :showTextField('siteName', $settings->_siteName); ?>
    :showTextField("footNote", $settings->_footNote); ?>
    :_printDisclaimer) echo "checked" ?> />
    : - -
    : - -
    : - -
    :showTextField("previewWidthList", $settings->_previewWidthList); ?>
    :showTextField("previewWidthMenuList", $settings->_previewWidthMenuList); ?>
    :showTextField("previewWidthDropFolderList", $settings->_previewWidthDropFolderList); ?>
    :showTextField("previewWidthDetail", $settings->_previewWidthDetail); ?>
    :_showFullPreview) echo "checked" ?> />
    :_convertToPdf) echo "checked" ?> />
    :showTextField("maxItemsPerPage", $settings->_maxItemsPerPage); ?>
    :showTextField("incItemsPerPage", $settings->_incItemsPerPage); ?>
    :_strictFormCheck) echo "checked" ?> />
    : showTextField("viewOnlineFileTypes", $settings->getViewOnlineFileTypesToString()); ?>: showTextField("editOnlineFileTypes", $settings->getEditOnlineFileTypesToString()); ?>
    :_enableConverting) echo "checked" ?> />
    :_enableEmail) echo "checked" ?> />
    :_enableUsersView) echo "checked" ?> />
    :_enableFullSearch) echo "checked" ?> />
    :showTextField("maxSizeForFullText", $settings->_maxSizeForFullText); ?>
    : - -
    : - -
    :_showSingleSearchHit) echo "checked" ?> />
    :showTextField("stopWordsFile", $settings->_stopWordsFile); ?>
    :_enableClipboard) echo "checked" ?> />
    :_enableMenuTasks) echo "checked" ?> />
    :_enableDropFolderList) echo "checked" ?> />
    :_enableSessionList) echo "checked" ?> />
    :_enableDropUpload) echo "checked" ?> />
    :_enableMultiUpload) echo "checked" ?> />
    :_enableFolderTree) echo "checked" ?> />
    : - -
    :_enableRecursiveCount) echo "checked" ?> />
    :showTextField("maxRecursiveCount", $settings->_maxRecursiveCount); ?>
    :_enableLanguageSelector) echo "checked" ?> />
    :_enableHelp) echo "checked" ?> />
    :_enableThemeSelector) echo "checked" ?> />
    : - -
    : - -
    : - -
    :_enableWebdavReplaceDoc) echo "checked" ?> />
    :_enableCalendar) echo "checked" ?> />
    : - -
    : - -
    contentContainerEnd(); ?> @@ -410,175 +277,53 @@ if(!is_writeable($settings->_configFilePath)) { - - "> - : - showTextField("rootDir", $settings->_rootDir); ?> - - "> - : - showTextField("httpRoot", $settings->_httpRoot); ?> - - "> - : - showTextField("contentDir", $settings->_contentDir); ?> - - "> - : - showTextField("backupDir", $settings->_backupDir); ?> - - "> - : - showTextField("cacheDir", $settings->_cacheDir); ?> - - "> - : - showTextField("stagingDir", $settings->_stagingDir); ?> - - "> - : - showTextField("luceneDir", $settings->_luceneDir); ?> - - "> - : - showTextField("dropFolderDir", $settings->_dropFolderDir); ?> - - "> - : - showTextField("repositoryUrl", $settings->_repositoryUrl); ?> - - "> - : - _logFileEnable) echo "checked" ?> /> - - "> - : - - - - "> - : - _enableLargeFileUpload) echo "checked" ?> /> - - "> - : - showTextField("partitionSize", $settings->_partitionSize); ?> - - "> - : - showTextField("maxUploadSize", $settings->_maxUploadSize); ?> - +showConfigHeadline('settings_Server'); ?> +showConfigText('settings_rootDir', 'rootDir'); ?> +showConfigText('settings_httpRoot', 'httpRoot'); ?> +showConfigText('settings_contentDir', 'contentDir'); ?> +showConfigText('settings_backupDir', 'backupDir'); ?> +showConfigText('settings_cacheDir', 'cacheDir'); ?> +showConfigText('settings_stagingDir', 'stagingDir'); ?> +showConfigText('settings_luceneDir', 'luceneDir'); ?> +showConfigText('settings_dropFolderDir', 'dropFolderDir'); ?> +showConfigText('settings_repositoryUrl', 'repositoryUrl'); ?> +showConfigCheckbox('settings_logFileEnable', 'logFileEnable'); ?> +showConfigOption('settings_logFileRotation', 'logFileRotation', array('h'=>'hourly', 'd'=>'daily', 'm'=>'monthly'), false, true); ?> +showConfigCheckbox('settings_enableLargeFileUpload', 'enableLargeFileUpload'); ?> +showConfigText('settings_partitionSize', 'partitionSize'); ?> +showConfigText('settings_maxUploadSize', 'maxUploadSize'); ?> - - "> - : - _enableGuestLogin) echo "checked" ?> /> - - "> - : - _enableGuestAutoLogin) echo "checked" ?> /> - - "> - : - _restricted) echo "checked" ?> /> - - "> - : - _enableUserImage) echo "checked" ?> /> - - "> - : - _disableSelfEdit) echo "checked" ?> /> - - "> - : - _enablePasswordForgotten) echo "checked" ?> /> - - "> - : - showTextField("passwordStrength", $settings->_passwordStrength); ?> - - "> - : - - - - - "> - : - showTextField("passwordExpiration", $settings->_passwordExpiration); ?> - - "> - : - showTextField("passwordHistory", $settings->_passwordHistory); ?> - - "> - : - showTextField("loginFailure", $settings->_loginFailure); ?> - - "> - : - showTextField("autoLoginUser", $settings->_autoLoginUser); ?> - - "> - : - showTextField("quota", $settings->_quota); ?> - - "> - : - showTextField("undelUserIds", $settings->_undelUserIds); ?> - - "> - : - showTextField("encryptionKey", $settings->_encryptionKey); ?> - - "> - : - showTextField("cookieLifetime", $settings->_cookieLifetime); ?> - - "> - : - - - - +showConfigHeadline('settings_Authentication'); ?> +showConfigCheckbox('settings_enableGuestLogin', 'enableGuestLogin'); ?> +showConfigCheckbox('settings_enableGuestAutoLogin', 'enableGuestAutoLogin'); ?> +showConfigCheckbox('settings_restricted', 'restricted'); ?> +showConfigCheckbox('settings_enableUserImage', 'enableUserImage'); ?> +showConfigCheckbox('settings_disableSelfEdit', 'disableSelfEdit'); ?> +showConfigCheckbox('settings_enablePasswordForgotten', 'enablePasswordForgotten'); ?> +showConfigText('settings_passwordStrength', 'passwordStrength'); ?> +showConfigOption('settings_passwordStrengthAlgorithm', 'passwordStrengthAlgorithm', array('simple'=>'settings_passwordStrengthAlgorithm_valsimple', 'advanced'=>'settings_passwordStrengthAlgorithm_valadvanced'), false, true); ?> +showConfigText('settings_passwordExpiration', 'passwordExpiration'); ?> +showConfigText('settings_passwordHistory', 'passwordHistory'); ?> +showConfigText('settings_loginFailure', 'loginFailure'); ?> +showConfigText('settings_autoLoginUser', 'autoLoginUser'); ?> +showConfigText('settings_quota', 'quota'); ?> +showConfigText('settings_undelUserIds', 'undelUserIds'); ?> +showConfigText('settings_encryptionKey', 'encryptionKey'); ?> +showConfigText('settings_cookieLifetime', 'cookieLifetime'); ?> +showConfigOption('settings_defaultAccessDocs', 'defaultAccessDocs', array(' 0'=>'inherited', ' '.M_NONE=>'access_mode_none', ' '.M_READ=>'access_mode_read', ' '.M_READWRITE=>'access_mode_readwrite'), false, true); ?> - - "> - : - showTextField("dbDriver", $settings->_dbDriver); ?> - - "> - : - showTextField("dbHostname", $settings->_dbHostname); ?> - - "> - : - showTextField("dbDatabase", $settings->_dbDatabase); ?> - - "> - : - showTextField("dbUser", $settings->_dbUser); ?> - +showConfigHeadline('settings_Database'); ?> +showConfigText('settings_dbDriver', 'dbDriver'); ?> +showConfigText('settings_dbHostname', 'dbHostname'); ?> +showConfigText('settings_dbDatabase', 'dbDatabase'); ?> +showConfigText('settings_dbUser', 'dbUser'); ?> "> : showTextField("dbPass", $settings->_dbPass, 'password'); ?> @@ -587,23 +332,11 @@ if(!is_writeable($settings->_configFilePath)) { - - "> - : - showTextField("smtpServer", $settings->_smtpServer); ?> - - "> - : - showTextField("smtpPort", $settings->_smtpPort); ?> - - "> - : - showTextField("smtpSendFrom", $settings->_smtpSendFrom); ?> - - "> - : - showTextField("smtpUser", $settings->_smtpUser); ?> - +showConfigHeadline('settings_SMTP'); ?> +showConfigText('settings_smtpServer', 'smtpServer'); ?> +showConfigText('settings_smtpPort', 'smtpPort'); ?> +showConfigText('settings_smtpSendFrom', 'smtpSendFrom'); ?> +showConfigText('settings_smtpUser', 'smtpUser'); ?> "> : @@ -619,159 +352,61 @@ if(!is_writeable($settings->_configFilePath)) { - - "> - : - showTextField("siteDefaultPage", $settings->_siteDefaultPage); ?> - - "> - : - showTextField("rootFolderID", $settings->_rootFolderID); ?> - - "> - : - _titleDisplayHack) echo "checked" ?> /> - - "> - : - _showMissingTranslations) echo "checked" ?> /> - +showConfigHeadline('settings_Display'); ?> +showConfigText('settings_siteDefaultPage', 'siteDefaultPage'); ?> +showConfigText('settings_rootFolderID', 'rootFolderID'); ?> +showConfigCheckbox('settings_titleDisplayHack', 'titleDisplayHack'); ?> +showConfigCheckbox('settings_showMissingTranslations', 'showMissingTranslations'); ?> - - "> - : - showTextField("guestID", $settings->_guestID); ?> - - "> - : - showTextField("adminIP", $settings->_adminIP); ?> - +showConfigHeadline('settings_Authentication'); ?> +showConfigText('settings_guestID', 'guestID'); ?> +showConfigText('settings_adminIP', 'adminIP'); ?> - - "> - : - - - - - "> - : - showTextField("versioningFileName", $settings->_versioningFileName); ?> - - "> - : - showTextField("presetExpirationDate", $settings->_presetExpirationDate); ?> - - "> - : - _allowReviewerOnly) echo "checked" ?> /> - - "> - : - _enableAdminRevApp) echo "checked" ?> /> - - "> - : - _enableOwnerRevApp) echo "checked" ?> /> - - "> - : - _enableSelfRevApp) echo "checked" ?> /> - - "> - : - _enableUpdateRevApp) echo "checked" ?> /> - - "> - : - _enableVersionDeletion) echo "checked" ?> /> - - "> - : - _enableVersionModification) echo "checked" ?> /> - - "> - : - _enableDuplicateDocNames) echo "checked" ?> /> - - "> - : - _overrideMimeType) echo "checked" ?> /> - - "> - : - _removeFromDropFolder) echo "checked" ?> /> - +showConfigHeadline('settings_Edition'); ?> +showConfigOption('settings_workflowMode', 'workflowMode', array('traditional'=>'settings_workflowMode_valtraditional', 'traditional_only_approval'=>'settings_workflowMode_valtraditional_only_approval', 'advanced'=>'settings_workflowMode_valadvanced'), false, true); ?> +showConfigText('settings_versioningFileName', 'versioningFileName'); ?> +showConfigText('settings_presetExpirationDate', 'presetExpirationDate'); ?> +showConfigCheckbox('settings_allowReviewerOnly', 'allowReviewerOnly'); ?> +showConfigCheckbox('settings_enableAdminRevApp', 'enableAdminRevApp'); ?> +showConfigCheckbox('settings_enableOwnerRevApp', 'enableOwnerRevApp'); ?> +showConfigCheckbox('settings_enableSelfRevApp', 'enableSelfRevApp'); ?> +showConfigCheckbox('settings_enableUpdateRevApp', 'enableUpdateRevApp'); ?> +showConfigCheckbox('settings_enableVersionDeletion', 'enableVersionDeletion'); ?> +showConfigCheckbox('settings_enableVersionModification', 'enableVersionModification'); ?> +showConfigCheckbox('settings_enableDuplicateDocNames', 'enableDuplicateDocNames'); ?> +showConfigCheckbox('settings_overrideMimeType', 'overrideMimeType'); ?> +showConfigCheckbox('settings_removeFromDropFolder', 'removeFromDropFolder'); ?> - - "> - : - _enableOwnerNotification) echo "checked" ?> /> - - "> - : - _enableNotificationAppRev) echo "checked" ?> /> - - "> - : - _enableNotificationWorkflow) echo "checked" ?> /> - +showConfigHeadline('settings_Notification'); ?> +showConfigCheckbox('settings_enableOwnerNotification', 'enableOwnerNotification'); ?> +showConfigCheckbox('settings_enableNotificationAppRev', 'enableNotificationAppRev'); ?> +showConfigCheckbox('settings_enableNotificationWorkflow', 'enableNotificationWorkflow'); ?> - - "> - : - showTextField("coreDir", $settings->_coreDir); ?> - - "> - : - showTextField("luceneClassDir", $settings->_luceneClassDir); ?> - - "> - : - showTextField("extraPath", $settings->_extraPath); ?> - - "> - : - showTextField("contentOffsetDir", $settings->_contentOffsetDir); ?> - - "> - : - showTextField("maxDirID", $settings->_maxDirID); ?> - - "> - : - showTextField("updateNotifyTime", $settings->_updateNotifyTime); ?> - - "> - : - showTextField("maxExecutionTime", $settings->_maxExecutionTime); ?> - - "> - : - showTextField("cmdTimeout", $settings->_cmdTimeout); ?> - +showConfigHeadline('settings_Server'); ?> +showConfigText('settings_coreDir', 'coreDir'); ?> +showConfigText('settings_luceneClassDir', 'luceneClassDir'); ?> +showConfigText('settings_extraPath', 'extraPath'); ?> +showConfigText('settings_contentOffsetDir', 'contentOffsetDir'); ?> +showConfigText('settings_maxDirID', 'maxDirID'); ?> +showConfigText('settings_updateNotifyTime', 'updateNotifyTime'); ?> +showConfigText('settings_maxExecutionTime', 'maxExecutionTime'); ?> +showConfigText('settings_cmdTimeout', 'cmdTimeout'); ?> - -showConfigHeadline($target."_converters"); if(!empty($settings->_converters[$target])) { foreach($settings->_converters[$target] as $mimetype=>$cmd) { ?> @@ -801,11 +436,9 @@ if(!is_writeable($settings->_configFilePath)) { -- SETTINGS - ADVANCED - DISPLAY --> $extconf) { -?> - -$conf) { + foreach($GLOBALS['EXT_CONF'] as $extname=>$extconf) { + $this->showRawConfigHeadline("".$extconf['title']); + foreach($extconf['config'] as $confkey=>$conf) { ?> : From be2eb700c8fffcf31c6720497450caff347171d3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 17 Apr 2018 21:03:39 +0200 Subject: [PATCH 069/356] readd smtp send mail button --- views/bootstrap/class.Settings.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index a004f88ad..85cb29e13 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -331,8 +331,9 @@ if(!is_writeable($settings->_configFilePath)) { -showConfigHeadline('settings_SMTP'); ?> + --> + +showConfigHeadline('settings_SMTP'); ?> showConfigText('settings_smtpServer', 'smtpServer'); ?> showConfigText('settings_smtpPort', 'smtpPort'); ?> showConfigText('settings_smtpSendFrom', 'smtpSendFrom'); ?> From 9db601e610b237bd92550c98fac40d635e3889c5 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 13:41:50 +0200 Subject: [PATCH 070/356] add methods arrayToString() and stringToArray() --- inc/inc.ClassSettings.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/inc/inc.ClassSettings.php b/inc/inc.ClassSettings.php index ce15f283d..3c48ee88b 100644 --- a/inc/inc.ClassSettings.php +++ b/inc/inc.ClassSettings.php @@ -353,6 +353,26 @@ class Settings { /* {{{ */ return $out; } /* }}} */ + /** + * Return ';' seperated string from array + * + * @param array $value + * + */ + function arrayToString($value) { /* {{{ */ + return implode(";", $value); + } /* }}} */ + + /** + * Return array from ';' seperated string + * + * @param string $value + * + */ + function stringToArray($value) { /* {{{ */ + return explode(";", $Value); + } /* }}} */ + /** * set $_viewOnlineFileTypes * From 0f6da660e65b270fd3d15f1aeb9475378310279b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 13:42:20 +0200 Subject: [PATCH 071/356] replace more output with methods() --- views/bootstrap/class.Settings.php | 160 +++++++++++++++-------------- 1 file changed, 82 insertions(+), 78 deletions(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index 85cb29e13..f7872f01e 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -31,9 +31,26 @@ require_once("class.Bootstrap.php"); */ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { - protected function showTextField($name, $value, $type='', $placeholder='') { /* {{{ */ + protected function showPaneHeader($name, $title, $isactive) { /* {{{ */ + echo '
  • '.$title.'
  • '."\n"; + } /* }}} */ + + protected function showStartPaneContent($name, $isactive) { /* {{{ */ + echo '
    '; + $this->contentContainerStart(); + echo ''; + } /* }}} */ + + protected function showEndPaneContent($name, $currentab) { /* {{{ */ + echo '
    '; + $this->contentContainerEnd(); + echo '
    '; + } /* }}} */ + + protected function getTextField($name, $value, $type='', $placeholder='') { /* {{{ */ + $html = ''; if($type != 'password' && strlen($value) > 80) - echo ''; + $html .= ''; else { if(strlen($value) > 40) $class = 'input-xxlarge'; @@ -45,8 +62,13 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { $class = 'input-medium'; else $class = 'input-small'; - echo ''; + $html .= ''; } + return $html; + } /* }}} */ + + protected function showTextField($name, $value, $type='', $placeholder='') { /* {{{ */ + echo $this->getTextField($name, $value, $type, $placeholder); } /* }}} */ /** @@ -74,13 +96,37 @@ class SeedDMS_View_Settings extends SeedDMS_Bootstrap_Style { * * @param string $title title of the option * @param string $name name of html input field + * @param string $type can be 'password', 'array' + * @param string $placeholder placeholder for input field */ - protected function showConfigText($title, $name) { /* {{{ */ + protected function showConfigText($title, $name, $type='', $placeholder='') { /* {{{ */ $settings = $this->params['settings']; ?> "> - : - showTextField($name, $settings->{"_".$name}); ?> + : +arrayToString($settings->{"_".$name}); + else + $value = $settings->{"_".$name}; +?> + showTextField($name, $value, ($type=='password' ? 'password' : ''), $placeholder); ?> + +params['settings']; +?> + + : + _configFilePath)) { ?>
    -
    -contentContainerStart(); ?> - +showStartPaneContent('site', (!$currenttab || $currenttab == 'site')); +?> @@ -220,14 +266,8 @@ if(!is_writeable($settings->_configFilePath)) { --> showConfigHeadline('settings_Edition'); ?> showConfigCheckbox('settings_strictFormCheck', 'strictFormCheck'); ?> - "> - - - - "> - - - +showConfigText('settings_viewOnlineFileTypes', 'viewOnlineFileTypes', 'array'); ?> +showConfigText('settings_editOnlineFileTypes', 'editOnlineFileTypes', 'array'); ?> showConfigCheckbox('settings_enableConverting', 'enableConverting'); ?> showConfigCheckbox('settings_enableEmail', 'enableEmail'); ?> showConfigCheckbox('settings_enableUsersView', 'enableUsersView'); ?> @@ -267,13 +307,11 @@ if(!is_writeable($settings->_configFilePath)) { showConfigCheckbox('settings_enableCalendar', 'enableCalendar'); ?> showConfigOption('settings_calendarDefaultView', 'calendarDefaultView', array('w'=>'week_view', 'm'=>'month_view', 'y'=>'year_view'), false, true); ?> showConfigOption('settings_firstDayOfWeek', 'firstDayOfWeek', array(' 0'=>'sunday', ' 1'=>'monday', ' 2'=>'tuesday', ' 3'=>'wednesday', ' 4'=>'thursday', ' 5'=>'friday', ' 6'=>'saturday'), false, true); ?> -
    :showTextField("viewOnlineFileTypes", $settings->getViewOnlineFileTypesToString()); ?>
    :showTextField("editOnlineFileTypes", $settings->getEditOnlineFileTypesToString()); ?>
    -contentContainerEnd(); ?> -
    +showEndPaneContent('site', $currenttab); -
    -contentContainerStart(); ?> - + $this->showStartPaneContent('system', $currenttab == 'system'); +?> @@ -324,32 +362,23 @@ if(!is_writeable($settings->_configFilePath)) { showConfigText('settings_dbHostname', 'dbHostname'); ?> showConfigText('settings_dbDatabase', 'dbDatabase'); ?> showConfigText('settings_dbUser', 'dbUser'); ?> - "> - - - +showConfigText('settings_dbPass', 'dbPass', 'password'); ?> - -showConfigHeadline('settings_SMTP'); ?> +showConfigHeadline('settings_SMTP'); ?> showConfigText('settings_smtpServer', 'smtpServer'); ?> showConfigText('settings_smtpPort', 'smtpPort'); ?> showConfigText('settings_smtpSendFrom', 'smtpSendFrom'); ?> showConfigText('settings_smtpUser', 'smtpUser'); ?> - "> - - - +showConfigText('settings_smtpPassword', 'smtpPassword', 'password'); ?> +showConfigPlain(htmlspecialchars(getMLText('settings_smtpSendTestMail')), htmlspecialchars(getMLText('settings_smtpSendTestMail_desc')), ''.getMLText('send_test_mail').''); ?> +showEndPaneContent('system', $currenttab); -
    :showTextField("dbPass", $settings->_dbPass, 'password'); ?>
    :
    -contentContainerEnd(); ?> -
    - -
    -contentContainerStart(); ?> - + $this->showStartPaneContent('advanced', $currenttab == 'advanced'); +?> @@ -410,29 +439,15 @@ if(!is_writeable($settings->_configFilePath)) { $this->showConfigHeadline($target."_converters"); if(!empty($settings->_converters[$target])) { foreach($settings->_converters[$target] as $mimetype=>$cmd) { -?> - - - - -showConfigPlain(htmlspecialchars($mimetype), htmlspecialchars($mimetype), $this->getTextField("converters[".$target."][".$mimetype."]", htmlspecialchars($cmd))); } } -?> - - - - -showConfigPlain($this->getTextField("converters[".$target."][newmimetype]", "", '', getMLText('converter_new_mimetype')), '', $this->getTextField("converters[".$target."][newcmd]", "", "", getMLText('converter_new_cmd'))); } -?> -
    :showTextField("converters[".$target."][".$mimetype."]", htmlspecialchars($cmd)); ?>
    showTextField("converters[".$target."][newmimetype]", "", '', getMLText('converter_new_mimetype')); ?>:showTextField("converters[".$target."][newcmd]", "", "", getMLText('converter_new_cmd')); ?>
    -contentContainerEnd(); ?> -
    + $this->showEndPaneContent('advanced', $currenttab); -
    -contentContainerStart(); ?> - + $this->showStartPaneContent('extensions', $currenttab == 'extensions'); +?> @@ -440,10 +455,7 @@ if(!is_writeable($settings->_configFilePath)) { foreach($GLOBALS['EXT_CONF'] as $extname=>$extconf) { $this->showRawConfigHeadline("".$extconf['title']); foreach($extconf['config'] as $confkey=>$conf) { -?> - - -showConfigPlain($conf['title'], isset($conf['help']) ? $conf['help'] : '', $html); } } + $this->showEndPaneContent('extensions', $currenttab); ?> -
    : - @@ -530,21 +542,13 @@ if(!is_writeable($settings->_configFilePath)) { break; default: $this->showTextField("extensions[".$extname."][".$confkey."]", isset($settings->_extensions[$extname][$confkey]) ? $settings->_extensions[$extname][$confkey] : '', '', ''); - /* -?> - " title="" value="_extensions[$extname][$confkey])) echo $settings->_extensions[$extname][$confkey]; ?>" " /> - -
    -contentContainerEnd(); ?> -
    _configFilePath)) { From 12c0d4f1d385edd88176c2254d851e8b896f18e1 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 17:43:31 +0200 Subject: [PATCH 072/356] some new phrases --- languages/ar_EG/lang.inc | 5 +++++ languages/bg_BG/lang.inc | 5 +++++ languages/ca_ES/lang.inc | 5 +++++ languages/cs_CZ/lang.inc | 5 +++++ languages/de_DE/lang.inc | 7 ++++++- languages/el_GR/lang.inc | 5 +++++ languages/en_GB/lang.inc | 7 ++++++- languages/es_ES/lang.inc | 5 +++++ languages/fr_FR/lang.inc | 9 +++++++-- languages/hr_HR/lang.inc | 5 +++++ languages/hu_HU/lang.inc | 5 +++++ languages/it_IT/lang.inc | 5 +++++ languages/ko_KR/lang.inc | 5 +++++ languages/nl_NL/lang.inc | 5 +++++ languages/pl_PL/lang.inc | 9 +++++++-- languages/pt_BR/lang.inc | 5 +++++ languages/ro_RO/lang.inc | 5 +++++ languages/ru_RU/lang.inc | 5 +++++ languages/sk_SK/lang.inc | 5 +++++ languages/sv_SE/lang.inc | 5 +++++ languages/tr_TR/lang.inc | 5 +++++ languages/uk_UA/lang.inc | 5 +++++ languages/zh_CN/lang.inc | 5 +++++ languages/zh_TW/lang.inc | 5 +++++ 24 files changed, 126 insertions(+), 6 deletions(-) diff --git a/languages/ar_EG/lang.inc b/languages/ar_EG/lang.inc index 43e3bbbb3..75f3be5f9 100644 --- a/languages/ar_EG/lang.inc +++ b/languages/ar_EG/lang.inc @@ -1274,6 +1274,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '', 'settings_enableVersionModification' => '', 'settings_enableVersionModification_desc' => '', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '', 'settings_encryptionKey_desc' => '', 'settings_error' => 'خطأ', @@ -1407,6 +1409,8 @@ URL: [url]', 'settings_smtpPort_desc' => '', 'settings_smtpSendFrom' => '', 'settings_smtpSendFrom_desc' => '', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => '', 'settings_smtpServer_desc' => '', 'settings_smtpUser' => '', @@ -1452,6 +1456,7 @@ URL: [url]', 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => 'الملفات التى يمكن عرضها اونلاين', 'settings_viewOnlineFileTypes_desc' => '', +'settings_webdav' => '', 'settings_workflowMode' => 'حالة مسار العمل', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => 'متقدم', diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index 0b8428b30..6621bdb79 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -1137,6 +1137,8 @@ $text = array( 'settings_enableVersionDeletion_desc' => 'Разреши/забрани изтриване на предишни версии на документ от обикновен потребител. Администраторите могат винаги да трият стари версии.', 'settings_enableVersionModification' => 'Разреши промяна на версиите', 'settings_enableVersionModification_desc' => 'Разреши/забрани промяната на версия на документ от обикновен потребител след като версията е качена. Администраторите могат винаги да променят версията след качване.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Кодиращ ключ', 'settings_encryptionKey_desc' => 'Този стринг се използва за създаване на уникален идентификатор, който добавен като невидимо поле към формуляр, предотвратява CSRF атаки.', 'settings_error' => 'Грешка', @@ -1270,6 +1272,8 @@ $text = array( 'settings_smtpPort_desc' => 'Порт на SMTP сървъра, по подразбиране 25', 'settings_smtpSendFrom' => 'От', 'settings_smtpSendFrom_desc' => 'Изпратено от', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP Хост', 'settings_smtpServer_desc' => 'SMTP Хост', 'settings_smtpUser' => '', @@ -1315,6 +1319,7 @@ $text = array( 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => 'Тип файлове за разглеждане онлайн', 'settings_viewOnlineFileTypes_desc' => 'Файлове с едно от следните разширения могат да се разглеждат онлайн (само малки букви)', +'settings_webdav' => '', 'settings_workflowMode' => 'Вид процес', 'settings_workflowMode_desc' => 'Специален/advanced процес позволява да зададете Ваш специфичен процес за версия на документ.', 'settings_workflowMode_valadvanced' => 'advanced', diff --git a/languages/ca_ES/lang.inc b/languages/ca_ES/lang.inc index ae3b1abfe..a0eb3b88c 100644 --- a/languages/ca_ES/lang.inc +++ b/languages/ca_ES/lang.inc @@ -1142,6 +1142,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '', 'settings_enableVersionModification' => '', 'settings_enableVersionModification_desc' => '', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '', 'settings_encryptionKey_desc' => '', 'settings_error' => 'Error', @@ -1275,6 +1277,8 @@ URL: [url]', 'settings_smtpPort_desc' => '', 'settings_smtpSendFrom' => '', 'settings_smtpSendFrom_desc' => '', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => '', 'settings_smtpServer_desc' => '', 'settings_smtpUser' => '', @@ -1320,6 +1324,7 @@ URL: [url]', 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => 'View Online File Types', 'settings_viewOnlineFileTypes_desc' => 'Files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)', +'settings_webdav' => '', 'settings_workflowMode' => '', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index f48a8b46f..d4f8132c5 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -1283,6 +1283,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Povolit/zakázat odstranění předchozích verzí dokumentů běžným uživatelům. Administrátor může odstranit staré verze kdykoliv.', 'settings_enableVersionModification' => 'Povolit změnu verze', 'settings_enableVersionModification_desc' => 'Povolit/zakázat úpravu verze dokumentu běžnému uživateli po té, co byla verze nahrána. Administrátor může vždy změnit verzi po nahrání.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Encryption key', 'settings_encryptionKey_desc' => 'This string is used for creating a unique identifier being added as a hidden field to a formular in order to prevent CSRF attacks.', 'settings_error' => 'Error', @@ -1416,6 +1418,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP Server port, default 25', 'settings_smtpSendFrom' => 'Send from', 'settings_smtpSendFrom_desc' => 'Send from', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP Server hostname', 'settings_smtpServer_desc' => 'SMTP Server hostname', 'settings_smtpUser' => 'Uživatel SMTP serveru', @@ -1461,6 +1465,7 @@ URL: [url]', 'settings_versiontolow' => 'Příliš nízká verze', 'settings_viewOnlineFileTypes' => 'View Online File Types', 'settings_viewOnlineFileTypes_desc' => 'Files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)', +'settings_webdav' => '', 'settings_workflowMode' => 'Režim pracovního postupu', 'settings_workflowMode_desc' => 'Pokročilý pracovní postup umožňuje zadat vaše vlastní pracovní postupy pro uvolňování verzí dokumentů.', 'settings_workflowMode_valadvanced' => 'pokročilý', diff --git a/languages/de_DE/lang.inc b/languages/de_DE/lang.inc index ae6b77948..4b9cb9344 100644 --- a/languages/de_DE/lang.inc +++ b/languages/de_DE/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (2621), dgrutsch (22) +// Translators: Admin (2628), dgrutsch (22) $text = array( '2_factor_auth' => '2-Faktor Authentifizierung', @@ -1363,6 +1363,8 @@ Name: [username] 'settings_enableVersionDeletion_desc' => 'Setzen Sie diese Option, wenn frühere Versionen eines Dokuments durch reguläre Benutzer gelöscht werden können. Administratoren dürfen dies immer.', 'settings_enableVersionModification' => 'Erlaube Modifikation von Versionen', 'settings_enableVersionModification_desc' => 'Setzen Sie diese Option, wenn Versionen eines Dokuments nach dem Hochladen noch durch reguläre Benutzer verändert werden dürfen. Administratoren dürfen dies immer.', +'settings_enableWebdavReplaceDoc' => 'Dokument beim Speichern ersetzen', +'settings_enableWebdavReplaceDoc_desc' => 'Wenn eingeschaltet, wird beim Speichern eine bestehende Dokumentenversion ersetzt und keine neue Version erzeugt. Dies erfolgt nur wenn der Benutzer, Mimetype und Dateiname unverändert zur letzten Version sind. Diese Einstellung kann hilfreich sein, wenn Programme das geöffnete Dokument in regelmäßigen Abständen speichern.', 'settings_encryptionKey' => 'Verschlüsselungs-Sequenz', 'settings_encryptionKey_desc' => 'Diese Zeichenkette wird verwendet um eine eindeutige Kennung zu erzeugen, die als verstecktes Feld in einem Formular untergebracht wird. Sie dient zur Verhinderung von CSRF-Attacken.', 'settings_error' => 'Fehler', @@ -1496,6 +1498,8 @@ Name: [username] 'settings_smtpPort_desc' => 'SMTP Server Port, voreingestellt ist 25', 'settings_smtpSendFrom' => 'Absenderadresse', 'settings_smtpSendFrom_desc' => 'Absenderadresse für herausgehende Mails', +'settings_smtpSendTestMail' => 'Sende Testmail', +'settings_smtpSendTestMail_desc' => 'Verschickte eine Testmail, um die akuelle Konfiguration zu testen.', 'settings_smtpServer' => 'SMTP Server-Hostname', 'settings_smtpServer_desc' => 'SMTP Server-Hostname', 'settings_smtpUser' => 'SMTP Server User', @@ -1541,6 +1545,7 @@ Name: [username] 'settings_versiontolow' => 'Version zu gering', 'settings_viewOnlineFileTypes' => 'Dateitypen für Online-Ansicht', 'settings_viewOnlineFileTypes_desc' => 'Dateien mit den angegebenen Endungen können Online angeschaut werden (benutzen Sie ausschließlich Kleinbuchstaben).', +'settings_webdav' => 'WebDAV', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'Der erweiterte Workflow-Modes erlaubt es eigene Workflows zu erstellen.', 'settings_workflowMode_valadvanced' => 'erweitert', diff --git a/languages/el_GR/lang.inc b/languages/el_GR/lang.inc index a7fdc3e7c..59aee2b68 100644 --- a/languages/el_GR/lang.inc +++ b/languages/el_GR/lang.inc @@ -1148,6 +1148,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '', 'settings_enableVersionModification' => '', 'settings_enableVersionModification_desc' => '', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '', 'settings_encryptionKey_desc' => '', 'settings_error' => '', @@ -1281,6 +1283,8 @@ URL: [url]', 'settings_smtpPort_desc' => '', 'settings_smtpSendFrom' => '', 'settings_smtpSendFrom_desc' => '', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => '', 'settings_smtpServer_desc' => '', 'settings_smtpUser' => '', @@ -1326,6 +1330,7 @@ URL: [url]', 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => '', 'settings_viewOnlineFileTypes_desc' => '', +'settings_webdav' => '', 'settings_workflowMode' => '', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => '', diff --git a/languages/en_GB/lang.inc b/languages/en_GB/lang.inc index ba06e9408..90e0f605c 100644 --- a/languages/en_GB/lang.inc +++ b/languages/en_GB/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1739), archonwang (3), dgrutsch (9), netixw (14) +// Translators: Admin (1744), archonwang (3), dgrutsch (9), netixw (14) $text = array( '2_factor_auth' => '2-factor authentication', @@ -1358,6 +1358,8 @@ Name: [username] 'settings_enableVersionDeletion_desc' => 'Enable/disable deletion of previous document versions by regular users. Admin may always delete old versions.', 'settings_enableVersionModification' => 'Enable modification of versions', 'settings_enableVersionModification_desc' => 'Enable/disable modification of a document versions by regular users after a version was uploaded. Admin may always modify the version after upload.', +'settings_enableWebdavReplaceDoc' => 'Replace document when saving', +'settings_enableWebdavReplaceDoc_desc' => 'If enabled, saving a new version of a document will replace the old document instead of creating a new version. This will only apply if the user, mimetype and filename are equal to the last version. This can be usefull when applications are auto saving a document in fixed intervals.', 'settings_encryptionKey' => 'Encryption key', 'settings_encryptionKey_desc' => 'This string is used for creating a unique identifier being added as a hidden field to a form in order to prevent CSRF attacks.', 'settings_error' => 'Error', @@ -1491,6 +1493,8 @@ Name: [username] 'settings_smtpPort_desc' => 'SMTP Server port, default 25', 'settings_smtpSendFrom' => 'Send from', 'settings_smtpSendFrom_desc' => 'Send from', +'settings_smtpSendTestMail' => 'Send test mail', +'settings_smtpSendTestMail_desc' => 'Sends a test mail, for checking the current email configuration.', 'settings_smtpServer' => 'SMTP Server hostname', 'settings_smtpServer_desc' => 'SMTP Server hostname', 'settings_smtpUser' => 'SMTP Server user', @@ -1536,6 +1540,7 @@ Name: [username] 'settings_versiontolow' => 'Version to low', 'settings_viewOnlineFileTypes' => 'View Online File Types', 'settings_viewOnlineFileTypes_desc' => 'Files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)', +'settings_webdav' => 'WebDAV', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'The advanced workflow allows to specify your own release workflow for document versions.', 'settings_workflowMode_valadvanced' => 'advanced', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index d19ea21fe..db9f01750 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -1289,6 +1289,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Habilitar/Deshabilitar la eliminación de versiones anteriores de documentos por parte de usuarios. El administrador siempre podrá eliminar versiones antiguas.', 'settings_enableVersionModification' => 'Habilitar la modificación de versiones', 'settings_enableVersionModification_desc' => 'Habilitar/Deshabilitar la modificación de versiones de documentos por parte de usuarios después de añadir una nueva versión. El administrador siempre podrá modificar la versión después de añadida.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Clave de cifrado', 'settings_encryptionKey_desc' => 'Esta cadena se utiliza para crear un identificador único añadido como campo oculto a formularios para prevenir ataques CSRF.', 'settings_error' => 'Error', @@ -1422,6 +1424,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Puerto del servidor SMTP, por defecto 25', 'settings_smtpSendFrom' => 'Enviar desde', 'settings_smtpSendFrom_desc' => 'Enviar desde', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Nombre de servidor SMTP', 'settings_smtpServer_desc' => 'Nombre de servidor SMTP', 'settings_smtpUser' => 'Usuario del servidor SMTP', @@ -1467,6 +1471,7 @@ URL: [url]', 'settings_versiontolow' => 'Versión antigua', 'settings_viewOnlineFileTypes' => 'Ver en lineas las extensiones de fichero', 'settings_viewOnlineFileTypes_desc' => 'Archivos con una de las siguientes extensiones se pueden visualizar en linea (UTILICE SOLAMENTE CARACTERES EN MINÚSCULA)', +'settings_webdav' => '', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'El flujo de trabajo avanzado permite especificar su propia versión de flujo para las versiones de documento.', 'settings_workflowMode_valadvanced' => 'avanzado', diff --git a/languages/fr_FR/lang.inc b/languages/fr_FR/lang.inc index e90a53071..2250c5ddb 100644 --- a/languages/fr_FR/lang.inc +++ b/languages/fr_FR/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1085), jeromerobert (50), lonnnew (9), Oudiceval (687) +// Translators: Admin (1086), jeromerobert (50), lonnnew (9), Oudiceval (687) $text = array( '2_factor_auth' => 'Authentification forte', @@ -538,7 +538,7 @@ URL : [url]', 'export' => '', 'extension_archive' => 'Extension', 'extension_changelog' => 'Journal des modifications', -'extension_loading' => '', +'extension_loading' => 'Chargement des extensions', 'extension_manager' => 'Gestionnaire d\'extensions', 'extension_mgr_installed' => 'Installées', 'extension_mgr_no_upload' => 'L’ajout de nouvelles extensions n’est pas possible car le répertoire des extensions n’est pas accessible en écriture.', @@ -1342,6 +1342,8 @@ Nom : [username] 'settings_enableVersionDeletion_desc' => 'Active/désactive la suppression des versions antérieures de documents par les utilisateurs normaux. L’administrateur peut toujours supprimer les anciennes versions.', 'settings_enableVersionModification' => 'Modification des versions', 'settings_enableVersionModification_desc' => 'Active/désactive la modification de version d’un document par les utilisateurs normaux après le dépôt. L’administrateur peut toujours modifier la version après le dépôt.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Clé de cryptage', 'settings_encryptionKey_desc' => 'Cette chaîne est utilisée pour créer un identifiant unique étant ajouté comme champ masqué à un formulaire afin de prévenir des attaques CSRF.', 'settings_error' => 'Erreur', @@ -1475,6 +1477,8 @@ Nom : [username] 'settings_smtpPort_desc' => 'Port serveur SMTP, par défaut 25', 'settings_smtpSendFrom' => 'Envoyé par', 'settings_smtpSendFrom_desc' => 'Envoyé par', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Nom du serveur SMTP', 'settings_smtpServer_desc' => 'Nom du serveur SMTP', 'settings_smtpUser' => 'Utilisateur pour le serveur SMTP', @@ -1520,6 +1524,7 @@ Nom : [username] 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => 'Aperçu en ligne des fichiers', 'settings_viewOnlineFileTypes_desc' => 'Extensions des fichiers pouvant être visionnés en ligne (en lettres minuscules uniquement).', +'settings_webdav' => '', 'settings_workflowMode' => 'Mode workflow', 'settings_workflowMode_desc' => 'Le workflow avancé permet de définir son propre workflow de parution pour les versions de documents.', 'settings_workflowMode_valadvanced' => 'avancé', diff --git a/languages/hr_HR/lang.inc b/languages/hr_HR/lang.inc index 94e5b2184..5b4dd5a09 100644 --- a/languages/hr_HR/lang.inc +++ b/languages/hr_HR/lang.inc @@ -1310,6 +1310,8 @@ Internet poveznica: [url]', 'settings_enableVersionDeletion_desc' => 'Omogući/onemogući brisanje prethodnih verzija dokumenta redovnim korisnicima. Administrator uvijek može izbrisati stare verzije.', 'settings_enableVersionModification' => 'Omogući mijenjanje verzija', 'settings_enableVersionModification_desc' => 'Omogući/onemogući mijenjanje verzija dokumenta redovnim korisnicima nakon učitavanja verzije. Administrator uvijek može promijeniti verziju nakon učitavanja.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Ključ za šifriranje', 'settings_encryptionKey_desc' => 'Ovaj string se koristi za izradu jedinstvenog identifikatora koji će biti dodan kao skriveno polje u formularu kako bi se spriječili CSRF napadi.', 'settings_error' => 'Greška', @@ -1443,6 +1445,8 @@ Internet poveznica: [url]', 'settings_smtpPort_desc' => 'Port SMTP servera, zadano 25', 'settings_smtpSendFrom' => 'Pošalji od', 'settings_smtpSendFrom_desc' => 'Pošaji od', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Hostname SMTP servera', 'settings_smtpServer_desc' => 'Hostname SMTP servera', 'settings_smtpUser' => 'Korisnik SMTP servera', @@ -1488,6 +1492,7 @@ Internet poveznica: [url]', 'settings_versiontolow' => 'Na nižu verziju', 'settings_viewOnlineFileTypes' => 'Vidi online vrste datoteka', 'settings_viewOnlineFileTypes_desc' => 'Datoteke s jednim od sljedećih završetaka mogu se pregledati online (KORISTITE SAMO MALA SLOVA)', +'settings_webdav' => '', 'settings_workflowMode' => 'Način rada toka rada', 'settings_workflowMode_desc' => 'Napredni tok rada vam omogućuje da odredite vaše vlastito izdanje toka rada za verzije dokumenta.', 'settings_workflowMode_valadvanced' => 'napredno', diff --git a/languages/hu_HU/lang.inc b/languages/hu_HU/lang.inc index b371d52e5..926162a26 100644 --- a/languages/hu_HU/lang.inc +++ b/languages/hu_HU/lang.inc @@ -1288,6 +1288,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Engedélyezi/tiltja a korábbi dokumentum verziók törlését az általános felhasználóknak. Adminisztrátor mindig törölheti a korábbi változatokat.', 'settings_enableVersionModification' => 'Engedélyezi a verziók módosítását', 'settings_enableVersionModification_desc' => 'Engedélyezi/tiltja a dokumentum verziók módosítását az általános felhasználóknak miután a verzió feltöltésre került. Adminisztrátor mindig módosíthatja a verziót feltöltés után.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Titkosító kulcs', 'settings_encryptionKey_desc' => 'Ez a karaktersorozat használható egyedi azonosító létrehozásához amely rejtett mezőként lesz hozzáadva az űrlapokhoz a CSRF támadások megelőzésére.', 'settings_error' => 'Hiba', @@ -1421,6 +1423,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP kiszolgáló port, alapértelmezett 25', 'settings_smtpSendFrom' => 'Feladó', 'settings_smtpSendFrom_desc' => 'A levél feladója', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP kiszolgáló gépnév', 'settings_smtpServer_desc' => 'SMTP kiszolgáló gépnév', 'settings_smtpUser' => 'SMTP kiszolgáló felhasználó', @@ -1466,6 +1470,7 @@ URL: [url]', 'settings_versiontolow' => 'túl alacsony verzió', 'settings_viewOnlineFileTypes' => 'Online állománytípus nézet', 'settings_viewOnlineFileTypes_desc' => 'A következő végződéssel rendelkező állományok megtekinthetők online (KIZÁRÓLAG KISBETŰS KARAKTEREKET HASZNÁLJON)', +'settings_webdav' => '', 'settings_workflowMode' => 'Munkafolyamat mód', 'settings_workflowMode_desc' => 'A részletes munkafolyamat engedélyezi saját kiadási munkafolyamat megadását a dokumentum változatokhoz.', 'settings_workflowMode_valadvanced' => 'részletes', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 01c76f637..001d1e44e 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -1322,6 +1322,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Abilita/disabilita il permesso di cancellare le versioni precedenti di un documento da parte di un qualsiasi utente. Gli Amministratori hanno sempre e comunque tale facoltà.', 'settings_enableVersionModification' => 'Abilita modifica della versione', 'settings_enableVersionModification_desc' => 'Abilita/disabilita il permesso di modificare le versioni di un documento da parte di un qualsiasi utente. Gli Amministratori hanno sempre e comunque tale facoltà.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Chiave di criptazione', 'settings_encryptionKey_desc' => 'La chiave viene usata per creare un identificatore unico da aggiungere come campo nascosto ad un formulario per protezione da attacchi CSRF.', 'settings_error' => 'Errore', @@ -1455,6 +1457,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Porta utilizzata dal server di posta SMTP. Default: 25', 'settings_smtpSendFrom' => 'Mittente', 'settings_smtpSendFrom_desc' => 'Mittente per le notifiche via email', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Nome host server SMTP', 'settings_smtpServer_desc' => 'Nome host server SMTP', 'settings_smtpUser' => 'Utente server SMTP', @@ -1500,6 +1504,7 @@ URL: [url]', 'settings_versiontolow' => 'Versione obsoleta', 'settings_viewOnlineFileTypes' => 'Tipi di files visualizzabili', 'settings_viewOnlineFileTypes_desc' => 'Solo i files che terminano nella maniera seguente verranno visualizzati (UTILIZZARE SOLO IL MINUSCOLO)', +'settings_webdav' => '', 'settings_workflowMode' => 'Modalità flusso di lavoro', 'settings_workflowMode_desc' => 'Il flusso di lavoro \'avanzato\' permette di rilasciare un proprio flusso di lavoro per le versioni dei documenti', 'settings_workflowMode_valadvanced' => 'Avanzato', diff --git a/languages/ko_KR/lang.inc b/languages/ko_KR/lang.inc index 883b8ebc1..ce8f0c160 100644 --- a/languages/ko_KR/lang.inc +++ b/languages/ko_KR/lang.inc @@ -1304,6 +1304,8 @@ URL : [url]', 'settings_enableVersionDeletion_desc' => '일반 사용자가 이전 문서 버전의 활성화 / 비활성화 삭제를 활성화합니다. 관리자는 항상 이전 버전을 삭제할 수 있습니다.', 'settings_enableVersionModification' => '버전의 수정 사용', 'settings_enableVersionModification_desc' => '버전이 업로드 된 후 일반 사용자가 문서 버전의 활성화 / 비활성화 수정을 사용합니다. 관리자는 항상 업로드 후 버전을 수정할 수 있습니다.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '암호화 키', 'settings_encryptionKey_desc' => '이 문자열은 CSRF 공격을 방지하기 위해 formular에 숨겨진 필드로 추가되는 고유 식별자를 만드는 데 사용된다.', 'settings_error' => '오류', @@ -1437,6 +1439,8 @@ URL : [url]', 'settings_smtpPort_desc' => 'SMTP 서버 포트, 기본 25', 'settings_smtpSendFrom' => '송신자', 'settings_smtpSendFrom_desc' => '송신자', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP 서버의 호스트 이름', 'settings_smtpServer_desc' => 'SMTP 서버의 호스트 이름', 'settings_smtpUser' => 'SMTP 서버 사용자', @@ -1482,6 +1486,7 @@ URL : [url]', 'settings_versiontolow' => '낮은 버전', 'settings_viewOnlineFileTypes' => '온라인 파일 형식 보기', 'settings_viewOnlineFileTypes_desc' => '최종 파일은 온라인을 통헤 보여진다. (소문자 만 사용) Files with one of the following endings can be viewed online', +'settings_webdav' => '', 'settings_workflowMode' => '워크플로우 모드', 'settings_workflowMode_desc' => '문서 버전에 대한 자신의 릴리스 워크플로우 지정하실 수 있습니다 .', 'settings_workflowMode_valadvanced' => '고급', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index bcb880b14..488b6d7f4 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -1334,6 +1334,8 @@ Name: [username] 'settings_enableVersionDeletion_desc' => 'Inschakelen/uitschakelen verwijderen van voorgaande documentversies door normale gebruikers. Beheerder mag altijd oude versies verwijderen.', 'settings_enableVersionModification' => 'Inschakelen van versiebewerking', 'settings_enableVersionModification_desc' => 'Inschakelen/uitschakelen van bewerkingen op documentversies door normale gebruikers na een versie upload. Beheerder mag altijd de versie wijzigen na upload.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Encryptie sleutel', 'settings_encryptionKey_desc' => 'Deze string wordt gebruikt om een unieke identificatie als onzichtbaar veld aan een formulier toe te voegen om CSRF aanvallen tegen te gaan.', 'settings_error' => 'Fout', @@ -1467,6 +1469,8 @@ Name: [username] 'settings_smtpPort_desc' => 'SMTP Server poort, standaard 25', 'settings_smtpSendFrom' => 'Send from', 'settings_smtpSendFrom_desc' => 'Send from', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP Server hostname', 'settings_smtpServer_desc' => 'SMTP Server hostname', 'settings_smtpUser' => 'SMTP Server gebruiker', @@ -1512,6 +1516,7 @@ Name: [username] 'settings_versiontolow' => 'Versie te laag', 'settings_viewOnlineFileTypes' => 'De volgende bestandstypen online bekijken', 'settings_viewOnlineFileTypes_desc' => 'Bestanden met een van de volgende extensies kunnen online bekeken worden (GEBRUIK ALLEEN KLEINE LETTERS)', +'settings_webdav' => '', 'settings_workflowMode' => 'Workflow mode', 'settings_workflowMode_desc' => 'De uitgebreide workflow maakt het mogelijk om uw eigen workflow op te geven voor documentversies.', 'settings_workflowMode_valadvanced' => 'geavanceerd', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 2a9e4cf5a..01ce82dab 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (796), netixw (84), romi (93), uGn (112) +// Translators: Admin (797), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', @@ -843,7 +843,7 @@ URL: [url]', 'only_jpg_user_images' => 'Wyłącznie pliki typu .jpg mogą być użyte jako obrazy użytkowników', 'order_by_sequence_off' => '', 'original_filename' => 'Oryginalna nazwa pliku', -'overall_indexing_progress' => '', +'overall_indexing_progress' => 'Całkowity postęp indeksowania', 'owner' => 'Właściciel', 'ownership_changed_email' => 'Właściciel zmieniony', 'ownership_changed_email_body' => 'Zmiana właściciela @@ -1268,6 +1268,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Włącz/Wyłącz możliwość kasowania poprzednich wersji plików przez zwykłych użytkowników. Administrator może w każdej chwili usunąć stare wersjie.', 'settings_enableVersionModification' => 'Zezwól na modyfikowanie wersji', 'settings_enableVersionModification_desc' => 'Włącz/Wyłącz możliwość modyfikacji wersji dokumentów przez zwykłych użytkowników po wczytaniu pliku. Administrator może w każdej chwili zmienić wersję wczytanego pliku.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Klucz szyfrujący', 'settings_encryptionKey_desc' => 'Ten ciąg znaków jest używany do tworzenia unikatowego identyfikatora dodawanego jako ukryte pole do formularza aby zapobiec atakom CSRF.', 'settings_error' => 'Błąd', @@ -1401,6 +1403,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Port serwera SMTP, domyślnie 25', 'settings_smtpSendFrom' => 'Wyślij od', 'settings_smtpSendFrom_desc' => 'Wyślij od', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Nazwa serwera SMTP', 'settings_smtpServer_desc' => 'Nazwa hosta serwera SMTP', 'settings_smtpUser' => 'Użytkownik SMTP', @@ -1446,6 +1450,7 @@ URL: [url]', 'settings_versiontolow' => 'Za niska wersja', 'settings_viewOnlineFileTypes' => 'Typy plików widoczne online', 'settings_viewOnlineFileTypes_desc' => 'Pliki z jednym z następujących rozszerzeń mogą być widoczne online (UŻYWAJ WYŁĄCZNIE MAŁYCH LITER)', +'settings_webdav' => '', 'settings_workflowMode' => 'Tryb procesu', 'settings_workflowMode_desc' => 'Zaawansowany proces pozwala określić własne release procesu zwalniający dla wersji dokumentu.', 'settings_workflowMode_valadvanced' => 'zaawansowane', diff --git a/languages/pt_BR/lang.inc b/languages/pt_BR/lang.inc index 647438f13..fa4003f2c 100644 --- a/languages/pt_BR/lang.inc +++ b/languages/pt_BR/lang.inc @@ -1286,6 +1286,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Ativar/desativar a exclusão de versões de documentos anteriores por usuários regulares. Administrador pode sempre apagar versões antigas.', 'settings_enableVersionModification' => 'Ativar modificação de versões', 'settings_enableVersionModification_desc' => 'Ativar/desativar a modificação de versões de documentos por usuários comuns, depois que uma versão foi enviada. Administrador pode sempre modificar a versão após o upload.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Chave de criptografia', 'settings_encryptionKey_desc' => 'Esta cadeia é usada para a criação de um identificador único a ser adicionado como um campo oculto para formular, a fim de evitar ataques CSRF.', 'settings_error' => 'Erro', @@ -1419,6 +1421,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Porta do Servidor SMTP, padrão 25', 'settings_smtpSendFrom' => 'Enviar a partir de', 'settings_smtpSendFrom_desc' => 'Enviar a partir de', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Hostname do servidor SMTP', 'settings_smtpServer_desc' => 'Hostname do servidor SMTP', 'settings_smtpUser' => 'Usuário do servidor SMTP', @@ -1464,6 +1468,7 @@ URL: [url]', 'settings_versiontolow' => 'Versão para baixo', 'settings_viewOnlineFileTypes' => 'Ver Tipos de arquivo on-line', 'settings_viewOnlineFileTypes_desc' => 'Os arquivos com uma das seguintes terminações podem ser visualizados on-line (use somente caracteres minúsculos)', +'settings_webdav' => '', 'settings_workflowMode' => 'Modo de fluxo de trabalho', 'settings_workflowMode_desc' => 'O fluxo de trabalho avançado permite especificar seu próprio fluxo de trabalho de liberação de versões de documentos.', 'settings_workflowMode_valadvanced' => 'avançado', diff --git a/languages/ro_RO/lang.inc b/languages/ro_RO/lang.inc index a5d29fcb3..3cb03fa68 100644 --- a/languages/ro_RO/lang.inc +++ b/languages/ro_RO/lang.inc @@ -1311,6 +1311,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Activarea/dezactivarea ștergerii versiunilor anterioare de documente de către utilizatorii obisnuiti. Adminul poate șterge oricând versiunile vechi.', 'settings_enableVersionModification' => 'Activați modificarea versiunilor', 'settings_enableVersionModification_desc' => 'Activarea/dezactivarea modificarii unei versiuni de documente de către utilizatorii obisnuiti, după ce o versiune a fost încărcată. Adminul poate modifica oricând versiunea după încărcare.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Cheia de criptare', 'settings_encryptionKey_desc' => 'Acest șir este utilizat pentru crearea unui identificator unic ce este adăugat ca un câmp ascuns pentru un formular, cu scopul de a preveni atacurile CSRF.', 'settings_error' => 'Eroare', @@ -1444,6 +1446,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Port server SMTP, implicit 25', 'settings_smtpSendFrom' => 'Trimite de la', 'settings_smtpSendFrom_desc' => 'Trimite de la', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Hostname server SMTP', 'settings_smtpServer_desc' => 'Hostname server SMTP', 'settings_smtpUser' => 'User server SMTP', @@ -1489,6 +1493,7 @@ URL: [url]', 'settings_versiontolow' => 'Versiunea e prea mică(veche)', 'settings_viewOnlineFileTypes' => 'Vezi Tipurile de fișiere online', 'settings_viewOnlineFileTypes_desc' => 'Fișierele cu una dintre următoarele terminații/extensii pot fi vizualizate online (utilizati numai caractere minuscule)', +'settings_webdav' => '', 'settings_workflowMode' => 'Mod Workflow', 'settings_workflowMode_desc' => 'Workflow-ul avansat permite să specificați propriul flux de lucru(workflow) pentru versiunile de documente.', 'settings_workflowMode_valadvanced' => 'avansat', diff --git a/languages/ru_RU/lang.inc b/languages/ru_RU/lang.inc index c3d234a08..cef054f99 100644 --- a/languages/ru_RU/lang.inc +++ b/languages/ru_RU/lang.inc @@ -1318,6 +1318,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Разрешить или запретить обычным пользователям удаление предыдущих версий документа. Администратор всегда сможет удалить старые версии документов.', 'settings_enableVersionModification' => 'Разрешить изменение версий', 'settings_enableVersionModification_desc' => 'Разрешить или запретить обычным пользователям изменение версий документов после их загрузки на сервер. Администратор всегда сможет изменить версии документов после их загрузки на сервер.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Ключ шифрования', 'settings_encryptionKey_desc' => 'Строка используется для создания уникального идентификатора, добавляемого как скрытые поля к формулярам, для предотвращения CSRF-атак.', 'settings_error' => 'Ошибка', @@ -1451,6 +1453,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Порт сервера SMTP, по умолчанию 25.', 'settings_smtpSendFrom' => 'От', 'settings_smtpSendFrom_desc' => 'Отправлять с указанного адреса.', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Хост SMTP', 'settings_smtpServer_desc' => 'Хост сервера SMTP.', 'settings_smtpUser' => 'Пользователь сервера SMTP', @@ -1496,6 +1500,7 @@ URL: [url]', 'settings_versiontolow' => 'Слишком старая версия', 'settings_viewOnlineFileTypes' => 'Типы файлов для просмотра онлайн', 'settings_viewOnlineFileTypes_desc' => 'Файлы с одним из следующих расширений могут просматриваться онлайн (только маленькие буквы).', +'settings_webdav' => '', 'settings_workflowMode' => 'Режим процесса', 'settings_workflowMode_desc' => 'Улучшенный режим позволяет указать ваш собственный процесс для документа.', 'settings_workflowMode_valadvanced' => 'улучшенный', diff --git a/languages/sk_SK/lang.inc b/languages/sk_SK/lang.inc index cecdde5fe..512246984 100644 --- a/languages/sk_SK/lang.inc +++ b/languages/sk_SK/lang.inc @@ -1149,6 +1149,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '', 'settings_enableVersionModification' => '', 'settings_enableVersionModification_desc' => '', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '', 'settings_encryptionKey_desc' => '', 'settings_error' => 'Chyba', @@ -1282,6 +1284,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP Server port, štandardne 25', 'settings_smtpSendFrom' => 'Odoslané z', 'settings_smtpSendFrom_desc' => 'Odoslané z', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP Server názov hostiteľa', 'settings_smtpServer_desc' => 'SMTP Server názov hostiteľa', 'settings_smtpUser' => 'SMTP Server používateľ', @@ -1327,6 +1331,7 @@ URL: [url]', 'settings_versiontolow' => 'Verzia je nízka', 'settings_viewOnlineFileTypes' => 'Zobraziť online typy súborov', 'settings_viewOnlineFileTypes_desc' => '', +'settings_webdav' => '', 'settings_workflowMode' => '', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => 'pokročilý', diff --git a/languages/sv_SE/lang.inc b/languages/sv_SE/lang.inc index 227a4a71f..26fd4aef6 100644 --- a/languages/sv_SE/lang.inc +++ b/languages/sv_SE/lang.inc @@ -1331,6 +1331,8 @@ Kommentar: [comment]', 'settings_enableVersionDeletion_desc' => 'Aktivera/Inaktivera möjlighet att ta bort äldre dokumentversioner genom användare. Administratorn kan alltid ta bort äldre versioner.', 'settings_enableVersionModification' => 'Aktivera modifiering av versionen', 'settings_enableVersionModification_desc' => 'Aktivera/Inaktivera modifiering av en dokumentversionen genom användare efter att en version har laddats upp. Administratören kan alltid ändra versionen efter att den har laddats upp.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Krypteringsnyckel', 'settings_encryptionKey_desc' => 'Denna sträng används för att generera en unik identifierare, som är inrymd som ett dolt fält i ett formulär. Det används för att förhindra CSRF-attacker.', 'settings_error' => 'Fel', @@ -1464,6 +1466,8 @@ Kommentar: [comment]', 'settings_smtpPort_desc' => 'SMTP server-port, default 25', 'settings_smtpSendFrom' => 'Skickat från', 'settings_smtpSendFrom_desc' => 'Skickat från', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP server-hostname', 'settings_smtpServer_desc' => 'SMTP server-hostname', 'settings_smtpUser' => 'SMTP Server användare', @@ -1509,6 +1513,7 @@ Kommentar: [comment]', 'settings_versiontolow' => 'Version för låg', 'settings_viewOnlineFileTypes' => 'Visa online-filtyper', 'settings_viewOnlineFileTypes_desc' => 'Filer av en av de följande filtyperna kan visas online. OBS! ANVÄND BARA SMÅ BOKSTÄVER', +'settings_webdav' => '', 'settings_workflowMode' => 'Typ av arbetsflöde', 'settings_workflowMode_desc' => 'Det avancerade arbetsflödet gör det möjligt att lägga upp ett eget definerat gransknings- och godkännandeflöde för dokumentversioner.', 'settings_workflowMode_valadvanced' => 'avancerat', diff --git a/languages/tr_TR/lang.inc b/languages/tr_TR/lang.inc index 3fc95269e..ab7828982 100644 --- a/languages/tr_TR/lang.inc +++ b/languages/tr_TR/lang.inc @@ -1290,6 +1290,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Kullanıcıların eski sürümlü dokümanları silmelerine izin vermeyi etkinleştir/devre dışı bırak. Yönetici her zaman eski versiyonları silebilir.', 'settings_enableVersionModification' => 'Versiyon değiştirmeyi etkinleştir', 'settings_enableVersionModification_desc' => 'Bu etkinleştirilirse kullanıcılar yeni doküman yüklediklerinde versiyon numaralarını değiştirebilirler. Yöneticiler yükleme yaptıklarında her zaman değişiklik yapabilirler.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Şifreleme anahtarı', 'settings_encryptionKey_desc' => 'Bu string, CSRF ataklarını önlemek için eşsiz id olarak kaydedilir.', 'settings_error' => 'Hata', @@ -1423,6 +1425,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP Sunucu portu, varsayılan 25', 'settings_smtpSendFrom' => 'Kimden', 'settings_smtpSendFrom_desc' => 'Gönderilecek e-postalar kimden gidecek', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP Sunucu adı/adresi', 'settings_smtpServer_desc' => 'SMTP sunucu adı/adresi', 'settings_smtpUser' => 'SMTP Sunucu kullanıcı adı', @@ -1468,6 +1472,7 @@ URL: [url]', 'settings_versiontolow' => 'Versiyon düşük', 'settings_viewOnlineFileTypes' => 'Online Dosya Tiplerini Görüntüle', 'settings_viewOnlineFileTypes_desc' => 'Belirtilen uzantıdaki dosyalar online olarak görüntülenebilir. (SADECE KÜÇÜK HARF KULLANIN)', +'settings_webdav' => '', 'settings_workflowMode' => 'İş Akış Modu', 'settings_workflowMode_desc' => 'Gelişmiş İş Akışı, dokümün versiyonları için kendi sürümlerinizi belirlemenizi sağlar.', 'settings_workflowMode_valadvanced' => 'gelişmiş', diff --git a/languages/uk_UA/lang.inc b/languages/uk_UA/lang.inc index 6b9d515de..5fa74dc12 100644 --- a/languages/uk_UA/lang.inc +++ b/languages/uk_UA/lang.inc @@ -1311,6 +1311,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => 'Дозволити/заборонити звичайним користувачам видаляти попередні версії документів. Адміністратор завжди зможе видалити старі версії документів.', 'settings_enableVersionModification' => 'Дозволити зміну версій', 'settings_enableVersionModification_desc' => 'Дозволити/заборонити звичайним користувачам змінювати версію документів після завантаження їх на сервер. Адміністратор завжди зможе змінювати версії документів після завантаження їх на сервер.', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => 'Ключ шифрування', 'settings_encryptionKey_desc' => 'Рядок використовується для створення унікального ідентифікатора, який додається як приховане поле до формулярів, для запобігання CSRF-атак.', 'settings_error' => 'Помилка', @@ -1444,6 +1446,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'Порт сервера SMTP, по замовчуванню 25.', 'settings_smtpSendFrom' => 'Від', 'settings_smtpSendFrom_desc' => 'Відправляти із вказаної адреси.', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'Хост SMTP', 'settings_smtpServer_desc' => 'Хост сервера SMTP.', 'settings_smtpUser' => 'Користувач сервера SMTP', @@ -1489,6 +1493,7 @@ URL: [url]', 'settings_versiontolow' => 'Надто стара версія', 'settings_viewOnlineFileTypes' => 'Типи файлів для перегляду онлайн', 'settings_viewOnlineFileTypes_desc' => 'Файли з такими розширеннями можна переглядати онлайн (лише малі літери).', +'settings_webdav' => '', 'settings_workflowMode' => 'Режим процесу', 'settings_workflowMode_desc' => 'Покращений режим дозволяє вказати ваш власний процес для документа.', 'settings_workflowMode_valadvanced' => 'покращений', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 95d60abef..82e82876a 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -1292,6 +1292,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '启用/禁用普通用户删除以前的文档版本。管理员除外(可随时删除旧版本)。', 'settings_enableVersionModification' => '启用版本修改功能', 'settings_enableVersionModification_desc' => '通过用户上传新版本,启用/禁用文档版本修改', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '加密密钥', 'settings_encryptionKey_desc' => '', 'settings_error' => '错误', @@ -1425,6 +1427,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP 服务器端口,默认25', 'settings_smtpSendFrom' => '发送自', 'settings_smtpSendFrom_desc' => '发送自', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP 服务器名称', 'settings_smtpServer_desc' => 'SMTP 服务器名称', 'settings_smtpUser' => 'SMTP服务器用户', @@ -1470,6 +1474,7 @@ URL: [url]', 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => '查看在线文件属性', 'settings_viewOnlineFileTypes_desc' => '', +'settings_webdav' => '', 'settings_workflowMode' => '工作流模式', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => '先进...', diff --git a/languages/zh_TW/lang.inc b/languages/zh_TW/lang.inc index 41a6680d9..0e020cc68 100644 --- a/languages/zh_TW/lang.inc +++ b/languages/zh_TW/lang.inc @@ -1141,6 +1141,8 @@ URL: [url]', 'settings_enableVersionDeletion_desc' => '', 'settings_enableVersionModification' => '', 'settings_enableVersionModification_desc' => '', +'settings_enableWebdavReplaceDoc' => '', +'settings_enableWebdavReplaceDoc_desc' => '', 'settings_encryptionKey' => '', 'settings_encryptionKey_desc' => '', 'settings_error' => '', @@ -1274,6 +1276,8 @@ URL: [url]', 'settings_smtpPort_desc' => 'SMTP 伺服器埠,默認25', 'settings_smtpSendFrom' => '發送自', 'settings_smtpSendFrom_desc' => '發送自', +'settings_smtpSendTestMail' => '', +'settings_smtpSendTestMail_desc' => '', 'settings_smtpServer' => 'SMTP 伺服器名稱', 'settings_smtpServer_desc' => 'SMTP 伺服器名稱', 'settings_smtpUser' => '', @@ -1319,6 +1323,7 @@ URL: [url]', 'settings_versiontolow' => '', 'settings_viewOnlineFileTypes' => '', 'settings_viewOnlineFileTypes_desc' => '', +'settings_webdav' => '', 'settings_workflowMode' => '', 'settings_workflowMode_desc' => '', 'settings_workflowMode_valadvanced' => '先進...', From 2fbccd52fb70386a9ab29152cdcc7d667471e7b3 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 19:46:25 +0200 Subject: [PATCH 073/356] return false instead of -1 --- inc/inc.ClassEmailNotify.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/inc.ClassEmailNotify.php b/inc/inc.ClassEmailNotify.php index ae5cfbb04..2fe71b99a 100644 --- a/inc/inc.ClassEmailNotify.php +++ b/inc/inc.ClassEmailNotify.php @@ -141,7 +141,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_object($groupRecipient) || strcasecmp(get_class($groupRecipient), $this->_dms->getClassname('group')))) { - return -1; + return false; } foreach ($groupRecipient->getUsers() as $recipient) { @@ -154,7 +154,7 @@ class SeedDMS_EmailNotify extends SeedDMS_Notify { function toList($sender, $recipients, $subject, $message, $params=array()) { /* {{{ */ if ((!is_object($sender) && strcasecmp(get_class($sender), $this->_dms->getClassname('user'))) || (!is_array($recipients) && count($recipients)==0)) { - return -1; + return false; } foreach ($recipients as $recipient) { From 97d0eb7b06b6fcb545eaca713c6a77e5154be7dc Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 19:46:54 +0200 Subject: [PATCH 074/356] return return value of service function --- inc/inc.ClassNotificationService.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inc/inc.ClassNotificationService.php b/inc/inc.ClassNotificationService.php index e168bab08..c44c4018d 100644 --- a/inc/inc.ClassNotificationService.php +++ b/inc/inc.ClassNotificationService.php @@ -36,19 +36,19 @@ class SeedDMS_NotificationService { public function toIndividual($sender, $recipient, $subject, $message, $params=array()) { foreach($this->services as $service) { - $service->toIndividual($sender, $recipient, $subject, $message, $params); + return $service->toIndividual($sender, $recipient, $subject, $message, $params); } } public function toGroup($sender, $groupRecipient, $subject, $message, $params=array()) { foreach($this->services as $service) { - $service->toGroup($sender, $groupRecipient, $subject, $message, $params); + return $service->toGroup($sender, $groupRecipient, $subject, $message, $params); } } public function toList($sender, $recipients, $subject, $message, $params=array()) { foreach($this->services as $service) { - $service->toList($sender, $recipients, $subject, $message, $params); + return $service->toList($sender, $recipients, $subject, $message, $params); } } From 7005305a081f0841f186407aba844fcfa8500eec Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 19:47:20 +0200 Subject: [PATCH 075/356] fix typo in variable --- op/op.ExtensionMgr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op/op.ExtensionMgr.php b/op/op.ExtensionMgr.php index 22c33c8bd..55dcd0177 100644 --- a/op/op.ExtensionMgr.php +++ b/op/op.ExtensionMgr.php @@ -72,7 +72,7 @@ elseif ($action == "refresh") { /* {{{ */ header("Location:../out/out.ExtensionMgr.php?currenttab=".$currenttab); } /* }}} */ elseif ($action == "upload") { /* {{{ */ - if(!$extmgr->isWritableExtDir()) { + if(!$extMgr->isWritableExtDir()) { UI::exitError(getMLText("admin_tools"),getMLText("extension_mgr_no_upload")); } if($_FILES['userfile']['error']) { From 1c24059fe990456d0ea77ac6e0dac897385ee122 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Thu, 19 Apr 2018 19:48:20 +0200 Subject: [PATCH 076/356] show section for extension only if extension has configuration --- views/bootstrap/class.Settings.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/views/bootstrap/class.Settings.php b/views/bootstrap/class.Settings.php index f7872f01e..c17f3f22b 100644 --- a/views/bootstrap/class.Settings.php +++ b/views/bootstrap/class.Settings.php @@ -453,6 +453,7 @@ $this->showStartPaneContent('site', (!$currenttab || $currenttab == 'site')); --> $extconf) { + if($extconf['config']) { $this->showRawConfigHeadline("".$extconf['title']); foreach($extconf['config'] as $confkey=>$conf) { ob_start(); @@ -546,7 +547,8 @@ $this->showStartPaneContent('site', (!$currenttab || $currenttab == 'site')); $html = ob_get_clean(); $this->showConfigPlain($conf['title'], isset($conf['help']) ? $conf['help'] : '', $html); } - } + } + } $this->showEndPaneContent('extensions', $currenttab); ?> From da2696869bfba33fbc5a8fa70ffae0a70379acf4 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 23 Apr 2018 15:27:23 +0200 Subject: [PATCH 077/356] do not pass $user to controllor factory --- op/op.Login.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op/op.Login.php b/op/op.Login.php index 5b11515f7..99b553353 100644 --- a/op/op.Login.php +++ b/op/op.Login.php @@ -38,7 +38,7 @@ function _printMessage($heading, $message) { /* {{{ */ } /* }}} */ $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); -$controller = Controller::factory($tmp[1], array('dms'=>$dms, 'user'=>$user)); +$controller = Controller::factory($tmp[1], array('dms'=>$dms)); if (isset($_REQUEST["sesstheme"]) && strlen($_REQUEST["sesstheme"])>0 && is_numeric(array_search($_REQUEST["sesstheme"],UI::getStyles())) ) { $theme = $_REQUEST["sesstheme"]; From da3e359cd24b4ec850c8ceef55d5b967ee494656 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 23 Apr 2018 15:27:42 +0200 Subject: [PATCH 078/356] set showtree for view --- out/out.Calendar.php | 1 + 1 file changed, 1 insertion(+) diff --git a/out/out.Calendar.php b/out/out.Calendar.php index fbc9e96c8..cad975bff 100644 --- a/out/out.Calendar.php +++ b/out/out.Calendar.php @@ -67,6 +67,7 @@ if($view) { $view->setParam('document', $document); $view->setParam('version', $content); $view->setParam('event', $event); + $view->setParam('showtree', showtree()); $view->setParam('strictformcheck', $settings->_strictFormCheck); $view->setParam('eventtype', $eventtype); $view->setParam('cachedir', $settings->_cacheDir); From f7310b2b5f1889ddd5fceb89162b075b2cf7b6a2 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 23 Apr 2018 15:50:46 +0200 Subject: [PATCH 079/356] use method formField() instead of html --- views/bootstrap/class.AddEvent.php | 55 +++---- views/bootstrap/class.AddFile.php | 67 ++++---- views/bootstrap/class.AddSubFolder.php | 59 +++---- views/bootstrap/class.ApproveDocument.php | 40 ++--- views/bootstrap/class.AttributeMgr.php | 95 ++++------- views/bootstrap/class.Bootstrap.php | 133 ++++++++++------ views/bootstrap/class.Calendar.php | 58 +++---- views/bootstrap/class.Categories.php | 18 +-- views/bootstrap/class.ChangePassword.php | 24 ++- views/bootstrap/class.DocumentNotify.php | 7 +- views/bootstrap/class.EditAttributes.php | 18 +-- views/bootstrap/class.EditComment.php | 16 +- views/bootstrap/class.EditDocumentFile.php | 51 +++--- views/bootstrap/class.EditFolder.php | 45 ++---- views/bootstrap/class.EditUserData.php | 148 +++++++----------- views/bootstrap/class.ExtensionMgr.php | 19 +-- views/bootstrap/class.GroupMgr.php | 26 ++- views/bootstrap/class.ImportFS.php | 13 +- views/bootstrap/class.Login.php | 78 ++++----- views/bootstrap/class.MoveDocument.php | 6 +- views/bootstrap/class.MoveFolder.php | 6 +- .../bootstrap/class.OverrideContentStatus.php | 42 +++-- views/bootstrap/class.PasswordForgotten.php | 29 ++-- views/bootstrap/class.SendLoginData.php | 23 +-- views/bootstrap/class.SetExpires.php | 43 +++-- views/bootstrap/class.SetWorkflow.php | 26 ++- views/bootstrap/class.Setup2Factor.php | 6 +- views/bootstrap/class.TransferDocument.php | 32 ++-- views/bootstrap/class.TransferObjects.php | 26 +-- views/bootstrap/class.TriggerWorkflow.php | 18 +-- 30 files changed, 481 insertions(+), 746 deletions(-) diff --git a/views/bootstrap/class.AddEvent.php b/views/bootstrap/class.AddEvent.php index 1ae94eb53..9d7dbf70b 100644 --- a/views/bootstrap/class.AddEvent.php +++ b/views/bootstrap/class.AddEvent.php @@ -85,43 +85,28 @@ $(document).ready(function() {
    -
    - -
    printDateChooser(-1, "from");?> - - - - -
    -
    - -
    - -
    printDateChooser(-1, "to");?> - - - - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - -
    - "> -
    +formField( + getMLText("from"), + $this->getDateChooser($expdate, "from", $this->params['session']->getLanguage()) + ); + $this->formField( + getMLText("to"), + $this->getDateChooser($expdate, "to", $this->params['session']->getLanguage()) + ); + $this->formField( + getMLText("name"), + '' + ); + $this->formField( + getMLText("comment"), + '' + ); + $this->formSubmit(getMLText('add_event')); +?>
    + contentContainerEnd(); $this->contentEnd(); diff --git a/views/bootstrap/class.AddFile.php b/views/bootstrap/class.AddFile.php index 2cafae90a..58d5ddc31 100644 --- a/views/bootstrap/class.AddFile.php +++ b/views/bootstrap/class.AddFile.php @@ -152,50 +152,37 @@ $(document).ready( function() {
    -
    - -
    -printFineUploaderHtml(); - else - $this->printFileChooser('userfile[]', false); -?> -
    -
    -
    - -
    + '; $versions = $document->getContent(); foreach($versions as $version) - echo ""; + $html .= ""; + $html .= ''; + $this->formField( + getMLText("version"), + $html + ); + $this->formField( + getMLText("name"), + '' + ); + $this->formField( + getMLText("comment"), + '' + ); + if ($document->getAccessMode($user) >= M_READWRITE) { + $this->formField( + getMLText("document_link_public"), + '' + ); + } + $this->formSubmit(getMLText('add')); ?> -
    -
    -
    - -
    -
    -
    - -
    - -
    -
    -getAccessMode($user) >= M_READWRITE) { - print "
    "; - print "
    "; - print ""; - print "
    "; - } -?> -
    - -
    ">
    -
    contentContainerEnd(); diff --git a/views/bootstrap/class.AddSubFolder.php b/views/bootstrap/class.AddSubFolder.php index 9202a2282..b83ac08cd 100644 --- a/views/bootstrap/class.AddSubFolder.php +++ b/views/bootstrap/class.AddSubFolder.php @@ -83,49 +83,32 @@ $(document).ready( function() { - -
    - -
    -
    +formField( + getMLText("name"), + '' + ); + $this->formField( + getMLText("comment"), + '' + ); + $this->formField(getMLText("sequence"), $this->getSequenceChooser($folder->getSubFolders('s')).($orderby != 's' ? "
    ".getMLText('order_by_sequence_off') : '')); -
    - -
    -
    - -
    - -
    printSequenceChooser($folder->getSubFolders('s')); if($orderby != 's') echo "
    ".getMLText('order_by_sequence_off');?>
    -
    -getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::objtype_all)); - if($attrdefs) { - foreach($attrdefs as $attrdef) { - $arr = $this->callHook('addFolderAttribute', null, $attrdef); - if(is_array($arr)) { - if($arr) { - echo "
    "; - echo " "; - echo "
    ".$arr[1]."
    "; - echo "
    "; + $attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_folder, SeedDMS_Core_AttributeDefinition::objtype_all)); + if($attrdefs) { + foreach($attrdefs as $attrdef) { + $arr = $this->callHook('addFolderAttribute', null, $attrdef); + if(is_array($arr)) { + if($arr) { + $this->formField($arr[0], $arr[1]); + } + } else { + $this->formField(htmlspecialchars($attrdef->getName()), $this->getAttributeEditField($attrdef, '')); } - } else { -?> -
    - -
    printAttributeEditField($attrdef, '') ?>
    -
    -formSubmit(" ".getMLText('add_subfolder')); ?> - -
    - "> -
    - contentContainerEnd(); diff --git a/views/bootstrap/class.ApproveDocument.php b/views/bootstrap/class.ApproveDocument.php index d9c739257..632467661 100644 --- a/views/bootstrap/class.ApproveDocument.php +++ b/views/bootstrap/class.ApproveDocument.php @@ -129,35 +129,23 @@ $(document).ready(function() { print "
    \n"; } ?> -
    + - - - - - - - - - - - - -
    :
    : printFileChooser('approvalfile', false); + $this->formField( + getMLText("comment"), + '' + ); + $this->formField( + getMLText("approval_file"), + $this->getFileChooser('approvalfile', false) + ); + $this->formField( + getMLText("approval_status"), + '' + ); + $this->formSubmit(getMLText('submit_approval'), $approvaltype.'Approval'); ?> -
    : - -
    -
    diff --git a/views/bootstrap/class.AttributeMgr.php b/views/bootstrap/class.AttributeMgr.php index da51874ed..d0f0a5dfd 100644 --- a/views/bootstrap/class.AttributeMgr.php +++ b/views/bootstrap/class.AttributeMgr.php @@ -189,18 +189,11 @@ $(document).ready( function() { formField( + getMLText("attrdef_name"), + '' + ); ?> -
    - -
    - -
    -
    - - -
    - -
    - -
    - getMultipleValues()) ? "checked" : "" ?>/> -
    -
    - - -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    - - -
    - - -
    - getValueSet()) > 30) { ?> - - - - -
    -
    - - -
    - -
    - -
    -
    - -
    - -
    +formField( + getMLText("attrdef_multiple"), + 'getMultipleValues() ? " checked" : "").'/>' + ); + $this->formField( + getMLText("attrdef_minvalues"), + '' + ); + $this->formField( + getMLText("attrdef_maxvalues"), + '' + ); + $this->formField( + getMLText("attrdef_valueset"), + (($attrdef && strlen($attrdef->getValueSet()) > 30) ? ' +' : '') + ); + $this->formField( + getMLText("attrdef_regex"), + '' + ); + $this->formSubmit(' '.getMLText('save')); +?>
    "; + echo " "; + echo "
    ".$value."
    "; + echo ""; + return; + } /* }}} */ + + function formSubmit($value, $name='') { /* {{{ */ + echo "
    \n"; + echo "\n"; + echo "
    \n"; + } /* }}} */ + function getMimeIcon($fileType) { /* {{{ */ // for extension use LOWER CASE only $icons = array(); @@ -920,24 +934,23 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ function printFileChooser($varname='userfile', $multiple=false, $accept='') { /* {{{ */ - echo $this->getFileChooser($varname, $multiple, $accept); - return; - $id = preg_replace('/[^A-Za-z]/', '', $varname); -?> -
    -
    -
    - - - > - -
    -
    -
    - + + + '; + return $content; + } /* }}} */ + + function __printDateChooser($defDate = -1, $varName) { /* {{{ */ if ($defDate == -1) $defDate = mktime(); @@ -975,6 +988,10 @@ background-image: linear-gradient(to bottom, #882222, #111111);; } /* }}} */ function printSequenceChooser($objArr, $keepID = -1) { /* {{{ */ + echo $this->getSequenceChooser($objArr, $keepID); + } /* }}} */ + + function getSequenceChooser($objArr, $keepID = -1) { /* {{{ */ if (count($objArr) > 0) { $max = $objArr[count($objArr)-1]->getSequence() + 1; $min = $objArr[0]->getSequence() - 1; @@ -982,25 +999,26 @@ background-image: linear-gradient(to bottom, #882222, #111111);; else { $max = 1.0; } - print "\n"; if ($keepID != -1) { - print "