216 lines
4.6 KiB
PHP
216 lines
4.6 KiB
PHP
<?php
|
|
/**
|
|
* Attachment model definition
|
|
*
|
|
* @package Attachments
|
|
* @subpackage Attachments_Component
|
|
*
|
|
* @copyright Copyright (C) 2007-2018 Jonathan M. Cameron, All Rights Reserved
|
|
* @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
|
* @link http://joomlacode.org/gf/project/attachments/frs/
|
|
* @author Jonathan M. Cameron
|
|
*/
|
|
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
/** Define the legacy classes, if necessary */
|
|
require_once(JPATH_SITE.'/components/com_attachments/legacy/model.php');
|
|
|
|
|
|
/**
|
|
* Attachment Model
|
|
*
|
|
* @package Attachments
|
|
*/
|
|
class AttachmentsModelAttachment extends JModelLegacy
|
|
{
|
|
|
|
/**
|
|
* Attachment ID
|
|
*/
|
|
var $_id = null;
|
|
|
|
|
|
/**
|
|
* Attachment object/data
|
|
*
|
|
* @var object
|
|
*/
|
|
var $_attachment = null;
|
|
|
|
|
|
/**
|
|
* Constructor, build object and determines its ID
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
// Get the cid array from the request
|
|
$cid = JRequest::getVar('cid', false, 'DEFAULT', 'array');
|
|
|
|
if ($cid) {
|
|
// Accept only the first id from the array
|
|
$id = $cid[0];
|
|
}
|
|
else {
|
|
$id = JRequest::getInt('id',0);
|
|
}
|
|
|
|
$this->setId($id);
|
|
}
|
|
|
|
|
|
/**
|
|
* Reset the model ID and data
|
|
*/
|
|
public function setId($id=0)
|
|
{
|
|
$this->_id = $id;
|
|
$this->_attachment = null;
|
|
}
|
|
|
|
|
|
/**
|
|
* Load the attachment data
|
|
*
|
|
* @return true if loaded successfully
|
|
*/
|
|
private function _loadAttachment()
|
|
{
|
|
if ($this->_id == 0) {
|
|
return false;
|
|
}
|
|
|
|
if ( empty($this->_attachment) ) {
|
|
|
|
$user = JFactory::getUser();
|
|
$user_levels = $user->getAuthorisedViewLevels();
|
|
|
|
// If the user is not logged in, add extra view levels (if configured)
|
|
if ( $user->get('username') == '' ) {
|
|
|
|
// Get the component parameters
|
|
jimport('joomla.application.component.helper');
|
|
$params = JComponentHelper::getParams('com_attachments');
|
|
|
|
// Add the specified access levels
|
|
$guest_levels = $params->get('show_guest_access_levels', Array('1'));
|
|
if (is_array($guest_levels)) {
|
|
foreach ($guest_levels as $glevel) {
|
|
$user_levels[] = $glevel;
|
|
}
|
|
}
|
|
else {
|
|
$user_levels[] = $glevel;
|
|
}
|
|
}
|
|
$user_levels = implode(',', array_unique($user_levels));
|
|
|
|
// Load the attachment data and make sure this user has access
|
|
$db = $this->getDbo();
|
|
$query = $db->getQuery(true);
|
|
$query->select('a.*, a.id as id');
|
|
$query->from('#__attachments as a');
|
|
$query->where('a.id = '.(int)$this->_id);
|
|
if ( !$user->authorise('core.admin') ) {
|
|
$query->where('a.access in ('.$user_levels.')');
|
|
}
|
|
$db->setQuery($query, 0, 1);
|
|
$this->_attachment = $db->loadObject();
|
|
if ( empty($this->_attachment) ) {
|
|
return false;
|
|
}
|
|
|
|
// Retrieve the information about the parent
|
|
$parent_type = $this->_attachment->parent_type;
|
|
$parent_entity = $this->_attachment->parent_entity;
|
|
JPluginHelper::importPlugin('attachments');
|
|
$apm = getAttachmentsPluginManager();
|
|
if ( !$apm->attachmentsPluginInstalled($parent_type) ) {
|
|
$this->_attachment->parent_type = false;
|
|
return false;
|
|
}
|
|
$parent = $apm->getAttachmentsPlugin($parent_type);
|
|
|
|
// Set up the parent info
|
|
$parent_id = $this->_attachment->parent_id;
|
|
$this->_attachment->parent_title = $parent->getTitle($parent_id, $parent_entity);
|
|
$this->_attachment->parent_published =
|
|
$parent->isParentPublished($parent_id, $parent_entity);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Create a new Attachment object
|
|
*/
|
|
private function _initAttachment()
|
|
{
|
|
echo "_initData not implemented yet <br />";
|
|
return null;
|
|
}
|
|
|
|
|
|
/**
|
|
* Get the data
|
|
*
|
|
* @return object
|
|
*/
|
|
public function getAttachment()
|
|
{
|
|
if ( !$this->_loadAttachment() ) {
|
|
// If the load fails, create a new one
|
|
$this->_initAttachment();
|
|
}
|
|
|
|
return $this->_attachment;
|
|
}
|
|
|
|
|
|
/**
|
|
* Save the attachment
|
|
*
|
|
* @param object $data mixed object or associative array of data to save
|
|
*
|
|
* @return Boolean true on success
|
|
*/
|
|
public function save($data)
|
|
{
|
|
// Get the table
|
|
$table = $this->getTable('Attachments');
|
|
|
|
// Save the data
|
|
if ( !$table->save($data) ) {
|
|
// An error occured, save the model error message
|
|
$this->setError($table->getError());
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Increment the download cout
|
|
*
|
|
* @param int $attachment_id the attachment ID
|
|
*/
|
|
public function incrementDownloadCount()
|
|
{
|
|
// Update the download count
|
|
$db = JFactory::getDBO();
|
|
$query = $db->getQuery(true);
|
|
$query->update('#__attachments')->set('download_count = (download_count + 1)');
|
|
$query->where('id = ' .(int)$this->_id);
|
|
$db->setQuery($query);
|
|
if ( !$db->query() ) {
|
|
$errmsg = $db->stderr() . ' (ERR 49)';
|
|
JError::raiseError(500, $errmsg);
|
|
}
|
|
}
|
|
|
|
}
|