Passed
Push — master ( dd4df6...118cad )
by Jean-Christophe
09:18
created

SDAO::sloadObjectFromRow()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 4
Bugs 0 Features 2
Metric Value
eloc 5
c 4
b 0
f 2
dl 0
loc 7
ccs 6
cts 6
cp 1
rs 10
cc 2
nc 2
nop 2
crap 2
1
<?php
2
namespace Ubiquity\orm;
3
4
use Ubiquity\db\Database;
5
use Ubiquity\db\SqlUtils;
6
use Ubiquity\events\DAOEvents;
7
use Ubiquity\events\EventsManager;
8
use Ubiquity\log\Logger;
9
use Ubiquity\orm\parser\ConditionParser;
10
use Ubiquity\orm\parser\Reflexion;
11
12
/**
13
 * DAO class for models without relationships
14
 * Model classes must declare public members only
15
 * Ubiquity\orm$SDAO
16
 * This class is part of Ubiquity
17
 *
18
 * @author jcheron <[email protected]>
19
 * @version 1.0.0
20
 *
21
 */
22
class SDAO extends DAO {
23
24 2
	protected static function _getOne(Database $db, $className, ConditionParser $conditionParser, $included, $useCache) {
25 2
		$conditionParser->limitOne();
26 2
		$object = null;
27
28 2
		$metaDatas = OrmUtils::getModelMetadata($className);
29 2
		$tableName = $metaDatas['#tableName'];
30
31 2
		$query = $db->prepareAndExecute($tableName, SqlUtils::checkWhere($conditionParser->getCondition()), self::_getFieldList($tableName, $metaDatas), $conditionParser->getParams(), $useCache, true);
32 2
		if ($query) {
33 2
			$object = self::sloadObjectFromRow($query, $className);
34 2
			EventsManager::trigger(DAOEvents::GET_ONE, $object, $className);
35
		}
36 2
		return $object;
37
	}
38
39
	/**
40
	 *
41
	 * @param Database $db
42
	 * @param string $className
43
	 * @param ConditionParser $conditionParser
44
	 * @param boolean|array $included
45
	 * @param boolean|null $useCache
46
	 * @return array
47
	 */
48 1
	protected static function _getAll(Database $db, $className, ConditionParser $conditionParser, $included = true, $useCache = NULL) {
49 1
		$objects = array();
50
51 1
		$metaDatas = OrmUtils::getModelMetadata($className);
52 1
		$tableName = $metaDatas['#tableName'];
53
54 1
		$query = $db->prepareAndExecute($tableName, SqlUtils::checkWhere($conditionParser->getCondition()), self::_getFieldList($tableName, $metaDatas), $conditionParser->getParams(), $useCache);
55
56 1
		foreach ($query as $row) {
57 1
			$objects[] = self::sloadObjectFromRow($row, $className);
58
		}
59 1
		EventsManager::trigger(DAOEvents::GET_ALL, $objects, $className);
60 1
		return $objects;
61
	}
62
63 3
	private static function sloadObjectFromRow($row, $className) {
64 3
		$o = new $className();
65 3
		foreach ($row as $k => $v) {
66 3
			$o->$k = $v;
67
		}
68 3
		$o->_rest = $row;
69 3
		return $o;
70
	}
71
72
	/**
73
	 * Updates an existing $instance in the database.
74
	 * Be careful not to modify the primary key
75
	 *
76
	 * @param object $instance
77
	 *        	instance to modify
78
	 * @param boolean $updateMany
79
	 *        	Adds or updates ManyToMany members
80
	 */
81
	public static function update($instance, $updateMany = false) {
82
		EventsManager::trigger('dao.before.update', $instance);
83
		$className = \get_class($instance);
84
		$db = self::getDb($className);
85
		$quote = $db->quote;
86
		$tableName = OrmUtils::getTableName($className);
87
		$ColumnskeyAndValues = Reflexion::getPropertiesAndValues($instance);
88
		$keyFieldsAndValues = OrmUtils::getKeyFieldsAndValues($instance);
89
		$sql = "UPDATE {$quote}{$tableName}{$quote} SET " . SqlUtils::getUpdateFieldsKeyAndParams($ColumnskeyAndValues) . ' WHERE ' . SqlUtils::getWhere($keyFieldsAndValues);
90
		$statement = $db->getUpdateStatement($sql);
91
		try {
92
			$result = $statement->execute($ColumnskeyAndValues);
93
			EventsManager::trigger(DAOEvents::AFTER_UPDATE, $instance, $result);
94
			if (Logger::isActive()) {
95
				Logger::info("DAOUpdates", $sql, "update");
96
				Logger::info("DAOUpdates", \json_encode($ColumnskeyAndValues), "Key and values");
97
			}
98
			$instance->_rest = \array_merge($instance->_rest, $ColumnskeyAndValues);
99
			return $result;
100
		} catch (\Exception $e) {
101
			Logger::warn("DAOUpdates", $e->getMessage(), "update");
102
		}
103
		return false;
104
	}
105
}
106
107