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. is now actually used.
- replaced folder tree view with a tree based on jquery which loads subfolders - replaced folder tree view with a tree based on jquery which loads subfolders
on demand 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 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 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 #restapi webapp
@ -19,7 +19,13 @@ webdav:
(cd tmp; tar --exclude=.svn -czvf ../seeddms-webdav-$(VERSION).tar.gz seeddms-webdav-$(VERSION)) (cd tmp; tar --exclude=.svn -czvf ../seeddms-webdav-$(VERSION).tar.gz seeddms-webdav-$(VERSION))
rm -rf tmp 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: doc:
phpdoc -d SeedDMS_Core --ignore 'getusers.php,getfoldertree.php,config.php,reverselookup.php' -t html 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; 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 * @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 * @param string $valueset separated list of allowed values, the first char
* is taken as the separator * 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->_id = $id;
$this->_name = $name; $this->_name = $name;
$this->_type = $type; $this->_type = $type;
@ -268,6 +275,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
$this->_maxvalues = $maxvalues; $this->_maxvalues = $maxvalues;
$this->_valueset = $valueset; $this->_valueset = $valueset;
$this->_separator = ''; $this->_separator = '';
$this->_regex = $regex;
$this->_dms = null; $this->_dms = null;
} /* }}} */ } /* }}} */
@ -438,11 +446,40 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
return true; 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 * Check if the attribute definition is used
* *
* Checks all attributes whether at least one of them referenceѕ * Checks all documents, folders and document content whether at least
* this attribute definition * one of them referenceѕ this attribute definition
* *
* @return boolean true if attribute definition is used, otherwise false * @return boolean true if attribute definition is used, otherwise false
*/ */
@ -466,6 +503,70 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
return true; 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 * Remove the attribute definition
* Removal is only executed when the definition is not used anymore. * Removal is only executed when the definition is not used anymore.

View File

