2012-10-09 09:47:33 +00:00
< ? php
/**
* Implementation of the attribute object in the document management system
*
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS_Core
2012-10-09 09:47:33 +00:00
* @ license GPL 2
* @ version @ version @
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2012 Uwe Steinmann
* @ version Release : @ package_version @
*/
/**
* Class to represent an attribute in the document management system
*
2013-02-05 09:05:13 +00:00
* Attributes are key / value pairs which can be attachted to documents ,
* folders and document content . The number of attributes is unlimited .
* Each attribute has a value and is related to an attribute definition ,
2013-02-13 17:07:16 +00:00
* which holds the name and other information about the attribute .
2013-02-05 09:05:13 +00:00
*
2013-02-14 11:10:53 +00:00
* @ see SeedDMS_Core_AttributeDefinition
2013-02-05 09:05:13 +00:00
*
2012-10-09 09:47:33 +00:00
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS_Core
2013-02-13 17:07:16 +00:00
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2012 - 2013 Uwe Steinmann
2012-10-09 09:47:33 +00:00
* @ version Release : @ package_version @
*/
2013-02-14 11:10:53 +00:00
class SeedDMS_Core_Attribute { /* {{{ */
2012-10-09 09:47:33 +00:00
/**
* @ var integer id of attribute
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_id ;
2012-10-09 09:47:33 +00:00
/**
2013-02-14 11:10:53 +00:00
* @ var object SeedDMS_Core_Object folder , document or document content
2013-02-13 17:07:16 +00:00
* this attribute belongs to
2012-10-09 09:47:33 +00:00
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_obj ;
2012-10-09 09:47:33 +00:00
/**
2013-02-14 11:10:53 +00:00
* @ var object SeedDMS_Core_AttributeDefinition definition of this attribute
2012-10-09 09:47:33 +00:00
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_attrdef ;
2012-10-09 09:47:33 +00:00
/**
* @ var mixed value of this attribute
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_value ;
2012-10-09 09:47:33 +00:00
2015-04-14 17:36:10 +00:00
/**
* @ var integer validation error
*
* @ access protected
*/
protected $_validation_error ;
2012-10-09 09:47:33 +00:00
/**
2013-02-14 11:10:53 +00:00
* @ var object SeedDMS_Core_DMS reference to the dms instance this attribute belongs to
2012-10-09 09:47:33 +00:00
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_dms ;
2012-10-09 09:47:33 +00:00
2013-02-13 17:07:16 +00:00
/**
* Constructor
*
* @ param integer $id internal id of attribute
2013-02-14 11:10:53 +00:00
* @ param SeedDMS_Core_Object $obj object this attribute is attached to
* @ param SeedDMS_Core_AttributeDefinition $attrdef reference to the attribute definition
2013-02-13 17:07:16 +00:00
* @ param string $value value of the attribute
*/
2013-02-14 11:10:53 +00:00
function SeedDMS_Core_Attribute ( $id , $obj , $attrdef , $value ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$this -> _id = $id ;
$this -> _obj = $obj ;
$this -> _attrdef = $attrdef ;
$this -> _value = $value ;
2015-04-14 17:36:10 +00:00
$this -> _validation_error = 0 ;
2012-10-09 09:47:33 +00:00
$this -> _dms = null ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2013-02-13 17:07:16 +00:00
/**
* Set reference to dms
*
2013-02-14 11:10:53 +00:00
* @ param SeedDMS_Core_DMS $dms
2013-02-13 17:07:16 +00:00
*/
2013-01-24 08:22:36 +00:00
function setDMS ( $dms ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$this -> _dms = $dms ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Get internal id of attribute
*
* @ return integer id
*/
2012-10-09 09:47:33 +00:00
function getID () { return $this -> _id ; }
2014-11-13 07:20:45 +00:00
/**
* Return attribute value as stored in database
*
* This function will return the value of multi value attributes
* including the separator char .
*
* @ return string the attribute value as it is stored in the database .
*/
2012-10-09 09:47:33 +00:00
function getValue () { return $this -> _value ; }
2014-11-13 07:20:45 +00:00
/**
* Return attribute values as an array
*
* This function returns the attribute value as an array . Such an array
* has one element for non multi value attributes and n elements for
* multi value attributes .
*
* @ return array the attribute values
*/
function getValueAsArray () { /* {{{ */
if ( $this -> _attrdef -> getMultipleValues ()) {
return explode ( $this -> _value [ 0 ], substr ( $this -> _value , 1 ));
} else {
return array ( $this -> _value );
}
} /* }}} */
2012-10-09 09:47:33 +00:00
/**
* Set a value of an attribute
* The attribute is deleted completely if the value is the empty string
*
* @ param string $value value to be set
* @ return boolean true if operation was successfull , otherwise false
*/
function setValue ( $value ) { /* {{{*/
$db = $this -> _dms -> getDB ();
switch ( get_class ( $this -> _obj )) {
2015-04-15 14:11:07 +00:00
case $this -> _dms -> getClassname ( 'document' ) :
2012-10-09 09:47:33 +00:00
if ( trim ( $value ) === '' )
$queryStr = " DELETE FROM tblDocumentAttributes WHERE `document` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
else
$queryStr = " UPDATE tblDocumentAttributes SET value = " . $db -> qstr ( $value ) . " WHERE `document` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
break ;
2015-04-15 14:11:07 +00:00
case $this -> _dms -> getClassname ( 'documentcontent' ) :
2012-10-09 09:47:33 +00:00
if ( trim ( $value ) === '' )
$queryStr = " DELETE FROM tblDocumentContentAttributes WHERE `content` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
else
$queryStr = " UPDATE tblDocumentContentAttributes SET value = " . $db -> qstr ( $value ) . " WHERE `content` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
break ;
2015-04-15 14:11:07 +00:00
case $this -> _dms -> getClassname ( 'folder' ) :
2012-10-09 09:47:33 +00:00
if ( trim ( $value ) === '' )
$queryStr = " DELETE FROM tblFolderAttributes WHERE `folder` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
else
$queryStr = " UPDATE tblFolderAttributes SET value = " . $db -> qstr ( $value ) . " WHERE `folder` = " . $this -> _obj -> getID () . " AND `attrdef` = " . $this -> _attrdef -> getId ();
break ;
default :
return false ;
}
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _value = $value ;
return true ;
} /* }}} */
2015-04-14 17:36:10 +00:00
/**
* Validate attribute value
*
* This function checks if the attribute values fits the attribute
* definition .
* If the validation fails the validation error will be set which
* can be requested by SeedDMS_Core_Attribute :: getValidationError ()
*
2015-04-15 14:11:07 +00:00
* @ return boolean true if validation succeds , otherwise false
2015-04-14 17:36:10 +00:00
*/
function validate () { /* {{{ */
$attrdef = $this -> _attrdef ();
2015-04-15 14:11:07 +00:00
$result = $attrdef -> validate ( $this -> _value );
$this -> _validation_error = $attrdef -> getValidationError ();
return $result ;
2015-04-14 17:36:10 +00:00
} /* }}} */
/**
* Get validation error from last validation
*
* @ return integer error code
*/
function getValidationError () { return $this -> _validation_error ; }
2014-11-17 09:40:35 +00:00
/**
* Get definition of attribute
*
* @ return object attribute definition
*/
2012-10-09 09:47:33 +00:00
function getAttributeDefinition () { return $this -> _attrdef ; }
2013-02-13 17:07:16 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
/**
* Class to represent an attribute definition in the document management system
*
2013-02-05 09:05:13 +00:00
* Attribute definitions specify the name , type , object type , minimum and
* maximum values and a value set . The object type determines the object
* an attribute may be attached to . If the object type is set to object_all
* the attribute can be used for documents , document content and folders .
*
* The type of an attribute specifies the skalar data type .
*
* Attributes for which multiple values are allowed must have the
* multiple flag set to true and specify a value set . A value set
* is a string consisting of n separated values . The separator is the
* first char of the value set . A possible value could be '|REV-A|REV-B'
* If multiple values are allowed , then minvalues and maxvalues may
* restrict the allowed number of values .
*
2013-02-14 11:10:53 +00:00
* @ see SeedDMS_Core_Attribute
2013-02-05 09:05:13 +00:00
*
2012-10-09 09:47:33 +00:00
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS_Core
2012-10-09 09:47:33 +00:00
* @ author Markus Westphal , Malcolm Cowe , Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2012 Uwe Steinmann
* @ version Release : @ package_version @
*/
2013-02-14 11:10:53 +00:00
class SeedDMS_Core_AttributeDefinition { /* {{{ */
2012-10-09 09:47:33 +00:00
/**
* @ var integer id of attribute definition
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_id ;
2012-10-09 09:47:33 +00:00
/**
* @ var string name of attribute definition
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_name ;
2012-10-09 09:47:33 +00:00
2013-02-05 09:05:13 +00:00
/**
2013-02-13 17:07:16 +00:00
* @ var string object type of attribute definition . This can be one of
2015-04-14 17:36:10 +00:00
* type_int , type_float , type_string , type_boolean , type_url , or type_email .
2013-02-05 09:05:13 +00:00
*
* @ access protected
*/
protected $_type ;
/**
2013-02-13 17:07:16 +00:00
* @ var string type of attribute definition . This can be one of objtype_all ,
* objtype_folder , objtype_document , or objtype_documentcontent .
2013-02-05 09:05:13 +00:00
*
* @ access protected
*/
protected $_objtype ;
/**
* @ var boolean whether an attribute can have multiple values
*
* @ access protected
*/
protected $_multiple ;
/**
* @ var integer minimum values of an attribute
*
* @ access protected
*/
protected $_minvalues ;
/**
* @ var integer maximum values of an attribute
*
* @ access protected
*/
protected $_maxvalues ;
/**
* @ var string list of possible values of an attribute
*
* @ access protected
*/
protected $_valueset ;
2013-05-28 07:01:04 +00:00
/**
* @ var string regular expression the value must match
*
* @ access protected
*/
protected $_regex ;
2015-04-15 14:11:07 +00:00
/**
* @ var integer validation error
*
* @ access protected
*/
protected $_validation_error ;
2012-10-09 09:47:33 +00:00
/**
2013-02-14 11:10:53 +00:00
* @ var object SeedDMS_Core_DMS reference to the dms instance this attribute definition belongs to
2012-10-09 09:47:33 +00:00
*
* @ access protected
*/
2013-01-24 08:22:36 +00:00
protected $_dms ;
2012-10-09 09:47:33 +00:00
2013-02-05 09:05:13 +00:00
/*
* Possible skalar data types of an attribute
*/
2012-10-09 09:47:33 +00:00
const type_int = '1' ;
const type_float = '2' ;
const type_string = '3' ;
const type_boolean = '4' ;
2015-04-14 17:36:10 +00:00
const type_url = '5' ;
const type_email = '6' ;
2012-10-09 09:47:33 +00:00
2013-02-05 09:05:13 +00:00
/*
* The object type for which a attribute may be used
*/
2012-10-09 09:47:33 +00:00
const objtype_all = '0' ;
const objtype_folder = '1' ;
const objtype_document = '2' ;
const objtype_documentcontent = '3' ;
2013-02-05 09:05:13 +00:00
/**
* Constructor
*
* @ param integer $id internal id of attribute definition
* @ param string $name name of attribute
* @ param integer $objtype type of object for which this attribute definition
* may be used .
* @ param integer $type skalar type of attribute
* @ param boolean $multiple set to true if multiple values are allowed
* @ param integer $minvalues minimum number of values
* @ param integer $maxvalues maximum number of values
* @ param string $valueset separated list of allowed values , the first char
* is taken as the separator
*/
2013-05-28 07:01:04 +00:00
function SeedDMS_Core_AttributeDefinition ( $id , $name , $objtype , $type , $multiple , $minvalues , $maxvalues , $valueset , $regex ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$this -> _id = $id ;
$this -> _name = $name ;
$this -> _type = $type ;
$this -> _objtype = $objtype ;
$this -> _multiple = $multiple ;
$this -> _minvalues = $minvalues ;
$this -> _maxvalues = $maxvalues ;
$this -> _valueset = $valueset ;
$this -> _separator = '' ;
2013-05-28 07:01:04 +00:00
$this -> _regex = $regex ;
2012-10-09 09:47:33 +00:00
$this -> _dms = null ;
2015-04-15 14:11:07 +00:00
$this -> _validation_error = 0 ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2013-02-13 17:07:16 +00:00
/**
* Set reference to dms
*
2013-02-14 11:10:53 +00:00
* @ param SeedDMS_Core_DMS $dms
2013-02-13 17:07:16 +00:00
*/
2013-01-24 08:22:36 +00:00
function setDMS ( $dms ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$this -> _dms = $dms ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Get internal id of attribute definition
*
* @ return integer id
*/
2012-10-09 09:47:33 +00:00
function getID () { return $this -> _id ; }
2014-11-17 09:40:35 +00:00
/**
* Get name of attribute definition
*
* @ return string name
*/
2012-10-09 09:47:33 +00:00
function getName () { return $this -> _name ; }
2013-01-24 08:22:36 +00:00
function setName ( $name ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET name = " . $db -> qstr ( $name ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _name = $name ;
return true ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Get object type of attribute definition
*
* This can be one of objtype_all ,
* objtype_folder , objtype_document , or objtype_documentcontent .
*
* @ return integer type
*/
2012-10-09 09:47:33 +00:00
function getObjType () { return $this -> _objtype ; }
2014-11-17 09:40:35 +00:00
/**
* Set object type of attribute definition
*
* This can be one of objtype_all ,
* objtype_folder , objtype_document , or objtype_documentcontent .
*
* @ param integer $objtype type
*/
2013-01-24 08:22:36 +00:00
function setObjType ( $objtype ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET objtype = " . intval ( $objtype ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _objtype = $objtype ;
return true ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Get type of attribute definition
*
2015-04-14 17:36:10 +00:00
* This can be one of type_int , type_float , type_string , type_boolean ,
* type_url , type_email .
2014-11-17 09:40:35 +00:00
*
* @ return integer type
*/
2012-10-09 09:47:33 +00:00
function getType () { return $this -> _type ; }
2014-11-17 09:40:35 +00:00
/**
* Set type of attribute definition
*
2015-04-14 17:36:10 +00:00
* This can be one of type_int , type_float , type_string , type_boolean ,
* type_url , type_email .
2014-11-17 09:40:35 +00:00
*
* @ param integer $type type
*/
2013-01-24 08:22:36 +00:00
function setType ( $type ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET type = " . intval ( $type ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _type = $type ;
return true ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Check if attribute definition allows multi values for attribute
*
* @ return boolean true if attribute may have multiple values
*/
2013-01-24 08:22:36 +00:00
function getMultipleValues () { return $this -> _multiple ; }
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Set if attribute definition allows multi values for attribute
*
* @ param boolean $mv true if attribute may have multiple values , otherwise
* false
*/
2013-01-24 08:22:36 +00:00
function setMultipleValues ( $mv ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET multiple = " . intval ( $mv ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _multiple = $mv ;
return true ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Return minimum number of values for attributes
*
* Attributes with multiple values may be limited to a range
* of values . This functions returns the minimum number of values .
*
* @ return integer minimum number of values
*/
2012-10-09 09:47:33 +00:00
function getMinValues () { return $this -> _minvalues ; }
2013-01-24 08:22:36 +00:00
function setMinValues ( $minvalues ) { /* {{{ */
2012-10-09 09:47:33 +00:00
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET minvalues = " . intval ( $minvalues ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _minvalues = $minvalues ;
return true ;
2013-01-24 08:22:36 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
2014-11-17 09:40:35 +00:00
/**
* Return maximum number of values for attributes
*
* Attributes with multiple values may be limited to a range
* of values . This functions returns the maximum number of values .
*
* @ return integer maximum number of values
*/
2012-10-09 09:47:33 +00:00
function getMaxValues () { return $this -> _maxvalues ; }
function setMaxValues ( $maxvalues ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET maxvalues = " . intval ( $maxvalues ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _maxvalues = $maxvalues ;
return true ;
} /* }}} */
/**
* Get the value set as saved in the database
*
* @ return string value set
*/
function getValueSet () { /* {{{ */
return $this -> _valueset ;
} /* }}} */
/**
* Get the whole value set as an array
*
* @ return array values of value set or false if the value set has
* less than 2 chars
*/
function getValueSetAsArray () { /* {{{ */
if ( strlen ( $this -> _valueset ) > 1 )
return explode ( $this -> _valueset [ 0 ], substr ( $this -> _valueset , 1 ));
else
return false ;
} /* }}} */
/**
* Get the n ' th value of a value set
*
* @ param interger $index
* @ return string n ' th value of value set or false if the index is
* out of range or the value set has less than 2 chars
*/
function getValueSetValue ( $ind ) { /* {{{ */
if ( strlen ( $this -> _valueset ) > 1 ) {
$tmp = explode ( $this -> _valueset [ 0 ], substr ( $this -> _valueset , 1 ));
if ( isset ( $tmp [ $ind ]))
return $tmp [ $ind ];
else
return false ;
} else
return false ;
} /* }}} */
/**
* Set the value set
*
* A value set is a list of values allowed for an attribute . The values
* are separated by a char which must also be the first char of the
* value set string .
*
* @ param string $valueset
* @ return boolean true if value set could be set , otherwise false
*/
function setValueSet ( $valueset ) { /* {{{ */
/*
$tmp = array ();
foreach ( $valueset as $value ) {
$tmp [] = str_replace ( '"' , '""' , $value );
}
$valuesetstr = implode ( " , " , $tmp );
*/
$valuesetstr = $valueset ;
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblAttributeDefinitions SET valueset = " . $db -> qstr ( $valuesetstr ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _valueset = $valueset ;
$this -> _separator = substr ( $valueset , 0 , 1 );
return true ;
} /* }}} */
2013-05-28 07:01:04 +00:00
/**
* 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 ;
} /* }}} */
2012-10-09 09:47:33 +00:00
/**
* Check if the attribute definition is used
*
2013-05-29 18:04:45 +00:00
* Checks all documents , folders and document content whether at least
* one of them referenceѕ this attribute definition
2012-10-09 09:47:33 +00:00
*
* @ return boolean true if attribute definition is used , otherwise false
*/
function isUsed () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblDocumentAttributes WHERE attrdef= " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_array ( $resArr ) && count ( $resArr ) == 0 ) {
$queryStr = " SELECT * FROM tblFolderAttributes WHERE attrdef= " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_array ( $resArr ) && count ( $resArr ) == 0 ) {
$queryStr = " SELECT * FROM tblDocumentContentAttributes WHERE attrdef= " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_array ( $resArr ) && count ( $resArr ) == 0 ) {
return false ;
}
}
}
return true ;
} /* }}} */
2013-05-29 18:04:45 +00:00
/**
* 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 ;
} /* }}} */
2012-10-09 09:47:33 +00:00
/**
* Remove the attribute definition
* Removal is only executed when the definition is not used anymore .
*
* @ return boolean true on success or false in case of an error
*/
function remove () { /* {{{ */
$db = $this -> _dms -> getDB ();
if ( $this -> isUsed ())
return false ;
// Delete user itself
$queryStr = " DELETE FROM tblAttributeDefinitions WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr )) return false ;
return true ;
} /* }}} */
2014-06-30 05:40:18 +00:00
/**
* Get all documents and folder by a given attribute value
*
* @ param string $attrvalue value of attribute
* @ param integer $limit limit number of documents / folders
* @ return array array containing list of documents and folders
*/
public function getObjects ( $attrvalue , $limit ) { /* {{{ */
$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 . " AND value= " . $db -> qstr ( $attrvalue );
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 ;
}
}
}
}
if ( $this -> _objtype == SeedDMS_Core_AttributeDefinition :: objtype_all ||
$this -> _objtype == SeedDMS_Core_AttributeDefinition :: objtype_folder ) {
$queryStr = " SELECT * FROM tblFolderAttributes WHERE attrdef= " . $this -> _id . " AND value= " . $db -> qstr ( $attrvalue );
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 ;
}
}
}
}
return $result ;
} /* }}} */
2015-04-15 14:11:07 +00:00
/**
* Validate value against attribute definition
*
* This function checks if the given value fits the attribute
* definition .
* If the validation fails the validation error will be set which
* can be requested by SeedDMS_Core_Attribute :: getValidationError ()
*
* @ param string | array $attrvalue attribute value
* @ return boolean true if validation succeds , otherwise false
*/
function validate ( $attrvalue ) { /* {{{ */
if ( $this -> getMultipleValues ()) {
if ( is_string ( $attrvalue ))
$values = explode ( $attrvalue [ 0 ], substr ( $attrvalue , 1 ));
else
$values = $attrvalue ;
} else {
$values = array ( $attrvalue );
}
$this -> _validation_error = 0 ;
if ( $this -> getMinValues () > count ( $values )) {
$this -> _validation_error = 1 ;
return false ;
}
if ( $this -> getMaxValues () && $this -> getMaxValues () < count ( $values )) {
$this -> _validation_error = 2 ;
return false ;
}
switch (( string ) $this -> getType ()) {
case self :: type_int :
$success = true ;
foreach ( $values as $value ) {
$success &= preg_match ( '/^[0-9]*$/' , $value ) ? true : false ;
}
break ;
case self :: type_float :
$success = true ;
foreach ( $values as $value ) {
$success &= is_numeric ( $value );
}
break ;
case self :: type_string :
$success = true ;
if ( trim ( $this -> getRegex ()) != '' ) {
foreach ( $values as $value ) {
$success &= preg_match ( $this -> getRegex (), $value ) ? true : false ;
}
}
if ( ! $success )
$this -> _validation_error = 3 ;
break ;
case self :: type_boolean :
$success = true ;
foreach ( $values as $value ) {
$success &= preg_match ( '/^[01]$/' , $value );
}
break ;
case self :: type_email :
$success = true ;
foreach ( $values as $value ) {
}
if ( ! $success )
$this -> _validation_error = 5 ;
break ;
case self :: type_url :
$success = true ;
foreach ( $values as $value ) {
$success &= preg_match ( '/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i' , $value );
}
if ( ! $success )
$this -> _validation_error = 4 ;
break ;
}
/* Check if value is in value set */
if ( $valueset = $this -> getValueSetAsArray ()) {
foreach ( $values as $value ) {
if ( ! in_array ( $value , $valueset )) {
$success = false ;
$this -> _validation_error = 10 ;
}
}
}
return $success ;
} /* }}} */
/**
* Get validation error from last validation
*
* @ return integer error code
*/
function getValidationError () { return $this -> _validation_error ; }
2013-02-13 17:07:16 +00:00
} /* }}} */
2012-10-09 09:47:33 +00:00
?>