Version 5.0.0 beta 8

This commit is contained in:
Neo committed 2025-12-19 17:30:12 -08:00
1 parent 54d5dcd0a0
commit 214f649f1d
483 files changed
+35354 -33568

No files matched your search

@@ -14,6 +14,7 @@ namespace IPS\cms\modules\admin\pages;
/* To prevent PHP errors (extending class does not exist) revealing path */
use Diff;
use DirectoryIterator;
use DomainException;
use Exception;
use IPS\Application;
@@ -21,12 +22,12 @@ use IPS\cms\Blocks\Block;
use IPS\cms\Databases;
use IPS\cms\Templates as TemplatesClass;
use IPS\cms\Templates\Container;
use IPS\Data\Cache;
use IPS\Data\Store;
use IPS\Db;
use IPS\Dispatcher;
use IPS\Dispatcher\Controller;
use IPS\Helpers\Form;
use IPS\Helpers\Form\CheckboxSet;
use IPS\Helpers\Form\Node;
use IPS\Helpers\Form\Radio;
use IPS\Helpers\Form\Select;
@@ -50,8 +51,10 @@ use function count;
use function defined;
use function in_array;
use function mb_substr;
use function str_replace;
use function strip_tags;
use function substr;
use function ucwords;
use const IPS\TEMP_DIRECTORY;
use const IPS\ROOT_PATH;
@@ -89,12 +92,104 @@ class templates extends Controller
*/
public function importInDev() : void
{
Session::i()->csrfCheck();
\IPS\cms\Theme::importFromFiles('database');
\IPS\cms\Theme::importFromFiles('page');
/* Get master keys for mapping */
$groups = [
'' => 'cms_template_no_import'
];
foreach( Databases::$templateGroups as $key => $group )
{
$groups[ $key ] = Member::loggedIn()->language()->addToStack( 'cms_new_db_template_group_' . $key );
}
Output::i()->redirect( Url::internal( 'app=cms&module=pages&controller=templates' ), 'completed' );
/* Build a list of all custom directories */
$masterTemplates = iterator_to_array(
Db::i()->select( 'template_group', 'cms_templates', [ 'template_location=? and template_master=?', 'database', 1 ] )
);
$databaseTemplates = [];
foreach( new DirectoryIterator( ROOT_PATH . "/applications/cms/dev/html/database" ) as $file )
{
if( $file->isDot() )
{
continue;
}
if( $file->isDir() and !in_array( $file->getFilename(), $masterTemplates ) )
{
$databaseTemplates[] = $file->getFilename();
}
}
$masterWrappers = iterator_to_array(
Db::i()->select( 'template_title', 'cms_templates', [ 'template_location=? and template_master=? and template_group=?', 'page', 1, 'custom_wrappers' ] )
);
$customWrappers = [];
foreach( new DirectoryIterator( ROOT_PATH . "/applications/cms/dev/html/page/custom_wrappers" ) as $file )
{
if( $file->isDir() or $file->isDot() or mb_substr( $file->getFilename(), 0, 1 ) === '.' or $file->getFilename() == 'index.html' )
{
continue;
}
$extension = strtolower( mb_substr( $file->getFilename(), mb_strrpos( $file->getFilename(), '.' ) + 1 ) );
if( $extension == 'phtml' and !in_array( mb_substr( $file->getFilename(), 0, mb_strrpos( $file->getFilename(), '.' ) ), $masterWrappers ) )
{
$customWrappers[ $file->getFilename() ] = $file->getFilename();
}
}
if( !count( $databaseTemplates ) and !count( $customWrappers ) )
{
Output::i()->error( 'err_no_dev_templates', '3T285/4' );
}
$form = new Form( 'form', 'continue' );
if( count( $databaseTemplates ) )
{
$form->addHeader( 'content_import_db' );
$form->addMessage( 'content_import_dev_templates_info', 'ipsMessage ipsMessage--info' );
foreach( $databaseTemplates as $template )
{
$key = str_replace( ' ', '_', $template );
$field = new Select( $key, null, false, [
'options' => $groups
] );
$field->label = ucwords( str_replace( '_', ' ', $template ) );
$form->add( $field );
}
}
if( count( $customWrappers ) )
{
$form->addHeader( 'content_import_wrappers' );
$form->add( new CheckboxSet( 'cms_import_wrappers', null, false, [
'options' => $customWrappers,
'noDefault' => true
] ) );
}
if( $values = $form->values() )
{
foreach( $databaseTemplates as $templateGroup )
{
$key = str_replace( ' ', '_', $templateGroup );
if( isset( $values[ $key ] ) and $values[ $key ] )
{
\IPS\cms\Theme::importDatabaseTemplate( $templateGroup, $values[ $key ] );
}
}
if( isset( $values['cms_import_wrappers'] ) )
{
foreach( $values['cms_import_wrappers'] as $wrapperName )
{
\IPS\cms\Theme::importPageWrapper( $wrapperName );
}
}
Output::i()->redirect( Url::internal( 'app=cms&module=pages&controller=templates' ), 'completed' );
}
Output::i()->output = (string) $form;
}
/**
@@ -177,7 +272,7 @@ class templates extends Controller
$conflicts = array();
/* If this is part of plugin/app installation, set relevant form data */
if( Request::i()->application OR Request::i()->plugin )
if( Request::i()->application )
{
if( Request::i()->application )
{
@@ -304,7 +399,7 @@ class templates extends Controller
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'codemirror/codemirror.js', 'core', 'interface' ) );
Output::i()->cssFiles = array_merge( Output::i()->cssFiles, Theme::i()->css( 'codemirror/codemirror.css', 'core', 'interface' ) );
Output::i()->cssFiles = array_merge( Output::i()->cssFiles, Theme::i()->css( 'customization/themes.css', 'core', 'admin' ) );
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'admin_templates.js', 'core', 'admin' ) );
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'admin_templates.js', 'cms', 'admin' ) );
Output::i()->output = $form->customTemplate( array( Theme::i()->getTemplate( 'templates', 'cms' ), 'templateConflict' ), $conflicts );
}
@@ -427,8 +522,8 @@ class templates extends Controller
Output::i()->sidebar['actions']['add'] = array(
'icon' => 'cog',
'title' => 'content_import_dev_templates',
'link' => Url::internal( "app=cms&module=pages&controller=templates&do=importInDev" )->csrf(),
'data' => array()
'link' => Url::internal( "app=cms&module=pages&controller=templates&do=importInDev" ),
'data' => [ 'ipsDialog' => '', 'ipsDialog-title' => Member::loggedIn()->language()->addToStack( 'content_import_dev_templates' ) ]
);
}
@@ -449,7 +544,7 @@ class templates extends Controller
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'codemirror/codemirror.js', 'core', 'interface' ) );
Output::i()->cssFiles = array_merge( Output::i()->cssFiles, Theme::i()->css( 'codemirror/codemirror.css', 'core', 'interface' ) );
Output::i()->cssFiles = array_merge( Output::i()->cssFiles, Theme::i()->css( 'templates/templates.css', 'cms', 'admin' ) );
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'admin_templates.js', 'cms' ) );
Output::i()->jsFiles = array_merge( Output::i()->jsFiles, Output::i()->js( 'admin_templates.js', 'cms', 'admin' ) );
Output::i()->output = Theme::i()->getTemplate( 'templates' )->templates( $templates, $current, $request );
}
@@ -767,8 +862,8 @@ class templates extends Controller
/* Page, css, js */
if ( $type == 'js' or $type == 'css' )
{
$fileExt = ( $type == 'js' ) ? '.js' : ( $type == 'css' ? '.css' : NULL );
if ( $fileExt AND ! preg_match( '#' . preg_quote( $fileExt, '#' ) . '$#', $values['template_title'] ) )
$fileExt = ( $type == 'js' ) ? '.js' : '.css';
if ( ! preg_match( '#' . preg_quote( $fileExt, '#' ) . '$#', $values['template_title'] ) )
{
$values['template_title'] .= $fileExt;
}
@@ -1139,7 +1234,7 @@ class templates extends Controller
$displaySettings = $db->display_settings;
foreach( TemplatesClass::$databaseDefaults as $field => $template )
{
if( isset( $displaySettings[ $field ] ) and $displaySettings[ $field ]['template'] == Request::i()->group )
if( isset( $displaySettings[ $field ]['template'] ) and $displaySettings[ $field ]['template'] == Request::i()->group )
{
switch( $field )
{