mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-07-15 08:58:10 +00:00
add support for custom attributes of categories
This commit is contained in:
parent
b47c01fdd8
commit
2061cde061
|
@ -251,6 +251,12 @@ class SeedDMS_Core_Attribute { /* {{{ */
|
||||||
else
|
else
|
||||||
$queryStr = "UPDATE `tblFolderAttributes` SET `value` = ".$db->qstr($value)." WHERE `folder` = " . $this->_obj->getID() . " AND `attrdef` = " . $this->_attrdef->getId();
|
$queryStr = "UPDATE `tblFolderAttributes` SET `value` = ".$db->qstr($value)." WHERE `folder` = " . $this->_obj->getID() . " AND `attrdef` = " . $this->_attrdef->getId();
|
||||||
break;
|
break;
|
||||||
|
case $this->_dms->getClassname('user'):
|
||||||
|
if(trim($value) === '')
|
||||||
|
$queryStr = "DELETE FROM `tblUserAttributes WHERE` `userID` = " . $this->_obj->getID() . " AND `attrdef` = " . $this->_attrdef->getId();
|
||||||
|
else
|
||||||
|
$queryStr = "UPDATE `tblUserAttributes` SET `value` = ".$db->qstr($value)." WHERE `userID` = " . $this->_obj->getID() . " AND `attrdef` = " . $this->_attrdef->getId();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -440,6 +446,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
|
||||||
const objtype_folder = '1';
|
const objtype_folder = '1';
|
||||||
const objtype_document = '2';
|
const objtype_document = '2';
|
||||||
const objtype_documentcontent = '3';
|
const objtype_documentcontent = '3';
|
||||||
|
const objtype_user = '4';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -517,7 +524,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
|
||||||
* Get object type of attribute definition
|
* Get object type of attribute definition
|
||||||
*
|
*
|
||||||
* This can be one of objtype_all,
|
* This can be one of objtype_all,
|
||||||
* objtype_folder, objtype_document, or objtype_documentcontent.
|
* objtype_folder, objtype_document, objtype_documentcontent, or objtype_user.
|
||||||
*
|
*
|
||||||
* @return integer type
|
* @return integer type
|
||||||
*/
|
*/
|
||||||
|
@ -527,7 +534,7 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
|
||||||
* Set object type of attribute definition
|
* Set object type of attribute definition
|
||||||
*
|
*
|
||||||
* This can be one of objtype_all,
|
* This can be one of objtype_all,
|
||||||
* objtype_folder, objtype_document, or objtype_documentcontent.
|
* objtype_folder, objtype_document, objtype_documentcontent, or objtype_user.
|
||||||
*
|
*
|
||||||
* @param integer $objtype type
|
* @param integer $objtype type
|
||||||
* @return bool
|
* @return bool
|
||||||
|
@ -1064,6 +1071,27 @@ class SeedDMS_Core_AttributeDefinition { /* {{{ */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_all ||
|
||||||
|
$this->_objtype == SeedDMS_Core_AttributeDefinition::objtype_user) {
|
||||||
|
$queryStr = "SELECT * FROM `tblUserAttributes` WHERE `attrdef`=".$this->_id." AND ";
|
||||||
|
if($this->getMultipleValues()) {
|
||||||
|
$sep = $this->getValueSetSeparator();
|
||||||
|
$queryStr .= "(`value` like ".$db->qstr($sep.$attrvalue.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue.$sep.'%')." OR `value` like ".$db->qstr('%'.$sep.$attrvalue).")";
|
||||||
|
} else {
|
||||||
|
$queryStr .= "`value`=".$db->qstr($attrvalue);
|
||||||
|
}
|
||||||
|
if($limit)
|
||||||
|
$queryStr .= " limit ".(int) $limit;
|
||||||
|
$resArr = $db->getResultArray($queryStr);
|
||||||
|
if($resArr) {
|
||||||
|
foreach($resArr as $rec) {
|
||||||
|
if($user = $this->_dms->getUser($rec['userID'])) {
|
||||||
|
$result['users'][] = $user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
} /* }}} */
|
} /* }}} */
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,9 @@ class SeedDMS_Core_Object { /* {{{ */
|
||||||
case $this->_dms->getClassname('folder'):
|
case $this->_dms->getClassname('folder'):
|
||||||
$queryStr = "SELECT a.* FROM `tblFolderAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`folder` = " . $this->_id." ORDER BY b.`name`";
|
$queryStr = "SELECT a.* FROM `tblFolderAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`folder` = " . $this->_id." ORDER BY b.`name`";
|
||||||
break;
|
break;
|
||||||
|
case $this->_dms->getClassname('user'):
|
||||||
|
$queryStr = "SELECT a.* FROM `tblUserAttributes` a LEFT JOIN `tblAttributeDefinitions` b ON a.`attrdef`=b.`id` WHERE a.`userID` = " . $this->_id." ORDER BY b.`name`";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -259,6 +262,10 @@ class SeedDMS_Core_Object { /* {{{ */
|
||||||
$tablename = 'tblFolderAttributes';
|
$tablename = 'tblFolderAttributes';
|
||||||
$queryStr = "INSERT INTO `tblFolderAttributes` (`folder`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
|
$queryStr = "INSERT INTO `tblFolderAttributes` (`folder`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
|
||||||
break;
|
break;
|
||||||
|
case $this->_dms->getClassname('user'):
|
||||||
|
$tablename = 'tblUserAttributes';
|
||||||
|
$queryStr = "INSERT INTO `tblUserAttributes` (`userID`, `attrdef`, `value`) VALUES (".$this->_id.", ".$attrdef->getId().", ".$db->qstr($value).")";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -299,6 +306,9 @@ class SeedDMS_Core_Object { /* {{{ */
|
||||||
case $this->_dms->getClassname('folder'):
|
case $this->_dms->getClassname('folder'):
|
||||||
$queryStr = "DELETE FROM `tblFolderAttributes` WHERE `folder`=".$this->_id." AND `attrdef`=".$attrdef->getId();
|
$queryStr = "DELETE FROM `tblFolderAttributes` WHERE `folder`=".$this->_id." AND `attrdef`=".$attrdef->getId();
|
||||||
break;
|
break;
|
||||||
|
case $this->_dms->getClassname('user'):
|
||||||
|
$queryStr = "DELETE FROM `tblUserAttributes` WHERE `userID`=".$this->_id." AND `attrdef`=".$attrdef->getId();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -430,14 +430,7 @@ class SeedDMS_Core_ApiKey { /* {{{ */
|
||||||
* 2010 Uwe Steinmann
|
* 2010 Uwe Steinmann
|
||||||
* @version Release: @package_version@
|
* @version Release: @package_version@
|
||||||
*/
|
*/
|
||||||
class SeedDMS_Core_User { /* {{{ */
|
class SeedDMS_Core_User extends SeedDMS_Core_Object { /* {{{ */
|
||||||
/**
|
|
||||||
* @var integer id of user
|
|
||||||
*
|
|
||||||
* @access protected
|
|
||||||
*/
|
|
||||||
var $_id;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string login name of user
|
* @var string login name of user
|
||||||
*
|
*
|
||||||
|
@ -559,13 +552,6 @@ class SeedDMS_Core_User { /* {{{ */
|
||||||
*/
|
*/
|
||||||
var $_rev_substitutes;
|
var $_rev_substitutes;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var SeedDMS_Core_DMS reference to the dms instance this user belongs to
|
|
||||||
*
|
|
||||||
* @access protected
|
|
||||||
*/
|
|
||||||
var $_dms;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
<notes>
|
<notes>
|
||||||
add class SeedDMS_Core_ApiKey
|
add class SeedDMS_Core_ApiKey
|
||||||
add property color to SeedDMS_Document_Category
|
add property color to SeedDMS_Document_Category
|
||||||
|
support custom attributes for users
|
||||||
</notes>
|
</notes>
|
||||||
<contents>
|
<contents>
|
||||||
<dir baseinstalldir="SeedDMS" name="/">
|
<dir baseinstalldir="SeedDMS" name="/">
|
||||||
|
|
|
@ -44,6 +44,14 @@ CREATE TABLE "tblFolderAttributeDefinitionGroup" (
|
||||||
UNIQUE ("folder", "attrgrp")
|
UNIQUE ("folder", "attrgrp")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "tblUserAttributes" (
|
||||||
|
"id" SERIAL UNIQUE,
|
||||||
|
"userID" INTEGER default NULL REFERENCES "tblUsers" ("id") ON DELETE CASCADE,
|
||||||
|
"attrdef" INTEGER default NULL REFERENCES "tblAttributeDefinitions" ("id"),
|
||||||
|
"value" text default NULL,
|
||||||
|
UNIQUE (userID, attrdef)
|
||||||
|
) ;
|
||||||
|
|
||||||
UPDATE "tblVersion" set "major"=6, "minor"=1, "subminor"=0, "module"='core';
|
UPDATE "tblVersion" set "major"=6, "minor"=1, "subminor"=0, "module"='core';
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
|
@ -90,6 +90,14 @@ CREATE TABLE `tblFolderAttributeDefinitionGroup` (
|
||||||
UNIQUE(`folder`, `attrgrp`)
|
UNIQUE(`folder`, `attrgrp`)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE `tblUserAttributes` (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`userID` INTEGER default NULL REFERENCES `tblUsers` (`id`) ON DELETE CASCADE,
|
||||||
|
`attrdef` INTEGER default NULL REFERENCES `tblAttributeDefinitions` (`id`),
|
||||||
|
`value` text default NULL,
|
||||||
|
UNIQUE (`userID`, `attrdef`)
|
||||||
|
);
|
||||||
|
|
||||||
UPDATE `tblVersion` set `major`=6, `minor`=1, `subminor`=0, `module`='core';
|
UPDATE `tblVersion` set `major`=6, `minor`=1, `subminor`=0, `module`='core';
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
|
@ -49,6 +49,18 @@ CREATE TABLE `tblFolderAttributeDefinitionGroup` (
|
||||||
CONSTRAINT `tblFolderAttributeDefinitionGroup_attrgrp` FOREIGN KEY (`attrgrp`) REFERENCES `tblAttributeDefinitionGroups` (`id`) ON DELETE CASCADE
|
CONSTRAINT `tblFolderAttributeDefinitionGroup_attrgrp` FOREIGN KEY (`attrgrp`) REFERENCES `tblAttributeDefinitionGroups` (`id`) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
CREATE TABLE `tblUserAttributes` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`userID` int(11) DEFAULT NULL,
|
||||||
|
`attrdef` int(11) DEFAULT NULL,
|
||||||
|
`value` text,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `userID` (`userID`,`attrdef`),
|
||||||
|
KEY `tblUserAttributes_attrdef` (`attrdef`),
|
||||||
|
CONSTRAINT `tblUserAttributes_attrdef` FOREIGN KEY (`attrdef`) REFERENCES `tblAttributeDefinitions` (`id`),
|
||||||
|
CONSTRAINT `tblUserAttributes_userid` FOREIGN KEY (`userID`) REFERENCES `tblUsers` (`id`) ON DELETE CASCADE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
UPDATE `tblVersion` set `major`=6, `minor`=1, `subminor`=0, `module`='core';
|
UPDATE `tblVersion` set `major`=6, `minor`=1, `subminor`=0, `module`='core';
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
|
@ -379,6 +379,39 @@ else if ($action == "edituser") {
|
||||||
$homefolder = (isset($_POST["homefolder"]) ? $_POST["homefolder"] : 0);
|
$homefolder = (isset($_POST["homefolder"]) ? $_POST["homefolder"] : 0);
|
||||||
$quota = (isset($_POST["quota"]) ? (int) $_POST["quota"] : 0);
|
$quota = (isset($_POST["quota"]) ? (int) $_POST["quota"] : 0);
|
||||||
|
|
||||||
|
if(isset($_POST["attributes"]))
|
||||||
|
$attributes = $_POST["attributes"];
|
||||||
|
else
|
||||||
|
$attributes = array();
|
||||||
|
|
||||||
|
$oldattributes = $user->getAttributes();
|
||||||
|
if($attributes) {
|
||||||
|
foreach($attributes as $attrdefid=>$attribute) {
|
||||||
|
$attrdef = $dms->getAttributeDefinition($attrdefid);
|
||||||
|
if($attribute) {
|
||||||
|
if(!$attrdef->validate($attribute, $editedUser, true)) {
|
||||||
|
UI::exitError(getMLText("error_occured"), getAttributeValidationText($attrdef->getValidationError(), $attrdef->getName(), $attribute));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isset($oldattributes[$attrdefid]) || $attribute != $oldattributes[$attrdefid]->getValue()) {
|
||||||
|
if(!$editedUser->setAttributeValue($dms->getAttributeDefinition($attrdefid), $attribute))
|
||||||
|
UI::exitError(getMLText("error_occured"), getMLText("error_occured"));
|
||||||
|
}
|
||||||
|
} elseif($attrdef->getMinValues() > 0) {
|
||||||
|
$this->errormsg = getMLText("attr_min_values", array("attrname"=>$attrdef->getName()));
|
||||||
|
} elseif(isset($oldattributes[$attrdefid])) {
|
||||||
|
if(!$editedUser->removeAttribute($dms->getAttributeDefinition($attrdefid)))
|
||||||
|
UI::exitError(getMLText("error_occured"), getMLText("error_occured"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach($oldattributes as $attrdefid=>$oldattribute) {
|
||||||
|
if(!isset($attributes[$attrdefid])) {
|
||||||
|
if(!$editedUser->removeAttribute($dms->getAttributeDefinition($attrdefid)))
|
||||||
|
UI::exitError(getMLText("error_occured"), getMLText("error_occured"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($pwd) && ($pwd != "")) {
|
if (isset($pwd) && ($pwd != "")) {
|
||||||
if($settings->_passwordStrength) {
|
if($settings->_passwordStrength) {
|
||||||
$ps = new Password_Strength();
|
$ps = new Password_Strength();
|
||||||
|
|
|
@ -218,6 +218,7 @@ $(document).ready( function() {
|
||||||
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_folder, getMLText('folder'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_folder);
|
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_folder, getMLText('folder'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_folder);
|
||||||
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_document, getMLText('document'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_document);
|
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_document, getMLText('document'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_document);
|
||||||
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, getMLText('documentcontent'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_documentcontent);
|
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_documentcontent, getMLText('documentcontent'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_documentcontent);
|
||||||
|
$options[] = array(SeedDMS_Core_AttributeDefinition::objtype_user, getMLText('user'), $attrdef && $attrdef->getObjType() == SeedDMS_Core_AttributeDefinition::objtype_user);
|
||||||
$this->formField(
|
$this->formField(
|
||||||
getMLText("attrdef_objtype"),
|
getMLText("attrdef_objtype"),
|
||||||
array(
|
array(
|
||||||
|
|
|
@ -399,6 +399,21 @@ $(document).ready( function() {
|
||||||
'value'=>($currUser ? htmlspecialchars($currUser->getComment()) : '')
|
'value'=>($currUser ? htmlspecialchars($currUser->getComment()) : '')
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$attrdefs = $dms->getAllAttributeDefinitions(array(SeedDMS_Core_AttributeDefinition::objtype_user));
|
||||||
|
if($attrdefs) {
|
||||||
|
foreach($attrdefs as $attrdef) {
|
||||||
|
$arr = $this->callHook('editUserAttribute', $currUser, $attrdef);
|
||||||
|
if(is_array($arr)) {
|
||||||
|
if($arr) {
|
||||||
|
$this->formField($arr[0], $arr[1], isset($arr[2]) ? $arr[2] : null);
|
||||||
|
}
|
||||||
|
} elseif(is_string($arr)) {
|
||||||
|
echo $arr;
|
||||||
|
} else {
|
||||||
|
$this->formField(htmlspecialchars($attrdef->getName()), $this->getAttributeEditField($attrdef, $currUser->getAttribute($attrdef)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
$options = array();
|
$options = array();
|
||||||
foreach($roles as $role) {
|
foreach($roles as $role) {
|
||||||
$options[] = array($role->getID(), $role->getName(), ($currUser && $currUser->getRole()->getID() == $role->getID()));
|
$options[] = array($role->getID(), $role->getName(), ($currUser && $currUser->getRole()->getID() == $role->getID()));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user