File size: 4,362 Bytes
07c3cdd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php

class EntityBase
{

    /**
     * this function check if a field is in the data sent in the constructor
     * you can specify an array, and this function will use like alias
     */
    protected function validateField($field, $default = false)
    {
        $fieldIsEmpty = true;

        // this is a trick, if $fields is a string, $fields will be an array with
        // one element
        if (is_array($field)) {
            $fields = $field;
        } else {
            $fields = array();
            $fields [] = $field;
        }

        // if there are aliases for this field, evaluate all aliases and take the
        // first occurence
        foreach ($fields as $k => $f) {
            if (isset($this->temp [$f])) {
                $fieldIsEmpty = false;
                return $this->temp [$f];
            }
        }

        // field empty means the user has not sent a value for this Field, so we are
        // using the default value
        if ($fieldIsEmpty) {
            if ($default !== false) {
                return $default;
            }
        }
    }

    protected function validateRequiredFields($requiredFields = array())
    {
        foreach ($requiredFields as $k => $field) {
            if ($this->{$field} === null) {
                throw (new Exception("Field $field is required in " . get_class($this)));
                die();
            }
        }
    }

    /**
     * Copy the values of the Entity to the array of aliases
     * The array of aliases must be defined.
     *
     * @return Array of alias with the Entity values
     */
    public function getAliasDataArray()
    {
        $aAlias = array();
        // get aliases from class
        $className = get_class($this);
        if (method_exists($className, 'GetAliases')) {
            $aliases = call_user_func(array(
                $className,
                'GetAliases'
            ));
            
            foreach ($this as $field => $value) {
                if (isset($aliases [$field])) {
                    // echo "Field exists in Aliases: " . $field . "\n";
                    // echo "Alias Name:" . $aliases[$field] . "\n";
                    // echo "Alias value:" . $value . "\n";
                    $aAlias [$aliases [$field]] = $value;
                }
            }
        }

        return $aAlias;
    }

    /**
     * Set the data from array of alias to Entity
     *
     * @param $aAliasData array of data of aliases
     */
    public function setAliasDataArray($aAliasData)
    {
        // get aliases from class
        $className = get_class($this);
        if (method_exists($className, 'GetAliases')) {
            $aliases = call_user_func(array(
                $className,
                'GetAliases'
            ));
            // $aliases = $className::GetAliases ();
            foreach ($this as $field => $value) {
                if (isset($aliases [$field])) {
                    $this->{$field} = $aAliasData [$aliases [$field]];
                }
            }
        }
    }

    /**
     * Initialize object with values from $data.
     * The values from data use properties or alias array.
     *
     * @param $data
     */
    protected function initializeObject($data)
    {
        // get aliases from class
        $className = get_class($this);
        $aliases = array();
        $swAliases = false;
        if (method_exists($className, 'GetAliases')) {
            $aliases = call_user_func(array(
                $className,
                'GetAliases'
            ));
            // $aliases = $className::GetAliases ();
            $swAliases = true;
        }
        // use object properties or aliases to initialize
        foreach ($this as $field => $value) {
            if (isset($data [$field])) {
                $this->$field = $data [$field];
            } elseif ($swAliases && isset($aliases [$field]) && isset($data [$aliases [$field]])) {
                $this->$field = $data [$aliases [$field]];
            }
        }
    }

    public function serialize()
    {
        if (isset($this->temp)) {
            unset($this->temp);
        }
        return serialize($this);
    }

    public function unserialize($str)
    {
        $className = get_class($this);
        $data = unserialize($str);
        return new $className($data);
    }
}