@ -469,6 +469,30 @@ class SeedDMS_Core_DMS {
return $document; 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) { function makeTimeStamp($hour, $min, $sec, $year, $month, $day) {
$thirtyone = array (1, 3, 5, 7, 8, 10, 12); $thirtyone = array (1, 3, 5, 7, 8, 10, 12);
$thirty = array (4, 6, 9, 11); $thirty = array (4, 6, 9, 11);
@ -1453,7 +1477,7 @@ class SeedDMS_Core_DMS {
$resArr = $resArr[0]; $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); $attrdef->setDMS($this);
return $attrdef; return $attrdef;
} /* }}} */ } /* }}} */
@ -1477,7 +1501,7 @@ class SeedDMS_Core_DMS {
$resArr = $resArr[0]; $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); $attrdef->setDMS($this);
return $attrdef; return $attrdef;
} /* }}} */ } /* }}} */
@ -1505,7 +1529,7 @@ class SeedDMS_Core_DMS {
$attrdefs = array(); $attrdefs = array();
for ($i = 0; $i < count($resArr); $i++) { 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); $attrdef->setDMS($this);
$attrdefs[$i] = $attrdef; $attrdefs[$i] = $attrdef;
} }
@ -1524,13 +1548,13 @@ class SeedDMS_Core_DMS {
* @param string $valueset list of allowed values (csv format) * @param string $valueset list of allowed values (csv format)
* @return object of {@link SeedDMS_Core_User} * @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))) { if (is_object($this->getAttributeDefinitionByName($name))) {
return false; return false;
} }
if(!$type) if(!$type)
return false; 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); $res = $this->db->getResult($queryStr);
if (!$res) if (!$res)
return false; 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()) "SELECT * FROM tblWorkflowDocumentContent WHERE workflow=". intval($this->_workflow->getID())
. " AND `version`='".$this->_version . " AND `version`='".$this->_version
."' AND `document` = '". $this->_document->getID() ."' "; ."' AND `document` = '". $this->_document->getID() ."' ";
echo $queryStr;
$recs = $db->getResultArray($queryStr); $recs = $db->getResultArray($queryStr);
if (is_bool($recs) && !$recs) { if (is_bool($recs) && !$recs) {
$db->rollbackTransaction(); $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."'"; $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)) { if (!$db->getResult($queryStr)) {
$db->rollbackTransaction(); $db->rollbackTransaction();
return false; return false;

View File

@ -701,9 +701,9 @@ class SeedDMS_Core_Folder extends SeedDMS_Core_Object {
$document = $this->_dms->getDocument($db->getInsertID()); $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); $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) { if (is_bool($res) && !$res) {
$db->rollbackTransaction(); $db->rollbackTransaction();

View File

@ -158,5 +158,37 @@ class SeedDMS_Core_Object { /* {{{ */
return true; 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> </stability>
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license> <license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes> <notes>
- various small corrections
</notes> </notes>
<contents> <contents>
<dir baseinstalldir="SeedDMS" name="/"> <dir baseinstalldir="SeedDMS" name="/">

View File

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

View File

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

View File

@ -4,3 +4,7 @@ Directory for language files
This version uses different names for the directories containing the This version uses different names for the directories containing the
language files. Users should explicitly set the language the next time language files. Users should explicitly set the language the next time
they log in in order to update their user preferences. 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 tblSessions ADD COLUMN `splashmsg` TEXT DEFAULT '';
ALTER TABLE tblAttributeDefinitions ADD COLUMN `regex` TEXT DEFAULT '';
UPDATE tblVersion set major=4, minor=3, subminor=0; UPDATE tblVersion set major=4, minor=3, subminor=0;
COMMIT; COMMIT;

View File

@ -2,6 +2,8 @@ START TRANSACTION;
ALTER TABLE tblSessions ADD COLUMN `splashmsg` TEXT DEFAULT ''; 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; UPDATE tblVersion set major=4, minor=3, subminor=0;
COMMIT; COMMIT;

View File

@ -94,6 +94,7 @@ $text = array(
'attrdef_type' => "Typ", 'attrdef_type' => "Typ",
'attrdef_minvalues' => "Min. Anzahl Werte", 'attrdef_minvalues' => "Min. Anzahl Werte",
'attrdef_maxvalues' => "Max. Anzahl Werte", 'attrdef_maxvalues' => "Max. Anzahl Werte",
'attrdef_regex' => "Regulärer Ausdruck",
'attrdef_valueset' => "Werteauswahl", 'attrdef_valueset' => "Werteauswahl",
'attribute_changed_email_subject' => "[sitename]: [name] - Attribut geändert", '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]", '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", 'backup_log_management' => "Backup/Logging",
'between' => "zwischen", 'between' => "zwischen",
'calendar' => "Kalender", 'calendar' => "Kalender",
'calendar_week' => "Kalenderwoche",
'cancel' => "Abbrechen", '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_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", '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_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_desc' => "Users are notified about document-changes that took place within the last 'Update Notify Time' seconds",
'settings_updateNotifyTime' => "Update Notify Time", '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_desc' => "Der Name der Datei mit Versionsinformationen, wie sie durch das Backup-Tool erzeugt werden.",
'settings_versioningFileName' => "Versionsinfo-Datei", 'settings_versioningFileName' => "Versionsinfo-Datei",
'settings_viewOnlineFileTypes_desc' => "Dateien mit den angegebenen Endungen können Online angeschaut werden (benutzen Sie ausschließlich Kleinbuchstaben).", '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' => "Abmelden",
'sign_out_user' => "Benutzer abmelden", 'sign_out_user' => "Benutzer abmelden",
'space_used_on_data_folder' => "Benutzter Plattenplatz", '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_approval_rejected' => "Entwurf abgelehnt",
'status_approved' => "freigegeben", 'status_approved' => "freigegeben",
'status_approver_removed' => "Freigebender wurde vom Prozess ausgeschlossen", '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_password_forgotten' => "Neues Passwort setzen und per E-Mail schicken",
'submit_review' => "Überprüfung hinzufügen", 'submit_review' => "Überprüfung hinzufügen",
'submit_userinfo' => "Daten setzen", 'submit_userinfo' => "Daten setzen",
'substitute_user' => "Benutzer wechseln",
'sunday' => "Sonntag", 'sunday' => "Sonntag",
'sunday_abbr' => "So", 'sunday_abbr' => "So",
'switched_to' => "Gewechselt zu", 'switched_to' => "Gewechselt zu",
@ -831,6 +846,7 @@ $text = array(
'uploaded_by' => "Hochgeladen durch", 'uploaded_by' => "Hochgeladen durch",
'uploading_failed' => "Das Hochladen einer Datei ist fehlgeschlagen. Bitte überprüfen Sie die maximale Dateigröße für Uploads.", '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.", 'uploading_zerosize' => "Versuch eine leere Datei hochzuladen. Vorgang wird abgebrochen.",
'use_comment_of_document' => "Verwende Kommentar des Dokuments",
'use_default_categories' => "Kategorievorlagen", 'use_default_categories' => "Kategorievorlagen",
'use_default_keywords' => "Stichwortvorlagen", 'use_default_keywords' => "Stichwortvorlagen",
'used_discspace' => "Verbrauchter Speicherplatz", 'used_discspace' => "Verbrauchter Speicherplatz",

View File

@ -85,6 +85,7 @@ $text = array(
'assign_reviewers' => "Assign Reviewers", 'assign_reviewers' => "Assign Reviewers",
'assign_user_property_to' => "Assign user's properties to", 'assign_user_property_to' => "Assign user's properties to",
'assumed_released' => "Assumed released", 'assumed_released' => "Assumed released",
'attr_no_regex_match' => "The attribute value does not match the regular expression",
'attrdef_management' => "Attribute definition management", 'attrdef_management' => "Attribute definition management",
'attrdef_exists' => "Attribute definition already exists", 'attrdef_exists' => "Attribute definition already exists",
'attrdef_in_use' => "Attribute definition still in use", 'attrdef_in_use' => "Attribute definition still in use",
@ -94,6 +95,7 @@ $text = array(
'attrdef_type' => "Type", 'attrdef_type' => "Type",
'attrdef_minvalues' => "Min. number of values", 'attrdef_minvalues' => "Min. number of values",
'attrdef_maxvalues' => "Max. number of values", 'attrdef_maxvalues' => "Max. number of values",
'attrdef_regex' => "Regular expression",
'attrdef_valueset' => "Set of values", 'attrdef_valueset' => "Set of values",
'attribute_changed_email_subject' => "[sitename]: [name] - Attribute changed", '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]", '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", 'cancel' => "Cancel",
'cannot_assign_invalid_state' => "Cannot modify an obsolete or rejected document", '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_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_delete_yourself' => "Cannot delete yourself",
'cannot_move_root' => "Error: Cannot move root folder.", 'cannot_move_root' => "Error: Cannot move root folder.",
'cannot_retrieve_approval_snapshot' => "Unable to retrieve approval status snapshot for this document version.", '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_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_desc' => "Users are notified about document-changes that took place within the last 'Update Notify Time' seconds",
'settings_updateNotifyTime' => "Update Notify Time", '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_desc' => "The name of the versioning info file created by the backup tool",
'settings_versioningFileName' => "Versioning FileName", 'settings_versioningFileName' => "Versioning FileName",
'settings_viewOnlineFileTypes_desc' => "Files with one of the following endings can be viewed online (USE ONLY LOWER CASE CHARACTERS)", '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", 'uploaded_by' => "Uploaded by",
'uploading_failed' => "Uploading one of your files failed. Please check your maximum upload file size.", 'uploading_failed' => "Uploading one of your files failed. Please check your maximum upload file size.",
'uploading_zerosize' => "Uploading an empty file. Upload is canceled.", '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_categories' => "Use predefined categories",
'use_default_keywords' => "Use predefined keywords", 'use_default_keywords' => "Use predefined keywords",
'used_discspace' => "Used disk space", 'used_discspace' => "Used disk space",

View File

@ -52,6 +52,8 @@ if ($folder->getAccessMode($user) < M_READWRITE) {
$comment = $_POST["comment"]; $comment = $_POST["comment"];
$version_comment = $_POST["version_comment"]; $version_comment = $_POST["version_comment"];
if($version_comment == "" && isset($_POST["use_comment"]))
$version_comment = $comment;
$keywords = $_POST["keywords"]; $keywords = $_POST["keywords"];
$categories = isset($_POST["categories"]) ? $_POST["categories"] : null; $categories = isset($_POST["categories"]) ? $_POST["categories"] : null;
@ -59,10 +61,32 @@ if(isset($_POST["attributes"]))
$attributes = $_POST["attributes"]; $attributes = $_POST["attributes"];
else else
$attributes = array(); $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"])) if(isset($_POST["attributes_version"]))
$attributes_version = $_POST["attributes_version"]; $attributes_version = $_POST["attributes_version"];
else else
$attributes_version = array(); $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"])) if(isset($_POST["workflow"]))
$workflow = $dms->getWorkflow($_POST["workflow"]); $workflow = $dms->getWorkflow($_POST["workflow"]);

View File

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

View File

@ -60,6 +60,17 @@ if(isset($_POST["attributes"]))
$attributes = $_POST["attributes"]; $attributes = $_POST["attributes"];
else else
$attributes = array(); $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); $subFolder = $folder->addSubFolder($name, $comment, $user, $sequence, $attributes);
if (is_object($subFolder)) { if (is_object($subFolder)) {

View File

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

View File

@ -62,53 +62,45 @@ $attributes = $_POST["attributes"];
if($attributes) { if($attributes) {
$oldattributes = $version->getAttributes(); $oldattributes = $version->getAttributes();
foreach($attributes as $attrdefid=>$attribute) { foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { $attrdef = $dms->getAttributeDefinition($attrdefid);
if(!$version->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) { if($attribute) {
UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); if($attrdef->getRegex()) {
} else { if(!preg_match($attrdef->getRegex(), $attribute)) {
if($notifier) { UI::exitError(getMLText("folder_title", array("foldername" => $document->getName())),getMLText("attr_no_regex_match"));
$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);
} }
} }
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) { if($attributes) {
$oldattributes = $document->getAttributes(); $oldattributes = $document->getAttributes();
foreach($attributes as $attrdefid=>$attribute) { foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { $attrdef = $dms->getAttributeDefinition($attrdefid);
if(!$document->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) 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")); 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) { if($attributes) {
$oldattributes = $folder->getAttributes(); $oldattributes = $folder->getAttributes();
foreach($attributes as $attrdefid=>$attribute) { foreach($attributes as $attrdefid=>$attribute) {
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) { $attrdef = $dms->getAttributeDefinition($attrdefid);
if(!$folder->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute)) 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")); 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"; $message = "access_permission_changed_email_body";
$params = array(); $params = array();
$params['name'] = $folder->getName(); $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['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['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; $params['sitename'] = $settings->_siteName;

View File

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

View File

@ -114,6 +114,7 @@ if ($_POST["reviewType"] == "ind") {
$params['status'] = getReviewStatusText($_POST["reviewStatus"]); $params['status'] = getReviewStatusText($_POST["reviewStatus"]);
$params['comment'] = $comment; $params['comment'] = $comment;
$params['username'] = $user->getFullName(); $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['sitename'] = $settings->_siteName;
$params['http_root'] = $settings->_httpRoot; $params['http_root'] = $settings->_httpRoot;
$notifier->toList($user, $nl["users"], $subject, $message, $params); $notifier->toList($user, $nl["users"], $subject, $message, $params);

View File

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

View File

@ -169,6 +169,16 @@ if ($_FILES['userfile']['error'] == 0) {
} }
$attributes = $_POST["attributes"]; $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); $contentResult=$document->addContent($comment, $user, $userfiletmp, basename($userfilename), $fileType, $userfiletype, $reviewers, $approvers, $version=0, $attributes);
if (is_bool($contentResult) && !$contentResult) { if (is_bool($contentResult) && !$contentResult) {

View File

@ -135,6 +135,10 @@ else if ($action == "removeuser") {
UI::exitError(getMLText("admin_tools"),getMLText("invalid_user_id")); 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 /* This used to be a check if an admin is deleted. Now it checks if one
* wants to delete herself. * 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"])); $rmuser = $dms->getUser(intval($_GET["userid"]));
if ($rmuser->getID()==$user->getID()) {
UI::exitError(getMLText("rm_user"),getMLText("access_denied"));
}
if (!is_object($rmuser)) { if (!is_object($rmuser)) {
UI::exitError(getMLText("rm_user"),getMLText("invalid_user_id")); 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); $allusers = $dms->getAllUsers($settings->_sortUsersInList);
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME']));

View File

@ -45,7 +45,7 @@ if(isset($_GET['userid']) && $_GET['userid']) {
} }
$tmp = explode('.', basename($_SERVER['SCRIPT_FILENAME'])); $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) { if($view) {
$view->show(); $view->show();
exit; 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); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
$dms->setEnableAdminRevApp($settings->_enableAdminRevApp); $dms->setMaxDirID($settings->_maxDirID);
$dms->setEnableConverting($settings->_enableConverting); $dms->setEnableConverting($settings->_enableConverting);
$dms->setViewOnlineFileTypes($settings->_viewOnlineFileTypes); $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 = 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->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); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
$dms->setGuestID($settings->_guestID); $dms->setMaxDirID($settings->_maxDirID);
$dms->setEnableGuestLogin($settings->_enableGuestLogin);
$dms->setEnableAdminRevApp($settings->_enableAdminRevApp);
$dms->setEnableConverting($settings->_enableConverting); $dms->setEnableConverting($settings->_enableConverting);
$dms->setViewOnlineFileTypes($settings->_viewOnlineFileTypes); $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 . "\""); $db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
$index = Zend_Search_Lucene::create($settings->_luceneDir); $index = Zend_Search_Lucene::create($settings->_luceneDir);

View File

@ -13,6 +13,7 @@ function usage() { /* {{{ */
echo " -v, --version: print version and exit.\n"; echo " -v, --version: print version and exit.\n";
echo " --config: set alternative config file.\n"; echo " --config: set alternative config file.\n";
echo " --folder: set start folder.\n"; echo " --folder: set start folder.\n";
echo " --maxsize: maximum size of files to be include in output.\n";
} /* }}} */ } /* }}} */
function wrapWithCData($text) { /* {{{ */ function wrapWithCData($text) { /* {{{ */
@ -24,7 +25,7 @@ function wrapWithCData($text) { /* {{{ */
$version = "0.0.1"; $version = "0.0.1";
$shortoptions = "hv"; $shortoptions = "hv";
$longoptions = array('help', 'version', 'config:', 'folder:'); $longoptions = array('help', 'version', 'config:', 'folder:', 'maxsize:');
if(false === ($options = getopt($shortoptions, $longoptions))) { if(false === ($options = getopt($shortoptions, $longoptions))) {
usage(); usage();
exit(0); exit(0);
@ -49,6 +50,13 @@ if(isset($options['config'])) {
$settings = new Settings(); $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)) if(isset($settings->_extraPath))
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path')); 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=\"owner\">".$owner->getId()."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($file->getComment())."</attr>\n"; echo $indent." <attr name=\"comment\">".wrapWithCData($file->getComment())."</attr>\n";
echo $indent." <attr name=\"orgfilename\">".wrapWithCData($file->getOriginalFileName())."</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." </file>\n";
} }
echo $indent." </files>\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 . "\""); $db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
@ -404,7 +422,7 @@ if($attrdefs) {
} }
echo "\">\n"; echo "\">\n";
echo " <attr name=\"name\">".$attrdef->getName()."</attr>\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=\"valueset\">".$attrdef->getValueSet()."</attr>\n";
echo " <attr name=\"type\">".$attrdef->getType()."</attr>\n"; echo " <attr name=\"type\">".$attrdef->getType()."</attr>\n";
echo " <attr name=\"minvalues\">".$attrdef->getMinValues()."</attr>\n"; echo " <attr name=\"minvalues\">".$attrdef->getMinValues()."</attr>\n";

View File

@ -1,9 +1,5 @@
<?php <?php
ini_set('include_path', '.:/usr/share/php:/usr/share/seeddms');
require_once("inc/inc.ClassSettings.php"); require_once("inc/inc.ClassSettings.php");
require_once("SeedDMS/Core.php");
require_once("SeedDMS/Lucene.php");
function usage() { /* {{{ */ function usage() { /* {{{ */
echo "Usage:\n"; echo "Usage:\n";
@ -446,10 +442,19 @@ if(isset($options['sections'])) {
$sections = explode(',', $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 = 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->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) {
echo "Database update needed.";
exit;
}
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
$rootfolder = $dms->getFolder($folderid); $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->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))));
$this->globalNavigation($folder); $this->globalNavigation($folder);
$this->pageNavigation(getFolderPathHTML($folder, true), "view_folder", $folder); $this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder);
?> ?>
<script language="JavaScript"> <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->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))));
$this->globalNavigation($folder); $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->contentHeading(getMLText("rm_file"));
$this->contentContainerStart(); $this->contentContainerStart();

View File

@ -162,7 +162,7 @@ function addFiles()
<span class="add-on"><i class="icon-calendar"></i></span> <span class="add-on"><i class="icon-calendar"></i></span>
</span>&nbsp; </span>&nbsp;
<label class="checkbox inline"> <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> </label>
</td> </td>
</tr> </tr>
@ -193,7 +193,8 @@ function addFiles()
<?php } ?> <?php } ?>
<tr> <tr>
<td><?php printMLText("comment_for_current_version");?>:</td> <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> </tr>
<?php <?php
$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, SeedDMS_Core_AttributeDefinition::objtype_all)); $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->htmlStartPage(getMLText("folder_title", array("foldername" => htmlspecialchars($folder->getName()))));
$this->globalNavigation($folder); $this->globalNavigation($folder);
$this->contentStart(); $this->contentStart();
$this->pageNavigation(getFolderPathHTML($folder, true), "view_folder", $folder); $this->pageNavigation($this->getFolderPathHTML($folder, true), "view_folder", $folder);
?> ?>
<script language="JavaScript"> <script language="JavaScript">

View File

@ -98,9 +98,7 @@ function showAttributeDefinitions(selectObj) {
</div> </div>
<div class="span8"> <div class="span8">
<div class="well"> <div class="well" id="attrdefs0" style="display : none;">
<table class="table-condensed"><tr>
<td id="attrdefs0" style="display : none;">
<form action="../op/op.AttributeMgr.php" method="post"> <form action="../op/op.AttributeMgr.php" method="post">
<?php echo createHiddenFieldWithKey('addattrdef'); ?> <?php echo createHiddenFieldWithKey('addattrdef'); ?>
<input type="hidden" name="action" value="addattrdef"> <input type="hidden" name="action" value="addattrdef">
@ -126,24 +124,25 @@ function showAttributeDefinitions(selectObj) {
<tr> <tr>
<td><?php printMLText("attrdef_valueset");?>:</td><td><input type="text" value="" name="valueset" /></td> <td><?php printMLText("attrdef_valueset");?>:</td><td><input type="text" value="" name="valueset" /></td>
</tr> </tr>
<tr>
<td><?php printMLText("attrdef_regex");?>:</td><td><input type="text" value="" name="regex" /></td>
</tr>
<tr> <tr>
<td></td> <td></td>
<td><input type="submit" class="btn" value="<?php printMLText("new_attrdef"); ?>"></td> <td><input type="submit" class="btn" value="<?php printMLText("new_attrdef"); ?>"></td>
</tr> </tr>
</table> </table>
</form> </form>
</td> </div>
<?php <?php
if($attrdefs) { if($attrdefs) {
foreach ($attrdefs as $attrdef) { 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"> <div class="well">
<tr>
<td></td><td>
<?php <?php
if(!$attrdef->isUsed()) { if(!$attrdef->isUsed()) {
?> ?>
@ -155,13 +154,101 @@ function showAttributeDefinitions(selectObj) {
</form> </form>
<?php <?php
} else { } else {
?> echo '<p>'.getMLText('attrdef_in_use').'</p>';
<p><?php echo getMLText('attrdef_in_use') ?></p> $res = $attrdef->getStatistics(3);
<?php 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> </div>
</tr> <div class="well">
<table class="table-condensed">
<form action="../op/op.AttributeMgr.php" method="post"> <form action="../op/op.AttributeMgr.php" method="post">
<tr> <tr>
<td> <td>
@ -222,6 +309,14 @@ function showAttributeDefinitions(selectObj) {
<input type="text" value="<?php echo $attrdef->getValueSet() ?>" name="valueset" /> <input type="text" value="<?php echo $attrdef->getValueSet() ?>" name="valueset" />
</td> </td>
</tr> </tr>
<tr>
<td>
<?php printMLText("attrdef_regex");?>:
</td>
<td>
<input type="text" value="<?php echo $attrdef->getRegex() ?>" name="regex" />
</td>
</tr>
<tr> <tr>
<td></td> <td></td>
<td> <td>
@ -231,12 +326,12 @@ function showAttributeDefinitions(selectObj) {
</form> </form>
</table> </table>
</td> </div>
</div>
<?php <?php
} }
} }
?> ?>
</tr></table>
</div> </div>
</div> </div>
</div> </div>

View File

@ -706,7 +706,7 @@ background-image: linear-gradient(to bottom, #882222, #111111);;
} /* }}} */ } /* }}} */
function printDocumentChooser($formName) { /* {{{ */ 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 "<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 "<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"; 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> </div>
<script language="JavaScript"> <script language="JavaScript">
modalDocChooser<?= $formName ?> = $('#docChooser<?= $formName ?>'); modalDocChooser<?= $formName ?> = $('#docChooser<?= $formName ?>');
function documentSelected(id, name) { function documentSelected<?= $formName ?>(id, name) {
$('#docid<?= $formName ?>').val(id); $('#docid<?= $formName ?>').val(id);
$('#choosedocsearch').val(name); $('#choosedocsearch').val(name);
modalDocChooser<?= $formName ?>.modal('hide'); modalDocChooser<?= $formName ?>.modal('hide');
@ -757,7 +757,7 @@ function documentSelected(id, name) {
<script language="JavaScript"> <script language="JavaScript">
/* Set up a callback which is called when a folder in the tree is selected */ /* Set up a callback which is called when a folder in the tree is selected */
modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>'); modalFolderChooser<?= $formName ?> = $('#folderChooser<?= $formName ?>');
function folderSelected(id, name) { function folderSelected<?= $formName ?>(id, name) {
$('#targetid<?= $formName ?>').val(id); $('#targetid<?= $formName ?>').val(id);
$('#choosefoldersearch<?= $formName ?>').val(name); $('#choosefoldersearch<?= $formName ?>').val(name);
modalFolderChooser<?= $formName ?>.modal('hide'); modalFolderChooser<?= $formName ?>.modal('hide');
@ -858,20 +858,8 @@ function folderSelected(id, name) {
} /* }}} */ } /* }}} */
function printDropFolderChooser($formName, $dropfolderfile="") { /* {{{ */ 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 "<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 "<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 "<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"; print "</div>\n";
@ -886,9 +874,20 @@ function folderSelected(id, name) {
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"><?php printMLText("close") ?></button> <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>
</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 <?php
} /* }}} */ } /* }}} */
@ -953,8 +952,8 @@ function folderSelected(id, name) {
* @params boolean $showdocs set to true if tree shall contain documents * @params boolean $showdocs set to true if tree shall contain documents
* as well. * as well.
*/ */
function printNewTreeNavigation($folderid=0, $accessmode=M_READ, $showdocs=0) { /* {{{ */ function printNewTreeNavigation($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1') { /* {{{ */
function jqtree($path, $folder, $user, $showdocs=1) { function jqtree($path, $folder, $user, $accessmode, $showdocs=1) {
if($path) { if($path) {
$pathfolder = array_shift($path); $pathfolder = array_shift($path);
$subfolders = $folder->getSubFolders(); $subfolders = $folder->getSubFolders();
@ -971,13 +970,22 @@ function folderSelected(id, name) {
$children[] = $node2; $children[] = $node2;
} }
} }
$node['children'] = jqtree($path, $subfolder, $user, $showdocs); $node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs);
} }
$children[] = $node; $children[] = $node;
} }
return $children; return $children;
} else } else {
return array(); $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) { if($folderid) {
@ -989,7 +997,7 @@ function folderSelected(id, name) {
$node['load_on_demand'] = false; $node['load_on_demand'] = false;
$node['children'] = array(); $node['children'] = array();
} else { } else {
$node['children'] = jqtree($path, $folder, $this->params['user'], $showdocs); $node['children'] = jqtree($path, $folder, $this->params['user'], $accessmode, $showdocs);
} }
$tree[] = $node; $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)); $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"> <script language="JavaScript">
var data = <?php echo json_encode($tree); ?>; var data = <?php echo json_encode($tree); ?>;
$(function() { $(function() {
$('#jqtree').tree({ $('#jqtree<?= $formid ?>').tree({
data: data, data: data,
openedIcon: '<i class="icon-minus-sign"></i>', openedIcon: '<i class="icon-minus-sign"></i>',
closedIcon: '<i class="icon-plus-sign"></i>', closedIcon: '<i class="icon-plus-sign"></i>',
onCanSelectNode: function(node) { onCanSelectNode: function(node) {
if(node.is_folder) if(node.is_folder)
folderSelected(node.id, node.name); folderSelected<?= $formid ?>(node.id, node.name);
else else
documentSelected(node.id, node.name); documentSelected<?= $formid ?>(node.id, node.name);
}, },
autoOpen: true, autoOpen: true,
drapAndDrop: true, drapAndDrop: true,
@ -1039,7 +1047,7 @@ $(function() {
} }
</script> </script>
<?php <?php
$this->printNewTreeNavigation($folderid, M_READ, 0); $this->printNewTreeNavigation($folderid, M_READ, 0, '');
$this->contentContainerEnd(); $this->contentContainerEnd();
} else { } else {
$this->contentHeading("<a href=\"../out/out.ViewFolder.php?folderid=". $folderid."&showtree=1\"><i class=\"icon-plus-sign\"></i></a>", true); $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->htmlStartPage(getMLText("choose_target_document"));
$this->contentContainerStart(); $this->contentContainerStart();
$this->printNewTreeNavigation($folderid, M_READ, 1); $this->printNewTreeNavigation($folderid, M_READ, 1, $form);
$this->contentContainerEnd(); $this->contentContainerEnd();
echo "</body>\n</html>\n"; 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())) { while (false !== ($entry = $d->read())) {
if($entry != '..' && $entry != '.') { if($entry != '..' && $entry != '.') {
if(!is_dir($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->htmlStartPage(getMLText("choose_target_folder"));
$this->contentContainerStart(); $this->contentContainerStart();
$this->printNewTreeNavigation($folderid, $mode, 0); $this->printNewTreeNavigation($rootfolderid, $mode, 0, $form);
// $this->printFoldersTree($mode, $exclude, $rootfolderid);
$this->contentContainerEnd(); $this->contentContainerEnd();
echo "</body>\n</html>\n"; 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")); $this->contentSubHeading(getMLText("choose_target_document"));
/* 'form1' must be passed to printDocumentChooser() because the typeahead /* 'form1' must be passed to printDocumentChooser() because the typeahead
* function is currently hardcoded on this value */ * 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 "<button type='submit' class='btn'><i class=\"icon-plus\"></i> ".getMLText("add")."</button>";
print "</form>"; 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->htmlStartPage(getMLText("document_title", array("documentname" => htmlspecialchars($document->getName()))));
$this->globalNavigation($folder); $this->globalNavigation($folder);
$this->contentStart(); $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->contentHeading(getMLText("rm_file"));
$this->contentContainerStart(); $this->contentContainerStart();

View File

@ -325,6 +325,10 @@ if(!is_writeable($settings->_configFilePath)) {
<td><?php printMLText("settings_quota");?>:</td> <td><?php printMLText("settings_quota");?>:</td>
<td><input type="text" name="quota" value="<?php echo $settings->_quota; ?>" size="2" /></td> <td><input type="text" name="quota" value="<?php echo $settings->_quota; ?>" size="2" /></td>
</tr> </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");?>"> <tr title="<?php printMLText("settings_encryptionKey_desc");?>">
<td><?php printMLText("settings_encryptionKey");?>:</td> <td><?php printMLText("settings_encryptionKey");?>:</td>
<td><input type="text" name="encryptionKey" value="<?php echo $settings->_encryptionKey; ?>" size="32" /></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']; $passwordexpiration = $this->params['passwordexpiration'];
$httproot = $this->params['httproot']; $httproot = $this->params['httproot'];
$enableuserimage = $this->params['enableuserimage']; $enableuserimage = $this->params['enableuserimage'];
$undeluserids = $this->params['undeluserids'];
$workflowmode = $this->params['workflowmode']; $workflowmode = $this->params['workflowmode'];
$this->htmlStartPage(getMLText("admin_tools")); $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="userid" value="<?php print $currUser->getID();?>">
<input type="hidden" name="action" value="edituser"> <input type="hidden" name="action" value="edituser">
<table class="table-condensed"> <table class="table-condensed">
<?php
if(!in_array($currUser->getID(), $undeluserids)) {
?>
<tr> <tr>
<td></td> <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> <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> </tr>
<?php
}
?>
<tr> <tr>
<td><?php printMLText("user_login");?>:</td> <td><?php printMLText("user_login");?>:</td>
<td><input type="text" name="login" value="<?php print htmlspecialchars($currUser->getLogin());?>"></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 "<thead>\n<tr>\n";
print "<th></th>\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><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("status")."</th>\n";
print "<th>".getMLText("version")."</th>\n"; // print "<th>".getMLText("version")."</th>\n";
print "<th>".getMLText("action")."</th>\n"; print "<th>".getMLText("action")."</th>\n";
print "</tr>\n</thead>\n<tbody>\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><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 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 "<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) { if($comment) {
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>"; print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
} }
print "</td>\n"; print "</td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>"; // print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td colspan=\"1\"><small>"; print "<td colspan=\"1\" nowrap><small>";
if($enableRecursiveCount) { if($enableRecursiveCount) {
if($user->isAdmin()) { if($user->isAdmin()) {
/* No need to check for access rights in countChildren() for /* 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 count($subsub)." ".getMLText("folders")."<br />".count($subdoc)." ".getMLText("documents");
} }
print "</small></td>"; print "</small></td>";
print "<td></td>"; // print "<td></td>";
print "<td>"; print "<td>";
print "<div class=\"list-action\">"; print "<div class=\"list-action\">";
if($subFolder->getAccessMode($user) >= M_ALL) { 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><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 "<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) { if($comment) {
print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>"; print "<br /><span style=\"font-size: 85%;\">".htmlspecialchars($comment)."</span>";
} }
print "</td>\n"; print "</td>\n";
print "<td>".htmlspecialchars($owner->getFullName())."</td>"; // print "<td>".htmlspecialchars($owner->getFullName())."</td>";
print "<td>"; print "<td nowrap>";
$attentionstr = ''; $attentionstr = '';
if ( $document->isLocked() ) { if ( $document->isLocked() ) {
$attentionstr .= "<img src=\"".$this->getImgPath("lock.png")."\" title=\"". getMLText("locked_by").": ".htmlspecialchars($document->getLockingUser()->getFullName())."\"> "; $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)) if(count($links))
print count($links)." ".getMLText("linked_documents")."<br />"; print count($links)." ".getMLText("linked_documents")."<br />";
print getOverallStatusText($status["status"])."</small></td>"; print getOverallStatusText($status["status"])."</small></td>";
print "<td>".$version."</td>"; // print "<td>".$version."</td>";
print "<td>"; print "<td>";
print "<div class=\"list-action\">"; print "<div class=\"list-action\">";
if($document->getAccessMode($user) >= M_ALL) { 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