261 lines
6.8 KiB
PHP
261 lines
6.8 KiB
PHP
<?php
|
|
/**
|
|
* Attachments component
|
|
*
|
|
* @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');
|
|
|
|
/**
|
|
* Build the route
|
|
*
|
|
* @param &object &$query the query to construct
|
|
*
|
|
* @return the segments
|
|
*/
|
|
function AttachmentsBuildRoute(&$query)
|
|
{
|
|
// Syntax to upload an attachment:
|
|
// index.php?option=com_attachments&task=upload&article_id=44
|
|
// --> index.php/attachments/upload/article/44
|
|
// or:
|
|
// index.php?option=com_attachments&task=upload&parent_id=44
|
|
// --> index.php/attachments/upload/parent/44
|
|
|
|
// Syntax to delete an attachment:
|
|
// index.php?option=com_attachments&task=delete&id=4&article_id=44&from=article
|
|
// --> /attachments/delete/4/artcile/44
|
|
// --> /attachments/delete/4/article/44/from/article
|
|
// or:
|
|
// index.php?option=com_attachments&task=delete&id=4&parent_id=44&from=parent
|
|
// --> /attachments/delete/4/parent/44
|
|
// --> /attachments/delete/4/parent/44/from/parent
|
|
|
|
// Note: The 'from' clause indicates which view the item was called from (eg, article or frontpage)
|
|
|
|
$segments = array();
|
|
|
|
// get a menu item based on Itemid or currently active
|
|
$app = JFactory::getApplication();
|
|
$menu = $app->getMenu();
|
|
|
|
// we need a menu item. Either the one specified in the query, or the current active one if none specified
|
|
if (empty($query['Itemid'])) {
|
|
$menuItem = $menu->getActive();
|
|
}
|
|
else {
|
|
$menuItem = $menu->getItem($query['Itemid']);
|
|
}
|
|
|
|
if ( isset($query['task']) ) {
|
|
$task = $query['task'];
|
|
$segments[] = $task;
|
|
unset($query['task']);
|
|
}
|
|
|
|
if ( isset($query['id']) ) {
|
|
if ( $task == 'update' ) {
|
|
$segments[] = 'id';
|
|
}
|
|
$segments[] = $query['id'];
|
|
unset($query['id']);
|
|
}
|
|
|
|
if ( isset($query['article_id']) ) {
|
|
$segments[] = 'article';
|
|
$segments[] = $query['article_id'];
|
|
unset($query['article_id']);
|
|
}
|
|
|
|
if ( isset($query['parent_id']) ) {
|
|
$segments[] = 'parent';
|
|
$segments[] = $query['parent_id'];
|
|
unset($query['parent_id']);
|
|
}
|
|
|
|
if ( isset($query['parent_type']) ) {
|
|
$segments[] = 'parent_type';
|
|
$segments[] = $query['parent_type'];
|
|
unset($query['parent_type']);
|
|
}
|
|
|
|
if ( isset($query['parent_entity']) ) {
|
|
$segments[] = 'parent_entity';
|
|
$segments[] = $query['parent_entity'];
|
|
unset($query['parent_entity']);
|
|
}
|
|
|
|
if ( isset($query['controller']) ) {
|
|
$segments[] = 'controller';
|
|
$segments[] = $query['controller'];
|
|
unset($query['controller']);
|
|
}
|
|
|
|
if ( isset($query['uri']) ) {
|
|
$segments[] = 'uri';
|
|
$segments[] = $query['uri'];
|
|
unset($query['uri']);
|
|
}
|
|
|
|
if ( isset($query['update']) ) {
|
|
$segments[] = 'update';
|
|
$segments[] = $query['update'];
|
|
unset($query['update']);
|
|
}
|
|
|
|
if ( isset($query['from']) ) {
|
|
$segments[] = 'from';
|
|
$segments[] = $query['from'];
|
|
unset($query['from']);
|
|
}
|
|
|
|
if ( isset($query['tmpl']) ) {
|
|
$segments[] = 'tmpl';
|
|
$segments[] = $query['tmpl'];
|
|
unset($query['tmpl']);
|
|
}
|
|
|
|
return $segments;
|
|
}
|
|
|
|
/**
|
|
* Parse the route
|
|
*
|
|
* @param array $segments
|
|
*
|
|
* @return the variables parsed from the route
|
|
*/
|
|
function AttachmentsParseRoute($segments)
|
|
{
|
|
$vars = array();
|
|
|
|
// NOTE: The task=taskname pair must ALWAYS on the right after opton=com_attachments.
|
|
// if a controller is specified, it must appear later in the URL.
|
|
|
|
$task = $segments[0];
|
|
$vars['task'] = $task;
|
|
$i = 1;
|
|
|
|
// Handle the the main keyword clause that have an id immediately following them
|
|
if ( ($task == 'delete') || ($task == 'delete_warning') || ($task == 'download') ) {
|
|
$vars['id'] = $segments[$i];
|
|
$i = 2;
|
|
}
|
|
|
|
// Handle the other clauses
|
|
while ( $i < count($segments) ) {
|
|
|
|
// Look for article IDs
|
|
if ( ($segments[$i] == 'article') && ($segments[$i-1] != 'from') ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'article' without a following article ID!<br />";
|
|
exit;
|
|
}
|
|
$vars['article_id'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for parent ID clause
|
|
if ( (($segments[$i] == 'parent') || ($segments[$i] == 'parent_id')) && ($segments[$i-1] != 'from') ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'parent' without a following parent ID!<br />";
|
|
exit;
|
|
}
|
|
$vars['parent_id'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'parent_type' clause
|
|
if ( $segments[$i] == 'parent_type' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'parent_type' without the actual type!<br />";
|
|
exit;
|
|
}
|
|
$vars['parent_type'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'parent_entity' clause
|
|
if ( $segments[$i] == 'parent_entity' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'parent_entity' without the actual type!<br />";
|
|
exit;
|
|
}
|
|
$vars['parent_entity'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'controller' clause
|
|
if ( $segments[$i] == 'controller' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'controller' without controller type!<br />";
|
|
exit;
|
|
}
|
|
$vars['controller'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'id' clause
|
|
if ( $segments[$i] == 'id' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'id' without any info!<br />";
|
|
exit;
|
|
}
|
|
$vars['id'] = $segments[$i+1];
|
|
}
|
|
|
|
// Look for 'uri' clause
|
|
if ( $segments[$i] == 'uri' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'uri' without any info!<br />";
|
|
exit;
|
|
}
|
|
$vars['uri'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'update' clause
|
|
if ( $segments[$i] == 'update' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'update' without any info!<br />";
|
|
exit;
|
|
}
|
|
$vars['update'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'from' clause
|
|
if ( $segments[$i] == 'from' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'from' without any info!<br />";
|
|
exit;
|
|
}
|
|
$vars['from'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
// Look for 'tmpl' clause
|
|
if ( $segments[$i] == 'tmpl' ) {
|
|
if ( $i+1 >= count($segments) ) {
|
|
echo "<br />Error in AttachmentsParseRoute: Found 'tmpl' without any template name!<br />";
|
|
exit;
|
|
}
|
|
$vars['tmpl'] = $segments[$i+1];
|
|
$i++;
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
|
|
return $vars;
|
|
}
|
|
|
|
?>
|