ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
ilADTBasedObject Class Reference

ADT based-object base class. More...

+ Inheritance diagram for ilADTBasedObject:
+ Collaboration diagram for ilADTBasedObject:

Public Member Functions

 __construct ()
 Constructor. More...
 
 getProperties ()
 Get all properties. More...
 
 isValid ()
 Validate. More...
 
 __call ($a_method, $a_value)
 Get property magic method ("get<PropertyName>()") More...
 
 read ()
 Read record. More...
 
 create ()
 Create record (only if valid) More...
 
 update ()
 Update record (only if valid) More...
 
 delete ()
 Delete record. More...
 
 getDBErrors ()
 Get DB errors. More...
 
 translateDBErrorCodes (array $a_codes)
 Translate DB error codes. More...
 
 getAllTranslatedErrors ($delimiter="\)
 Get translated error codes (DB, Validation) More...
 

Protected Member Functions

 initProperties ()
 Init properties (aka set ADT definition) More...
 
 parsePrimary (array $a_args)
 Parse incoming primary key. More...
 
 hasPrimary ()
 Check if currently has primary. More...
 
 createPrimaryKey ()
 Create new primary key, e.g. More...
 
 initDBBridge (ilADTGroupDBBridge $a_adt_db)
 Init (properties) DB bridge. More...
 
 initActiveRecordInstance ()
 Init active record helper for current table, primary and properties. More...
 

Protected Attributes

 $properties = array()
 
 $db_errors = array()
 

Detailed Description

ADT based-object base class.

Currently "mixed" with ActiveRecord-pattern, could be splitted

Author
Jörg Lützenkirchen luetz.nosp@m.enki.nosp@m.rchen.nosp@m.@lei.nosp@m.fos.c.nosp@m.om
Version
$Id$

Definition at line 13 of file class.ilADTBasedObject.php.

Constructor & Destructor Documentation

◆ __construct()

ilADTBasedObject::__construct ( )

Constructor.

Tries to read record from DB, in accordance to current ILIAS behaviour

Returns
self

Definition at line 25 of file class.ilADTBasedObject.php.

References initProperties(), parsePrimary(), properties, and read().

26  {
27  $this->properties = $this->initProperties();
28 
29  // :TODO: to keep constructor "open" we COULD use func_get_args()
30  $this->parsePrimary(func_get_args());
31  $this->read();
32  }
initProperties()
Init properties (aka set ADT definition)
parsePrimary(array $a_args)
Parse incoming primary key.
Set document properties
+ Here is the call graph for this function:

Member Function Documentation

◆ __call()

ilADTBasedObject::__call (   $a_method,
  $a_value 
)

Get property magic method ("get<PropertyName>()")

Setters are type-specific and cannot be magic

Exceptions
Exception
Parameters
string$a_method
mixed$a_value
Returns
ilADT

Definition at line 76 of file class.ilADTBasedObject.php.

References $type, array, createPrimaryKey(), hasPrimary(), initDBBridge(), parsePrimary(), and properties.

77  {
78  $type = substr($a_method, 0, 3);
79  switch ($type) {
80  case "get":
81  $parsed = strtolower(preg_replace("/([A-Z])/", " $1", substr($a_method, 3)));
82  $parsed = str_replace(" ", "_", trim($parsed));
83  if (!$this->properties->hasElement($parsed)) {
84  throw new Exception("ilADTObject unknown property " . $parsed);
85  }
86  return $this->properties->getElement($parsed);
87 
88  default:
89  throw new Exception("ilADTObject unknown method " . $parsed);
90  }
91  }
$type
Set document properties
+ Here is the call graph for this function:

◆ create()

ilADTBasedObject::create ( )

Create record (only if valid)

Returns
boolean

Definition at line 170 of file class.ilADTBasedObject.php.

References createPrimaryKey(), ilADTDBException\getColumn(), hasPrimary(), initActiveRecordInstance(), isValid(), and update().

Referenced by update().

171  {
172  if ($this->hasPrimary()) {
173  return $this->update();
174  }
175 
176  if ($this->isValid()) {
177  if ($this->createPrimaryKey()) {
178  try {
179  $rec = $this->initActiveRecordInstance();
180  $rec->create();
181  } catch (ilADTDBException $e) {
182  $this->db_errors[$e->getColumn()][] = $e->getCode();
183  return false;
184  }
185  return true;
186  }
187  }
188  return false;
189  }
initActiveRecordInstance()
Init active record helper for current table, primary and properties.
hasPrimary()
Check if currently has primary.
createPrimaryKey()
Create new primary key, e.g.
update()
Update record (only if valid)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createPrimaryKey()

ilADTBasedObject::createPrimaryKey ( )
abstractprotected

Create new primary key, e.g.

sequence

Returns
bool

Referenced by __call(), and create().

+ Here is the caller graph for this function:

◆ delete()

ilADTBasedObject::delete ( )

Delete record.

Returns
boolean

Definition at line 220 of file class.ilADTBasedObject.php.

References hasPrimary(), and initActiveRecordInstance().

221  {
222  if ($this->hasPrimary()) {
223  $rec = $this->initActiveRecordInstance();
224  $rec->delete();
225  return true;
226  }
227  return false;
228  }
initActiveRecordInstance()
Init active record helper for current table, primary and properties.
hasPrimary()
Check if currently has primary.
+ Here is the call graph for this function:

◆ getAllTranslatedErrors()

ilADTBasedObject::getAllTranslatedErrors (   $delimiter = "\n")

Get translated error codes (DB, Validation)

Parameters
type$delimiter
Returns
string

Definition at line 273 of file class.ilADTBasedObject.php.

References $delimiter, array, getDBErrors(), getProperties(), and translateDBErrorCodes().

274  {
275  $tmp = array();
276 
277  foreach ($this->getProperties()->getValidationErrorsByElements() as $error_code => $element_id) {
278  $tmp[] = $element_id . " [validation]: " . $this->getProperties()->translateErrorCode($error_code);
279  }
280 
281  foreach ($this->getDBErrors() as $element_id => $codes) {
282  $tmp[] = $element_id . " [db]: " . implode($delimiter, $this->translateDBErrorCodes($codes));
283  }
284 
285  if (sizeof($tmp)) {
286  return get_class($this) . $delimiter . implode($delimiter, $tmp);
287  }
288  }
$delimiter
Definition: showstats.php:16
translateDBErrorCodes(array $a_codes)
Translate DB error codes.
getDBErrors()
Get DB errors.
getProperties()
Get all properties.
Create styles array
The data for the language used.
+ Here is the call graph for this function:

◆ getDBErrors()

ilADTBasedObject::getDBErrors ( )

Get DB errors.

Returns
array

Definition at line 235 of file class.ilADTBasedObject.php.

References $db_errors.

Referenced by getAllTranslatedErrors().

236  {
237  return $this->db_errors;
238  }
+ Here is the caller graph for this function:

◆ getProperties()

ilADTBasedObject::getProperties ( )

Get all properties.

Returns
array ilADT

Definition at line 51 of file class.ilADTBasedObject.php.

References $properties.

Referenced by getAllTranslatedErrors().

52  {
53  return $this->properties;
54  }
+ Here is the caller graph for this function:

◆ hasPrimary()

ilADTBasedObject::hasPrimary ( )
abstractprotected

Check if currently has primary.

Returns
bool

Referenced by __call(), create(), delete(), initActiveRecordInstance(), read(), and update().

+ Here is the caller graph for this function:

◆ initActiveRecordInstance()

ilADTBasedObject::initActiveRecordInstance ( )
protected

Init active record helper for current table, primary and properties.

Returns
ilADTActiveRecord

Definition at line 132 of file class.ilADTBasedObject.php.

References $factory, $ilDB, ilADTFactory\getInstance(), hasPrimary(), initDBBridge(), and properties.

Referenced by create(), delete(), read(), and update().

133  {
134  global $ilDB;
135 
136  if (!$this->hasPrimary()) {
137  throw new Exception("ilADTBasedObject no primary");
138  }
139 
141  $this->adt_db = $factory->getDBBridgeForInstance($this->properties);
142  $this->initDBBridge($this->adt_db);
143 
144  // use custom error handling
145  include_once "Services/ADT/classes/class.ilADTDBException.php";
146  $ilDB->exception = "ilADTDBException";
147 
148  return $factory->getActiveRecordInstance($this->adt_db);
149  }
hasPrimary()
Check if currently has primary.
$factory
Definition: metadata.php:47
static getInstance()
Get singleton.
initDBBridge(ilADTGroupDBBridge $a_adt_db)
Init (properties) DB bridge.
global $ilDB
Set document properties
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initDBBridge()

ilADTBasedObject::initDBBridge ( ilADTGroupDBBridge  $a_adt_db)
abstractprotected

Init (properties) DB bridge.

Parameters
ilADTGroupDBBridge$a_adt_db

Referenced by __call(), and initActiveRecordInstance().

+ Here is the caller graph for this function:

◆ initProperties()

ilADTBasedObject::initProperties ( )
abstractprotected

Init properties (aka set ADT definition)

Returns
ilADT

Referenced by __construct().

+ Here is the caller graph for this function:

◆ isValid()

ilADTBasedObject::isValid ( )

Validate.

Returns
bool

Definition at line 61 of file class.ilADTBasedObject.php.

References properties.

Referenced by create(), and update().

62  {
63  return $this->properties->isValid();
64  }
Set document properties
+ Here is the caller graph for this function:

◆ parsePrimary()

ilADTBasedObject::parsePrimary ( array  $a_args)
abstractprotected

Parse incoming primary key.

See also
__construct()
Parameters
array$a_args

Referenced by __call(), and __construct().

+ Here is the caller graph for this function:

◆ read()

ilADTBasedObject::read ( )

Read record.

Returns
boolean

Definition at line 156 of file class.ilADTBasedObject.php.

References hasPrimary(), and initActiveRecordInstance().

Referenced by __construct().

157  {
158  if ($this->hasPrimary()) {
159  $rec = $this->initActiveRecordInstance();
160  return $rec->read();
161  }
162  return false;
163  }
initActiveRecordInstance()
Init active record helper for current table, primary and properties.
hasPrimary()
Check if currently has primary.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ translateDBErrorCodes()

ilADTBasedObject::translateDBErrorCodes ( array  $a_codes)

Translate DB error codes.

Parameters
array$a_codes
Returns
array

Definition at line 246 of file class.ilADTBasedObject.php.

References $code, $lng, $res, array, and MDB2_ERROR_CONSTRAINT.

Referenced by getAllTranslatedErrors().

247  {
248  global $lng;
249 
250  $res = array();
251 
252  foreach ($a_codes as $code) {
253  switch ($code) {
255  $res[] = $lng->txt("adt_error_db_constraint");
256  break;
257 
258  default:
259  $res[] = "Unknown ADT error code " . $code;
260  break;
261  }
262  }
263 
264  return $res;
265  }
$code
Definition: example_050.php:99
const MDB2_ERROR_CONSTRAINT
Definition: MDB2.php:75
foreach($_POST as $key=> $value) $res
Create styles array
The data for the language used.
global $lng
Definition: privfeed.php:17
+ Here is the caller graph for this function:

◆ update()

ilADTBasedObject::update ( )

Update record (only if valid)

Returns
boolean

Definition at line 196 of file class.ilADTBasedObject.php.

References create(), ilADTDBException\getColumn(), hasPrimary(), initActiveRecordInstance(), and isValid().

Referenced by create().

197  {
198  if (!$this->hasPrimary()) {
199  return $this->create();
200  }
201 
202  if ($this->isValid()) {
203  try {
204  $rec = $this->initActiveRecordInstance();
205  $rec->update();
206  } catch (ilADTDBException $e) {
207  $this->db_errors[$e->getColumn()][] = $e->getCode();
208  return false;
209  }
210  return true;
211  }
212  return false;
213  }
initActiveRecordInstance()
Init active record helper for current table, primary and properties.
hasPrimary()
Check if currently has primary.
create()
Create record (only if valid)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Field Documentation

◆ $db_errors

ilADTBasedObject::$db_errors = array()
protected

Definition at line 16 of file class.ilADTBasedObject.php.

Referenced by getDBErrors().

◆ $properties

ilADTBasedObject::$properties = array()
protected

Definition at line 15 of file class.ilADTBasedObject.php.

Referenced by getProperties().


The documentation for this class was generated from the following file: