Merge branch 'develop' into hooks

This commit is contained in:
Uwe Steinmann 2013-06-06 16:02:28 +02:00
commit 72010b1bc0
58 changed files with 1584 additions and 150 deletions

View File

@ -10,6 +10,13 @@
is now actually used.
- replaced folder tree view with a tree based on jquery which loads subfolders
on demand
- attribute value must match regular expression if given (Bug #49)
- show more information about attributes in attribute manager
- set url in notification mail after document review (Bug #56)
- new configuration setting specifying a list of user ids that cannot be deleted
- fix output of breadcrumbs on some pages (Bug #55)
- do not take document comment for version if version comment is empty.
The user must explicitly force it.
--------------------------------------------------------------------------------
Changes in version 4.2.2

View File

@ -1,4 +1,4 @@
VERSION=4.3.0
VERSION=4.3.0pre1
SRC=CHANGELOG inc conf utils index.php languages views op out README.md README.Notification README.Ubuntu drop-tables-innodb.sql styles js TODO LICENSE Makefile webdav install
#restapi webapp
@ -19,7 +19,13 @@ webdav:
(cd tmp; tar --exclude=.svn -czvf ../seeddms-webdav-$(VERSION).tar.gz seeddms-webdav-$(VERSION))
rm -rf tmp
webapp:
mkdir -p tmp/seeddms-webapp-$(VERSION)
cp -a restapi webapp tmp/seeddms-webapp-$(VERSION)
(cd tmp; tar --exclude=.svn -czvf ../seeddms-webapp-$(VERSION).tar.gz seeddms-webapp-$(VERSION))
rm -rf tmp
doc:
phpdoc -d SeedDMS_Core --ignore 'getusers.php,getfoldertree.php,config.php,reverselookup.php' -t html
.PHONY: webdav
.PHONY: webdav webapp

View File

@ -221,6 +221,13 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
*/
protected $_valueset;
/**
* @var string regular expression the value must match
*
* @access protected
*/
protected $_regex;
/**
* @var object SeedDMS_Core_DMS reference to the dms instance this attribute definition belongs to
*
@ -258,7 +265,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
* @param string $valueset separated list of allowed values, the first char
* is taken as the separator
*/
function SeedDMS_Core_AttributeDefinition($id, $name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset) { /* {{{ */
function SeedDMS_Core_AttributeDefinition($id, $name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex) { /* {{{ */
$this->_id = $id;
$this->_name = $name;
$this->_type = $type;
@ -268,6 +275,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
$this->_maxvalues = $maxvalues;
$this->_valueset = $valueset;
$this->_separator = '';
$this->_regex = $regex;
$this->_dms = null;
} /* }}} */
@ -438,11 +446,40 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
return true;
} /* }}} */
/**
* Get the regular expression as saved in the database
*
* @return string regular expression
*/
function getRegex() { /* {{{ */
return $this->_regex;
} /* }}} */
/**
* Set the regular expression
*
* A value of the attribute must match this regular expression.
*
* @param string $regex
* @return boolean true if regex could be set, otherwise false
*/
function setRegex($regex) { /* {{{ */
$db = $this->_dms->getDB();
$queryStr = "UPDATE tblAttributeDefinitions SET regex =".$db->qstr($regex)." WHERE id = " . $this->_id;
$res = $db->getResult($queryStr);
if (!$res)
return false;
$this->_regex = $regex;
return true;
} /* }}} */
/**
* Check if the attribute definition is used
*
* Checks all attributes whether at least one of them referenceѕ
* this attribute definition
* Checks all documents, folders and document content whether at least
* one of them referenceѕ this attribute definition
*
* @return boolean true if attribute definition is used, otherwise false
*/
@ -466,6 +503,70 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
return true;
} /* }}} */
/**
* Return a list of documents, folders, document contents where this
* attribute definition is used
*
* @param integer $limit return not more the n objects of each type
* @return boolean true if attribute definition is used, otherwise false
*/
function getStatistics($limit=0) { /* {{{ */
$db = $this->_dms->getDB();
$result = array('docs'=>array(), 'folders'=>array(), 'contents'=>array());
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_document) {
$queryStr = "SELECT * FROM tblDocumentAttributes WHERE attrdef=".$this->_id;
if($limit)
$queryStr .= " limit ".(int) $limit;
$resArr = $db->getResultArray($queryStr);
if($resArr) {
foreach($resArr as $rec) {
if($doc = $this->_dms->getDocument($rec['document'])) {
$result['docs'][] = $doc;
}
}
}
$queryStr = "SELECT count(*) c, value FROM tblDocumentAttributes WHERE attrdef=".$this->_id." GROUP BY value ORDER BY c DESC";
$resArr = $db->getResultArray($queryStr);
if($resArr) {
$result['frequencies'] = $resArr;
}
}
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_folder) {
$queryStr = "SELECT * FROM tblFolderAttributes WHERE attrdef=".$this->_id;
if($limit)
$queryStr .= " limit ".(int) $limit;
$resArr = $db->getResultArray($queryStr);
if($resArr) {
foreach($resArr as $rec) {
if($folder = $this->_dms->getFolder($rec['folder'])) {
$result['folders'][] = $folder;
}
}
}
}
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_documentcontent) {
$queryStr = "SELECT * FROM tblDocumentContentAttributes WHERE attrdef=".$this->_id;
if($limit)
$queryStr .= " limit ".(int) $limit;
$resArr = $db->getResultArray($queryStr);
if($resArr) {
foreach($resArr as $rec) {
if($content = $this->_dms->getDocumentContent($rec['content'])) {
$result['contents'][] = $content;
}
}
}
}
return $result;
} /* }}} */
/**
* Remove the attribute definition
* Removal is only executed when the definition is not used anymore.

View File

@ -469,6 +469,30 @@ class SeedDMS_Core_DMS {
return $document;
} /* }}} */
/**
* Return a document content by its id
*
* This function retrieves a document content from the database by its id.
*
* @param integer $id internal id of document content
* @return object instance of {@link SeedDMS_Core_DocumentContent} or false
*/
function getDocumentContent($id) { /* {{{ */
if (!is_numeric($id)) return false;
$queryStr = "SELECT * FROM tblDocumentContent WHERE id = ".(int) $id;
$resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false)
return false;
if (count($resArr) != 1)
return false;
$row = $resArr[0];
$document = $this->getDocument($row['document']);
$version = new SeedDMS_Core_DocumentContent($row['id'], $document, $row['version'], $row['comment'], $row['date'], $row['createdBy'], $row['dir'], $row['orgFileName'], $row['fileType'], $row['mimeType'], $row['fileSize'], $row['checksum']);
return $version;
} /* }}} */
function makeTimeStamp($hour, $min, $sec, $year, $month, $day) {
$thirtyone = array (1, 3, 5, 7, 8, 10, 12);
$thirty = array (4, 6, 9, 11);
@ -1453,7 +1477,7 @@ class SeedDMS_Core_DMS {
$resArr = $resArr[0];
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr["id"], $resArr["name"], $resArr["objtype"], $resArr["type"], $resArr["multiple"], $resArr["minvalues"], $resArr["maxvalues"], $resArr["valueset"]);
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr["id"], $resArr["name"], $resArr["objtype"], $resArr["type"], $resArr["multiple"], $resArr["minvalues"], $resArr["maxvalues"], $resArr["valueset"], $resArr["regex"]);
$attrdef->setDMS($this);
return $attrdef;
} /* }}} */
@ -1477,7 +1501,7 @@ class SeedDMS_Core_DMS {
$resArr = $resArr[0];
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr["id"], $resArr["name"], $resArr["objtype"], $resArr["type"], $resArr["multiple"], $resArr["minvalues"], $resArr["maxvalues"], $resArr["valueset"]);
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr["id"], $resArr["name"], $resArr["objtype"], $resArr["type"], $resArr["multiple"], $resArr["minvalues"], $resArr["maxvalues"], $resArr["valueset"], $resArr["regex"]);
$attrdef->setDMS($this);
return $attrdef;
} /* }}} */
@ -1505,7 +1529,7 @@ class SeedDMS_Core_DMS {
$attrdefs = array();
for ($i = 0; $i < count($resArr); $i++) {
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr[$i]["id"], $resArr[$i]["name"], $resArr[$i]["objtype"], $resArr[$i]["type"], $resArr[$i]["multiple"], $resArr[$i]["minvalues"], $resArr[$i]["maxvalues"], $resArr[$i]["valueset"]);
$attrdef = new SeedDMS_Core_AttributeDefinition($resArr[$i]["id"], $resArr[$i]["name"], $resArr[$i]["objtype"], $resArr[$i]["type"], $resArr[$i]["multiple"], $resArr[$i]["minvalues"], $resArr[$i]["maxvalues"], $resArr[$i]["valueset"], $resArr[$i]["regex"]);
$attrdef->setDMS($this);
$attrdefs[$i] = $attrdef;
}
@ -1524,13 +1548,13 @@ class SeedDMS_Core_DMS {
* @param string $valueset list of allowed values (csv format)
* @return object of {@link SeedDMS_Core_User}
*/
function addAttributeDefinition($name, $objtype, $type, $multiple=0, $minvalues=0, $maxvalues=1, $valueset='') { /* {{{ */
function addAttributeDefinition($name, $objtype, $type, $multiple=0, $minvalues=0, $maxvalues=1, $valueset='', $regex='') { /* {{{ */
if (is_object($this->getAttributeDefinitionByName($name))) {
return false;
}
if(!$type)
return false;
$queryStr = "INSERT INTO tblAttributeDefinitions (name, objtype, type, multiple, minvalues, maxvalues, valueset) VALUES (".$this->db->qstr($name).", ".intval($objtype).", ".intval($type).", ".intval($multiple).", ".intval($minvalues).", ".intval($maxvalues).", ".$this->db->qstr($valueset).")";
$queryStr = "INSERT INTO tblAttributeDefinitions (name, objtype, type, multiple, minvalues, maxvalues, valueset, regex) VALUES (".$this->db->qstr($name).", ".intval($objtype).", ".intval($type).", ".intval($multiple).", ".intval($minvalues).", ".intval($maxvalues).", ".$this->db->qstr($valueset).", ".$this->db->qstr($regex).")";
$res = $this->db->getResult($queryStr);
if (!$res)
return false;

View File

@ -3228,7 +3228,6 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
"SELECT * FROM tblWorkflowDocumentContent WHERE workflow=". intval($this->_workflow->getID())
. " AND `version`='".$this->_version
."' AND `document` = '". $this->_document->getID() ."' ";
echo $queryStr;
$recs = $db->getResultArray($queryStr);
if (is_bool($recs) && !$recs) {
$db->rollbackTransaction();
@ -3240,7 +3239,6 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */
}
$queryStr = "DELETE FROM `tblWorkflowDocumentContent` WHERE `workflow` =". intval($this->_workflow->getID())." AND `document` = '". $this->_document->getID() ."' AND `version` = '" . $this->_version."'";
echo $queryStr;
if (!$db->getResult($queryStr)) {
$db->rollbackTransaction();
return false;

View File

@ -701,9 +701,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$document = $this->_dms->getDocument($db->getInsertID());
if ($version_comment!="")
// if ($version_comment!="")
$res = $document->addContent($version_comment, $owner, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers, $approvers,$reqversion, $version_attributes, $workflow);
else $res = $document->addContent($comment, $owner, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers, $approvers,$reqversion, $version_attributes, $workflow);
// else $res = $document->addContent($comment, $owner, $tmpFile, $orgFileName, $fileType, $mimeType, $reviewers, $approvers,$reqversion, $version_attributes, $workflow);
if (is_bool($res) && !$res) {
$db->rollbackTransaction();

View File

@ -158,5 +158,37 @@ class SeedDMS_Core_Object { /* {{{ */
return true;
} /* }}} */
/**
* Remove an attribute of the object for the given attribute definition
*
* @return boolean true if operation was successful, otherwise false
*/
function removeAttribute($attrdef) { /* {{{ */
$db = $this->_dms->getDB();
if (!$this->_attributes) {
$this->getAttributes();
}
if(isset($this->_attributes[$attrdef->getId()])) {
switch(get_class($this)) {
case "SeedDMS_Core_Document":
$queryStr = "DELETE FROM tblDocumentAttributes WHERE document=".$this->_id." AND attrdef=".$attrdef->getId();
break;
case "SeedDMS_Core_DocumentContent":
$queryStr = "DELETE FROM tblDocumentContentAttributes WHERE content=".$this->_id." AND attrdef=".$attrdef->getId();
break;
case "SeedDMS_Core_Folder":
$queryStr = "DELETE FROM tblFolderAttributes WHERE folder=".$this->_id." AND attrdef=".$attrdef->getId();
break;
default:
return false;
}
$res = $db->getResult($queryStr);
if (!$res)
return false;
unset($this->_attributes[$attrdef->getId()]);
}
return true;
} /* }}} */
} /* }}} */
?>

View File

@ -24,6 +24,7 @@
</stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- various small corrections
</notes>
<contents>
<dir baseinstalldir="SeedDMS" name="/">

View File

@ -52,6 +52,8 @@ class Settings { /* {{{ */
var $_loginFailure = 0;
// maximum amount of bytes a user may consume, 0 = unlimited
var $_quota = 0;
// comma separated list of undeleteable user ids
var $_undelUserIds = 0;
// Restricted access: only allow users to log in if they have an entry in
// the local database (irrespective of successful authentication with LDAP).
var $_restricted = true;
@ -347,6 +349,7 @@ class Settings { /* {{{ */
$this->_passwordHistory = intval($tab["passwordHistory"]);
$this->_loginFailure = intval($tab["loginFailure"]);
$this->_quota = intval($tab["quota"]);
$this->_undelUserIds = strval($tab["undelUserIds"]);
$this->_encryptionKey = strval($tab["encryptionKey"]);
$this->_cookieLifetime = intval($tab["cookieLifetime"]);
$this->_restricted = Settings::boolVal($tab["restricted"]);
@ -606,6 +609,7 @@ class Settings { /* {{{ */
$this->setXMLAttributValue($node, "passwordHistory", $this->_passwordHistory);
$this->setXMLAttributValue($node, "loginFailure", $this->_loginFailure);
$this->setXMLAttributValue($node, "quota", $this->_quota);
$this->setXMLAttributValue($node, "undelUserIds", $this->_undelUserIds);
$this->setXMLAttributValue($node, "encryptionKey", $this->_encryptionKey);
$this->setXMLAttributValue($node, "cookieLifetime", $this->_cookieLifetime);
$this->setXMLAttributValue($node, "restricted", $this->_restricted);

View File

@ -20,7 +20,7 @@
class SeedDMS_Version {
var $_number = "4.3.0";
var $_number = "4.3.0pre1";
var $_string = "SeedDMS";
function SeedDMS_Version() {

View File

@ -4,3 +4,7 @@ Directory for language files
This version uses different names for the directories containing the
language files. Users should explicitly set the language the next time
they log in in order to update their user preferences.
You as the system administrator should also manually edit conf/settings.xml
and set the default language to one of the available languages as can
be seen in the directory 'languages'.

View File

@ -2,6 +2,8 @@ BEGIN;
ALTER TABLE tblSessions ADD COLUMN `splashmsg` TEXT DEFAULT '';
ALTER TABLE tblAttributeDefinitions ADD COLUMN `regex` TEXT DEFAULT '';
UPDATE tblVersion set major=4, minor=3, subminor=0;
COMMIT;

View File

@ -2,6 +2,8 @@ START TRANSACTION;
ALTER TABLE tblSessions ADD COLUMN `splashmsg` TEXT DEFAULT '';
ALTER TABLE tblAttributeDefinitions ADD COLUMN `regex` TEXT DEFAULT '';
UPDATE tblVersion set major=4, minor=3, subminor=0;
COMMIT;

View File

@ -94,6 +94,7 @@ $text = array(
'attrdef_type' => "Typ",
'attrdef_minvalues' => "Min. Anzahl Werte",
'attrdef_maxvalues' => "Max. Anzahl Werte",
'attrdef_regex' => "Regulärer Ausdruck",
'attrdef_valueset' => "Werteauswahl",
'attribute_changed_email_subject' => "[sitename]: [name] - Attribut geändert",
'attribute_changed_email_body' => "Attribut geändert\r\nDokument: [name]\r\nVersion: [version]\r\nAttribut: [attribute]\r\nElternordner: [folder_path]\r\nBenutzer: [username]\r\nURL: [url]",
@ -107,6 +108,7 @@ $text = array(
'backup_log_management' => "Backup/Logging",
'between' => "zwischen",
'calendar' => "Kalender",
'calendar_week' => "Kalenderwoche",
'cancel' => "Abbrechen",
'cannot_assign_invalid_state' => "Die Zuweisung eines neuen Prüfers zu einem Dokument, welches noch nachbearbeitet oder überprüft wird ist nicht möglich",
'cannot_change_final_states' => "Warnung: Nicht imstande, Dokumentstatus für Dokumente, die zurückgewiesen worden sind, oder als abgelaufen bzw. überholt markiert wurden zu ändern",
@ -762,6 +764,8 @@ $text = array(
'settings_updateDatabase' => "Datenbank-Update-Skript ausführen",
'settings_updateNotifyTime_desc' => "Users are notified about document-changes that took place within the last 'Update Notify Time' seconds",
'settings_updateNotifyTime' => "Update Notify Time",
'settings_undelUserIds_desc' => "Komma-separierte Liste von Benutzer-IDs, die nicht gelöscht werden können.",
'settings_undelUserIds' => "Nicht löschbare Benutzer-IDs",
'settings_versioningFileName_desc' => "Der Name der Datei mit Versionsinformationen, wie sie durch das Backup-Tool erzeugt werden.",
'settings_versioningFileName' => "Versionsinfo-Datei",
'settings_viewOnlineFileTypes_desc' => "Dateien mit den angegebenen Endungen können Online angeschaut werden (benutzen Sie ausschließlich Kleinbuchstaben).",
@ -776,6 +780,16 @@ $text = array(
'sign_out' => "Abmelden",
'sign_out_user' => "Benutzer abmelden",
'space_used_on_data_folder' => "Benutzter Plattenplatz",
'splash_added_to_clipboard' => "Der Zwischenablage hinzugefügt",
'splash_document_edited' => "Dokument gespeichert",
'splash_document_locked' => "Dokument gesperrt",
'splash_document_unlocked' => "Dokumentensperre aufgehoben",
'splash_folder_edited' => "Änderungen am Ordner gespeichert",
'splash_invalid_folder_id' => "Ungültige Ordner-ID",
'splash_removed_from_clipboard' => "Von der Zwischenablage entfernt",
'splash_settings_saved' => "Einstellungen gesichert",
'splash_substituted_user' => "Benutzer gewechselt",
'splash_switched_back_user' => "Zum ursprünglichen Benutzer zurückgekehrt",
'status_approval_rejected' => "Entwurf abgelehnt",
'status_approved' => "freigegeben",
'status_approver_removed' => "Freigebender wurde vom Prozess ausgeschlossen",
@ -793,6 +807,7 @@ $text = array(
'submit_password_forgotten' => "Neues Passwort setzen und per E-Mail schicken",
'submit_review' => "Überprüfung hinzufügen",
'submit_userinfo' => "Daten setzen",
'substitute_user' => "Benutzer wechseln",
'sunday' => "Sonntag",
'sunday_abbr' => "So",
'switched_to' => "Gewechselt zu",
@ -831,6 +846,7 @@ $text = array(
'uploaded_by' => "Hochgeladen durch",
'uploading_failed' => "Das Hochladen einer Datei ist fehlgeschlagen. Bitte überprüfen Sie die maximale Dateigröße für Uploads.",
'uploading_zerosize' => "Versuch eine leere Datei hochzuladen. Vorgang wird abgebrochen.",
'use_comment_of_document' => "Verwende Kommentar des Dokuments",
'use_default_categories' => "Kategorievorlagen",
'use_default_keywords' => "Stichwortvorlagen",
'used_discspace' => "Verbrauchter Speicherplatz",

View File

@ -85,6 +85,7 @@ $text = array(
'assign_reviewers' => "Assign Reviewers",
'assign_user_property_to' => "Assign user's properties to",
'assumed_released' => "Assumed released",
'attr_no_regex_match' => "The attribute value does not match the regular expression",
'attrdef_management' => "Attribute definition management",
'attrdef_exists' => "Attribute definition already exists",
'attrdef_in_use' => "Attribute definition still in use",
@ -94,6 +95,7 @@ $text = array(
'attrdef_type' => "Type",
'attrdef_minvalues' => "Min. number of values",
'attrdef_maxvalues' => "Max. number of values",
'attrdef_regex' => "Regular expression",
'attrdef_valueset' => "Set of values",
'attribute_changed_email_subject' => "[sitename]: [name] - Attribute changed",
'attribute_changed_email_body' => "Attribute changed\r\nDocument: [name]\r\nVersion: [version]\r\nAttribute: [attribute]\r\nParent folder: [folder_path]\r\nUser: [username]\r\nURL: [url]",
@ -112,6 +114,7 @@ $text = array(
'cancel' => "Cancel",
'cannot_assign_invalid_state' => "Cannot modify an obsolete or rejected document",
'cannot_change_final_states' => "Warning: You cannot alter status for document rejected, expired or with pending review or approval",
'cannot_delete_user' => "Cannot delete user",
'cannot_delete_yourself' => "Cannot delete yourself",
'cannot_move_root' => "Error: Cannot move root folder.",
'cannot_retrieve_approval_snapshot' => "Unable to retrieve approval status snapshot for this document version.",
@ -766,6 +769,8 @@ $text = array(
'settings_updateDatabase' => "Run schema update scripts on database",
'settings_updateNotifyTime_desc' => "Users are notified about document-changes that took place within the last 'Update Notify Time' seconds",
'settings_updateNotifyTime' => "Update Notify Time",
'settings_undelUserIds_desc' => "Comma separated list of user ids, that cannot be deleted.",
'settings_undelUserIds' => "Undeletable User IDs",
'settings_versioningFileName_desc' => "The name of the versioning info file created by the backup tool",
'settings_versioningFileName' => "Versioning FileName",
'settings_viewOnlineFileTypes_desc' => "Files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)",
@ -846,6 +851,7 @@ $text = array(
'uploaded_by' => "Uploaded by",
'uploading_failed' => "Uploading one of your files failed. Please check your maximum upload file size.",
'uploading_zerosize' => "Uploading an empty file. Upload is canceled.",
'use_comment_of_document' => "Use comment of document",
'use_default_categories' => "Use predefined categories",
'use_default_keywords' => "Use predefined keywords",
'used_discspace' => "Used disk space",

View File

@ -52,6 +52,8 @@ if ($folder->getAccessMode($user) < M_READWRITE) {
$comment = $_POST["comment"];
$version_comment = $_POST["version_comment"];
if($version_comment == "" && isset($_POST["use_comment"]))
$version_comment = $comment;
$keywords = $_POST["keywords"];
$categories = isset($_POST["categories"]) ? $_POST["categories"] : null;
@ -59,10 +61,32 @@ if(isset($_POST["attributes"]))
$attributes = $_POST["attributes"];
else
$attributes = array();
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("attr_no_regex_match"));
}
}
}
}
if(isset($_POST["attributes_version"]))
$attributes_version = $_POST["attributes_version"];
else
$attributes_version = array();
foreach($attributes_version as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("attr_no_regex_match"));
}
}
}
}
if(isset($_POST["workflow"]))
$workflow = $dms->getWorkflow($_POST["workflow"]);

View File

@ -49,11 +49,11 @@ if ($public && ($document->getAccessMode($user) == M_READ)) {
$public = false;
}
if (!isset($_GET["docidform1"]) || !is_numeric($_GET["docidform1"]) || intval($_GET["docidform1"])<1) {
if (!isset($_GET["docid"]) || !is_numeric($_GET["docid"]) || intval($_GET["docid"])<1) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("invalid_target_doc_id"));
}
$docid = $_GET["docidform1"];
$docid = $_GET["docid"];
$doc = $dms->getDocument($docid);
if (!is_object($doc)) {

View File

@ -60,6 +60,17 @@ if(isset($_POST["attributes"]))
$attributes = $_POST["attributes"];
else
$attributes = array();
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("folder_title", array("foldername" => $document->getName())),getMLText("attr_no_regex_match"));
}
}
}
}
$subFolder = $folder->addSubFolder($name, $comment, $user, $sequence, $attributes);
if (is_object($subFolder)) {

View File

@ -50,6 +50,7 @@ if ($action == "addattrdef") {
$minvalues = intval($_POST["minvalues"]);
$maxvalues = intval($_POST["maxvalues"]);
$valueset = trim($_POST["valueset"]);
$regex = trim($_POST["regex"]);
if($name == '') {
UI::exitError(getMLText("admin_tools"),getMLText("attrdef_noname"));
@ -57,7 +58,7 @@ if ($action == "addattrdef") {
if (is_object($dms->getAttributeDefinitionByName($name))) {
UI::exitError(getMLText("admin_tools"),getMLText("attrdef_exists"));
}
$newAttrdef = $dms->addAttributeDefinition($name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset);
$newAttrdef = $dms->addAttributeDefinition($name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex);
if (!$newAttrdef) {
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));
}
@ -114,6 +115,7 @@ else if ($action == "editattrdef") {
$minvalues = intval($_POST["minvalues"]);
$maxvalues = intval($_POST["maxvalues"]);
$valueset = trim($_POST["valueset"]);
$regex = trim($_POST["regex"]);
if (!$attrdef->setName($name)) {
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));
}
@ -135,6 +137,9 @@ else if ($action == "editattrdef") {
if (!$attrdef->setValueSet($valueset)) {
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));
}
if (!$attrdef->setRegex($regex)) {
UI::exitError(getMLText("admin_tools"),getMLText("error_occured"));
}
}
else {

View File

@ -62,53 +62,45 @@ $attributes = $_POST["attributes"];
if($attributes) {
$oldattributes = $version->getAttributes();
foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$version->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
} else {
if($notifier) {
$notifyList = $document->getNotifyList();
/*
$subject = "###SITENAME###: ".$document->getName().", v.".$version->_version." - ".getMLText("attribute_changed_email");
$message = getMLText("attribute_changed_email")."\r\n";
$message .=
getMLText("document").": ".$document->getName()."\r\n".
getMLText("version").": ".$version->_version."\r\n".
getMLText("attribute").": ".$attribute."\r\n".
getMLText("user").": ".$user->getFullName()." <". $user->getEmail() .">\r\n".
"URL: ###URL_PREFIX###out/out.ViewDocument.php?documentid=".$document->getID()."&version=".$version->_version."\r\n";
if(isset($document->_notifyList["users"])) {
$notifier->toList($user, $document->_notifyList["users"], $subject, $message);
}
if(isset($document->_notifyList["groups"])) {
foreach ($document->_notifyList["groups"] as $grp) {
$notifier->toGroup($user, $grp, $subject, $message);
}
}
*/
$subject = "attribute_changed_email_subject";
$message = "attribute_changed_email_body";
$params = array();
$params['name'] = $document->getName();
$params['version'] = $version->getVersion();
$params['attribute'] = $attribute;
$params['folder_path'] = $folder->getFolderPathPlain();
$params['username'] = $user->getFullName();
$params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."&version=".$version->getVersion();
$params['sitename'] = $settings->_siteName;
$params['http_root'] = $settings->_httpRoot;
$notifier->toList($user, $notifyList["users"], $subject, $message, $params);
foreach ($notifyList["groups"] as $grp) {
$notifier->toGroup($user, $grp, $subject, $message, $params);
}
// if user is not owner send notification to owner
if ($user->getID() != $document->getOwner()->getID())
$notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params);
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("folder_title", array("foldername" => $document->getName())),getMLText("attr_no_regex_match"));
}
}
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$version->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
} else {
if($notifier) {
$notifyList = $document->getNotifyList();
$subject = "attribute_changed_email_subject";
$message = "attribute_changed_email_body";
$params = array();
$params['name'] = $document->getName();
$params['version'] = $version->getVersion();
$params['attribute'] = $attribute;
$params['folder_path'] = $folder->getFolderPathPlain();
$params['username'] = $user->getFullName();
$params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID()."&version=".$version->getVersion();
$params['sitename'] = $settings->_siteName;
$params['http_root'] = $settings->_httpRoot;
$notifier->toList($user, $notifyList["users"], $subject, $message, $params);
foreach ($notifyList["groups"] as $grp) {
$notifier->toGroup($user, $grp, $subject, $message, $params);
}
// if user is not owner send notification to owner
if ($user->getID() != $document->getOwner()->getID())
$notifier->toIndividual($user, $document->getOwner(), $subject, $message, $params);
}
}
}
} elseif(isset($oldattributes[$attrdefid])) {
if(!$version->removeAttribute($dms->getAttributeDefinition($attrdefid)))
UI::exitError(getMLText("document_title", array("documentname" => $folder->getName())),getMLText("error_occured"));
}
}
}

