Llewellyn van der Merwe
e726e758b4
Add the new donation information to README. Update the Repo URLs to point to Llewellyn's repo instead. Improve the date methods in the Helper class. (JCB improvement) Add a fix to the import export methods. (JCB improvement)
337 lines
9.4 KiB
PHP
337 lines
9.4 KiB
PHP
<?php
|
|
/*-------------------------------------------------------------------------------------------------------------| www.vdm.io |------/
|
|
____ ____ __ __ __
|
|
/\ _`\ /\ _`\ __ /\ \__ __/\ \ /\ \__
|
|
\ \,\L\_\ __ _ __ ___ ___ ___ ___ \ \ \/\ \/\_\ ____\ \ ,_\ _ __ /\_\ \ \____ __ __\ \ ,_\ ___ _ __
|
|
\/_\__ \ /'__`\/\`'__\/' __` __`\ / __`\ /' _ `\ \ \ \ \ \/\ \ /',__\\ \ \/ /\`'__\/\ \ \ '__`\/\ \/\ \\ \ \/ / __`\/\`'__\
|
|
/\ \L\ \/\ __/\ \ \/ /\ \/\ \/\ \/\ \L\ \/\ \/\ \ \ \ \_\ \ \ \/\__, `\\ \ \_\ \ \/ \ \ \ \ \L\ \ \ \_\ \\ \ \_/\ \L\ \ \ \/
|
|
\ `\____\ \____\\ \_\ \ \_\ \_\ \_\ \____/\ \_\ \_\ \ \____/\ \_\/\____/ \ \__\\ \_\ \ \_\ \_,__/\ \____/ \ \__\ \____/\ \_\
|
|
\/_____/\/____/ \/_/ \/_/\/_/\/_/\/___/ \/_/\/_/ \/___/ \/_/\/___/ \/__/ \/_/ \/_/\/___/ \/___/ \/__/\/___/ \/_/
|
|
|
|
/------------------------------------------------------------------------------------------------------------------------------------/
|
|
|
|
@version 2.0.x
|
|
@created 22nd October, 2015
|
|
@package Sermon Distributor
|
|
@subpackage series.php
|
|
@author Llewellyn van der Merwe <https://www.vdm.io/>
|
|
@copyright Copyright (C) 2015. All Rights Reserved
|
|
@license GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
|
|
|
A sermon distributor that links to Dropbox.
|
|
|
|
/----------------------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
// No direct access to this file
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
use Joomla\Utilities\ArrayHelper;
|
|
|
|
/**
|
|
* Series Controller
|
|
*/
|
|
class SermondistributorControllerSeries extends JControllerForm
|
|
{
|
|
/**
|
|
* Current or most recently performed task.
|
|
*
|
|
* @var string
|
|
* @since 12.2
|
|
* @note Replaces _task.
|
|
*/
|
|
protected $task;
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @param array $config A named array of configuration variables.
|
|
*
|
|
* @since 1.6
|
|
*/
|
|
public function __construct($config = array())
|
|
{
|
|
$this->view_list = 'Series_list'; // safeguard for setting the return view listing to the main view.
|
|
parent::__construct($config);
|
|
}
|
|
|
|
/**
|
|
* Method override to check if you can add a new record.
|
|
*
|
|
* @param array $data An array of input data.
|
|
*
|
|
* @return boolean
|
|
*
|
|
* @since 1.6
|
|
*/
|
|
protected function allowAdd($data = array())
|
|
{
|
|
// Get user object.
|
|
$user = JFactory::getUser();
|
|
// Access check.
|
|
$access = $user->authorise('series.access', 'com_sermondistributor');
|
|
if (!$access)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// In the absense of better information, revert to the component permissions.
|
|
return $user->authorise('series.create', $this->option);
|
|
}
|
|
|
|
/**
|
|
* Method override to check if you can edit an existing record.
|
|
*
|
|
* @param array $data An array of input data.
|
|
* @param string $key The name of the key for the primary key.
|
|
*
|
|
* @return boolean
|
|
*
|
|
* @since 1.6
|
|
*/
|
|
protected function allowEdit($data = array(), $key = 'id')
|
|
{
|
|
// get user object.
|
|
$user = JFactory::getUser();
|
|
// get record id.
|
|
$recordId = (int) isset($data[$key]) ? $data[$key] : 0;
|
|
|
|
|
|
// Access check.
|
|
$access = ($user->authorise('series.access', 'com_sermondistributor.series.' . (int) $recordId) && $user->authorise('series.access', 'com_sermondistributor'));
|
|
if (!$access)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if ($recordId)
|
|
{
|
|
// The record has been set. Check the record permissions.
|
|
$permission = $user->authorise('series.edit', 'com_sermondistributor.series.' . (int) $recordId);
|
|
if (!$permission)
|
|
{
|
|
if ($user->authorise('series.edit.own', 'com_sermondistributor.series.' . $recordId))
|
|
{
|
|
// Now test the owner is the user.
|
|
$ownerId = (int) isset($data['created_by']) ? $data['created_by'] : 0;
|
|
if (empty($ownerId))
|
|
{
|
|
// Need to do a lookup from the model.
|
|
$record = $this->getModel()->getItem($recordId);
|
|
|
|
if (empty($record))
|
|
{
|
|
return false;
|
|
}
|
|
$ownerId = $record->created_by;
|
|
}
|
|
|
|
// If the owner matches 'me' then allow.
|
|
if ($ownerId == $user->id)
|
|
{
|
|
if ($user->authorise('series.edit.own', 'com_sermondistributor'))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
// Since there is no permission, revert to the component permissions.
|
|
return $user->authorise('series.edit', $this->option);
|
|
}
|
|
|
|
/**
|
|
* Gets the URL arguments to append to an item redirect.
|
|
*
|
|
* @param integer $recordId The primary key id for the item.
|
|
* @param string $urlVar The name of the URL variable for the id.
|
|
*
|
|
* @return string The arguments to append to the redirect URL.
|
|
*
|
|
* @since 1.6
|
|
*/
|
|
protected function getRedirectToItemAppend($recordId = null, $urlVar = 'id')
|
|
{
|
|
// get the referral options (old method use return instead see parent)
|
|
$ref = $this->input->get('ref', 0, 'string');
|
|
$refid = $this->input->get('refid', 0, 'int');
|
|
|
|
// get redirect info.
|
|
$append = parent::getRedirectToItemAppend($recordId, $urlVar);
|
|
|
|
// set the referral options
|
|
if ($refid && $ref)
|
|
{
|
|
$append = '&ref=' . (string)$ref . '&refid='. (int)$refid . $append;
|
|
}
|
|
elseif ($ref)
|
|
{
|
|
$append = '&ref='. (string)$ref . $append;
|
|
}
|
|
|
|
return $append;
|
|
}
|
|
|
|
/**
|
|
* Method to run batch operations.
|
|
*
|
|
* @param object $model The model.
|
|
*
|
|
* @return boolean True if successful, false otherwise and internal error is set.
|
|
*
|
|
* @since 2.5
|
|
*/
|
|
public function batch($model = null)
|
|
{
|
|
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
|
|
|
|
// Set the model
|
|
$model = $this->getModel('Series', '', array());
|
|
|
|
// Preset the redirect
|
|
$this->setRedirect(JRoute::_('index.php?option=com_sermondistributor&view=series_list' . $this->getRedirectToListAppend(), false));
|
|
|
|
return parent::batch($model);
|
|
}
|
|
|
|
/**
|
|
* Method to cancel an edit.
|
|
*
|
|
* @param string $key The name of the primary key of the URL variable.
|
|
*
|
|
* @return boolean True if access level checks pass, false otherwise.
|
|
*
|
|
* @since 12.2
|
|
*/
|
|
public function cancel($key = null)
|
|
{
|
|
// get the referral options
|
|
$this->ref = $this->input->get('ref', 0, 'word');
|
|
$this->refid = $this->input->get('refid', 0, 'int');
|
|
|
|
// Check if there is a return value
|
|
$return = $this->input->get('return', null, 'base64');
|
|
|
|
$cancel = parent::cancel($key);
|
|
|
|
if (!is_null($return) && JUri::isInternal(base64_decode($return)))
|
|
{
|
|
$redirect = base64_decode($return);
|
|
|
|
// Redirect to the return value.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
$redirect, false
|
|
)
|
|
);
|
|
}
|
|
elseif ($this->refid && $this->ref)
|
|
{
|
|
$redirect = '&view=' . (string)$this->ref . '&layout=edit&id=' . (int)$this->refid;
|
|
|
|
// Redirect to the item screen.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
'index.php?option=' . $this->option . $redirect, false
|
|
)
|
|
);
|
|
}
|
|
elseif ($this->ref)
|
|
{
|
|
$redirect = '&view='.(string)$this->ref;
|
|
|
|
// Redirect to the list screen.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
'index.php?option=' . $this->option . $redirect, false
|
|
)
|
|
);
|
|
}
|
|
return $cancel;
|
|
}
|
|
|
|
/**
|
|
* Method to save a record.
|
|
*
|
|
* @param string $key The name of the primary key of the URL variable.
|
|
* @param string $urlVar The name of the URL variable if different from the primary key (sometimes required to avoid router collisions).
|
|
*
|
|
* @return boolean True if successful, false otherwise.
|
|
*
|
|
* @since 12.2
|
|
*/
|
|
public function save($key = null, $urlVar = null)
|
|
{
|
|
// get the referral options
|
|
$this->ref = $this->input->get('ref', 0, 'word');
|
|
$this->refid = $this->input->get('refid', 0, 'int');
|
|
|
|
// Check if there is a return value
|
|
$return = $this->input->get('return', null, 'base64');
|
|
$canReturn = (!is_null($return) && JUri::isInternal(base64_decode($return)));
|
|
|
|
if ($this->ref || $this->refid || $canReturn)
|
|
{
|
|
// to make sure the item is checkedin on redirect
|
|
$this->task = 'save';
|
|
}
|
|
|
|
$saved = parent::save($key, $urlVar);
|
|
|
|
// This is not needed since parent save already does this
|
|
// Due to the ref and refid implementation we need to add this
|
|
if ($canReturn)
|
|
{
|
|
$redirect = base64_decode($return);
|
|
|
|
// Redirect to the return value.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
$redirect, false
|
|
)
|
|
);
|
|
}
|
|
elseif ($this->refid && $this->ref)
|
|
{
|
|
$redirect = '&view=' . (string)$this->ref . '&layout=edit&id=' . (int)$this->refid;
|
|
|
|
// Redirect to the item screen.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
'index.php?option=' . $this->option . $redirect, false
|
|
)
|
|
);
|
|
}
|
|
elseif ($this->ref)
|
|
{
|
|
$redirect = '&view=' . (string)$this->ref;
|
|
|
|
// Redirect to the list screen.
|
|
$this->setRedirect(
|
|
JRoute::_(
|
|
'index.php?option=' . $this->option . $redirect, false
|
|
)
|
|
);
|
|
}
|
|
return $saved;
|
|
}
|
|
|
|
/**
|
|
* Function that allows child controller access to model data
|
|
* after the data has been saved.
|
|
*
|
|
* @param JModel &$model The data model object.
|
|
* @param array $validData The validated data.
|
|
*
|
|
* @return void
|
|
*
|
|
* @since 11.1
|
|
*/
|
|
protected function postSaveHook(JModelLegacy $model, $validData = array())
|
|
{
|
|
return;
|
|
}
|
|
|
|
}
|