1168 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1168 lines
		
	
	
		
			37 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Attachments component attachment controller
 | |
|  *
 | |
|  * @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
 | |
|  */
 | |
| 
 | |
| // No direct access to this file
 | |
| defined('_JEXEC') or die('Restricted access');
 | |
| 
 | |
| /** Define the legacy classes, if necessary */
 | |
| require_once(JPATH_SITE.'/components/com_attachments/legacy/controller_form.php');
 | |
| 
 | |
| /** Load the Attachments defines and helpers */
 | |
| require_once(JPATH_SITE.'/components/com_attachments/defines.php');
 | |
| require_once(JPATH_SITE.'/components/com_attachments/helper.php');
 | |
| require_once(JPATH_SITE.'/components/com_attachments/javascript.php');
 | |
| 
 | |
| /**
 | |
|  * Attachment Controller
 | |
|  *
 | |
|  * @package Attachments
 | |
|  */
 | |
| class AttachmentsControllerAttachment extends JControllerFormLegacy
 | |
| {
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor.
 | |
| 	 *
 | |
| 	 * @param	array An optional associative array of configuration settings.
 | |
| 	 *
 | |
| 	 * @return	JControllerForm
 | |
| 	 */
 | |
| 	public function __construct($config = array())
 | |
| 	{
 | |
| 		parent::__construct($config);
 | |
| 
 | |
| 		$this->registerTask('applyNew',	'saveNew');
 | |
| 		$this->registerTask('save2New',	'saveNew');
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to check whether an ID is in the edit list.
 | |
| 	 *
 | |
| 	 * @param	string	$context	The context for the session storage.
 | |
| 	 * @param	int		$id			The ID of the record to add to the edit list.
 | |
| 	 *
 | |
| 	 * @return	boolean	True if the ID is in the edit list.
 | |
| 	 */
 | |
| 	protected function checkEditId($context, $id)
 | |
| 	{
 | |
| 		// ??? Do not think this function is used currently
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Add - Display the form to create a new attachment
 | |
| 	 *
 | |
| 	 */
 | |
| 	public function add()
 | |
| 	{
 | |
| 		// Fail gracefully if the Attachments plugin framework plugin is disabled
 | |
| 		if ( !JPluginHelper::isEnabled('attachments', 'attachments_plugin_framework') ) {
 | |
| 			echo '<h1>' . JText::_('ATTACH_WARNING_ATTACHMENTS_PLUGIN_FRAMEWORK_DISABLED') . '</h1>';
 | |
| 			return;
 | |
| 			}
 | |
| 
 | |
| 		// Access check.
 | |
| 		$user = JFactory::getUser();
 | |
| 		if (!$user->authorise('core.create', 'com_attachments')) {
 | |
| 			return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR') . ' (ERR 121)' );
 | |
| 			}
 | |
| 
 | |
| 		// Access check.
 | |
| 		if (!$this->allowAdd()) {
 | |
| 			// Set the internal error and also the redirect error.
 | |
| 			$this->setError(JText::_('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED'));
 | |
| 			$this->setMessage($this->getError(), 'error');
 | |
| 			$this->setRedirect(JRoute::_('index.php?option='.$this->option .
 | |
| 										 '&view='.$this->view_list.$this->getRedirectToListAppend(), false));
 | |
| 			return false;
 | |
| 			}
 | |
| 
 | |
| 		$parent_entity = 'default';
 | |
| 
 | |
| 		// Get the parent info
 | |
| 		if ( JRequest::getString('article_id') ) {
 | |
| 			$pidarr = explode(',', JRequest::getString('article_id'));
 | |
| 			$parent_type = 'com_content';
 | |
| 			}
 | |
| 		else {
 | |
| 			$pidarr = explode(',', JRequest::getString('parent_id'));
 | |
| 			$parent_type = JRequest::getCmd('parent_type', 'com_content');
 | |
| 
 | |
| 			// If the entity is embedded in the parent type, split them
 | |
| 			if ( strpos($parent_type, '.') ) {
 | |
| 				$parts = explode('.', $parent_type);
 | |
| 				$parent_type = $parts[0];
 | |
| 				$parent_entity = $parts[1];
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Special handling for categories
 | |
| 		if ( $parent_type == 'com_categories' ) {
 | |
| 			$parent_type = 'com_content';
 | |
| 			}
 | |
| 
 | |
| 		// Get the parent id and see if the parent is new
 | |
| 		$parent_id = null;
 | |
| 		$new_parent = false;
 | |
| 		if ( is_numeric($pidarr[0]) ) {
 | |
| 			$parent_id = (int)$pidarr[0];
 | |
| 			}
 | |
| 		if ( (count($pidarr) == 1) && ($pidarr[0] == '') ) {
 | |
| 			// Called from the [New] button
 | |
| 			$parent_id = null;
 | |
| 			}
 | |
| 		if ( count($pidarr) > 1 ) {
 | |
| 			if ( $pidarr[1] == 'new' ) {
 | |
| 				$new_parent = true;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Set up the "select parent" button
 | |
| 		JPluginHelper::importPlugin('attachments');
 | |
| 		$apm = getAttachmentsPluginManager();
 | |
| 		$entity_info = $apm->getInstalledEntityInfo();
 | |
| 		$parent = $apm->getAttachmentsPlugin($parent_type);
 | |
| 
 | |
| 		$parent_entity = $parent->getCanonicalEntityId($parent_entity);
 | |
| 		$parent_entity_name = JText::_('ATTACH_' . $parent_entity);
 | |
| 
 | |
| 		if ( !$parent_id ) {
 | |
| 			// Set up the necessary javascript
 | |
| 			AttachmentsJavascript::setupJavascript();
 | |
| 
 | |
| 			$uri = JFactory::getURI();
 | |
| 			$document = JFactory::getDocument();
 | |
| 			$js = ' 
 | |
| 	   function jSelectParentArticle(id, title, catid, object) {
 | |
| 		   document.id("parent_id").value = id;
 | |
| 		   document.id("parent_title").value = title;
 | |
| 		   SqueezeBox.close();
 | |
| 		   }';
 | |
| 			$document->addScriptDeclaration($js);
 | |
| 			}
 | |
| 		else {
 | |
| 			if ( !is_numeric($parent_id) ) {
 | |
| 				$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_PARENT_ID_S', $parent_id) . ' (ERR 122)';
 | |
| 				JError::raiseError(500, $errmsg);
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Use a component template for the iframe view (from the article editor)
 | |
| 		$from = JRequest::getWord('from');
 | |
| 		if ( $from == 'closeme' ) {
 | |
| 			JRequest::setVar('tmpl', 'component');
 | |
| 			}
 | |
| 
 | |
| 		// Disable the main menu items
 | |
| 		JRequest::setVar( 'hidemainmenu', 1 );
 | |
| 
 | |
| 		// Get the article title
 | |
| 		$parent_title = false;
 | |
| 		if ( !$new_parent ) {
 | |
| 
 | |
| 			JPluginHelper::importPlugin('attachments');
 | |
| 			$apm = getAttachmentsPluginManager();
 | |
| 			if ( !$apm->attachmentsPluginInstalled($parent_type) ) {
 | |
| 				// Exit if there is no Attachments plugin to handle this parent_type
 | |
| 				$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_PARENT_TYPE_S', $parent_type) . ' (ERR 123)';
 | |
| 				JError::raiseError(500, $errmsg);
 | |
| 				}
 | |
| 			$parent = $apm->getAttachmentsPlugin($parent_type);
 | |
| 			$parent_title = $parent->getTitle($parent_id, $parent_entity);
 | |
| 			}
 | |
| 
 | |
| 		// Determine the type of upload
 | |
| 		$default_uri_type = 'file';
 | |
| 		$uri_type = JRequest::getWord('uri', $default_uri_type);
 | |
| 		if ( !in_array( $uri_type, AttachmentsDefines::$LEGAL_URI_TYPES ) ) {
 | |
| 			// Make sure only legal values are entered
 | |
| 			}
 | |
| 
 | |
| 		// Get the component parameters
 | |
| 		jimport('joomla.application.component.helper');
 | |
| 		$params = JComponentHelper::getParams('com_attachments');
 | |
| 
 | |
| 		// Set up the view
 | |
| 		require_once(JPATH_COMPONENT_ADMINISTRATOR.'/views/add/view.html.php');
 | |
| 		$view = new AttachmentsViewAdd();
 | |
| 
 | |
| 		AttachmentsControllerAttachment::add_view_urls($view, 'upload', $parent_id, $parent_type, null, $from);
 | |
| 		// ??? Move the add_view_urls function to attachments base view class
 | |
| 
 | |
| 		// We do not have a real attachment yet so fake it
 | |
| 		$attachment = new JObject();
 | |
| 
 | |
| 		$attachment->uri_type = $uri_type;
 | |
| 		$attachment->state	= $params->get('publish_default', false);
 | |
| 		$attachment->url = '';
 | |
| 		$attachment->url_relative = false;
 | |
| 		$attachment->url_verify = true;
 | |
| 		$attachment->display_name = '';
 | |
| 		$attachment->description = '';
 | |
| 		$attachment->user_field_1 = '';
 | |
| 		$attachment->user_field_2 = '';
 | |
| 		$attachment->user_field_3 = '';
 | |
| 		$attachment->parent_id	   = $parent_id;
 | |
| 		$attachment->parent_type   = $parent_type;
 | |
| 		$attachment->parent_entity = $parent_entity;
 | |
| 		$attachment->parent_title  = $parent_title;
 | |
| 
 | |
| 		$view->attachment = $attachment;
 | |
| 
 | |
| 		$view->parent		 = $parent;
 | |
| 		$view->new_parent	 = $new_parent;
 | |
| 		$view->may_publish	 = $parent->userMayChangeAttachmentState($parent_id, $parent_entity, $user->id);
 | |
| 		$view->entity_info	 = $entity_info;
 | |
| 		$view->option		 = $this->option;
 | |
| 		$view->from			 = $from;
 | |
| 
 | |
| 		$view->params		 = $params;
 | |
| 
 | |
| 		// Display the add form
 | |
| 		$view->display();
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Save an new attachment
 | |
| 	 */
 | |
| 	public function saveNew()
 | |
| 	{
 | |
| 		// Check for request forgeries
 | |
| 		JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
 | |
| 
 | |
| 		// Access check.
 | |
| 		$user = JFactory::getUser();
 | |
| 		if (!$user->authorise('core.create', 'com_attachments')) {
 | |
| 			return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR') . ' (ERR 124)' );
 | |
| 			}
 | |
| 
 | |
| 		// Make sure we have a user
 | |
| 		if ( $user->get('username') == '' ) {
 | |
| 			$errmsg = JText::_('ATTACH_ERROR_MUST_BE_LOGGED_IN_TO_UPLOAD_ATTACHMENT') . ' (ERR 125)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Get the article/parent handler
 | |
| 		$new_parent = JRequest::getBool('new_parent', false);
 | |
| 		$parent_type = JRequest::getCmd('parent_type', 'com_content');
 | |
| 		$parent_entity = JRequest::getCmd('parent_entity', 'default');
 | |
| 
 | |
| 		// Special handling for categories
 | |
| 		if ( $parent_type == 'com_categories' ) {
 | |
| 			$parent_type = 'com_content';
 | |
| 			}
 | |
| 
 | |
| 		// Exit if there is no Attachments plugin to handle this parent_type
 | |
| 		JPluginHelper::importPlugin('attachments');
 | |
| 		$apm = getAttachmentsPluginManager();
 | |
| 		if ( !$apm->attachmentsPluginInstalled($parent_type) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_PARENT_TYPE_S', $parent_type) . ' (ERR 126)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 		$parent = $apm->getAttachmentsPlugin($parent_type);
 | |
| 		$parent_entity = $parent->getCanonicalEntityId($parent_entity);
 | |
| 		$parent_entity_name = JText::_('ATTACH_' . $parent_entity);
 | |
| 
 | |
| 		// Make sure we have a valid parent ID
 | |
| 		$parent_id = JRequest::getInt('parent_id', null);
 | |
| 
 | |
| 		if ( !$new_parent && (($parent_id === 0) ||
 | |
| 							  ($parent_id == null) ||
 | |
| 							  !$parent->parentExists($parent_id, $parent_entity)) ) {
 | |
| 
 | |
| 			// Warn the user to select an article/parent in a popup
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_MUST_SELECT_PARENT_S', $parent_entity_name);
 | |
| 			echo "<script type=\"text/javascript\"> alert('$errmsg'); window.history.go(-1); </script>\n";
 | |
| 			exit();
 | |
| 			}
 | |
| 
 | |
| 		// Make sure this user has permission to upload
 | |
| 		if ( !$parent->userMayAddAttachment($parent_id, $parent_entity, $new_parent) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_NO_PERMISSION_TO_UPLOAD_S', $parent_entity_name) . ' (ERR 127)';
 | |
| 			JError::raiseError(403, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Set up the new record
 | |
| 		$model		= $this->getModel();
 | |
| 		$attachment = $model->getTable();
 | |
| 
 | |
| 		if (!$attachment->bind(JRequest::get('post'))) {
 | |
| 			$errmsg = $attachment->getError() . ' (ERR 128)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 		$attachment->parent_type = $parent_type;
 | |
| 		$parent->new = $new_parent;
 | |
| 
 | |
| 		// Note the parents id and title
 | |
| 		if ( $new_parent ) {
 | |
| 			$attachment->parent_id = null;
 | |
| 			$parent->title = '';
 | |
| 			}
 | |
| 		else {
 | |
| 			$attachment->parent_id = $parent_id;
 | |
| 			$parent->title = $parent->getTitle($parent_id, $parent_entity);
 | |
| 			}
 | |
| 
 | |
| 		// Upload the file!
 | |
| 
 | |
| 		// Handle 'from' clause
 | |
| 		$from = JRequest::getWord('from');
 | |
| 
 | |
| 		// See if we are uploading a file or URL
 | |
| 		$new_uri_type = JRequest::getWord('uri_type');
 | |
| 		if ( $new_uri_type && !in_array( $new_uri_type, AttachmentsDefines::$LEGAL_URI_TYPES ) ) {
 | |
| 			// Make sure only legal values are entered
 | |
| 			$new_uri_type = '';
 | |
| 			}
 | |
| 
 | |
| 		// If this is a URL, get settings
 | |
| 		$verify_url = false;
 | |
| 		$relative_url = false;
 | |
| 		if ( $new_uri_type == 'url' ) {
 | |
| 			// See if we need to verify the URL (if applicable)
 | |
| 			if ( JRequest::getWord('verify_url') == 'verify' ) {
 | |
| 				$verify_url = true;
 | |
| 				}
 | |
| 			// Allow relative URLs?
 | |
| 			if ( JRequest::getWord('url_relative') == 'relative' ) {
 | |
| 				$relative_url = true;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Update the url checkbox fields
 | |
| 		$attachment->url_relative = $relative_url;
 | |
| 		$attachment->url_verify = $verify_url;
 | |
| 
 | |
| 		// Update create/modify info
 | |
| 		$attachment->created_by = $user->get('id');
 | |
| 		$attachment->modified_by = $user->get('id');
 | |
| 
 | |
| 		// Upload new file/url and create the attachment
 | |
| 		$msg = '';
 | |
| 		$msgType = 'message';
 | |
| 		$error = false;
 | |
| 		if ( $new_uri_type == 'file' ) {
 | |
| 
 | |
| 			// Upload a new file
 | |
| 			$result = AttachmentsHelper::upload_file($attachment, $parent, false, 'upload');
 | |
| 			// NOTE: store() is not needed if upload_file() is called since it does it
 | |
| 
 | |
| 			if ( is_object($result) ) {
 | |
| 				$error = true;
 | |
| 				$msg = $result->error_msg . ' (ERR 129)';
 | |
| 				$msgType = 'error';
 | |
| 				}
 | |
| 			else {
 | |
| 				$msg = $result;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		elseif ( $new_uri_type == 'url' ) {
 | |
| 
 | |
| 			// Extra handling for checkboxes for URLs
 | |
| 			$attachment->url_relative = $relative_url;
 | |
| 			$attachment->url_verify = $verify_url;
 | |
| 
 | |
| 			// Upload/add the new URL
 | |
| 			$result = AttachmentsHelper::add_url($attachment, $parent, $verify_url, $relative_url);
 | |
| 			// NOTE: store() is not needed if add_url() is called since it does it
 | |
| 
 | |
| 			if ( is_object($result) ) {
 | |
| 				$error = true;
 | |
| 				$msg = $result->error_msg . ' (ERR 130)';
 | |
| 				$msgType = 'error';
 | |
| 				}
 | |
| 			else {
 | |
| 				$msg = $result;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		else {
 | |
| 
 | |
| 			// Set up the parent entity to save
 | |
| 			$attachment->parent_entity = $parent_entity;
 | |
| 
 | |
| 			// Save the updated attachment info
 | |
| 			if (!$attachment->store()) {
 | |
| 				$errmsg = $attachment->getError() . ' (ERR 131)';
 | |
| 				JError::raiseError(500, $errmsg);
 | |
| 				}
 | |
| 			$msg = JText::_('ATTACH_ATTACHMENT_UPDATED');
 | |
| 			}
 | |
| 
 | |
| 		// See where to go to next
 | |
| 		$task = $this->getTask();
 | |
| 
 | |
| 		switch ( $task ) {
 | |
| 		case 'applyNew':
 | |
| 			if ( $error ) {
 | |
| 				$link = 'index.php?option=com_attachments&task=attachment.add&parent_id='.(int)$parent_id;
 | |
| 				$link .= "&parent_type={$parent_type}.{$parent_entity}&editor=add_to_parent";
 | |
| 				}
 | |
| 			else {
 | |
| 				$link = 'index.php?option=com_attachments&task=attachment.edit&cid[]=' . (int)$attachment->id;
 | |
| 				}
 | |
| 			break;
 | |
| 
 | |
| 		case 'save2New':
 | |
| 			if ( $error ) {
 | |
| 				$link = 'index.php?option=com_attachments&task=attachment.add&parent_id='.(int)$parent_id;
 | |
| 				$link .= "&parent_type={$parent_type}.{$parent_entity}&editor=add_to_parent";
 | |
| 				}
 | |
| 			else {
 | |
| 				$link = 'index.php?option=com_attachments&task=attachment.add&parent_id='.(int)$parent_id;
 | |
| 				$link .= "&parent_type={$parent_type}.{$parent_entity}&editor=add_to_parent";
 | |
| 				}
 | |
| 			break;
 | |
| 
 | |
| 		case 'saveNew':
 | |
| 		default:
 | |
| 			if ( $error ) {
 | |
| 				$link = 'index.php?option=com_attachments&task=attachment.add&parent_id='.(int)$parent_id;
 | |
| 				$link .= "&parent_type={$parent_type}.{$parent_entity}&editor=add_to_parent";
 | |
| 				}
 | |
| 			else {
 | |
| 				$link = 'index.php?option=com_attachments';
 | |
| 				}
 | |
| 			break;
 | |
| 			}
 | |
| 
 | |
| 		// If called from the editor, go back to it 
 | |
| 		if ($from == 'editor') {
 | |
| 			// ??? This is probably obsolete
 | |
| 			$link = 'index.php?option=com_content&task=edit&cid[]=' . $parent_id;
 | |
| 			}
 | |
| 
 | |
| 		// If we are supposed to close this iframe, do it now.
 | |
| 		if ( $from == 'closeme' ) {
 | |
| 
 | |
| 			// If there has been a problem, alert the user and redisplay
 | |
| 			if ( $msgType == 'error' ) {
 | |
| 				$errmsg = $msg;
 | |
| 				if ( DIRECTORY_SEPARATOR == "\\" ) {
 | |
| 					// Fix filename on Windows system so alert can display it
 | |
| 					$errmsg = str_replace(DIRECTORY_SEPARATOR, "\\\\", $errmsg);
 | |
| 					}
 | |
| 				$errmsg = str_replace("'", "\'", $errmsg);
 | |
| 				$errmsg = str_replace("<br />", "\\n", $errmsg);
 | |
| 				echo "<script type=\"text/javascript\"> alert('$errmsg');  window.history.go(-1); </script>";
 | |
| 				exit();
 | |
| 				}
 | |
| 
 | |
| 			// If there is no parent_id, the parent is being created, use the username instead
 | |
| 			if ( $new_parent ) {
 | |
| 				$pid = 0;
 | |
| 				}
 | |
| 			else {
 | |
| 				$pid = (int)$parent_id;
 | |
| 				}
 | |
| 
 | |
| 			// Close the iframe and refresh the attachments list in the parent window
 | |
| 			$uri = JFactory::getURI();
 | |
| 			$base_url = $uri->base(true);
 | |
| 			$lang = JRequest::getCmd('lang', '');
 | |
| 			AttachmentsJavascript::closeIframeRefreshAttachments($base_url, $parent_type, $parent_entity, $pid, $lang, $from);
 | |
| 			exit();
 | |
| 			}
 | |
| 
 | |
| 		$this->setRedirect($link, $msg, $msgType);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Edit - display the form for the user to edit an attachment
 | |
| 	 *
 | |
| 	 * @param	string	$key	 The name of the primary key of the URL variable (IGNORED)
 | |
| 	 * @param	string	$urlVar	 The name of the URL variable if different from the primary key. (IGNORED)
 | |
| 	 */
 | |
| 	public function edit($key = null, $urlVar = null)
 | |
| 	{
 | |
| 		// Fail gracefully if the Attachments plugin framework plugin is disabled
 | |
| 		if ( !JPluginHelper::isEnabled('attachments', 'attachments_plugin_framework') ) {
 | |
| 			echo '<h1>' . JText::_('ATTACH_WARNING_ATTACHMENTS_PLUGIN_FRAMEWORK_DISABLED') . '</h1>';
 | |
| 			return;
 | |
| 			}
 | |
| 
 | |
| 		// Access check.
 | |
| 		$user = JFactory::getUser();
 | |
| 		if ( !($user->authorise('core.edit', 'com_attachments') OR
 | |
| 			   $user->authorise('core.edit.own', 'com_attachments')) ) {
 | |
| 			return JError::raiseError(403, JText::_('ATTACH_ERROR_NO_PERMISSION_TO_EDIT') . ' (ERR 132)');
 | |
| 			}
 | |
| 
 | |
| 		$uri = JFactory::getURI();
 | |
| 		$db = JFactory::getDBO();
 | |
| 
 | |
| 		$model		= $this->getModel();
 | |
| 		$attachment = $model->getTable();
 | |
| 
 | |
| 		$cid = JRequest::getVar( 'cid', array(0), '', 'array');
 | |
| 		$change = JRequest::getWord('change', '');
 | |
| 		$change_parent = ($change == 'parent');
 | |
| 		$update_file = JRequest::getWord('change') == 'file';
 | |
| 		$attachment_id = (int)$cid[0];
 | |
| 
 | |
| 		// Get the attachment data
 | |
| 		$attachment = $model->getItem($attachment_id);
 | |
| 
 | |
| 		$from = JRequest::getWord('from');
 | |
| 		$layout = JRequest::getWord('tmpl');
 | |
| 
 | |
| 		// Fix the URL for files
 | |
| 		if ( $attachment->uri_type == 'file' ) {
 | |
| 			$attachment->url = $uri->root(true) . '/' . $attachment->url;
 | |
| 			}
 | |
| 
 | |
| 		$parent_id = $attachment->parent_id;
 | |
| 		$parent_type = $attachment->parent_type;
 | |
| 		$parent_entity = $attachment->parent_entity;
 | |
| 
 | |
| 		// Get the parent handler
 | |
| 		JPluginHelper::importPlugin('attachments');
 | |
| 		$apm = getAttachmentsPluginManager();
 | |
| 		if ( !$apm->attachmentsPluginInstalled($parent_type) ) {
 | |
| 			// Exit if there is no Attachments plugin to handle this parent_type
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_PARENT_TYPE_S', $parent_type) . ' (ERR 133)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 		$entity_info = $apm->getInstalledEntityInfo();
 | |
| 		$parent = $apm->getAttachmentsPlugin($parent_type);
 | |
| 
 | |
| 		// Get the parent info
 | |
| 		$parent_entity_name = JText::_('ATTACH_' . $parent_entity);
 | |
| 		$parent_title = $parent->getTitle($parent_id, $parent_entity);
 | |
| 		if ( !$parent_title ) {
 | |
| 			$parent_title = JText::sprintf('ATTACH_NO_PARENT_S', $parent_entity_name);
 | |
| 			}
 | |
| 		$attachment->parent_entity_name = $parent_entity_name;
 | |
| 		$attachment->parent_title = $parent_title;
 | |
| 		$attachment->parent_published = $parent->isParentPublished($parent_id, $parent_entity);
 | |
| 		$update = JRequest::getWord('update');
 | |
| 		if ( $update && !in_array($update, AttachmentsDefines::$LEGAL_URI_TYPES) ) {
 | |
| 			$update = false;
 | |
| 			}
 | |
| 
 | |
| 		// Set up view for changing parent
 | |
| 		$document = JFactory::getDocument();
 | |
| 		if ( $change_parent ) {
 | |
| 			$js = " 
 | |
| 	   function jSelectParentArticle(id, title) {
 | |
| 		   document.getElementById('parent_id').value = id;
 | |
| 		   document.getElementById('parent_title').value = title;
 | |
| 		   window.parent.SqueezeBox.close();
 | |
| 		   };" ;
 | |
| 			$document->addScriptDeclaration($js);
 | |
| 			}
 | |
| 
 | |
| 		// See if a new type of parent was requested
 | |
| 		$new_parent_type = '';
 | |
| 		$new_parent_entity = 'default';
 | |
| 		$new_parent_entity_name = '';
 | |
| 		if ( $change_parent ) {
 | |
| 			$new_parent_type = JRequest::getCmd('new_parent_type');
 | |
| 			if ( $new_parent_type ) {
 | |
| 				if ( strpos($new_parent_type, '.') ) {
 | |
| 					$parts = explode('.', $new_parent_type);
 | |
| 					$new_parent_type = $parts[0];
 | |
| 					$new_parent_entity = $parts[1];
 | |
| 					}
 | |
| 
 | |
| 				$new_parent = $apm->getAttachmentsPlugin($new_parent_type);
 | |
| 				$new_parent_entity = $new_parent->getCanonicalEntityId($new_parent_entity);
 | |
| 				$new_parent_entity_name = JText::_('ATTACH_' . $new_parent_entity);
 | |
| 
 | |
| 				// Set up the 'select parent' button
 | |
| 				$selpar_label = JText::sprintf('ATTACH_SELECT_ENTITY_S_COLON', $new_parent_entity_name);
 | |
| 				$selpar_btn_text = ' ' . JText::sprintf('ATTACH_SELECT_ENTITY_S', $new_parent_entity_name) . ' ';
 | |
| 				$selpar_btn_tooltip = JText::sprintf('ATTACH_SELECT_ENTITY_S_TOOLTIP', $new_parent_entity_name);
 | |
| 
 | |
| 				$selpar_btn_url = $new_parent->getSelectEntityURL($new_parent_entity);
 | |
| 				$selpar_parent_title = '';
 | |
| 				$selpar_parent_id = '-1';
 | |
| 				}
 | |
| 			else {
 | |
| 				// Set up the 'select parent' button
 | |
| 				$selpar_label = JText::sprintf('ATTACH_SELECT_ENTITY_S_COLON', $attachment->parent_entity_name);
 | |
| 				$selpar_btn_text = ' ' .
 | |
| 					JText::sprintf('ATTACH_SELECT_ENTITY_S', $attachment->parent_entity_name) . ' ';
 | |
| 				$selpar_btn_tooltip = JText::sprintf('ATTACH_SELECT_ENTITY_S_TOOLTIP', $attachment->parent_entity_name);
 | |
| 				$selpar_btn_url = $parent->getSelectEntityURL($parent_entity);
 | |
| 				$selpar_parent_title = $attachment->parent_title;
 | |
| 				$selpar_parent_id = $attachment->parent_id;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		$change_parent_url = $uri->base(true) .
 | |
| 			"/index.php?option=com_attachments&task=attachment.edit&cid[]=$attachment_id&change=parent";
 | |
| 		if ( $layout ) {
 | |
| 			$change_parent_url .= "&from=$from&tmpl=$layout";
 | |
| 			}
 | |
| 
 | |
| 		// Get the component parameters
 | |
| 		jimport('joomla.application.component.helper');
 | |
| 		$params = JComponentHelper::getParams('com_attachments');
 | |
| 
 | |
| 		// Set up the view
 | |
| 		require_once(JPATH_COMPONENT_ADMINISTRATOR.'/views/edit/view.html.php');
 | |
| 		$view = new AttachmentsViewEdit();
 | |
| 
 | |
| 		AttachmentsControllerAttachment::add_view_urls($view, 'update', $parent_id,
 | |
| 													   $parent_type, $attachment_id, $from);
 | |
| 
 | |
| 		// Update change URLS to remember if we want to change the parent
 | |
| 		if ( $change_parent ) {
 | |
| 			$view->change_file_url	 .= "&change=parent&new_parent_type=$new_parent_type";
 | |
| 			$view->change_url_url	 .= "&change=parent&new_parent_type=$new_parent_type";
 | |
| 			$view->normal_update_url .= "&change=parent&new_parent_type=$new_parent_type";
 | |
| 			if ( $new_parent_entity != 'default' ) {
 | |
| 				$view->change_file_url	 .= ".$new_parent_entity";
 | |
| 				$view->change_url_url	 .= ".$new_parent_entity";
 | |
| 				$view->normal_update_url .= ".$new_parent_entity";
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Add a few necessary things for iframe popups
 | |
| 		if ( $layout ) {
 | |
| 			$view->change_file_url	 .= "&from=$from&tmpl=$layout";
 | |
| 			$view->change_url_url	 .= "&from=$from&tmpl=$layout";
 | |
| 			$view->normal_update_url .= "&from=$from&tmpl=$layout";
 | |
| 			}
 | |
| 
 | |
| 		// Suppress the display filename if we are switching from file to url
 | |
| 		$display_name = $attachment->display_name;
 | |
| 		if ( $update && ($update != $attachment->uri_type) ) {
 | |
| 			$attachment->display_name = '';
 | |
| 			}
 | |
| 
 | |
| 		// Handle iframe popup requests
 | |
| 		$known_froms = $parent->knownFroms();
 | |
| 		$in_popup = false;
 | |
| 		$save_url = 'index.php';
 | |
| 		if ( in_array( $from, $known_froms ) ) {
 | |
| 			$in_popup = true;
 | |
| 			AttachmentsJavascript::setupJavascript();
 | |
| 			$save_url = 'index.php?option=com_attachments&task=attachment.save';
 | |
| 			}
 | |
| 		$view->save_url = $save_url;
 | |
| 		$view->in_popup = $in_popup;
 | |
| 
 | |
| 		// Set up the access field
 | |
| 		require_once(JPATH_COMPONENT_ADMINISTRATOR.'/models/fields/accesslevels.php');
 | |
| 		$view->access_level_tooltip = JText::_('JFIELD_ACCESS_LABEL') . '::' . JText::_('JFIELD_ACCESS_DESC');
 | |
| 		$view->access_level = JFormFieldAccessLevels::getAccessLevels('access', 'access', $attachment->access);
 | |
| 
 | |
| 		// Set up view info
 | |
| 		$view->update			 = $update;
 | |
| 		$view->change_parent	 = $change_parent;
 | |
| 		$view->new_parent_type	 = $new_parent_type;
 | |
| 		$view->new_parent_entity = $new_parent_entity;
 | |
| 		$view->change_parent_url = $change_parent_url;
 | |
| 		$view->entity_info		 = $entity_info;
 | |
| 		$view->may_publish		 = $parent->userMayChangeAttachmentState($parent_id, $parent_entity, $user->id);
 | |
| 
 | |
| 		$view->from		  = $from;
 | |
| 		$view->option	  = $this->option;
 | |
| 
 | |
| 		$view->attachment = $attachment;
 | |
| 
 | |
| 		$view->parent	  = $parent;
 | |
| 		$view->params	  = $params;
 | |
| 
 | |
| 		// Set up for selecting a new type of parent
 | |
| 		if ( $change_parent ) {
 | |
| 			$view->selpar_label =		$selpar_label;
 | |
| 			$view->selpar_btn_text =		$selpar_btn_text;
 | |
| 			$view->selpar_btn_tooltip =		$selpar_btn_tooltip;
 | |
| 			$view->selpar_btn_url =			$selpar_btn_url;
 | |
| 			$view->selpar_parent_title =  $selpar_parent_title;
 | |
| 			$view->selpar_parent_id =	$selpar_parent_id;
 | |
| 			}
 | |
| 
 | |
| 		$view->display();
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Save an attachment (from editing)
 | |
| 	 */
 | |
| 	public function save($key = null, $urlVar = null)
 | |
| 	{
 | |
| 		// Check for request forgeries
 | |
| 		JSession::checkToken() or die(JText::_('JINVALID_TOKEN'));
 | |
| 
 | |
| 		// Access check.
 | |
| 		$user = JFactory::getUser();
 | |
| 		if ( !($user->authorise('core.edit', 'com_attachments') OR
 | |
| 			   $user->authorise('core.edit.own', 'com_attachments')) ) {
 | |
| 			return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR') . ' (ERR 134)');
 | |
| 			}
 | |
| 
 | |
| 		$model		= $this->getModel();
 | |
| 		$attachment = $model->getTable();
 | |
| 
 | |
| 		// Make sure the article ID is valid
 | |
| 		$attachment_id = JRequest::getInt('id');
 | |
| 		if ( !$attachment->load($attachment_id) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_CANNOT_UPDATE_ATTACHMENT_INVALID_ID_N', $id) . ' (ERR 135)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Note the old uri type
 | |
| 		$old_uri_type = $attachment->uri_type;
 | |
| 
 | |
| 		// Get the data from the form
 | |
| 		if (!$attachment->bind(JRequest::get('post'))) {
 | |
| 			$errmsg = $attachment->getError() . ' (ERR 136)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Get the parent handler for this attachment
 | |
| 		JPluginHelper::importPlugin('attachments');
 | |
| 		$apm = getAttachmentsPluginManager();
 | |
| 		if ( !$apm->attachmentsPluginInstalled($attachment->parent_type) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_PARENT_TYPE_S', $attachment->parent_type) . ' (ERR 135B)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 		$parent = $apm->getAttachmentsPlugin($attachment->parent_type);
 | |
| 
 | |
| 		// See if the parent ID has been changed
 | |
| 		$parent_changed = false;
 | |
| 		$old_parent_id = JRequest::getString('old_parent_id');
 | |
| 		if ( $old_parent_id == '' ) {
 | |
| 			$old_parent_id = null;
 | |
| 			}
 | |
| 		else {
 | |
| 			$old_parent_id = JRequest::getInt('old_parent_id');
 | |
| 			}
 | |
| 
 | |
| 		// Handle new parents (in process of creation)
 | |
| 		if ($parent->newParent($attachment)) {
 | |
| 			$attachment->parent_id = null;
 | |
| 			}
 | |
| 
 | |
| 		// Deal with updating an orphaned attachment
 | |
| 		if ( ($old_parent_id == null) && is_numeric($attachment->parent_id) ) {
 | |
| 			$parent_changed = true;
 | |
| 			}
 | |
| 
 | |
| 		// Check for normal parent changes
 | |
| 		if ( $old_parent_id && ( $attachment->parent_id != $old_parent_id ) ) {
 | |
| 			$parent_changed = true;
 | |
| 			}
 | |
| 
 | |
| 		// See if we are updating a file or URL
 | |
| 		$new_uri_type = JRequest::getWord('update');
 | |
| 		if ( $new_uri_type && !in_array( $new_uri_type, AttachmentsDefines::$LEGAL_URI_TYPES ) ) {
 | |
| 			// Make sure only legal values are entered
 | |
| 			$new_uri_type = '';
 | |
| 			}
 | |
| 
 | |
| 		// See if the parent type has changed
 | |
| 		$new_parent_type = JRequest::getCmd('new_parent_type');
 | |
| 		$new_parent_entity = JRequest::getCmd('new_parent_entity');
 | |
| 		$old_parent_type = JRequest::getCmd('old_parent_type');
 | |
| 		$old_parent_entity = JRequest::getCmd('old_parent_entity');
 | |
| 		if ( ($new_parent_type &&
 | |
| 			  (($new_parent_type != $old_parent_type) ||
 | |
| 			   ($new_parent_entity != $old_parent_entity))) ) {
 | |
| 			$parent_changed = true;
 | |
| 			}
 | |
| 
 | |
| 		// If the parent has changed, make sure they have selected the new parent
 | |
| 		if ( $parent_changed && ( (int)$attachment->parent_id == -1 ) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_MUST_SELECT_PARENT');
 | |
| 			echo "<script type=\"text/javascript\"> alert('$errmsg'); window.history.go(-1); </script>\n";
 | |
| 			exit();
 | |
| 			}
 | |
| 
 | |
| 		// If the parent has changed, switch the parent, rename files if necessary
 | |
| 		if ( $parent_changed ) {
 | |
| 
 | |
| 			if ( ($new_uri_type == 'url') && ($old_uri_type == 'file') ) {
 | |
| 				// If we are changing parents and converting from file to URL, delete the old file
 | |
| 				jimport('joomla.filesystem.file');
 | |
| 
 | |
| 				// Load the attachment so we can get its filename_sys
 | |
| 				$db = JFactory::getDBO();
 | |
| 				$query = $db->getQuery(true);
 | |
| 				$query->select('filename_sys, id')->from('#__attachments')->where('id='.(int)$attachment->id);
 | |
| 				$db->setQuery($query, 0, 1);
 | |
| 				$filename_sys = $db->loadResult();
 | |
| 				JFile::delete($filename_sys);
 | |
| 				AttachmentsHelper::clean_directory($filename_sys);
 | |
| 				}
 | |
| 			else {
 | |
| 				// Otherwise switch the file/url to the new parent
 | |
| 				if ( $old_parent_id == null ) {
 | |
| 					$old_parent_id = 0;
 | |
| 					// NOTE: When attaching a file to an article during creation,
 | |
| 					//		 the article_id (parent_id) is initially null until
 | |
| 					//		 the article is saved (at that point the
 | |
| 					//		 parent_id/article_id updated).	 If the attachment is
 | |
| 					//		 added and creating the article is canceled, the
 | |
| 					//		 attachment exists but is orhpaned since it does not
 | |
| 					//		 have a parent.	 It's article_id is null, but it is
 | |
| 					//		 saved in directory as if its article_id is 0:
 | |
| 					//		 article/0/file.txt.  Therefore, if the parent has
 | |
| 					//		 changed, we pretend the old_parent_id=0 for file
 | |
| 					//		 renaming/moving.
 | |
| 					}
 | |
| 
 | |
| 				$error_msg = AttachmentsHelper::switch_parent($attachment, $old_parent_id, $attachment->parent_id,
 | |
| 															  $new_parent_type, $new_parent_entity);
 | |
| 				if ( $error_msg != '' ) {
 | |
| 					$errmsg = JText::_($error_msg) . ' (ERR 137)';
 | |
| 					$link = 'index.php?option=com_attachments';
 | |
| 					$this->setRedirect($link, $errmsg, 'error');
 | |
| 					return;
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Update parent type/entity, if needed
 | |
| 		if ( $new_parent_type && ($new_parent_type != $old_parent_type) ) {
 | |
| 			$attachment->parent_type = $new_parent_type;
 | |
| 			}
 | |
| 		if ( $new_parent_type && ($new_parent_entity != $old_parent_entity) ) {
 | |
| 			$attachment->parent_entity = $new_parent_entity;
 | |
| 			}
 | |
| 
 | |
| 		// Get the article/parent handler
 | |
| 		if ( $new_parent_type ) {
 | |
| 			$parent_type = $new_parent_type;
 | |
| 			$parent_entity = $new_parent_entity;
 | |
| 			}
 | |
| 		else {
 | |
| 			$parent_type = JRequest::getCmd('parent_type', 'com_content');
 | |
| 			$parent_entity = JRequest::getCmd('parent_entity', 'default');
 | |
| 			}
 | |
| 		$parent = $apm->getAttachmentsPlugin($parent_type);
 | |
| 		$parent_entity = $parent->getCanonicalEntityId($parent_entity);
 | |
| 
 | |
| 		// Get the title of the article/parent
 | |
| 		$new_parent = JRequest::getBool('new_parent', false);
 | |
| 		$parent->new = $new_parent;
 | |
| 		if ( $new_parent ) {
 | |
| 			$attachment->parent_id = null;
 | |
| 			$parent->title = '';
 | |
| 			}
 | |
| 		else {
 | |
| 			$parent->title = $parent->getTitle($attachment->parent_id, $parent_entity);
 | |
| 			}
 | |
| 
 | |
| 		// Check to make sure the user has permissions to edit the attachment
 | |
| 		if ( !$parent->userMayEditAttachment($attachment) ) {
 | |
| 			// ??? Add better error message
 | |
| 			return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR') . ' (ERR 139)');
 | |
| 			}
 | |
| 
 | |
| 		// Double-check to see if the URL changed
 | |
| 		$old_url = JRequest::getString('old_url');
 | |
| 		if ( !$new_uri_type && $old_url && ($old_url != $attachment->url) ) {
 | |
| 			$new_uri_type = 'url';
 | |
| 			}
 | |
| 
 | |
| 		// If this is a URL, get settings
 | |
| 		$verify_url = false;
 | |
| 		$relative_url = false;
 | |
| 		if ( $new_uri_type == 'url' ) {
 | |
| 			// See if we need to verify the URL (if applicable)
 | |
| 			if ( JRequest::getWord('verify_url') == 'verify' ) {
 | |
| 				$verify_url = true;
 | |
| 				}
 | |
| 			// Allow relative URLs?
 | |
| 			if ( JRequest::getWord('url_relative') == 'relative' ) {
 | |
| 				$relative_url = true;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		// Compute the update time
 | |
| 		$now = JFactory::getDate();
 | |
| 
 | |
| 		// Update create/modify info
 | |
| 		$attachment->modified_by = $user->get('id');
 | |
| 		$attachment->modified = $now->toSql();
 | |
| 
 | |
| 		// Upload new file/url and create/update the attachment
 | |
| 		$msg = null;
 | |
| 		$msgType = 'message';
 | |
| 		if ( $new_uri_type == 'file' ) {
 | |
| 
 | |
| 			// Upload a new file
 | |
| 			$result = AttachmentsHelper::upload_file($attachment, $parent, $attachment_id, 'update');
 | |
| 			if ( is_object($result) ) {
 | |
| 				$msg = $result->error_msg . ' (ERR 140)';
 | |
| 				$msgType = 'error';
 | |
| 				}
 | |
| 			else {
 | |
| 				$msg = $result;
 | |
| 				}
 | |
| 			// NOTE: store() is not needed if upload_file() is called since it does it
 | |
| 			}
 | |
| 
 | |
| 		elseif ( $new_uri_type == 'url' ) {
 | |
| 
 | |
| 			// Upload/add the new URL
 | |
| 			$result = AttachmentsHelper::add_url($attachment, $parent, $verify_url, $relative_url,
 | |
| 												 $old_uri_type, $attachment_id);
 | |
| 
 | |
| 			// NOTE: store() is not needed if add_url() is called since it does it
 | |
| 			if ( is_object($result) ) {
 | |
| 				$msg = $result->error_msg. ' (ERR 141)';
 | |
| 				$msgType = 'error';
 | |
| 				}
 | |
| 			else {
 | |
| 				$msg = $result;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		else {
 | |
| 
 | |
| 			// Extra handling for checkboxes for URLs
 | |
| 			if ( $attachment->uri_type == 'url' ) {
 | |
| 
 | |
| 				// Update the url_relative field
 | |
| 				$attachment->url_relative = $relative_url;
 | |
| 				$attachment->url_verify = $verify_url;
 | |
| 				}
 | |
| 
 | |
| 			// Remove any extraneous fields
 | |
| 			if (isset($attachment->parent_entity_name)) {
 | |
| 				unset($attachment->parent_entity_name);
 | |
| 				}
 | |
| 
 | |
| 			// Save the updated attachment info
 | |
| 			if ( !$attachment->store() ) {
 | |
| 				$errmsg = $attachment->getError() . ' (ERR 142)';
 | |
| 				JError::raiseError(500, $errmsg);
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 		switch ( $this->getTask() )	 {
 | |
| 
 | |
| 		case 'apply':
 | |
| 			if ( !$msg ) {
 | |
| 				$msg = JText::_('ATTACH_CHANGES_TO_ATTACHMENT_SAVED');
 | |
| 				}
 | |
| 			$link = 'index.php?option=com_attachments&task=attachment.edit&cid[]=' . (int)$attachment->id;
 | |
| 			break;
 | |
| 
 | |
| 		case 'save':
 | |
| 		default:
 | |
| 			if ( !$msg ) {
 | |
| 				$msg = JText::_('ATTACH_ATTACHMENT_UPDATED');
 | |
| 				}
 | |
| 			$link = 'index.php?option=com_attachments';
 | |
| 			break;
 | |
| 			}
 | |
| 
 | |
| 		// If invoked from an iframe popup, close it and refresh the attachments list
 | |
| 		$from = JRequest::getWord('from');
 | |
| 		$known_froms = $parent->knownFroms();
 | |
| 		if ( in_array( $from, $known_froms ) ) {
 | |
| 
 | |
| 			// If there has been a problem, alert the user and redisplay
 | |
| 			if ( $msgType == 'error' ) {
 | |
| 				$errmsg = $msg;
 | |
| 				if ( DIRECTORY_SEPARATOR == "\\" ) {
 | |
| 					// Fix filename on Windows system so alert can display it
 | |
| 					$errmsg = str_replace(DIRECTORY_SEPARATOR, "\\\\", $errmsg);
 | |
| 					}
 | |
| 				$errmsg = str_replace("'", "\'", $errmsg);
 | |
| 				$errmsg = str_replace("<br />", "\\n", $errmsg);
 | |
| 				echo "<script type=\"text/javascript\"> alert('$errmsg');  window.history.go(-1); </script>";
 | |
| 				exit();
 | |
| 				}
 | |
| 
 | |
| 			// Can only refresh the old parent
 | |
| 			if ( $parent_changed ) {
 | |
| 				$parent_type = $old_parent_type;
 | |
| 				$parent_entity = $old_parent_entity;
 | |
| 				$parent_id = $old_parent_id;
 | |
| 				}
 | |
| 			else {
 | |
| 				$parent_id = (int)$attachment->parent_id;
 | |
| 				}
 | |
| 
 | |
| 			// Close the iframe and refresh the attachments list in the parent window
 | |
| 			$uri = JFactory::getURI();
 | |
| 			$base_url = $uri->base(true);
 | |
| 			$lang = JRequest::getCmd('lang', '');
 | |
| 			AttachmentsJavascript::closeIframeRefreshAttachments($base_url, $parent_type, $parent_entity, $parent_id, $lang, $from);
 | |
| 			exit();
 | |
| 			}
 | |
| 
 | |
| 		$this->setRedirect($link, $msg, $msgType);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Add the save/upload/update urls to the view
 | |
| 	 *
 | |
| 	 * @param &object &$view the view to add the urls to
 | |
| 	 * @param string $save_type type of save ('file' or 'url')
 | |
| 	 * @param int $parent_id id for the parent
 | |
| 	 $ @param string $parent_type type of parent (eg, com_content)
 | |
| 	 * @param int $attachment_id id for the attachment
 | |
| 	 * @param string $from the from ($option) value
 | |
| 	 */
 | |
| 	private function add_view_urls(&$view, $save_type, $parent_id, $parent_type, $attachment_id, $from)
 | |
| 	{
 | |
| 		// Construct the url to save the form
 | |
| 		$url_base = "index.php?option=com_attachments";
 | |
| 
 | |
| 		// $template = '&tmpl=component';
 | |
| 		$template = '';
 | |
| 		$add_task  = 'attachment.add';
 | |
| 		$edit_task = 'attachment.edit';
 | |
| 		// $idinfo = "&id=$attachment_id";
 | |
| 		$idinfo = "&cid[]=$attachment_id";
 | |
| 		$parentinfo = '';
 | |
| 		if ( $parent_id ) {
 | |
| 			$parentinfo = "&parent_id=$parent_id&parent_type=$parent_type";
 | |
| 			}
 | |
| 
 | |
| 		$save_task = 'attachment.save';
 | |
| 		if ( $save_type == 'upload' ) {
 | |
| 			$save_task = 'attachment.saveNew';
 | |
| 			}
 | |
| 
 | |
| 		// Handle the main save URL
 | |
| 		$save_url = $url_base . "&task=" . $save_task . $template;
 | |
| 		if ( $from == 'closeme') {
 | |
| 			// Keep track of what are supposed to do after saving
 | |
| 			$save_url .= "&from=closeme";
 | |
| 			}
 | |
| 		$view->save_url = JRoute::_($save_url);
 | |
| 
 | |
| 		// Construct the URL to upload a URL instead of a file
 | |
| 		if ( $save_type == 'upload' ) {
 | |
| 			$upload_file_url = $url_base . "&task=$add_task&uri=file" . $parentinfo . $template;
 | |
| 			$upload_url_url	 = $url_base . "&task=$add_task&uri=url" . $parentinfo . $template;
 | |
| 
 | |
| 			// Keep track of what are supposed to do after saving
 | |
| 			if ( $from == 'closeme') {
 | |
| 				$upload_file_url .= "&from=closeme";
 | |
| 				$upload_url_url .= "&from=closeme";
 | |
| 				}
 | |
| 
 | |
| 			// Add the URL
 | |
| 			$view->upload_file_url = JRoute::_($upload_file_url);
 | |
| 			$view->upload_url_url  = JRoute::_($upload_url_url);
 | |
| 			}
 | |
| 
 | |
| 		elseif ( $save_type == 'update' ) {
 | |
| 			$change_url = $url_base . "&task=$edit_task" . $idinfo;
 | |
| 			$change_file_url =	$change_url . "&update=file" . $template;
 | |
| 			$change_url_url =  $change_url . "&update=url" . $template;
 | |
| 			$normal_update_url =  $change_url . $template;
 | |
| 
 | |
| 			// Keep track of what are supposed to do after saving
 | |
| 			if ( $from == 'closeme') {
 | |
| 				$change_file_url .= "&from=closeme";
 | |
| 				$change_url_url .= "&from=closeme";
 | |
| 				$normal_update_url .= "&from=closeme";
 | |
| 				}
 | |
| 
 | |
| 			// Add the URLs
 | |
| 			$view->change_file_url	 = JRoute::_($change_file_url);
 | |
| 			$view->change_url_url	 = JRoute::_($change_url_url);
 | |
| 			$view->normal_update_url = JRoute::_($normal_update_url);
 | |
| 			}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Download an attachment
 | |
| 	 */
 | |
| 	public function download()
 | |
| 	{
 | |
| 		// Get the attachment ID
 | |
| 		$id = JRequest::getInt('id');
 | |
| 		if ( !is_numeric($id) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_INVALID_ATTACHMENT_ID_N', $id) . ' (ERR 143)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// NOTE: AttachmentsHelper::download_attachment($id) checks access permission
 | |
| 		AttachmentsHelper::download_attachment($id);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Put up a dialog to double-check before deleting an attachment
 | |
| 	 */
 | |
| 	public function delete_warning()
 | |
| 	{
 | |
| 		// Access check.
 | |
| 		if ( !( JFactory::getUser()->authorise('core.delete', 'com_attachments') OR
 | |
| 				JFactory::getUser()->authorise('attachments.delete.own', 'com_attachments') ) ) {
 | |
| 			return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR') . ' (ERR 144)');
 | |
| 			}
 | |
| 
 | |
| 		// Make sure we have a valid attachment ID
 | |
| 		$attachment_id = JRequest::getInt('id', null);
 | |
| 		if ( is_numeric($attachment_id) ) {
 | |
| 			$attachment_id = (int)$attachment_id;
 | |
| 			}
 | |
| 		else {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_CANNOT_DELETE_INVALID_ATTACHMENT_ID_N', $attachment_id) . ' (ERR 145)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Load the attachment
 | |
| 		$model		= $this->getModel();
 | |
| 		$attachment = $model->getTable();
 | |
| 
 | |
| 		// Make sure the article ID is valid
 | |
| 		$attachment_id = JRequest::getInt('id');
 | |
| 		if ( !$attachment->load($attachment_id) ) {
 | |
| 			$errmsg = JText::sprintf('ATTACH_ERROR_CANNOT_DELETE_INVALID_ATTACHMENT_ID_N', $attachment_id) . ' (ERR 146)';
 | |
| 			JError::raiseError(500, $errmsg);
 | |
| 			}
 | |
| 
 | |
| 		// Set up the view
 | |
| 		require_once(JPATH_COMPONENT_ADMINISTRATOR.'/views/warning/view.html.php');
 | |
| 		$view = new AttachmentsViewWarning( );
 | |
| 		$view->parent_id = $attachment_id;
 | |
| 		$view->option = JRequest::getCmd('option');
 | |
| 		$view->from = JRequest::getWord('from');
 | |
| 		$view->tmpl = JRequest::getWord('tmpl');
 | |
| 
 | |
| 		// Prepare for the query
 | |
| 		$view->warning_title = JText::_('ATTACH_WARNING');
 | |
| 		if ( $attachment->uri_type == 'file' ) {
 | |
| 			$msg = "( {$attachment->filename} )";
 | |
| 			}
 | |
| 		else {
 | |
| 			$msg = "( {$attachment->url} )";
 | |
| 			}
 | |
| 		$view->warning_question = JText::_('ATTACH_REALLY_DELETE_ATTACHMENT') . '<br/>' . $msg;
 | |
| 		$view->action_button_label = JText::_('ATTACH_DELETE');
 | |
| 
 | |
| 		$view->action_url = "index.php?option=com_attachments&task=attachments.delete&cid[]=" . (int)$attachment_id;
 | |
| 		$view->action_url .= "&from=" . $view->from;
 | |
| 
 | |
| 		$view->display();
 | |
| 	}
 | |
| 
 | |
| 
 | |
| }
 |