View File

@ -234,8 +234,19 @@ if($categories) {
if($attributes) {
$oldattributes = $document->getAttributes();
foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$document->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("attr_no_regex_match"));
}
}
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$document->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
}
} elseif(isset($oldattributes[$attrdefid])) {
if(!$document->removeAttribute($dms->getAttributeDefinition($attrdefid)))
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured"));
}
}

View File

@ -156,8 +156,19 @@ if(($oldcomment = $folder->getComment()) != $comment) {
if($attributes) {
$oldattributes = $folder->getAttributes();
foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$folder->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("folder_title", array("foldername" => $document->getName())),getMLText("attr_no_regex_match"));
}
}
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
if(!$folder->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured"));
}
} elseif(isset($oldattributes[$attrdefid])) {
if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid)))
UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured"));
}
}

View File

@ -311,7 +311,10 @@ else if ($action == "setdefault") {
$message = "access_permission_changed_email_body";
$params = array();
$params['name'] = $folder->getName();
$params['folder_path'] = $folder->getParent()->getFolderPathPlain();
if($folder->getParent())
$params['folder_path'] = $folder->getParent()->getFolderPathPlain();
else
$params['folder_path'] = $folder->getFolderPathPlain();
$params['username'] = $user->getFullName();
$params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewFolder.php?folderid=".$folder->getID();
$params['sitename'] = $settings->_siteName;

View File

@ -63,8 +63,8 @@ $userid=$user->getID();
if ($_GET["type"]=="document"){
if ($_GET["action"]=="add"){
if (!isset($_POST["docidform1"])) UI::exitError(getMLText("my_account"),getMLText("error_occured"));
$documentid = $_POST["docidform1"];
if (!isset($_POST["docid"])) UI::exitError(getMLText("my_account"),getMLText("error_occured"));
$documentid = $_POST["docid"];
}else if ($_GET["action"]=="del"){
if (!isset($_GET["id"])) UI::exitError(getMLText("my_account"),getMLText("error_occured"));
$documentid = $_GET["id"];

View File

@ -114,6 +114,7 @@ if ($_POST["reviewType"] == "ind") {
$params['status'] = getReviewStatusText($_POST["reviewStatus"]);
$params['comment'] = $comment;
$params['username'] = $user->getFullName();
$params['url'] = "http".((isset($_SERVER['HTTPS']) && (strcmp($_SERVER['HTTPS'],'off')!=0)) ? "s" : "")."://".$_SERVER['HTTP_HOST'].$settings->_httpRoot."out/out.ViewDocument.php?documentid=".$document->getID();
$params['sitename'] = $settings->_siteName;
$params['http_root'] = $settings->_httpRoot;
$notifier->toList($user, $nl["users"], $subject, $message, $params);

View File

@ -105,6 +105,7 @@ if ($action == "saveSettings")
$settings->_passwordHistory = intval($_POST["passwordHistory"]);
$settings->_loginFailure = intval($_POST["loginFailure"]);
$settings->_quota = intval($_POST["quota"]);
$settings->_undelUserIds = strval($_POST["undelUserIds"]);
$settings->_encryptionKey = strval($_POST["encryptionKey"]);
$settings->_cookieLifetime = intval($_POST["cookieLifetime"]);

View File

@ -169,6 +169,16 @@ if ($_FILES['userfile']['error'] == 0) {
}
$attributes = $_POST["attributes"];
foreach($attributes as $attrdefid=>$attribute) {
$attrdef = $dms->getAttributeDefinition($attrdefid);
if($attribute) {
if($attrdef->getRegex()) {
if(!preg_match($attrdef->getRegex(), $attribute)) {
UI::exitError(getMLText("document_title", array("documentname" => $folder->getName())),getMLText("attr_no_regex_match"));
}
}
}
}
$contentResult=$document->addContent($comment, $user, $userfiletmp, basename($userfilename), $fileType, $userfiletype, $reviewers, $approvers, $version=0, $attributes);
if (is_bool($contentResult) && !$contentResult) {

View File

@ -135,6 +135,10 @@ else if ($action == "removeuser") {
UI::exitError(getMLText("admin_tools"),getMLText("invalid_user_id"));
}
if(in_array($userid, explode(',', $settings->_undelUserIds))) {
UI::exitError(getMLText("admin_tools"),getMLText("cannot_delete_user"));
}
/* This used to be a check if an admin is deleted. Now it checks if one
* wants to delete herself.
*/

View File

@ -33,15 +33,18 @@ if (!isset($_GET["userid"]) || !is_numeric($_GET["userid"]) || intval($_GET["use
}
$rmuser = $dms->getUser(intval($_GET["userid"]));
if ($rmuser->getID()==$user->getID()) {
UI::exitError(getMLText("rm_user"),getMLText("access_denied"));
}
if (!is_object($rmuser)) {
UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id"));
}
if(in_array($rmuser->getID(), explode(',', $settings->_undelUserIds))) {
UI::exitError(getMLText("rm_user"),getMLText("cannot_delete_user"));
}
if ($rmuser->getID()==$user->getID()) {
UI::exitError(getMLText("rm_user"),getMLText("cannot_delete_yourself"));
}
$allusers = $dms->getAllUsers($settings->_sortUsersInList);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));

View File

@ -45,7 +45,7 @@ if(isset($_GET['userid']) && $_GET['userid']) {
}
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'seluser'=>$seluser, 'allusers'=>$users, 'allgroups'=>$groups, 'passwordstrength'=>$settings->_passwordStrength, 'passwordexpiration'=>$settings->_passwordExpiration, 'httproot'=>$settings->_httpRoot, 'enableuserimage'=>$settings->_enableUserImage, 'workflowmode'=>$settings->_workflowMode));
$view = UI::factory($theme, $tmp[1], array('dms'=>$dms, 'user'=>$user, 'seluser'=>$seluser, 'allusers'=>$users, 'allgroups'=>$groups, 'passwordstrength'=>$settings->_passwordStrength, 'passwordexpiration'=>$settings->_passwordExpiration, 'httproot'=>$settings->_httpRoot, 'enableuserimage'=>$settings->_enableUserImage, 'undeluserids'=>explode(',', $settings->_undelUserIds), 'workflowmode'=>$settings->_workflowMode));
if($view) {
$view->show();
exit;

View File

@ -0,0 +1,983 @@
/*!
* 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 = '&#xf000;');
}
.icon-music {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;');
}
.icon-search {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;');
}
.icon-envelope {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;');
}
.icon-heart {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;');
}
.icon-star {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;');
}
.icon-star-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;');
}
.icon-user {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;');
}
.icon-film {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;');
}
.icon-th-large {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;');
}
.icon-th {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;');
}
.icon-th-list {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;');
}
.icon-ok {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;');
}
.icon-remove {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;');
}
.icon-zoom-in {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;');
}
.icon-zoom-out {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;');
}
.icon-off {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;');
}
.icon-signal {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;');
}
.icon-cog {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;');
}
.icon-trash {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;');
}
.icon-home {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;');
}
.icon-file {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;');
}
.icon-time {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;');
}
.icon-road {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;');
}
.icon-download-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;');
}
.icon-download {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;');
}
.icon-upload {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;');
}
.icon-inbox {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;');
}
.icon-play-circle {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;');
}
.icon-repeat {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;');
}
.icon-refresh {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;');
}
.icon-list-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;');
}
.icon-lock {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;');
}
.icon-flag {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;');
}
.icon-headphones {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;');
}
.icon-volume-off {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;');
}
.icon-volume-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;');
}
.icon-volume-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;');
}
.icon-qrcode {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;');
}
.icon-barcode {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;');
}
.icon-tag {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;');
}
.icon-tags {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;');
}
.icon-book {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;');
}
.icon-bookmark {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;');
}
.icon-print {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;');
}
.icon-camera {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;');
}
.icon-font {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;');
}
.icon-bold {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;');
}
.icon-italic {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;');
}
.icon-text-height {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;');
}
.icon-text-width {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;');
}
.icon-align-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;');
}
.icon-align-center {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;');
}
.icon-align-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;');
}
.icon-align-justify {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;');
}
.icon-list {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;');
}
.icon-indent-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;');
}
.icon-indent-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;');
}
.icon-facetime-video {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;');
}
.icon-picture {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;');
}
.icon-pencil {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;');
}
.icon-map-marker {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;');
}
.icon-adjust {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;');
}
.icon-tint {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;');
}
.icon-edit {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;');
}
.icon-share {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;');
}
.icon-check {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;');
}
.icon-move {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;');
}
.icon-step-backward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;');
}
.icon-fast-backward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;');
}
.icon-backward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;');
}
.icon-play {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;');
}
.icon-pause {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;');
}
.icon-stop {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;');
}
.icon-forward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;');
}
.icon-fast-forward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;');
}
.icon-step-forward {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;');
}
.icon-eject {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;');
}
.icon-chevron-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;');
}
.icon-chevron-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;');
}
.icon-plus-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;');
}
.icon-minus-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;');
}
.icon-remove-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;');
}
.icon-ok-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;');
}
.icon-question-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;');
}
.icon-info-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;');
}
.icon-screenshot {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;');
}
.icon-remove-circle {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;');
}
.icon-ok-circle {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;');
}
.icon-ban-circle {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;');
}
.icon-arrow-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;');
}
.icon-arrow-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;');
}
.icon-arrow-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;');
}
.icon-arrow-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;');
}
.icon-share-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;');
}
.icon-resize-full {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;');
}
.icon-resize-small {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;');
}
.icon-plus {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;');
}
.icon-minus {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;');
}
.icon-asterisk {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;');
}
.icon-exclamation-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;');
}
.icon-gift {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;');
}
.icon-leaf {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;');
}
.icon-fire {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;');
}
.icon-eye-open {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;');
}
.icon-eye-close {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;');
}
.icon-warning-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;');
}
.icon-plane {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;');
}
.icon-calendar {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;');
}
.icon-random {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;');
}
.icon-comment {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;');
}
.icon-magnet {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;');
}
.icon-chevron-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;');
}
.icon-chevron-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;');
}
.icon-retweet {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;');
}
.icon-shopping-cart {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;');
}
.icon-folder-close {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;');
}
.icon-folder-open {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;');
}
.icon-resize-vertical {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;');
}
.icon-resize-horizontal {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;');
}
.icon-bar-chart {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;');
}
.icon-twitter-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;');
}
.icon-facebook-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;');
}
.icon-camera-retro {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;');
}
.icon-key {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;');
}
.icon-cogs {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;');
}
.icon-comments {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;');
}
.icon-thumbs-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;');
}
.icon-thumbs-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;');
}
.icon-star-half {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;');
}
.icon-heart-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;');
}
.icon-signout {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;');
}
.icon-linkedin-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;');
}
.icon-pushpin {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;');
}
.icon-external-link {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;');
}
.icon-signin {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;');
}
.icon-trophy {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;');
}
.icon-github-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;');
}
.icon-upload-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;');
}
.icon-lemon {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;');
}
.icon-phone {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;');
}
.icon-check-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;');
}
.icon-bookmark-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;');
}
.icon-phone-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;');
}
.icon-twitter {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;');
}
.icon-facebook {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;');
}
.icon-github {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;');
}
.icon-unlock {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;');
}
.icon-credit-card {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;');
}
.icon-rss {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;');
}
.icon-hdd {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;');
}
.icon-bullhorn {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;');
}
.icon-bell {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;');
}
.icon-certificate {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;');
}
.icon-hand-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;');
}
.icon-hand-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;');
}
.icon-hand-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;');
}
.icon-hand-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;');
}
.icon-circle-arrow-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;');
}
.icon-circle-arrow-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;');
}
.icon-circle-arrow-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;');
}
.icon-circle-arrow-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;');
}
.icon-globe {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;');
}
.icon-wrench {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;');
}
.icon-tasks {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;');
}
.icon-filter {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;');
}
.icon-briefcase {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;');
}
.icon-fullscreen {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;');
}
.icon-group {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;');
}
.icon-link {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;');
}
.icon-cloud {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;');
}
.icon-beaker {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;');
}
.icon-cut {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;');
}
.icon-copy {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;');
}
.icon-paper-clip {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;');
}
.icon-save {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;');
}
.icon-sign-blank {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;');
}
.icon-reorder {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;');
}
.icon-list-ul {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;');
}
.icon-list-ol {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;');
}
.icon-strikethrough {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;');
}
.icon-underline {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;');
}
.icon-table {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;');
}
.icon-magic {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;');
}
.icon-truck {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;');
}
.icon-pinterest {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;');
}
.icon-pinterest-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;');
}
.icon-google-plus-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;');
}
.icon-google-plus {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;');
}
.icon-money {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;');
}
.icon-caret-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;');
}
.icon-caret-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;');
}
.icon-caret-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;');
}
.icon-caret-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;');
}
.icon-columns {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;');
}
.icon-sort {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;');
}
.icon-sort-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;');
}
.icon-sort-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;');
}
.icon-envelope-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;');
}
.icon-linkedin {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;');
}
.icon-undo {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;');
}
.icon-legal {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;');
}
.icon-dashboard {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;');
}
.icon-comment-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;');
}
.icon-comments-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;');
}
.icon-bolt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;');
}
.icon-sitemap {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;');
}
.icon-umbrella {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;');
}
.icon-paste {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;');
}
.icon-lightbulb {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0eb;');
}
.icon-exchange {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ec;');
}
.icon-cloud-download {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ed;');
}
.icon-cloud-upload {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ee;');
}
.icon-user-md {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f0;');
}
.icon-stethoscope {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f1;');
}
.icon-suitcase {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f2;');
}
.icon-bell-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f3;');
}
.icon-coffee {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f4;');
}
.icon-food {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f5;');
}
.icon-file-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f6;');
}
.icon-building {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f7;');
}
.icon-hospital {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f8;');
}
.icon-ambulance {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0f9;');
}
.icon-medkit {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fa;');
}
.icon-fighter-jet {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fb;');
}
.icon-beer {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fc;');
}
.icon-h-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fd;');
}
.icon-plus-sign-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0fe;');
}
.icon-double-angle-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf100;');
}
.icon-double-angle-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf101;');
}
.icon-double-angle-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf102;');
}
.icon-double-angle-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf103;');
}
.icon-angle-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf104;');
}
.icon-angle-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf105;');
}
.icon-angle-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf106;');
}
.icon-angle-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf107;');
}
.icon-desktop {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf108;');
}
.icon-laptop {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf109;');
}
.icon-tablet {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10a;');
}
.icon-mobile-phone {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10b;');
}
.icon-circle-blank {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10c;');
}
.icon-quote-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10d;');
}
.icon-quote-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf10e;');
}
.icon-spinner {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf110;');
}
.icon-circle {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf111;');
}
.icon-reply {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf112;');
}
.icon-folder-close-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf114;');
}
.icon-folder-open-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf115;');
}
.icon-expand-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf116;');
}
.icon-collapse-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf117;');
}
.icon-smile {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf118;');
}
.icon-frown {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf119;');
}
.icon-meh {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11a;');
}
.icon-gamepad {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11b;');
}
.icon-keyboard {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11c;');
}
.icon-flag-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11d;');
}
.icon-flag-checkered {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf11e;');
}
.icon-terminal {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf120;');
}
.icon-code {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf121;');
}
.icon-reply-all {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
}
.icon-mail-reply-all {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf122;');
}
.icon-star-half-full,
.icon-star-half-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf123;');
}
.icon-location-arrow {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf124;');
}
.icon-crop {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;');
}
.icon-code-fork {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf126;');
}
.icon-unlink {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf127;');
}
.icon-question {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf128;');
}
.icon-info {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf129;');
}
.icon-exclamation {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12a;');
}
.icon-superscript {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12b;');
}
.icon-subscript {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12c;');
}
.icon-eraser {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12d;');
}
.icon-puzzle-piece {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf12e;');
}
.icon-microphone {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf130;');
}
.icon-microphone-off {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf131;');
}
.icon-shield {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf132;');
}
.icon-calendar-empty {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;');
}
.icon-fire-extinguisher {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf134;');
}
.icon-rocket {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf135;');
}
.icon-maxcdn {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf136;');
}
.icon-chevron-sign-left {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf137;');
}
.icon-chevron-sign-right {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf138;');
}
.icon-chevron-sign-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf139;');
}
.icon-chevron-sign-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13a;');
}
.icon-html5 {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13b;');
}
.icon-css3 {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13c;');
}
.icon-anchor {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13d;');
}
.icon-unlock-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf13e;');
}
.icon-bullseye {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf140;');
}
.icon-ellipsis-horizontal {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf141;');
}
.icon-ellipsis-vertical {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf142;');
}
.icon-rss-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf143;');
}
.icon-play-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf144;');
}
.icon-ticket {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf145;');
}
.icon-minus-sign-alt {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf146;');
}
.icon-check-minus {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf147;');
}
.icon-level-up {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf148;');
}
.icon-level-down {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf149;');
}
.icon-check-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14a;');
}
.icon-edit-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14b;');
}
.icon-external-link-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14c;');
}
.icon-share-sign {
*zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf14d;');
}

21
utils/README.md Normal file
View File

@ -0,0 +1,21 @@
Running one of the scripts
---------------------------
Scripts in this folder are ment to be called on the command line by
either executing one of the shell wrappers 'seeddms-*' or by calling
'php -f <scriptname> -- <script options>'.
If you run the adddoc.php script make sure to run in with the permissions
of the user running your web server. I will copy files right into
your content directory of your SeedDMS installation. Don't do this
as root because you will most likely not be able to remove those documents
from the web gui. If this happens by accident, you will still be able
to fix it manually by setting the propper file permissions for the document
just created in your content directory. Just change the owner of the
document folder and its content to the user running the web server.
Do not allow regular users to run this scripts!
-----------------------------------------------
None of the scripts do any authentication. They all run with a SeedDMS
admin account! So anybody being allowed to run the scripts can modify
your DMS content.

View File

@ -130,8 +130,13 @@ $db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostn
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID);
$dms->setEnableAdminRevApp($settings->_enableAdminRevApp);
$dms->setMaxDirID($settings->_maxDirID);
$dms->setEnableConverting($settings->_enableConverting);
$dms->setViewOnlineFileTypes($settings->_viewOnlineFileTypes);

View File

@ -75,14 +75,16 @@ if(isset($options['n'])) {
$db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase);
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$db->_conn->debug = 1;
//$db->_conn->debug = 1;
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID);
$dms->setGuestID($settings->_guestID);
$dms->setEnableGuestLogin($settings->_enableGuestLogin);
$dms->setEnableAdminRevApp($settings->_enableAdminRevApp);
$dms->setMaxDirID($settings->_maxDirID);
$dms->setEnableConverting($settings->_enableConverting);
$dms->setViewOnlineFileTypes($settings->_viewOnlineFileTypes);

View File

@ -77,6 +77,11 @@ $db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostna
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID);
$index = Zend_Search_Lucene::create($settings->_luceneDir);

View File

@ -13,6 +13,7 @@ function usage() { /* {{{ */
echo " -v, --version: print version and exit.\n";
echo " --config: set alternative config file.\n";
echo " --folder: set start folder.\n";
echo " --maxsize: maximum size of files to be include in output.\n";
} /* }}} */
function wrapWithCData($text) { /* {{{ */
@ -24,7 +25,7 @@ function wrapWithCData($text) { /* {{{ */
$version = "0.0.1";
$shortoptions = "hv";
$longoptions = array('help', 'version', 'config:', 'folder:');
$longoptions = array('help', 'version', 'config:', 'folder:', 'maxsize:');
if(false === ($options = getopt($shortoptions, $longoptions))) {
usage();
exit(0);
@ -49,6 +50,13 @@ if(isset($options['config'])) {
$settings = new Settings();
}
/* Set maximum size of files included in xml file */
if(isset($options['maxsize'])) {
$maxsize = intval($maxsize);
} else {
$maxsize = 100000;
}
if(isset($settings->_extraPath))
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
@ -250,6 +258,11 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
echo $indent." <attr name=\"owner\">".$owner->getId()."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($file->getComment())."</attr>\n";
echo $indent." <attr name=\"orgfilename\">".wrapWithCData($file->getOriginalFileName())."</attr>\n";
echo $indent." <data length=\"".filesize($dms->contentDir . $file->getPath())."\">\n";
if(filesize($dms->contentDir . $file->getPath()) < 1000000) {
echo chunk_split(base64_encode(file_get_contents($dms->contentDir . $file->getPath())), 76, "\n");
}
echo $indent." </data>\n";
echo $indent." </file>\n";
}
echo $indent." </files>\n";
@ -299,6 +312,11 @@ $db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostna
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID);
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
@ -404,7 +422,7 @@ if($attrdefs) {
}
echo "\">\n";
echo " <attr name=\"name\">".$attrdef->getName()."</attr>\n";
echo " <attr name=\"multiple\">".$attrdef->hasMultipleValues()."</attr>\n";
echo " <attr name=\"multiple\">".$attrdef->getMultipleValues()."</attr>\n";
echo " <attr name=\"valueset\">".$attrdef->getValueSet()."</attr>\n";
echo " <attr name=\"type\">".$attrdef->getType()."</attr>\n";
echo " <attr name=\"minvalues\">".$attrdef->getMinValues()."</attr>\n";

View File

@ -1,9 +1,5 @@
<?php
ini_set('include_path', '.:/usr/share/php:/usr/share/seeddms');
require_once("inc/inc.ClassSettings.php");
require_once("SeedDMS/Core.php");
require_once("SeedDMS/Lucene.php");
function usage() { /* {{{ */
echo "Usage:\n";
@ -446,10 +442,19 @@ if(isset($options['sections'])) {
$sections = explode(',', $options['sections']);
}
if(isset($settings->_extraPath))
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
require_once("SeedDMS/Core.php");
$db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostname, $settings->_dbUser, $settings->_dbPass, $settings->_dbDatabase);
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID);
$rootfolder = $dms->getFolder($folderid);

View File

@ -38,7 +38,7 @@ class SeedDMS_View_AddMultiDocument extends SeedDMS_Blue_Style {
$this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))));
$this->globalNavigation($folder);
$this->pageNavigation(getFolderPathHTML($folder, true), "view_folder", $folder);
$this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder);
?>
<script language="JavaScript">

