Files
conservatorio-tomadini/components/com_attachments/models/attachment.php
2024-12-17 17:34:10 +01:00

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);
}
}
}