Current File : /pages/54/47/d0016649/home/htdocs/ob_maxi/wp-content/plugins/digimember/system/model/data/lock.php
<?php

class ncore_LockData extends ncore_BaseData
{
    public function cronDaily()
    {
        $table = $this->sqlTableName();

        $delete_after_days = 2;

        $expire = ncore_dbDate( time() - 86400*$delete_after_days );
        $sql = "DELETE FROM `$table`
                WHERE expire < '$expire'";

        $this->db()->query($sql);
    }

    public function lock( $name, $value, $lock_timeout_minutes=60 )
    {
        $name  = ncore_washText( $name );
        $value = ncore_washText( $value );

        $now    = ncore_dbDate();
        $expire = ncore_dbDate( time() + 60*$lock_timeout_minutes );

        $table = $this->sqlTableName();

        $sql = "UPDATE `$table`
                SET expire = '$expire',
                    locked = '$now'
                WHERE name = '$name'
                  AND value = '$value'
                  AND ((locked IS NULL) OR (expire < '$now'))";
        $this->db()->query( $sql );
        if ($this->db()->modified()) {
            return true;
        }

        $where = array();
        $where['name'] = $name;
        $where['value'] = $value;
        $have_entry = (bool) $this->getAll( $where );
        if ($have_entry) {
            return false;
        }

        $data = array();
        $data['name'] = $name;
        $data['value'] = $value;
        $this->create( $data );

        $this->db()->query( $sql );
        return $this->db()->modified();
    }

    public function unlock( $name, $value )
    {
        $name = ncore_washText( $name );
        $value = ncore_washText( $value );

        $table = $this->sqlTableName();

        $now = ncore_dbDate();

        $sql = "UPDATE `$table`
                SET locked = NULL
                WHERE name = '$name'
                  AND value = '$value'";

        $this->db()->query($sql);
    }


    //
    // protected
    //
    protected function networkModeForced()
    {
        return true;
    }

    protected function isUniqueInBlog() {

        return true;
    }

    protected function sqlBaseTableName()
    {
        return 'lock';
    }

    protected function sqlTableMeta()
    {
       $columns = array(
            'name'   => 'string[47]',
            'value'  => 'string[47]',
            'expire' => 'datetime',
            'locked' => 'lock_date',
       );

       $indexes = array( 'name'  );

       $meta = array(
        'columns' => $columns,
        'indexes' => $indexes,
       );

       return $meta;
    }

}