<?php
/*
@version: 1.0b
@author: mateusz 'matix' nowak <www.matix.info.pl>
*/
final class Movie_Model extends Aframe_Opt_Model implements Countable
{
public function search($sQuery, $iOffset = 0, $iLimit = 10)
{
$oQ = $this->q();
$oDb = $this->db();
$aConditionOr = array();
$aCondition = array('movie_state = 1');
$aFields = array('movie_title', 'movie_tags', 'movie_text', 'movie_need', 'category_name');
foreach($aFields as $sField)
$aConditionOr[] = sprintf(' MATCH(%s) AGAINST ("%s" IN BOOLEAN MODE)', $sField, $sQuery);
$aCondition[] = '('. join(' OR ', $aConditionOr). ')';
$oQueryCount = $this->q();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id');
$mSelect = join(', ', array('*', '('.$oQueryCount.') as movie_like_count'));
$oQ->select($this->t('movies'), $mSelect)
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->order('movie_id DESC')
->limit($iOffset, $iLimit);
return $oDb->fetchAll($oQ);
}
public function UpdateStep($sPhoto = null, array $aSteps = array(), $iMid, $oStep)
{
$aStepDataRow = array();
if(count($aSteps))
{
$oStep->deleteAll($iMid);
foreach($aSteps['type'] as $iKey => $sStep)
if((isset($aSteps['title'][$iKey]) && $aSteps['title'][$iKey]) || (isset($aSteps['text'][$iKey]) && $aSteps['text'][$iKey]))
{
$aData = array
(
'step_type' => isset($aSteps['type'][$iKey]) ? $aSteps['type'][$iKey] : 1,
'step_text' => isset($aSteps['text'][$iKey]) ? $aSteps['text'][$iKey] : '',
'step_title' => isset($aSteps['title'][$iKey]) ? $aSteps['title'][$iKey] : '',
'step_movie_id' => (int)$iMid,
);
// Try to put new step to the database
try
{
$oStep->SetArray($aData);
}
// Return false if error occured
catch(Exception $e)
{
return false;
}
}
}
// If avatar changed
if($sPhoto)
{
$oQ = $this->q();
$oDb = $this->db();
$aDataUpdate = array
(
'movie_thumb' => $sPhoto,
);
$oQ->update($this->t('movies'), $aDataUpdate)
->where('movie_id = '.$iMid);
return $oDb->query($oQ);
}
return true;
}
public function count($bFromLastQuery = false)
{
$oQ = $this->q();
$oDb = $this->db();
if (!$bFromLastQuery)
$oQ->select($this->t('movies'), 'COUNT(*) as movie_count');
else
$oQ = $this->_oLast->select($this->t('movies'), 'COUNT(*) as movie_count')->limit(0, 0);
return $oDb->fetchRow('movie_count', $oQ);
}
public function urlExists($sUrl)
{
// Query connection
$oQ = $this->q();
$oDb = $this->db();
$oQ->select($this->t('movies'))
->where(sprintf('movie_url = "%s"', $sUrl));
return $oDb->fetchOne($oQ);
}
public function ListingCategoryItem($sNested, $iLimit = 5, $iOffset = 1)
{
$oQ = $this->q();
$oDb = $this->db();
$iOffset = $iOffset;
$aCondition = array();
$aCondition[] = 'movie_state != 3 AND movie_state != 0';
$aCondition[] = 'movie_rang != 0';
$aCondition[] = sprintf('category_nested LIKE "%s"', $sNested . '%');
$oQueryCount = $this->q();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id');
$mSelect = join(', ', array('*', '('.$oQueryCount.') as movie_like_count'));
$oQ->select($this->t('movies'), $mSelect)
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->order('movie_state ASC, movie_id DESC')
->limit($iOffset, $iLimit);
$this->_oLast = $oQ;
return $oDb->fetchAll($oQ);
}
public function Listing($iCategory = NULL, $iLimit = 5, $iOffset = 0, $mIgnoreState = false, $iUser = null, $bExcludeUserMovie = false)
{
$oQ = $this->q();
$oDb = $this->db();
$aCondition = array();
if($mIgnoreState && ($mIgnoreState != 3))
$aCondition[] = 'movie_state != 3';
if($iCategory)
$aCondition[] = 'movie_category_id = '.$iCategory;
if($iUser)
$aCondition[] = 'movie_user_id = '.$iUser;
if(!$bExcludeUserMovie && (($mIgnoreState == 0) || ($mIgnoreState === null)))
$aCondition[] = '(movie_state is NULL or movie_state = 0)';
elseif(is_numeric($mIgnoreState))
$aCondition[] = 'movie_state = ' . $mIgnoreState;
elseif($mIgnoreState === false)
$aCondition[] = 'movie_state = 1';
if($bExcludeUserMovie)
$aCondition[] = 'movie_rang != 0';
$oQueryCount = $this->q();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id AND movie_state != 0');
$mSelect = join(', ', array('*', '('.$oQueryCount.') as movie_like_count'));
$oQ->select($this->t('movies'), $mSelect)
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->order('movie_state ASC, movie_id DESC')
->limit($iOffset, $iLimit);
$this->_oLast = $oQ;
return $oDb->fetchAll($oQ);
}
public function CategoryListing($sNested, $iLimit, $iPage = 0, $sFilter = '', $sOrder = '')
{
$oQ = $this->q();
$oDb = $this->db();
$aCondition = array('movie_state = 1');
if($sNested)
$aCondition[] = sprintf('category_nested LIKE "%s"', $sNested . '%');
$aCondition[] = 'movie_state != 3';
if($sFilter)
{
$aRangs = array_flip(Aframe::Config('Movies')->rang);
if(isset($aRangs[ucwords($sFilter)]))
$aCondition[] = sprintf('movie_rang = ' . $aRangs[ucwords($sFilter)]);
}
$oQueryCount = $this->q();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id');
$mSelect = join(', ', array('*', '('.$oQueryCount.') as movie_like_count'));
$oQ->select($this->t('movies'), $mSelect)
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->limit((!$iPage ? 0 : $iPage-1), $iLimit);
if($sOrder)
{
$aReplace = array
(
'top' => '('.$oQueryCount.') DESC',
'recent' => 'movie_date DESC',
'views' => 'movie_views DESC',
);
$oQ->order($aReplace[$sOrder]);
}else{
$oQ->order('movie_state ASC, movie_id DESC');
}
$this->_oLast = $oQ;
return $oDb->fetchAll($oQ);
}
public function Delete($iId)
{
$oQ = $this->q();
$oDb = $this->db();
$oQ->delete($this->t('movies'))
->where('movie_id = '.$iId);
return $oDb->query($oQ);
}
public function User($iUid, $iExc = null, $iLimit =5)
{
// Query connection
$oQ = $this->q();
// Datbase Connection
$oDb = $this->db();
$oQueryCount = $this->q();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id');
$aCondition = array
(
'movie_state != 3',
'user_id = '.$iUid,
);
if($iExc)
$aCondition[] = 'movie_id != ' . $iExc;
$oQ->select($this->t('movies'), join(', ', array('*', '('.$oQueryCount.') as movie_like_count')))
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->limit(0, $iLimit);
return $oDb->fetchAll($oQ);
}
public function find($iId, $bIncludeLikeCount = false)
{
// Query connection
$oQ = $this->q();
$oQueryCount = $this->q();
// Datbase Connection
$oDb = $this->db();
$oQueryCount->select($this->t('movie_likes'), 'count(like_movie_id)')
->where('like_movie_id = movie_id');
if($bIncludeLikeCount)
$mSelect = join(', ', array('*', '('.$oQueryCount.') as movie_like_count'));
else
$mSelect = true;
$oQ->select($this->t('movies'), $mSelect)
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where('movie_id = '.$iId);
return $oDb->fetchOne($oQ);
}
public function updateArray($aArray, $iMovie)
{
$oQ = $this->q();
$oDb = $this->db();
$oQ->update($this->t('movies'), $aArray)
->where('movie_id = '. $iMovie);
return $oDb->query($oQ);
}
public function Submit($sTitle, $iCat, $sImage, $sTag, $sText, $iUid, $sNeed, $sUrl, $iRank = NULL)
{
$oQ = $this->q();
$oDb = $this->db();
$aData = array
(
'movie_title' => $sTitle,
'movie_category_id' => $iCat,
'movie_user_id' => (int)$iUid,
'movie_tags' => $sTag,
'movie_need' => $sNeed,
'movie_date' => date('Y-m-d G:i:s'),
'movie_thumb' => $sImage,
'movie_text' => $sText,
'movie_url' => $sUrl
);
if($iRank)
{
$aData['movie_rang'] = $iRank;
// $aData['movie_state'] = 1;
}
$oQ->insert($this->t('movies'), $aData);
if ($oDb->query($oQ))
return $oDb->lastId();
}
public function counter($iMov)
{
$oQ = $this->q();
$oDb = $this->db();
$aData = array
(
'movie_views' => array('movie_views+1')
);
$oQ->update($this->t('movies'), $aData)
->where('movie_id = '.$iMov);
return $oDb->query($oQ);
}
public function deleteThumb($iId)
{
$oQ = $this->q();
$oDb = $this->db();
$aData = array
(
'movie_thumb' => NULL
);
$oQ->update($this->t('movies'), $aData)
->where('movie_id = '.$iId);
return $oDb->query($oQ);
}
public function Subscribe($iUid, $iLimit = 6)
{
$oQ = $this->q();
$oDb = $this->db();
$oQ->select($this->t('user_subscribes'), 'sub_object_id')
->where('sub_user_id = '.$iUid);
$aCondition = array('movie_state = 1', 'movie_user_id IN ('.$oQ.')');
$oQ = $this->q();
$oQ->select($this->t('movies'))
->join($this->t('categories'), 'category_id = movie_category_id')
->join($this->t('users'), 'user_id = movie_user_id')
->where($aCondition)
->order('movie_state ASC, movie_id DESC')
->limit(0, $iLimit);
return $oDb->fetchAll($oQ);
}
}
?>