View File

@ -40,7 +40,7 @@ class SeedDMS_View_RemoveDocumentFile extends SeedDMS_Blue_Style {
$this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))));
$this->globalNavigation($folder);
$this->pageNavigation(getFolderPathHTML($folder, true, $document), "view_document");
$this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document");
$this->contentHeading(getMLText("rm_file"));
$this->contentContainerStart();

View File

@ -162,7 +162,7 @@ function addFiles()
<span class="add-on"><i class="icon-calendar"></i></span>
</span>&nbsp;
<label class="checkbox inline">
<input type="checkbox" name="expires" value="false" checked><?php printMLText("does_not_expire");?><br>
<input type="checkbox" name="expires" value="false" checked><?php printMLText("does_not_expire");?>
</label>
</td>
</tr>
@ -193,7 +193,8 @@ function addFiles()
<?php } ?>
<tr>
<td><?php printMLText("comment_for_current_version");?>:</td>
<td><textarea name="version_comment" rows="3" cols="80"></textarea></td>
<td><textarea name="version_comment" rows="3" cols="80"></textarea><br />
<label class="checkbox inline"><input type="checkbox" name="use_comment" value="1" /> <?php printMLText("use_comment_of_document"); ?></label></td>
</tr>
<?php
$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, SeedDMS_Core_AttributeDefinition::objtype_all));

