. * */ namespace OCA\News\Db; abstract class Entity { public $id; private $updatedFields; public function __construct(){ $this->updatedFields = array(); } /** * Each time a setter is called, push the part after set * into an array: for instance setId will save Id in the * updated fields array so it can be easily used to create the * getter method */ public function __call($methodName, $args){ if(strpos($methodName, 'set') === 0){ $setterPart = substr($methodName, 3); $attr = lcfirst($setterPart); // mark as accessed array_push($this->updatedFields, $attr); $this->$attr = $args[0]; } elseif(strpos($methodName, 'get') === 0) { $getterPart = substr($methodName, 3); $attr = lcfirst($getterPart); return $this->$attr; } } /** * Transform a database columnname to a property * @param string $columnName the name of the column * @return string the property name */ public function columnToProperty($columnName){ $parts = explode('_', $columnName); $property = null; foreach($parts as $part){ if($property === null){ $property = $part; } else { $property .= ucfirst($part); } } return $property; } /** * Transform a property to a database column name * @param string $property the name of the property * @return string the column name */ public function propertyToColumn($property){ $parts = preg_split('/(?=[A-Z])/', $property); $column = null; foreach($parts as $part){ if($column === null){ $column = $part; } else { $column .= '_' . lcfirst($part); } } return $column; } /** * @return array array of updated fields for update query */ public function getUpdatedFields(){ return $this->updatedFields; } /** * Maps the keys of the row array to the attributes * @param array $row the row to map onto the entity */ public function fromRow(array $row){ foreach($row as $key => $value){ $this->$key = $value; } } }