Version 4.5.0

This commit is contained in:
Neo committed 2025-12-19 05:51:58 -08:00
1 parent 1a0c7fd3c2
commit f79dcf067a
3791 files changed
+248032 -76372

No files matched your search

+115 -5
View File
@@ -12,7 +12,7 @@
namespace IPS\cms\modules\admin\pages;
/* 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;
@@ -23,10 +23,15 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class _ajax extends \IPS\Dispatcher\Controller
{
/**
* @brief Has been CSRF-protected
*/
public static $csrfProtected = TRUE;
/**
* Return a CSS or HTML menu
*
* @return html
* @return void
*/
public function loadMenu()
{
@@ -73,7 +78,7 @@ class _ajax extends \IPS\Dispatcher\Controller
/**
* Return HTML template as JSON
*
* @return string
* @return void
*/
public function loadTemplate()
{
@@ -121,7 +126,7 @@ class _ajax extends \IPS\Dispatcher\Controller
{
try
{
if ( is_numeric( $t_key ) )
if ( \is_numeric( $t_key ) )
{
$template = \IPS\cms\Templates::load( $t_key, 'template_id' );
}
@@ -160,7 +165,112 @@ class _ajax extends \IPS\Dispatcher\Controller
}
else
{
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->blankTemplate( \IPS\Theme::i()->getTemplate( 'templates', 'cms', 'admin' )->viewTemplate( $templateArray ) ), 200, 'text/html', \IPS\Output::i()->httpHeaders );
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->blankTemplate( \IPS\Theme::i()->getTemplate( 'templates', 'cms', 'admin' )->viewTemplate( $templateArray ) ), 200, 'text/html' );
}
}
/**
* [AJAX] Search templates
*
* @return void
*/
public function searchtemplates()
{
\IPS\Dispatcher::i()->checkAcpPermission( 'template_manage' );
$where = array();
if ( \IPS\Request::i()->term )
{
$where[] = array( '( LOWER(template_title) LIKE ? OR LOWER(template_content) LIKE ? )', '%' . mb_strtolower( \IPS\Request::i()->term ) . '%', '%' . mb_strtolower( \IPS\Request::i()->term ) . '%' );
}
if ( ! \in_array( 'custom', explode( ',', \IPS\Request::i()->filters ) ) )
{
$where[] = array( 'template_master=1 OR (template_user_created=1 and template_user_edited=0)' );
}
if ( ! \in_array( 'unmodified', explode( ',', \IPS\Request::i()->filters ) ) )
{
$where[] = array( 'template_user_created=1 and template_user_edited=1' );
}
$select = \IPS\Db::i()->select(
'*',
'cms_templates',
$where,
'template_location, template_group, template_title, template_master desc'
);
$return = array();
foreach( $select as $result )
{
$return[ $result['template_location'] ][ $result['template_group'] ][ $result['template_key'] ] = $result['template_title'];
}
\IPS\Output::i()->json( $return );
}
/**
* Load Tags
*
* @return void
*/
public function loadTags(): void
{
$page = NULL;
if ( isset( \IPS\Request::i()->pageId ) )
{
try
{
$page = \IPS\cms\Pages\Page::load( \IPS\Request::i()->pageId );
}
catch( \OutOfRangeException $e ) {}
}
$tags = array();
$tagLinks = array();
if ( $page and $page->id == \IPS\Settings::i()->cms_error_page )
{
$tags['cms_error_page']['{error_message}'] = 'cms_error_page_message';
$tags['cms_error_page']['{error_code}'] = 'cms_error_page_code';
}
foreach( \IPS\cms\Databases::roots( NULL, NULL ) as $id => $db )
{
if ( ! $db->page_id )
{
$tags['cms_tag_databases']['{database="' . $db->key . '"}'] = $db->_title;
}
}
foreach( \IPS\cms\Blocks\Block::roots( NULL, NULL ) as $id => $block )
{
$tags['cms_tag_blocks']['{block="' . $block->key . '"}'] = $block->_title;
}
foreach( \IPS\Db::i()->select( '*', 'cms_pages', NULL, 'page_full_path ASC', array( 0, 50 ) ) as $page )
{
$tags['cms_tag_pages']['{pageurl="' . $page['page_full_path'] . '"}' ] = \IPS\Member::loggedIn()->language()->addToStack( \IPS\cms\Pages\Page::$titleLangPrefix . $page['page_id'] );
}
/* If we can manage words, then the header needs to always show */
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'languages', 'lang_words' ) )
{
$tags['cms_tag_lang'] = array();
$tagLinks['cms_tag_lang'] = array(
'icon' => 'plus',
'title' => \IPS\Member::loggedIn()->language()->addToStack('add_word'),
'link' => \IPS\Http\Url::internal( "app=core&module=languages&controller=languages&do=addWord" ),
'data' => array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack( 'add_word' ), 'ipsDialog-remoteSubmit' => TRUE, 'action' => "wordForm" )
);
}
foreach( \IPS\Db::i()->select( '*', 'core_sys_lang_words', array( "word_is_custom=? AND lang_id=?", 1, \IPS\Member::loggedIn()->language()->_id ) ) AS $lang )
{
$tags['cms_tag_lang']['{lang="' . $lang['word_key'] . '"}'] = $lang['word_custom'] ?: $lang['word_default'];
}
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->blankTemplate( \IPS\Theme::i()->getTemplate( 'forms', 'core', 'global' )->editorTags( $tags, $tagLinks ) ), 200, 'text/html' );
}
}