View File

@ -42,7 +42,7 @@ class SeedDMS_View_AddMultiDocument extends SeedDMS_Bootstrap_Style {
$this->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))));
$this->globalNavigation($folder);
$this->contentStart();
$this->pageNavigation(getFolderPathHTML($folder, true), "view_folder", $folder);
$this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder);
?>
<script language="JavaScript">

View File

@ -98,9 +98,7 @@ function showAttributeDefinitions(selectObj) {
</div>
<div class="span8">
<div class="well">
<table class="table-condensed"><tr>
<td id="attrdefs0" style="display : none;">
<div class="well" id="attrdefs0" style="display : none;">
<form action="../op/op.AttributeMgr.php" method="post">
<?php echo createHiddenFieldWithKey('addattrdef'); ?>
<input type="hidden" name="action" value="addattrdef">
@ -126,24 +124,25 @@ function showAttributeDefinitions(selectObj) {
<tr>
<td><?php printMLText("attrdef_valueset");?>:</td><td><input type="text" value="" name="valueset" /></td>
</tr>
<tr>
<td><?php printMLText("attrdef_regex");?>:</td><td><input type="text" value="" name="regex" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" class="btn" value="<?php printMLText("new_attrdef"); ?>"></td>
</tr>
</table>
</form>
</td>
</div>
<?php
if($attrdefs) {
foreach ($attrdefs as $attrdef) {
print "<td id=\"attrdefs".$attrdef->getID()."\" style=\"display : none;\">";
print "<div id=\"attrdefs".$attrdef->getID()."\" style=\"display : none;\">";
?>
<table class="table-condensed">
<tr>
<td></td><td>
<div class="well">
<?php
if(!$attrdef->isUsed()) {
?>
@ -155,13 +154,101 @@ function showAttributeDefinitions(selectObj) {
</form>
<?php
} else {
?>
<p><?php echo getMLText('attrdef_in_use') ?></p>
<?php
echo '<p>'.getMLText('attrdef_in_use').'</p>';
$res = $attrdef->getStatistics(3);
if(isset($res['frequencies']) && $res['frequencies']) {
print "<table class=\"table-condensed\">";
print "<thead>\n<tr>\n";
print "<th>".getMLText("count")."</th>\n";
print "<th>".getMLText("value")."</th>\n";
print "</tr></thead>\n<tbody>\n";
foreach($res['frequencies'] as $entry) {
echo "<tr><td>".$entry['c']."</td><td>".$entry['value']."</td></tr>";
}
print "</tbody></table>";
}
if($res['docs']) {
print "<table class=\"table-condensed\">";
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th>".getMLText("name")."</th>\n";
print "<th>".getMLText("owner")."</th>\n";
print "<th>".getMLText("status")."</th>\n";
print "<th>".getMLText("value")."</th>\n";
print "<th>".getMLText("actions")."</th>\n";
print "</tr></thead>\n<tbody>\n";
foreach($res['docs'] as $doc) {
$owner = $doc->getOwner();
$latest = $doc->getLatestContent();
$status = $latest->getStatus();
print "<tr>\n";
print "<td><i class=\"icon-file\"></i></td>";
print "<td><a href=\"../out/out.ViewDocument.php?documentid=".$doc->getID()."\">" . htmlspecialchars($doc->getName()) . "</a></td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td>".getOverallStatusText($status["status"])."</td>";
print "<td>".$doc->getAttributeValue($attrdef)."</td>";
print "<td>";
print "<a href='../out/out.EditDocument.php?documentid=".$doc->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>";
print "</td></tr>\n";
}
print "</tbody></table>";
}
if($res['folders']) {
print "<table class=\"table-condensed\">";
print "<thead><tr>\n";
print "<th></th>\n";
print "<th>".getMLText("name")."</th>\n";
print "<th>".getMLText("owner")."</th>\n";
print "<th>".getMLText("value")."</th>\n";
print "<th>".getMLText("actions")."</th>\n";
print "</tr></thead>\n<tbody>\n";
foreach($res['folders'] as $folder) {
$owner = $folder->getOwner();
print "<tr class=\"folder\">";
print "<td><i class=\"icon-folder-close-alt\"></i></td>";
print "<td><a href=\"../out/out.ViewFolder.php?folderid=".$folder->getID()."\">" . htmlspecialchars($folder->getName()) . "</a></td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td>".$folder->getAttributeValue($attrdef)."</td>";
print "<td>";
print "<a href='../out/out.EditFolder.php?folderid=".$folder->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>";
print "</td></tr>";
}
print "</tbody></table>";
}
if($res['contents']) {
print "<table class=\"table-condensed\">";
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th>".getMLText("name")."</th>\n";
print "<th>".getMLText("owner")."</th>\n";
print "<th>".getMLText("mimetype")."</th>\n";
print "<th>".getMLText("version")."</th>\n";
print "<th>".getMLText("value")."</th>\n";
print "<th>".getMLText("actions")."</th>\n";
print "</tr></thead>\n<tbody>\n";
foreach($res['contents'] as $content) {
$doc = $content->getDocument();
$owner = $doc->getOwner();
print "<tr>\n";
print "<td><i class=\"icon-file\"></i></td>";
print "<td><a href=\"../out/out.ViewDocument.php?documentid=".$doc->getID()."\">" . htmlspecialchars($doc->getName()) . "</a></td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td>".$content->getMimeType()."</td>";
print "<td>".$content->getVersion()."</td>";
print "<td>".$content->getAttributeValue($attrdef)."</td>";
print "<td>";
print "<a href='../out/out.EditDocument.php?documentid=".$doc->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>";
print "</td></tr>\n";
}
print "</tbody></table>";
}
}
?>
</td>
</tr>
</div>
<div class="well">
<table class="table-condensed">
<form action="../op/op.AttributeMgr.php" method="post">
<tr>
<td>
@ -222,6 +309,14 @@ function showAttributeDefinitions(selectObj) {
<input type="text" value="<?php echo $attrdef->getValueSet() ?>" name="valueset" />
</td>
</tr>
<tr>
<td>
<?php printMLText("attrdef_regex");?>:
</td>
<td>
<input type="text" value="<?php echo $attrdef->getRegex() ?>" name="regex" />
</td>
</tr>
<tr>
<td></td>
<td>
@ -231,12 +326,12 @@ function showAttributeDefinitions(selectObj) {
</form>
</table>
</td>
</div>
</div>
<?php
}
}
?>
</tr></table>
</div>
</div>
</div>

View File

@ -706,7 +706,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
} /* }}} */
function printDocumentChooser($formName) { /* {{{ */
print "<input type=\"hidden\" id=\"docid".$formName."\" name=\"docid".$formName."\">";
print "<input type=\"hidden\" id=\"docid".$formName."\" name=\"docid\">";
print "<div class=\"input-append\">\n";
print "<input type=\"text\" id=\"choosedocsearch\" data-provide=\"typeahead\" name=\"docname".$formName."\" placeholder=\"".getMLText('type_to_search')."\" autocomplete=\"off\" />";
print "<a data-target=\"#docChooser".$formName."\" href=\"out.DocumentChooser.php?form=".$formName."&folderid=".$this->params['rootfolderid']."\" role=\"button\" class=\"btn\" data-toggle=\"modal\">".getMLText("document")."…</a>\n";
@ -726,7 +726,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
</div>
<script language="JavaScript">
modalDocChooser<?= $formName ?> = $('#docChooser<?= $formName ?>');
function documentSelected(id, name) {
function documentSelected<?= $formName ?>(id, name) {
$('#docid<?= $formName ?>').val(id);
$('#choosedocsearch').val(name);
modalDocChooser<?= $formName ?>.modal('hide');
@ -757,7 +757,7 @@ function documentSelected(id, name) {
<script language="JavaScript">
/* Set up a callback which is called when a folder in the tree is selected */
modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>');
function folderSelected(id, name) {
function folderSelected<?= $formName ?>(id, name) {
$('#targetid<?= $formName ?>').val(id);
$('#choosefoldersearch<?= $formName ?>').val(name);
modalFolderChooser<?= $formName ?>.modal('hide');
@ -858,20 +858,8 @@ function folderSelected(id, name) {
} /* }}} */
function printDropFolderChooser($formName, $dropfolderfile="") { /* {{{ */
?>
<script language="JavaScript">
var openDlg;
function chooseDropFolderFile<?php print $formName ?>() {
var current = document.<?php echo $formName ?>.dropfolderfile<?php echo $formName ?>;
openDlg = open("out.DropFolderChooser.php?form=<?php echo $formName?>&dropfolderfile="+current.value, "openDlg", "width=480,height=480,scrollbars=yes,resizable=yes,status=yes");
}
function clearFilename<?php print $formName ?>() {
document.<?php echo $formName ?>.dropfolderfile<?php echo $formName ?>.value = '';
}
</script>
<?php
print "<div class=\"input-append\">\n";
print "<input readonly type=\"text\" name=\"dropfolderfile".$formName."\" value=\"".$dropfolderfile."\">";
print "<input readonly type=\"text\" id=\"dropfolderfile".$formName."\" name=\"dropfolderfile".$formName."\" value=\"".$dropfolderfile."\">";
print "<button type=\"button\" class=\"btn\" onclick=\"javascript:clearFilename".$formName."();\"><i class=\"icon-remove\"></i></button>";
print "<a data-target=\"#dropfolderChooser\" href=\"out.DropFolderChooser.php?form=form1&dropfolderfile=".$dropfolderfile."\" role=\"button\" class=\"btn\" data-toggle=\"modal\">".getMLText("choose_target_file")."…</a>\n";
print "</div>\n";
@ -886,9 +874,20 @@ function folderSelected(id, name) {
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button>
<button class="btn" data-dismiss="modal" aria-hidden="true" onClick="acceptCategories();"><i class="icon-save"></i> <?php printMLText("save") ?></button>
<!-- <button class="btn" data-dismiss="modal" aria-hidden="true" onClick="acceptCategories();"><i class="icon-save"></i> <?php printMLText("save") ?></button> -->
</div>
</div>
<script language="JavaScript">
/* Set up a callback which is called when a folder in the tree is selected */
modalDropfolderChooser = $('#dropfolderChooser');
function fileSelected(name) {
$('#dropfolderfile<?= $formName ?>').val(name);
modalDropfolderChooser.modal('hide');
}
function clearFilename<?php print $formName ?>() {
$('#dropfolderfile<?= $formName ?>').val('');
}
</script>
<?php
} /* }}} */
@ -953,8 +952,8 @@ function folderSelected(id, name) {
* @params boolean $showdocs set to true if tree shall contain documents
* as well.
*/
function printNewTreeNavigation($folderid=0, $accessmode=M_READ, $showdocs=0) { /* {{{ */
function jqtree($path, $folder, $user, $showdocs=1) {
function printNewTreeNavigation($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1') { /* {{{ */
function jqtree($path, $folder, $user, $accessmode, $showdocs=1) {
if($path) {
$pathfolder = array_shift($path);
$subfolders = $folder->getSubFolders();
@ -971,13 +970,22 @@ function folderSelected(id, name) {
$children[] = $node2;
}
}
$node['children'] = jqtree($path, $subfolder, $user, $showdocs);
$node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs);
}
$children[] = $node;
}
return $children;
} else
return array();
} else {
$subfolders = $folder->getSubFolders();
$subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode);
$children = array();
foreach($subfolders as $subfolder) {
$node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>$subfolder->hasSubFolders() ? true : false, 'is_folder'=>true);
$children[] = $node;
}
return $children;
}
return array();
}
if($folderid) {
@ -989,7 +997,7 @@ function folderSelected(id, name) {
$node['load_on_demand'] = false;
$node['children'] = array();
} else {
$node['children'] = jqtree($path, $folder, $this->params['user'], $showdocs);
$node['children'] = jqtree($path, $folder, $this->params['user'], $accessmode, $showdocs);
}
$tree[] = $node;
@ -998,20 +1006,20 @@ function folderSelected(id, name) {
$tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>true, 'is_folder'=>true));
}
echo "<div id=\"jqtree\" style=\"margin-left: 20px;\" data-url=\"../op/op.Ajax.php?command=subtree&showdocs=".$showdocs."\"></div>\n";
echo "<div id=\"jqtree".$formid."\" style=\"margin-left: 10px;\" data-url=\"../op/op.Ajax.php?command=subtree&showdocs=".$showdocs."\"></div>\n";
?>
<script language="JavaScript">
var data = <?php echo json_encode($tree); ?>;
$(function() {
$('#jqtree').tree({
$('#jqtree<?= $formid ?>').tree({
data: data,
openedIcon: '<i class="icon-minus-sign"></i>',
closedIcon: '<i class="icon-plus-sign"></i>',
onCanSelectNode: function(node) {
if(node.is_folder)
folderSelected(node.id, node.name);
folderSelected<?= $formid ?>(node.id, node.name);
else
documentSelected(node.id, node.name);
documentSelected<?= $formid ?>(node.id, node.name);
},
autoOpen: true,
drapAndDrop: true,
@ -1039,7 +1047,7 @@ $(function() {
}
</script>
<?php
$this->printNewTreeNavigation($folderid, M_READ, 0);
$this->printNewTreeNavigation($folderid, M_READ, 0, '');
$this->contentContainerEnd();
} else {
$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true);

View File

@ -39,7 +39,7 @@ class SeedDMS_View_DocumentChooser extends SeedDMS_Bootstrap_Style {
$this->htmlStartPage(getMLText("choose_target_document"));
$this->contentContainerStart();
$this->printNewTreeNavigation($folderid, M_READ, 1);
$this->printNewTreeNavigation($folderid, M_READ, 1, $form);
$this->contentContainerEnd();
echo "</body>\n</html>\n";
} /* }}} */

View File

@ -60,7 +60,7 @@ var targetName = document.<?php echo $form?>.dropfolderfile<?php print $form ?>;
while (false !== ($entry = $d->read())) {
if($entry != '..' && $entry != '.') {
if(!is_dir($entry)) {
echo "<tr><td><span style=\"cursor: pointer;\" onClick=\"targetName.value = '".$entry."'; window.close();\">".$entry."</span></td><td align=\"right\">".SeedDMS_Core_File::format_filesize(filesize($dir.'/'.$entry))."</td></tr>\n";
echo "<tr><td><span style=\"cursor: pointer;\" onClick=\"fileSelected('".$entry."');\">".$entry."</span></td><td align=\"right\">".SeedDMS_Core_File::format_filesize(filesize($dir.'/'.$entry))."</td></tr>\n";
}
}
}

View File

@ -41,8 +41,7 @@ class SeedDMS_View_FolderChooser extends SeedDMS_Bootstrap_Style {
$this->htmlStartPage(getMLText("choose_target_folder"));
$this->contentContainerStart();
$this->printNewTreeNavigation($folderid, $mode, 0);
// $this->printFoldersTree($mode, $exclude, $rootfolderid);
$this->printNewTreeNavigation($rootfolderid, $mode, 0, $form);
$this->contentContainerEnd();
echo "</body>\n</html>\n";
} /* }}} */

View File

@ -166,7 +166,7 @@ class SeedDMS_View_ManageNotify extends SeedDMS_Bootstrap_Style {
$this->contentSubHeading(getMLText("choose_target_document"));
/* 'form1' must be passed to printDocumentChooser() because the typeahead
* function is currently hardcoded on this value */
$this->printDocumentChooser("form1");
$this->printDocumentChooser("form2");
print "<button type='submit' class='btn'><i class=\"icon-plus\"></i> ".getMLText("add")."</button>";
print "</form>";

View File

@ -41,7 +41,7 @@ class SeedDMS_View_RemoveDocumentFile extends SeedDMS_Bootstrap_Style {
$this->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))));
$this->globalNavigation($folder);
$this->contentStart();
$this->pageNavigation(getFolderPathHTML($folder, true, $document), "view_document", $document);
$this->pageNavigation($this->getFolderPathHTML($folder, true, $document), "view_document", $document);
$this->contentHeading(getMLText("rm_file"));
$this->contentContainerStart();

View File

@ -325,6 +325,10 @@ if(!is_writeable($settings->_configFilePath)) {
<td><?php printMLText("settings_quota");?>:</td>
<td><input type="text" name="quota" value="<?php echo $settings->_quota; ?>" size="2" /></td>
</tr>
<tr title="<?php printMLText("settings_undelUserIds_desc");?>">
<td><?php printMLText("settings_undelUserIds");?>:</td>
<td><input type="text" name="undelUserIds" value="<?php echo $settings->_undelUserIds; ?>" size="32" /></td>
</tr>
<tr title="<?php printMLText("settings_encryptionKey_desc");?>">
<td><?php printMLText("settings_encryptionKey");?>:</td>
<td><input type="text" name="encryptionKey" value="<?php echo $settings->_encryptionKey; ?>" size="32" /></td>

View File

@ -41,6 +41,7 @@ class SeedDMS_View_UsrMgr extends SeedDMS_Bootstrap_Style {
$passwordexpiration = $this->params['passwordexpiration'];
$httproot = $this->params['httproot'];
$enableuserimage = $this->params['enableuserimage'];
$undeluserids = $this->params['undeluserids'];
$workflowmode = $this->params['workflowmode'];
$this->htmlStartPage(getMLText("admin_tools"));
@ -322,10 +323,16 @@ function showUser(selectObj) {
<input type="hidden" name="userid" value="<?php print $currUser->getID();?>">
<input type="hidden" name="action" value="edituser">
<table class="table-condensed">
<?php
if(!in_array($currUser->getID(), $undeluserids)) {
?>
<tr>
<td></td>
<td><a class="standardText btn" href="../out/out.RemoveUser.php?userid=<?php print $currUser->getID();?>"><i class="icon-remove"></i> <?php printMLText("rm_user");?></a></td>
</tr>
<?php
}
?>
<tr>
<td><?php printMLText("user_login");?>:</td>
<td><input type="text" name="login" value="<?php print htmlspecialchars($currUser->getLogin());?>"></td>

View File

@ -189,9 +189,9 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style {
print "<thead>\n<tr>\n";
print "<th></th>\n";
print "<th><a href=\"../out/out.ViewFolder.php?folderid=". $folderid .($orderby=="n"?"":"&orderby=n")."\">".getMLText("name")."</a></th>\n";
print "<th>".getMLText("owner")."</th>\n";
// print "<th>".getMLText("owner")."</th>\n";
print "<th>".getMLText("status")."</th>\n";
print "<th>".getMLText("version")."</th>\n";
// print "<th>".getMLText("version")."</th>\n";
print "<th>".getMLText("action")."</th>\n";
print "</tr>\n</thead>\n<tbody>\n";
}
@ -212,12 +212,13 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style {
// print "<td><img src=\"images/folder_closed.gif\" width=18 height=18 border=0></td>";
print "<td><a rel=\"folder_".$subFolder->getID()."\" draggable=\"true\" ondragstart=\"onDragStartFolder(event);\" href=\"out.ViewFolder.php?folderid=".$subFolder->getID()."&showtree=".$showtree."\"><img draggable=\"false\" src=\"".$this->imgpath."folder.png\" width=\"24\" height=\"24\" border=0></a></td>\n";
print "<td><a href=\"out.ViewFolder.php?folderid=".$subFolder->getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . "</a>";
print "<br /><span style=\"font-size: 85%; font-style: italic; color: #666;\">".getMLText('owner').": <b>".htmlspecialchars($owner->getFullName())."</b>, ".getMLText('creation_date').": <b>".date('Y-m-d', $subFolder->getDate())."</b></span>";
if($comment) {
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
}
print "</td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td colspan=\"1\"><small>";
// print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td colspan=\"1\" nowrap><small>";
if($enableRecursiveCount) {
if($user->isAdmin()) {
/* No need to check for access rights in countChildren() for
@ -237,7 +238,7 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style {
print count($subsub)." ".getMLText("folders")."<br />".count($subdoc)." ".getMLText("documents");
}
print "</small></td>";
print "<td></td>";
// print "<td></td>";
print "<td>";
print "<div class=\"list-action\">";
if($subFolder->getAccessMode($user) >= M_ALL) {
@ -306,12 +307,13 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style {
print "<td><img draggable=\"false\" class=\"mimeicon\" src=\"".$this->getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\"></td>";
print "<td><a href=\"out.ViewDocument.php?documentid=".$docID."&showtree=".$showtree."\">" . htmlspecialchars($document->getName()) . "</a>";
print "<br /><span style=\"font-size: 85%; font-style: italic; color: #666; \">".getMLText('owner').": <b>".htmlspecialchars($owner->getFullName())."</b>, ".getMLText('creation_date').": <b>".date('Y-m-d', $document->getDate())."</b>, ".getMLText('version')." <b>".$version."</b> - <b>".date('Y-m-d', $latestContent->getDate())."</b></span>";
if($comment) {
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
}
print "</td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td>";
// print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td nowrap>";
$attentionstr = '';
if ( $document->isLocked() ) {
$attentionstr .= "<img src=\"".$this->getImgPath("lock.png")."\" title=\"". getMLText("locked_by").": ".htmlspecialchars($document->getLockingUser()->getFullName())."\"> ";
@ -327,7 +329,7 @@ class SeedDMS_View_ViewFolder extends SeedDMS_Bootstrap_Style {
if(count($links))
print count($links)." ".getMLText("linked_documents")."<br />";
print getOverallStatusText($status["status"])."</small></td>";
print "<td>".$version."</td>";
// print "<td>".$version."</td>";
print "<td>";
print "<div class=\"list-action\">";
if($document->getAccessMode($user) >= M_ALL) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB