Version 4.7.13

This commit is contained in:
Neo committed 2025-12-19 16:14:56 -08:00
1 parent fd22d99e69
commit 7124a02564
954 files changed
+29277 -59308

No files matched your search

@@ -45,6 +45,27 @@ class _settings extends \IPS\Dispatcher\Controller
* @return void
*/
protected function manage()
{
$form = $this->_getForm();
if ( $values = $form->values() )
{
$this->_saveSettingsForm( $form, $values );
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=gallery&module=gallery&controller=settings' ), 'saved' );
}
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('settings');
\IPS\Output::i()->output = $form;
}
/**
* Build and return the settings form
*
* @note Abstracted to allow third party devs to extend easier
* @return \IPS\Helpers\Form
*/
protected function _getForm()
{
$form = new \IPS\Helpers\Form;
@@ -52,6 +73,7 @@ class _settings extends \IPS\Dispatcher\Controller
$form->attributes['data-controller'] = 'gallery.admin.settings.settings';
$form->hiddenValues['rebuildWatermarkScreenshots'] = \IPS\Request::i()->rebuildWatermarkScreenshots ?: 0;
$form->addTab( 'basic_settings' );
$form->addHeader( 'gallery_images' );
$form->addMessage( \IPS\Member::loggedIn()->language()->addToStack('gallery_dims_explanation'), '', FALSE );
$large = ( isset( \IPS\Settings::i()->gallery_large_dims ) ) ? explode( 'x', \IPS\Settings::i()->gallery_large_dims ) : array( 1600, 1200 );
@@ -88,32 +110,70 @@ class _settings extends \IPS\Dispatcher\Controller
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_nsfw', \IPS\Settings::i()->gallery_nsfw ) );
$form->addTab( 'gallery_overview_settings' );
$form->addHeader( 'gallery_featured_images' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_overview_show_carousel', \IPS\Settings::i()->gallery_overview_show_carousel, FALSE, array( 'togglesOn' => array( 'gallery_overview_carousel_count', 'gallery_overview_carousel_type' ) ) ) );
$options = array(
'featured' => 'gallery_overview_carousel_featured',
'new' => 'gallery_overview_carousel_new'
);
$form->add( new \IPS\Helpers\Form\Radio( 'gallery_overview_carousel_type', \IPS\Settings::i()->gallery_overview_carousel_type, TRUE, array( 'options' => $options ), NULL, NULL, NULL, 'gallery_overview_carousel_type' ) );
$form->add( new \IPS\Helpers\Form\Number( 'gallery_overview_carousel_count', \IPS\Settings::i()->gallery_overview_carousel_count, FALSE, array(), NULL, NULL, NULL, 'gallery_overview_carousel_count' ) );
if ( $values = $form->values() )
$form->addHeader( 'gallery_overview_recent_comments' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_show_recent_comments', \IPS\Settings::i()->gallery_show_recent_comments, FALSE, array() ) );
$form->addHeader('gallery_overview_categories');
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_overview_show_categories', \IPS\Settings::i()->gallery_overview_show_categories, FALSE, array() ) );
$form->addHeader( 'gallery_overview_recent_updated_albums' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_show_recent_updated_albums', \IPS\Settings::i()->gallery_show_recent_updated_albums, FALSE, array( 'togglesOn' => array( 'gallery_recent_updated_albums_count' ) ) ) );
$form->add( new \IPS\Helpers\Form\Number( 'gallery_recent_updated_albums_count', \IPS\Settings::i()->gallery_recent_updated_albums_count, FALSE, array(), NULL, NULL, NULL, 'gallery_recent_updated_albums_count' ) );
$form->addHeader( 'gallery_overview_new_images' );
$form->add( new \IPS\Helpers\Form\YesNo( 'gallery_show_new_images', \IPS\Settings::i()->gallery_show_new_images, FALSE, array( 'togglesOn' => array( 'gallery_new_images_count' ) ) ) );
$form->add( new \IPS\Helpers\Form\Number( 'gallery_new_images_count', \IPS\Settings::i()->gallery_new_images_count, FALSE, array(), NULL, NULL, NULL, 'gallery_new_images_count' ) );
return $form;
}
/**
* Save the settings form
*
* @param \IPS\Helpers\Form $form The Form Object
* @param array $values Values
*/
protected function _saveSettingsForm( \IPS\Helpers\Form $form, array $values )
{
$form->saveAsSettings( array(
'gallery_large_dims' => implode( 'x', $values['gallery_large_dims'] ),
'gallery_small_dims' => implode( 'x', $values['gallery_small_dims'] ),
'gallery_use_square_thumbnails' => $values['gallery_use_square_thumbnails'],
'gallery_watermark_path' => (string) $values['gallery_watermark_path'],
'gallery_detailed_bandwidth' => $values['gallery_detailed_bandwidth'],
'gallery_bandwidth_period' => $values['gallery_bandwidth_period'],
'gallery_rss_enabled' => $values['gallery_rss_enabled'],
'gallery_watermark_images' => implode( ',', $values['gallery_watermark_images'] ),
'gallery_use_watermarks' => $values['gallery_use_watermarks'],
'gallery_maps_default' => $values['gallery_maps_default'] ?? 0,
'gallery_nsfw' => $values['gallery_nsfw'],
'gallery_overview_show_carousel' => $values['gallery_overview_show_carousel'],
'gallery_overview_carousel_type' => $values['gallery_overview_carousel_type'],
'gallery_overview_carousel_count' => $values['gallery_overview_carousel_count'],
'gallery_show_recent_comments' => $values['gallery_show_recent_comments'],
'gallery_overview_show_categories' => $values['gallery_overview_show_categories'],
'gallery_show_recent_updated_albums' => $values['gallery_show_recent_updated_albums'],
'gallery_recent_updated_albums_count' => $values['gallery_recent_updated_albums_count'],
'gallery_show_new_images' => $values['gallery_show_new_images'],
'gallery_new_images_count' => $values['gallery_new_images_count'],
) );
\IPS\Session::i()->log( 'acplogs__gallery_settings' );
if( $values['rebuildWatermarkScreenshots'] )
{
$form->saveAsSettings( array(
'gallery_large_dims' => implode( 'x', $values['gallery_large_dims'] ),
'gallery_small_dims' => implode( 'x', $values['gallery_small_dims'] ),
'gallery_use_square_thumbnails' => $values['gallery_use_square_thumbnails'],
'gallery_watermark_path' => (string) $values['gallery_watermark_path'],
'gallery_detailed_bandwidth' => $values['gallery_detailed_bandwidth'],
'gallery_bandwidth_period' => $values['gallery_bandwidth_period'],
'gallery_rss_enabled' => $values['gallery_rss_enabled'],
'gallery_watermark_images' => implode( ',', $values['gallery_watermark_images'] ),
'gallery_use_watermarks' => $values['gallery_use_watermarks'],
'gallery_maps_default' => $values['gallery_maps_default'] ?? 0,
'gallery_nsfw' => $values['gallery_nsfw']
) );
\IPS\Session::i()->log( 'acplogs__gallery_settings' );
if( $values['rebuildWatermarkScreenshots'] )
{
\IPS\Db::i()->delete( 'core_queue', array( '`app`=? OR `key`=?', 'gallery', 'RebuildGalleryImages' ) );
\IPS\Task::queue( 'gallery', 'RebuildGalleryImages', array( ), 2 );
}
\IPS\Db::i()->delete( 'core_queue', array( '`app`=? OR `key`=?', 'gallery', 'RebuildGalleryImages' ) );
\IPS\Task::queue( 'gallery', 'RebuildGalleryImages', array( ), 2 );
}
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('settings');
\IPS\Output::i()->output = $form;
}
}
@@ -51,60 +51,7 @@ class _bandwidth extends \IPS\Dispatcher\Controller
*/
protected function manage()
{
$chart = new \IPS\Helpers\Chart\Database( \IPS\Http\Url::internal( "app=gallery&module=stats&controller=bandwidth" ), 'gallery_bandwidth', 'bdate', '', array(
'backgroundColor' => '#ffffff',
'colors' => array( '#10967e' ),
'hAxis' => array( 'gridlines' => array( 'color' => '#f5f5f5' ) ),
'lineWidth' => 1,
'areaOpacity' => 0.4,
'chartArea' => array( 'left' => 120, 'width' => '75%' ),
'vAxis' => array(
'title' => \IPS\Member::loggedIn()->language()->addToStack( 'filesize_raw_k' )
)
), 'AreaChart', 'daily', array( 'start' => 0, 'end' => 0 ), array( 'member_id', 'image_id', 'bdate', 'bsize' ) );
$chart->addSeries( \IPS\Member::loggedIn()->language()->addToStack('bandwidth'), 'number', 'ROUND((SUM(bsize)/1024),2)', FALSE );
$chart->tableParsers = array(
'member_id' => function( $val )
{
$member = \IPS\Member::load( $val );
if( $member->member_id )
{
$url = \IPS\Http\Url::internal( "app=gallery&module=stats&controller=member&do=images&id={$member->member_id}" );
return \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $url, FALSE, $member->name );
}
else
{
return \IPS\Member::loggedIn()->language()->addToStack('deleted_member');
}
},
'image_id' => function( $val )
{
try
{
$image = \IPS\gallery\Image::load( $val );
return \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $image->url(), TRUE, $image->caption );
}
catch ( \OutOfRangeException $e )
{
return \IPS\Member::loggedIn()->language()->addToStack('deleted_image');
}
},
'bdate' => function( $val )
{
return (string) \IPS\DateTime::ts( $val );
},
'bsize' => function( $val )
{
return \IPS\Output\Plugin\Filesize::humanReadableFilesize( $val );
}
);
$chart->availableTypes = array( 'AreaChart', 'ColumnChart', 'BarChart' );
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('bandwidth_stats');
\IPS\Output::i()->output = (string) $chart;
\IPS\Output::i()->output = (string) \IPS\core\Statistics\Chart::loadFromExtension( 'gallery', 'Bandwidth' )->getChart( \IPS\Http\Url::internal( "app=gallery&module=stats&controller=bandwidth" ) );
}
}
@@ -128,6 +128,8 @@ class _browse extends \IPS\Content\Controller
$album = \IPS\gallery\Album::loadAndCheckPerms( \IPS\Request::i()->album, 'view' );
$album->category()->clubCheckRules();
$album->asItem()->updateViews();
/* Add RSS feed */
if ( \IPS\Settings::i()->gallery_rss_enabled )
@@ -195,18 +197,43 @@ class _browse extends \IPS\Content\Controller
protected function _index()
{
/* Get stuff */
$featured = iterator_to_array( \IPS\gallery\Image::featured( 20, NULL ) );
/* If there aren't any featured images grab some recent instead */
if( !\count( $featured ) )
$featured = array();
if( \IPS\Settings::i()->gallery_overview_show_carousel )
{
$featured = \IPS\gallery\Image::getItemsWithPermission( \IPS\gallery\Image::clubImageExclusion(), 'image_updated DESC', 5, 'view' );
switch( \IPS\Settings::i()->gallery_overview_carousel_type )
{
case 'featured':
$featured = iterator_to_array( \IPS\gallery\Image::featured( \IPS\Settings::i()->gallery_overview_carousel_count, NULL ) );
break;
case 'new':
$featured = \IPS\gallery\Image::getItemsWithPermission( \IPS\gallery\Image::clubImageExclusion(), 'image_updated DESC', \IPS\Settings::i()->gallery_overview_carousel_count, 'view' );
break;
}
}
$new = iterator_to_array( \IPS\gallery\Image::getItemsWithPermission( \IPS\gallery\Image::clubImageExclusion(), NULL, 16, 'read', \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps ) );
$recentlyUpdatedAlbums = \IPS\gallery\Album\Item::getItemsWithPermission( \IPS\gallery\Album\Item::clubAlbumExclusion(), 'album_last_img_date DESC', 4, 'view' );
$commentWhere = \IPS\gallery\Image::clubImageExclusion();
$commentWhere[] = array( 'image_comments > 0' );
$recentComments = \IPS\gallery\Image::getItemsWithPermission( $commentWhere, 'image_last_comment DESC', 10, 'read', \IPS\Content\Hideable::FILTER_PUBLIC_ONLY, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps );
/* New images */
$new = array();
if( \IPS\Settings::i()->gallery_show_new_images )
{
$new = iterator_to_array( \IPS\gallery\Image::getItemsWithPermission( \IPS\gallery\Image::clubImageExclusion(), NULL, \IPS\Settings::i()->gallery_new_images_count, 'read', \IPS\Content\Hideable::FILTER_AUTOMATIC, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps ) );
}
/* Recently updated albums */
$recentlyUpdatedAlbums = array();
if( \IPS\Settings::i()->gallery_show_recent_updated_albums )
{
$recentlyUpdatedAlbums = \IPS\gallery\Album\Item::getItemsWithPermission( \IPS\gallery\Album\Item::clubAlbumExclusion(), 'album_last_img_date DESC', \IPS\Settings::i()->gallery_recent_updated_albums_count, 'view' );
}
/* Recently commented */
$recentComments = array();
if( \IPS\Settings::i()->gallery_show_recent_comments )
{
$commentWhere = \IPS\gallery\Image::clubImageExclusion();
$commentWhere[] = array( 'image_comments > 0' );
$recentComments = \IPS\gallery\Image::getItemsWithPermission( $commentWhere, 'image_last_comment DESC', 10, 'read', \IPS\Content\Hideable::FILTER_PUBLIC_ONLY, 0, NULL, !\IPS\Settings::i()->club_nodes_in_apps );
}
/* Online User Location */
\IPS\Session::i()->setLocation( \IPS\Http\Url::internal( 'app=gallery', 'front', 'gallery' ), array(), 'loc_gallery_browsing' );
@@ -322,6 +349,11 @@ class _browse extends \IPS\Content\Controller
}
}
if ( !\IPS\Request::i()->isAjax() )
{
$category->updateViews();
}
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_categories' ) ] = array( 'type' => 'gallery_image', 'nodes' => $category->_id );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'browse' )->category( $category, $albums, (string) $table );
}
@@ -452,6 +484,11 @@ class _browse extends \IPS\Content\Controller
'item_type' => isset( $albumItem::$contentType ) ? $albumItem::$contentType : $albumItem::$title,
'category_name' => $albumItem->container()->_title
);
if ( !\IPS\Request::i()->isAjax() )
{
$albumItem->updateViews();
}
\IPS\Output::i()->breadcrumb[] = array( NULL, $album->_title );
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'browse' )->album( $album, (string) $table, $commentsAndReviews );
@@ -810,7 +810,7 @@ class _view extends \IPS\Content\Controller
{
foreach ( \IPS\Request::i()->url()->queryString as $k => $v )
{
if ( $k != 'do' )
if ( !in_array( $k, array( 'id', 'do' ) ) )
{
$url = $url->setQueryString( $k, $v );
}