Seditio Source
Root |
./othercms/dotclear-2.22/inc/core/class.dc.postmedia.php
<?php
/**
 * @package Dotclear
 * @subpackage Core
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_RC_PATH')) {
    return;
}

class
dcPostMedia
{
    protected
$core;  ///< <b>dcCore</b> dcCore instance
   
protected $con;   ///< <b>connection</b> Database connection
   
protected $table; ///< <b>string</b> Post-Media table name

    /**
     * Constructs a new instance.
     *
     * @param      dcCore  $core   The core
     */
   
public function __construct(dcCore $core)
    {
       
$this->core  = &$core;
       
$this->con   = &$core->con;
       
$this->table = $this->core->prefix . 'post_media';
    }

   
/**
     * Returns media items attached to a blog post.
     *
     * @param      array   $params  The parameters
     *
     * @return     record  The post media.
     */
   
public function getPostMedia($params = [])
    {
       
$sql = new dcSelectStatement($this->core, 'dcPostMediaGetPostMedia');
       
$sql
           
->columns([
               
'M.media_file',
               
'M.media_id',
               
'M.media_path',
               
'M.media_title',
               
'M.media_meta',
               
'M.media_dt',
               
'M.media_creadt',
               
'M.media_upddt',
               
'M.media_private',
               
'M.user_id',
               
'PM.post_id',
            ]);

        if (!empty(
$params['columns']) && is_array($params['columns'])) {
           
$sql->columns($params['columns']);
        }

       
$sql
           
->from($sql->core->prefix . 'media M')
            ->
join(
                (new
dcJoinStatement($this->core, 'dcPostMediaGetPostMedia'))
                ->
type('INNER')
                ->
from($this->table . ' PM')
                ->
on('M.media_id = PM.media_id')
                ->
statement()
            );

        if (!empty(
$params['from'])) {
           
$sql->from($params['from']);
        }

        if (isset(
$params['link_type'])) {
           
$sql->where('PM.link_type' . $sql->in($params['link_type']));
        } else {
           
$sql->where('PM.link_type = ' . $sql->quote('attachment'));
        }

        if (isset(
$params['post_id'])) {
           
$sql->and('PM.post_id' . $sql->in($params['post_id']));
        }
        if (isset(
$params['media_id'])) {
           
$sql->and('M.media_id' . $sql->in($params['media_id']));
        }
        if (isset(
$params['media_path'])) {
           
$sql->and('M.media_path' . $sql->in($params['media_path']));
        }

        if (isset(
$params['sql'])) {
           
$sql->sql($params['sql']);
        }

       
$rs = $sql->select();

        return
$rs;
    }

   
/**
     * Attaches a media to a post.
     *
     * @param      mixed   $post_id    The post identifier
     * @param      mixed   $media_id   The media identifier
     * @param      string  $link_type  The link type (default: attachment)
     */
   
public function addPostMedia($post_id, $media_id, $link_type = 'attachment')
    {
       
$post_id  = (int) $post_id;
       
$media_id = (int) $media_id;

       
$f = $this->getPostMedia(['post_id' => $post_id, 'media_id' => $media_id, 'link_type' => $link_type]);

        if (!
$f->isEmpty()) {
            return;
        }

       
$cur            = $this->con->openCursor($this->table);
       
$cur->post_id   = $post_id;
       
$cur->media_id  = $media_id;
       
$cur->link_type = $link_type;

       
$cur->insert();
       
$this->core->blog->triggerBlog();
    }

   
/**
     * Detaches a media from a post.
     *
     * @param      mixed   $post_id    The post identifier
     * @param      mixed   $media_id   The media identifier
     * @param      mixed   $link_type  The link type
     */
   
public function removePostMedia($post_id, $media_id, $link_type = null)
    {
       
$post_id  = (int) $post_id;
       
$media_id = (int) $media_id;

       
$sql = new dcDeleteStatement($this->core, 'dcPostMediaRemovePostMedia');
       
$sql
           
->from($this->table)
            ->
where('post_id = ' . $post_id)
            ->
and('media_id = ' . $media_id);

        if (
$link_type != null) {
           
$sql->and('link_type = ' . $sql->quote($link_type, true));
        }
       
$sql->delete();

       
$this->core->blog->triggerBlog();
    }
}