File "OptionModel.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/woo-license-keys/vendor/10quality/wpmvc-mvc/src/Models/OptionModel.php
File size: 3.09 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

namespace WPMVC\MVC\Models;

use WPMVC\MVC\Contracts\Modelable;
use WPMVC\MVC\Contracts\Findable;
use WPMVC\MVC\Contracts\Arrayable;
use WPMVC\MVC\Contracts\JSONable;
use WPMVC\MVC\Contracts\Stringable;
use WPMVC\MVC\Contracts\Traceable;
use WPMVC\MVC\Traits\GenericModelTrait;
use WPMVC\MVC\Traits\AliasTrait;
use WPMVC\MVC\Traits\CastTrait;

/**
 * Abstract Model Class based on WordPress Model.
 *
 * @author Alejandro Mostajo <http://about.me/amostajo>
 * @copyright 10Quality <http://www.10quality.com>
 * @license MIT
 * @package WPMVC\MVC
 * @version 1.0.0
 */
abstract class OptionModel implements Findable, Modelable, Arrayable, JSONable, Stringable, Traceable
{
    use GenericModelTrait, AliasTrait, CastTrait;
    /**
     * Option prefix.
     * @since 1.0.0
     * @var string
     */
    protected $prefix = 'model_';
    /**
     * Model id.
     * @since 1.0.0
     * @var string
     */
    protected $id;
    /**
     * Attributes in model.
     * @since 1.0.0
     * @var array
     */
    protected $attributes = array();
    /**
     * Attributes and aliases hidden from print.
     * @since 1.0.0
     * @var array
     */
    protected $hidden = array();
    /**
     * Default constructor.
     * @since 1.0.0
     */
    public function __construct($id = null)
    {
        if ( isset( $this->id ) && ! empty( $this->id )  )
            $this->load($this->id);
    }
    /**
     * Loads model from db.
     * @since 1.0.0
     *
     * @param string $id Option key ID.
     */
    public function load( $id )
    {
        $this->attributes = json_decode(
            get_option( $this->prefix . $this->id ),
            true
        );
        if ( $this->attributes == null )
            $this->attributes = array();
    }

    /**
     * Saves current model in the db.
     * @since 1.0.0
     *
     * @return mixed.
     */
    public function save()
    {
        if ( ! $this->is_loaded() ) return false;
        $this->fill_defaults();
        update_option( $this->prefix . $this->id, json_encode( $this->attributes ) );
        return true;
    }
    /**
     * Deletes current model in the db.
     * @since 1.0.0
     *
     * @return mixed.
     */
    public function delete()
    {
        if ( ! $this->is_loaded() ) return false;
        delete_option( $this->prefix . $this->id);
        return true;
    }
    /**
     * Returns flag indicating if object is loaded or not.
     * @since 1.0.0
     *
     * @return bool
     */
    public function is_loaded()
    {
        return !empty( $this->attributes );
    }
    /**
     * Returns flag indicating if model has a trace in the database (an ID).
     * @since 2.1.11
     *
     * @param bool
     */
    public function has_trace()
    {
        return true;
    }
    /**
     * Fills default when about to create object
     * @since 1.0.0
     */
    private function fill_defaults()
    {
        if ( ! array_key_exists('ID', $this->attributes) ) {
            $this->attributes['ID'] = $this->id;
        }
    }
}