Version 4.5.0
This commit is contained in:
1 parent
1a0c7fd3c2
commit
f79dcf067a
3791 files changed
+248032
-76372
No files matched your search
@@ -11,7 +11,7 @@
|
||||
namespace IPS\Content\Api;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
@@ -28,9 +28,10 @@ class _ItemController extends \IPS\Api\Controller
|
||||
* @param array $where Extra WHERE clause
|
||||
* @param string $containerParam The parameter which includes the container values
|
||||
* @param bool $byPassPerms If permissions should be ignored
|
||||
* @param string $customSort Custom sort by parameter to use
|
||||
* @return \IPS\Api\PaginatedResponse
|
||||
*/
|
||||
protected function _list( $where = array(), $containerParam = 'categories', $byPassPerms=FALSE )
|
||||
protected function _list( $where = array(), $containerParam = 'categories', $byPassPerms = FALSE, $customSort = NULL )
|
||||
{
|
||||
$class = $this->class;
|
||||
|
||||
@@ -47,7 +48,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Pinned? */
|
||||
if ( isset( \IPS\Request::i()->pinned ) AND in_array( 'IPS\Content\Pinnable', class_implements( $class ) ) )
|
||||
if ( isset( \IPS\Request::i()->pinned ) AND \in_array( 'IPS\Content\Pinnable', class_implements( $class ) ) )
|
||||
{
|
||||
if ( \IPS\Request::i()->pinned )
|
||||
{
|
||||
@@ -60,7 +61,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Featured? */
|
||||
if ( isset( \IPS\Request::i()->featured ) AND in_array( 'IPS\Content\Featurable', class_implements( $class ) ) )
|
||||
if ( isset( \IPS\Request::i()->featured ) AND \in_array( 'IPS\Content\Featurable', class_implements( $class ) ) )
|
||||
{
|
||||
if ( \IPS\Request::i()->featured )
|
||||
{
|
||||
@@ -73,11 +74,11 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Locked? */
|
||||
if ( isset( \IPS\Request::i()->locked ) AND in_array( 'IPS\Content\Lockable', class_implements( $class ) ) )
|
||||
if ( isset( \IPS\Request::i()->locked ) AND \in_array( 'IPS\Content\Lockable', class_implements( $class ) ) )
|
||||
{
|
||||
if ( isset( $class::$databaseColumnMap['locked'] ) )
|
||||
{
|
||||
$where[] = array( $class::$databasePrefix . $class::$databaseColumnMap['locked'] . '=?', intval( \IPS\Request::i()->locked ) );
|
||||
$where[] = array( $class::$databasePrefix . $class::$databaseColumnMap['locked'] . '=?', \intval( \IPS\Request::i()->locked ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -86,7 +87,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Hidden */
|
||||
if ( isset( \IPS\Request::i()->hidden ) AND in_array( 'IPS\Content\Hideable', class_implements( $class ) ) )
|
||||
if ( isset( \IPS\Request::i()->hidden ) AND \in_array( 'IPS\Content\Hideable', class_implements( $class ) ) )
|
||||
{
|
||||
if ( \IPS\Request::i()->hidden )
|
||||
{
|
||||
@@ -113,7 +114,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Has poll? */
|
||||
if ( isset( \IPS\Request::i()->hasPoll ) AND in_array( 'IPS\Content\Polls', class_implements( $class ) ) )
|
||||
if ( isset( \IPS\Request::i()->hasPoll ) AND \in_array( 'IPS\Content\Polls', class_implements( $class ) ) )
|
||||
{
|
||||
if ( \IPS\Request::i()->hasPoll )
|
||||
{
|
||||
@@ -126,7 +127,17 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Sort */
|
||||
if ( isset( \IPS\Request::i()->sortBy ) and in_array( \IPS\Request::i()->sortBy, array( 'date', 'title' ) ) )
|
||||
$supportedSortBy = array( 'date', 'title' );
|
||||
if( $class::$databaseColumnMap['updated'] )
|
||||
{
|
||||
$supportedSortBy[] = 'updated';
|
||||
}
|
||||
|
||||
if( $customSort !== NULL )
|
||||
{
|
||||
$sortBy = $customSort;
|
||||
}
|
||||
elseif ( isset( \IPS\Request::i()->sortBy ) and \in_array( \IPS\Request::i()->sortBy, $supportedSortBy ) )
|
||||
{
|
||||
$sortBy = $class::$databasePrefix . $class::$databaseColumnMap[ \IPS\Request::i()->sortBy ];
|
||||
}
|
||||
@@ -134,7 +145,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
{
|
||||
$sortBy = $class::$databasePrefix . $class::$databaseColumnId;
|
||||
}
|
||||
$sortDir = ( isset( \IPS\Request::i()->sortDir ) and in_array( mb_strtolower( \IPS\Request::i()->sortDir ), array( 'asc', 'desc' ) ) ) ? \IPS\Request::i()->sortDir : 'asc';
|
||||
$sortDir = ( isset( \IPS\Request::i()->sortDir ) and \in_array( mb_strtolower( \IPS\Request::i()->sortDir ), array( 'asc', 'desc' ) ) ) ? \IPS\Request::i()->sortDir : 'asc';
|
||||
|
||||
/* Get results */
|
||||
if ( $this->member and !$byPassPerms )
|
||||
@@ -144,6 +155,18 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
else
|
||||
{
|
||||
/* And no PBR or queued for deletion things either */
|
||||
if ( isset( $class::$databaseColumnMap['hidden'] ) )
|
||||
{
|
||||
$col = $class::$databaseTable . '.' . $class::$databasePrefix . $class::$databaseColumnMap['hidden'];
|
||||
$where[] = array( "{$col}!=-2 AND {$col} !=-3" );
|
||||
}
|
||||
else if ( isset( $class::$databaseColumnMap['approved'] ) )
|
||||
{
|
||||
$col = $class::$databaseTable . '.' . $class::$databasePrefix . $class::$databaseColumnMap['approved'];
|
||||
$where[] = array( "{$col}!=-2 AND {$col}!=-3" );
|
||||
}
|
||||
|
||||
$query = \IPS\Db::i()->select( '*', $class::$databaseTable, $where, "{$sortBy} {$sortDir}" );
|
||||
$count = \IPS\Db::i()->select( 'COUNT(*)', $class::$databaseTable, $where )->first();
|
||||
}
|
||||
@@ -196,7 +219,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Tags */
|
||||
if ( ( isset( \IPS\Request::i()->prefix ) or isset( \IPS\Request::i()->tags ) ) and in_array( 'IPS\Content\Tags', class_implements( get_class( $item ) ) ) )
|
||||
if ( ( isset( \IPS\Request::i()->prefix ) or isset( \IPS\Request::i()->tags ) ) and \in_array( 'IPS\Content\Tags', class_implements( \get_class( $item ) ) ) )
|
||||
{
|
||||
if ( !$this->member or $item::canTag( $this->member, $item->containerWrapper() ) )
|
||||
{
|
||||
@@ -229,14 +252,14 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Open/closed */
|
||||
if ( isset( \IPS\Request::i()->locked ) and in_array( 'IPS\Content\Lockable', class_implements( get_class( $item ) ) ) )
|
||||
if ( isset( \IPS\Request::i()->locked ) and \in_array( 'IPS\Content\Lockable', class_implements( \get_class( $item ) ) ) )
|
||||
{
|
||||
if ( !$this->member or ( \IPS\Request::i()->locked and $item->canLock( $this->member ) ) or ( !\IPS\Request::i()->locked and $item->canUnlock( $this->member ) ) )
|
||||
{
|
||||
if ( isset( $item::$databaseColumnMap['locked'] ) )
|
||||
{
|
||||
$lockedColumn = $item::$databaseColumnMap['locked'];
|
||||
$item->$lockedColumn = intval( \IPS\Request::i()->locked );
|
||||
$item->$lockedColumn = \intval( \IPS\Request::i()->locked );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -247,12 +270,12 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Hidden */
|
||||
if ( isset( \IPS\Request::i()->hidden ) and in_array( 'IPS\Content\Hideable', class_implements( get_class( $item ) ) ) )
|
||||
if ( isset( \IPS\Request::i()->hidden ) and \in_array( 'IPS\Content\Hideable', class_implements( \get_class( $item ) ) ) )
|
||||
{
|
||||
if ( !$this->member or ( \IPS\Request::i()->hidden and $item->canHide( $this->member ) ) or ( !\IPS\Request::i()->hidden and $item->canUnhide( $this->member ) ) )
|
||||
{
|
||||
$idColumn = $item::$databaseColumnId;
|
||||
if ( \IPS\Request::i()->hidden )
|
||||
if ( \IPS\Request::i()->hidden AND $item->hidden() != -1 )
|
||||
{
|
||||
if ( $item->$idColumn )
|
||||
{
|
||||
@@ -272,7 +295,8 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if ( !\IPS\Request::i()->hidden AND $item->hidden() == -1 )
|
||||
{
|
||||
if ( $item->$idColumn )
|
||||
{
|
||||
@@ -296,22 +320,22 @@ class _ItemController extends \IPS\Api\Controller
|
||||
}
|
||||
|
||||
/* Pinned */
|
||||
if ( isset( \IPS\Request::i()->pinned ) and in_array( 'IPS\Content\Pinnable', class_implements( get_class( $item ) ) ) )
|
||||
if ( isset( \IPS\Request::i()->pinned ) and \in_array( 'IPS\Content\Pinnable', class_implements( \get_class( $item ) ) ) )
|
||||
{
|
||||
if ( !$this->member or ( \IPS\Request::i()->pinned and $item->canPin( $this->member ) ) or ( !\IPS\Request::i()->pinned and $item->canUnpin( $this->member ) ) )
|
||||
{
|
||||
$pinnedColumn = $item::$databaseColumnMap['pinned'];
|
||||
$item->$pinnedColumn = intval( \IPS\Request::i()->pinned );
|
||||
$item->$pinnedColumn = \intval( \IPS\Request::i()->pinned );
|
||||
}
|
||||
}
|
||||
|
||||
/* Featured */
|
||||
if ( isset( \IPS\Request::i()->featured ) and in_array( 'IPS\Content\Featurable', class_implements( get_class( $item ) ) ) )
|
||||
if ( isset( \IPS\Request::i()->featured ) and \in_array( 'IPS\Content\Featurable', class_implements( \get_class( $item ) ) ) )
|
||||
{
|
||||
if ( !$this->member or ( \IPS\Request::i()->featured and $item->canFeature( $this->member ) ) or ( !\IPS\Request::i()->featured and $item->canUnfeature( $this->member ) ) )
|
||||
{
|
||||
$featuredColumn = $item::$databaseColumnMap['featured'];
|
||||
$item->$featuredColumn = intval( \IPS\Request::i()->featured );
|
||||
$item->$featuredColumn = \intval( \IPS\Request::i()->featured );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,7 +428,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
{
|
||||
$item->sendNotifications();
|
||||
}
|
||||
elseif( $item->hidden() !== -1 )
|
||||
elseif( !\in_array( $item->hidden(), array( -1, -3 ) ) )
|
||||
{
|
||||
$item->sendUnapprovedNotification();
|
||||
}
|
||||
@@ -412,6 +436,57 @@ class _ItemController extends \IPS\Api\Controller
|
||||
/* Output */
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create or update poll
|
||||
*
|
||||
* @param \IPS\Content\Item $item The content item to attach the poll to
|
||||
* @param string $type Whether we are adding or editing
|
||||
* @return void
|
||||
*/
|
||||
protected function _createOrUpdatePoll( $item, $type )
|
||||
{
|
||||
/* Are we creating or updating a poll? */
|
||||
if( isset( \IPS\Request::i()->poll_title ) AND isset( \IPS\Request::i()->poll_options ) AND \IPS\Request::i()->poll_title AND \IPS\Request::i()->poll_options AND ( !$this->member OR $item::canCreatePoll( $this->member, $item->container() ) ) )
|
||||
{
|
||||
$canCreatePoll = TRUE;
|
||||
|
||||
if( $type == 'edit' AND !$item->getPoll() )
|
||||
{
|
||||
$canCreatePoll = (bool) ( \IPS\Settings::i()->startpoll_cutoff == -1 or \IPS\DateTime::create()->sub( new \DateInterval( 'PT' . \IPS\Settings::i()->startpoll_cutoff . 'H' ) )->getTimestamp() < $item->mapped('date') );
|
||||
}
|
||||
|
||||
if( $canCreatePoll === TRUE )
|
||||
{
|
||||
$poll = $item->getPoll() ?: new \IPS\Poll;
|
||||
|
||||
if( !$item->getPoll() )
|
||||
{
|
||||
$poll->starter_id = $item->author()->member_id;
|
||||
}
|
||||
|
||||
$formatted = array(
|
||||
'title' => \IPS\Request::i()->poll_title,
|
||||
'questions' => \IPS\Request::i()->poll_options
|
||||
);
|
||||
|
||||
if( isset( \IPS\Request::i()->poll_only ) AND \IPS\Request::i()->poll_only )
|
||||
{
|
||||
$formatted['poll_only'] = 1;
|
||||
}
|
||||
|
||||
if( isset( \IPS\Request::i()->poll_public ) AND \IPS\Request::i()->poll_public )
|
||||
{
|
||||
$formatted['public'] = 1;
|
||||
}
|
||||
|
||||
$poll->setDataFromForm( $formatted, TRUE );
|
||||
$poll->save();
|
||||
|
||||
$item->poll_state = $poll->pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* View Comments or Reviews
|
||||
@@ -434,7 +509,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
$where [] = array( $commentClass::$databasePrefix . $commentClass::$databaseColumnMap['item'] . '=?', $item->$itemIdColumn );
|
||||
|
||||
/* Hidden? */
|
||||
if ( isset( \IPS\Request::i()->hidden ) AND in_array( 'IPS\Content\Hideable', class_implements( $commentClass ) ) )
|
||||
if ( isset( \IPS\Request::i()->hidden ) AND \in_array( 'IPS\Content\Hideable', class_implements( $commentClass ) ) )
|
||||
{
|
||||
if ( \IPS\Request::i()->hidden )
|
||||
{
|
||||
@@ -467,7 +542,7 @@ class _ItemController extends \IPS\Api\Controller
|
||||
|
||||
/* Sort */
|
||||
$sortBy = $commentClass::$databasePrefix . $commentClass::$databaseColumnMap['date'];
|
||||
$sortDir = ( isset( \IPS\Request::i()->sortDir ) and in_array( mb_strtolower( \IPS\Request::i()->sortDir ), array( 'asc', 'desc' ) ) ) ? \IPS\Request::i()->sortDir : 'asc';
|
||||
$sortDir = ( isset( \IPS\Request::i()->sortDir ) and \in_array( mb_strtolower( \IPS\Request::i()->sortDir ), array( 'asc', 'desc' ) ) ) ? \IPS\Request::i()->sortDir : 'asc';
|
||||
|
||||
return new \IPS\Api\PaginatedResponse(
|
||||
200,
|
||||
|
||||
Reference in new issue
Block a user