setTable('branding'); } /** * Add a branding object * @param array $data The additional data of the branding (e.g. ["key" => "value"]) * @return void * @throws Exception If the object was not created successfully */ public function add( array $data, ): void { global /** @var db $db */ $db; // Define the default values $default_values = [ 'name' => null, 'description' => null, 'cvr' => null, 'address' => null, 'phone_country_code' => null, 'phone' => null, 'email' => null, 'website' => null, 'banner' => null, 'logo' => null, 'favicon' => null, 'signature' => null, ]; // Sanitize the input $sanitized_data = []; foreach ( $data as $key => $value ) { // Sanitize the input if (array_key_exists($key, $default_values)) { // If the value is null, skip it if (is_null($value)) { continue; } elseif (is_string($value)) { $sanitized_data[$key] = $db->escape_string($value); } elseif (is_int($value)) { $sanitized_data[$key] = (int)$value; } elseif (is_array($value)) { $sanitized_data[$key] = json_encode($value); } else { throw new Exception("Invalid value type for key: $key"); } } else { throw new Exception("Invalid key: $key"); } } // Define the actual object values $new_object = array_merge( $default_values, $sanitized_data ); // Remove null values $new_object = array_filter($new_object, function ($value) { return !is_null($value); }); // Add the object to the database $new_id = self::add_object($new_object); self::select($new_id); } public function getObjectProperties(): void { $this->name = new object_property($this->table, $this->id, 'name', 'string', false); $this->description = new object_property($this->table, $this->id, 'description', 'string', false); $this->cvr = new object_property($this->table, $this->id, 'cvr', 'int', false); $this->address = new object_property($this->table, $this->id, 'address', 'string', false); $this->phone_country_code = new object_property($this->table, $this->id, 'phone_country_code', 'int', false); $this->phone = new object_property($this->table, $this->id, 'phone', 'int', false); $this->email = new object_property($this->table, $this->id, 'email', 'string', false); $this->website = new object_property($this->table, $this->id, 'website', 'string', false); $this->banner = new object_property($this->table, $this->id, 'banner', 'string', false); $this->logo = new object_property($this->table, $this->id, 'logo', 'string', false); $this->favicon = new object_property($this->table, $this->id, 'favicon', 'string', false); $this->signature = new object_property($this->table, $this->id, 'signature', 'string', false); } public function objectChanged(): void { //TODO: Add cache invalidation } public function asArray(): array { return [ 'id' => (int)$this->id, 'name' => $this->name->value(), 'description' => $this->description->value(), 'cvr' => $this->cvr->value(), 'address' => $this->address->value(), 'phone_country_code' => $this->phone_country_code->value(), 'phone' => $this->phone->value(), 'email' => $this->email->value(), 'website' => $this->website->value(), 'banner' => $this->banner->value(), 'logo' => $this->logo->value(), 'favicon' => $this->favicon->value(), 'signature' => $this->signature->value(), ]; } }