Version 4.1.19

This commit is contained in:
Neo committed 2025-12-19 05:38:56 -08:00
1 parent 28bd025b35
commit 2bd5025018
2674 files changed
+233518 -77766

No files matched your search

+112 -59
View File
@@ -3,7 +3,7 @@
* @brief Content Application Class
* @author <a href=''>Invision Power Services, Inc.</a>
* @copyright (c) 2014 Invision Power Services, Inc.
* @package IPS Social Suite
* @package IPS Community Suite
* @subpackage Content
* @since 13 Jan 2014
* @version
@@ -15,17 +15,25 @@ spl_autoload_register( function( $class )
{
if ( mb_substr( $class, 0, 15 ) === 'IPS\cms\Records' and is_numeric( mb_substr( $class, 15, 1 ) ) )
{
$databaseId = mb_substr( $class, 15 );
$databaseId = intval( mb_substr( $class, 15 ) );
$databases = \IPS\cms\Databases::databases();
if ( ! isset( $databases[ $databaseId ] ) )
{
return false;
}
$titleField = $databases[ $databaseId ]->field_title;
$contentField = $databases[ $databaseId ]->field_content;
$titleLang = 'content_db_lang_su_' . $databaseId;
$includeInSearch = $databases[ $databaseId ]->search ? "TRUE" : "FALSE";
$data = <<<EOF
namespace IPS\cms;
class Records{$databaseId} extends Records
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$commentClass = 'IPS\cms\Records\Comment{$databaseId}';
public static \$reviewClass = 'IPS\cms\Records\Review{$databaseId}';
@@ -34,6 +42,7 @@ spl_autoload_register( function( $class )
public static \$title = '{$titleLang}';
public static \$module = 'records{$databaseId}';
public static \$reputationType = 'record_id_{$databaseId}';
public static \$includeInSearch = {$includeInSearch};
public static \$databaseColumnMap = array(
'author' => 'member_id',
'container' => 'category_id',
@@ -48,14 +57,14 @@ spl_autoload_register( function( $class )
'last_comment' => 'record_last_comment',
'last_comment_by' => 'record_last_comment_by',
'last_comment_name' => 'record_last_comment_name',
'last_comment_name_seo' => 'record_last_comment_seo',
'views' => 'record_views',
'approved' => 'record_approved',
'pinned' => 'record_pinned',
'locked' => 'record_locked',
'featured' => 'record_featured',
'rating' => 'record_rating',
'rating_hits' => 'rating_hits',
'rating' => 'record_rating',
'rating_average' => 'record_rating',
'rating_total' => 'rating_value',
'num_reviews' => 'record_reviews',
'last_review' => 'record_last_review',
@@ -71,16 +80,18 @@ EOF;
if ( mb_substr( $class, 0, 23 ) === 'IPS\cms\Records\Comment' and is_numeric( mb_substr( $class, 23, 1 ) ) )
{
$databaseId = mb_substr( $class, 23 );
$databaseId = intval( mb_substr( $class, 23 ) );
$data = <<<EOF
namespace IPS\cms\Records;
class Comment{$databaseId} extends Comment
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$itemClass = 'IPS\cms\Records{$databaseId}';
public static \$title = 'content_record_comments_title_{$databaseId}';
public static \$reputationType = 'comment_id_{$databaseId}';
}
EOF;
eval( $data );
@@ -88,13 +99,14 @@ EOF;
if ( mb_substr( $class, 0, 22 ) === 'IPS\cms\Records\Review' and is_numeric( mb_substr( $class, 22, 1 ) ) )
{
$databaseId = mb_substr( $class, 22 );
$databaseId = intval( mb_substr( $class, 22 ) );
$data = <<<EOF
namespace IPS\cms\Records;
class Review{$databaseId} extends Review
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$itemClass = 'IPS\cms\Records{$databaseId}';
public static \$title = 'content_record_reviews_title_{$databaseId}';
@@ -105,16 +117,18 @@ EOF;
if ( mb_substr( $class, 0, 18 ) === 'IPS\cms\Categories' and is_numeric( mb_substr( $class, 18, 1 ) ) )
{
$databaseId = mb_substr( $class, 18 );
$databaseId = intval( mb_substr( $class, 18 ) );
$data = <<<EOF
namespace IPS\cms;
class Categories{$databaseId} extends Categories
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$contentItemClass = 'IPS\cms\Records{$databaseId}';
protected static \$containerIds = NULL;
public static \$modPerm = 'cms{$databaseId}';
}
EOF;
@@ -123,13 +137,14 @@ EOF;
if ( mb_substr( $class, 0, 32 ) === 'IPS\cms\Records\RecordsTopicSync' )
{
$databaseId = mb_substr( $class, 32 );
$databaseId = intval( mb_substr( $class, 32 ) );
$data = <<<EOF
namespace IPS\cms\Records;
class RecordsTopicSync{$databaseId} extends \IPS\cms\Records{$databaseId}
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$databaseTable = 'cms_custom_database_{$databaseId}';
public static \$databaseColumnId = 'record_topicid';
@@ -146,13 +161,14 @@ EOF;
if ( mb_substr( $class, 0, 32 ) === 'IPS\cms\Records\CommentTopicSync' )
{
$databaseId = mb_substr( $class, 32 );
$databaseId = intval( mb_substr( $class, 32 ) );
$data = <<<EOF
namespace IPS\cms\Records;
class CommentTopicSync{$databaseId} extends CommentTopicSync
{
protected static \$multitons = array();
protected static \$multitonMap = array();
public static \$customDatabaseId = $databaseId;
public static \$itemClass = 'IPS\cms\Records\RecordsTopicSync{$databaseId}';
public static \$title = 'content_record_comments_title_{$databaseId}';
@@ -163,13 +179,13 @@ EOF;
if ( mb_substr( $class, 0, 14 ) === 'IPS\cms\Fields' and is_numeric( mb_substr( $class, 14, 1 ) ) )
{
$databaseId = mb_substr( $class, 14 );
$databaseId = intval( mb_substr( $class, 14 ) );
eval( "namespace IPS\\cms; class Fields{$databaseId} extends Fields { public static \$customDatabaseId = $databaseId; }" );
}
if ( mb_substr( $class, 0, 47 ) === 'IPS\cms\extensions\core\EditorLocations\Records' and is_numeric( mb_substr( $class, 47, 1 ) ) )
{
$databaseId = mb_substr( $class, 47 );
$databaseId = intval( mb_substr( $class, 47 ) );
eval( "namespace IPS\\cms\\extensions\\core\\EditorLocations; class Records{$databaseId} extends \\IPS\\cms\\extensions\\core\\EditorLocations\\Records { public static \$customDatabaseId = $databaseId; }" );
}
} );
@@ -217,17 +233,14 @@ class _Application extends \IPS\Application
'tab' => 'cms',
'controller' => 'fields',
'do' => 'manage&database_id=' . $database['id'],
'restriction' => 'fields_manage'
'restriction' => 'cms_fields_manage'
);
\IPS\Member::loggedIn()->language()->words[ 'menu__cms_databases_records_' . $database['id'] ] = \IPS\Member::loggedIn()->language()->addToStack('content_db_' . $database['id']);
\IPS\Member::loggedIn()->language()->words[ 'menu__cms_databases_categories_' . $database['id'] ] = '&nbsp;&nbsp;' . \IPS\Member::loggedIn()->language()->addToStack('menu__cms_categories');
\IPS\Member::loggedIn()->language()->words[ 'menu__cms_databases_fields_' . $database['id'] ] = '&nbsp;&nbsp;' . \IPS\Member::loggedIn()->language()->addToStack('menu__cms_fields');
}
/* Check for, and build IN_DEV templates if required */
$this->_writeInDevTemplates();
return $menu;
}
@@ -329,18 +342,18 @@ class _Application extends \IPS\Application
) );
/* Needs to be added before createDatabase is called */
\IPS\Lang::saveCustom( 'cms', "content_db_" . $database->id, "Articles" );
\IPS\Lang::saveCustom( 'cms', "module__cms_records" . $database->id, "Articles" );
\IPS\Lang::saveCustom( 'cms', "content_db_" . $database->id . '_desc', "Our website articles" );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_sl_" . $database->id, 'article' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_pl_" . $database->id, 'articles' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_su_" . $database->id, 'Article' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_pu_" . $database->id, 'Articles' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_ia_" . $database->id, 'an article' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_sl_" . $database->id . '_pl', 'Articles' );
\IPS\Lang::saveCustom( 'cms', "cms_create_menu_records_" . $database->id, 'Article in Articles' );
\IPS\Lang::saveCustom( 'cms', "digest_area_records" . $database->id, "Articles" );
\IPS\Lang::saveCustom( 'cms', "cms_records" . $database->id . '_pl', 'Article' );
\IPS\Lang::saveCustom( 'cms', "content_db_" . $database->id, "Статьи" );
\IPS\Lang::saveCustom( 'cms', "module__cms_records" . $database->id, "Статьи" );
\IPS\Lang::saveCustom( 'cms', "content_db_" . $database->id . '_desc', "Статьи нашего сайта" );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_sl_" . $database->id, 'статья' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_pl_" . $database->id, 'статьи' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_su_" . $database->id, 'Статья' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_pu_" . $database->id, 'Статьи' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_ia_" . $database->id, 'статья' );
\IPS\Lang::saveCustom( 'cms', "content_db_lang_sl_" . $database->id . '_pl', 'Статьи' );
\IPS\Lang::saveCustom( 'cms', "cms_create_menu_records_" . $database->id, 'Запись в Статьи' );
\IPS\Lang::saveCustom( 'cms', "digest_area_records" . $database->id, "Статьи" );
\IPS\Lang::saveCustom( 'cms', "cms_records" . $database->id . '_pl', 'Статья' );
try
{
@@ -350,7 +363,7 @@ class _Application extends \IPS\Application
{
$database->delete();
\IPS\Log::i( LOG_ERR )->write( $ex, 'pages_create_db_error' );
\IPS\Log::log( $ex, 'pages_create_db_error' );
throw new \LogicException( $ex->getMessage() );
}
@@ -359,8 +372,9 @@ class _Application extends \IPS\Application
$database->revisions = 1;
$database->search = 1;
$database->comment_bump = 1; # Just new comments bump record
$database->rss = 1;
$database->fixed_field_perms = array( 'record' => array( 'visible' => true, 'perm_view' => '*', 'perm_2' => '*', 'perm_3' => '*' ) );
$database->rss = 10;
$database->record_count = 1;
$database->fixed_field_perms = array( 'record_image' => array( 'visible' => true, 'perm_view' => '*', 'perm_2' => '*', 'perm_3' => '*' ) );
$database->options['comments'] = 1;
$database->field_sort = 'primary_id_field';
$database->field_direction = 'asc';
@@ -372,18 +386,16 @@ class _Application extends \IPS\Application
$comment = 'IPS\cms\Records\Comment' . $database->id;
$container = 'IPS\cms\Categories' . $database->id;
$link = (string) \IPS\Http\Url::ips('pages_docs');
$link = (string) \IPS\Http\Url::ips('docs/pages_docs');
$content = <<<EOF
<p>Welcome to Pages!</p>
<p>Pages extends your site with custom content management designed especially for communities.
Create brand new sections of your community using features like blocks, databases and articles,
pulling in data from other areas of your community.</p>
<p>Create custom pages in your community using our drag'n'drop, WYSIWYG editor.
Build blocks that pull in all kinds of data from throughout your community to create dynamic pages,
or use one of the ready-made widgets we include with the IPS Community Suite.</p>
<p>Добро пожаловать в приложение Страницы!</p>
<p>Приложение Страницы призвано расширить ваш сайт путём гибкого управления контентом, разработанное специально для сообществ.
Создайте совершенно новые разделы вашего сообщества, используя такие особенности, как блоки, базы данных и статьи, и внедряя дополнительную информацию из других разделов сообщества.</p>
<p>Создавайте собственные страницы, используя наш удобный WYSIWYG редактор.
Создавайте блоки, которые отображают все виды информации из всего вашего сообщества для создания динамических страниц, или используйте стандартные готовые блоки, присутствующие в IPS Community Suite.</p>
<p><br></p>
<p><a href="{$link}">View our Pages documentation</a></p>
<p><a href="{$link}">Просмотреть документацию приложения</a></p>
EOF;
$titleField = 'field_' . $database->field_title;
@@ -393,7 +405,7 @@ EOF;
$member = \IPS\Member::loggedIn()->member_id ? \IPS\Member::loggedIn() : \IPS\Member::load(1);
$record = $item::createItem( $member, \IPS\Request::i()->ipAddress(), \IPS\DateTime::ts( time() ), $category, FALSE );
$record->$titleField = "Welcome to Pages";
$record->$titleField = "Добро пожаловать в Страницы";
$record->$contentField = $content;
$record->save();
@@ -404,8 +416,8 @@ EOF;
/* Create the page */
$pageValues = array(
'page_name' => "Articles",
'page_title' => "Articles",
'page_name' => "Статьи",
'page_title' => "Статьи",
'page_seo_name' => "articles.html",
'page_folder_id' => 0,
'page_ipb_wrapper' => 1,
@@ -413,11 +425,25 @@ EOF;
'page_type' => 'builder',
'page_template' => 'page_builder__single_column__page_page_builder_single_column'
);
$page = \IPS\cms\Pages\Page::createFromForm( $pageValues, 'html' );
try
{
$page = \IPS\cms\Pages\Page::createFromForm( $pageValues, 'html' );
}
catch( \Exception $ex )
{
\IPS\Log::log( $ex, 'pages_create_page_error' );
}
$page->setAsDefault();
\IPS\Db::i()->replace( 'core_permission_index', array(
'app' => 'cms',
'perm_type' => 'pages',
'perm_type_id' => $page->id,
'perm_view' => '*'
) );
$database->page_id = $page->id;
$database->save();
@@ -427,12 +453,12 @@ EOF;
$buttonUrl = (string) \IPS\Http\Url::internal( 'applications/cms/interface/default/block_arrow.png', 'none' );
$defaultContent = <<<EOF
<p>
<strong>Welcome to Pages!</strong>
<strong>Добро пожаловать в приложение Страницы!</strong>
</p>
<p>
To get started, make sure you are logged in and click the arrow on the left hand side <img src="{$buttonUrl}"> to expand the block manager.
Для начала, убедитесь, что вы авторизовались и нажмите на стрелку с правой стороны <img src="{$buttonUrl}"> , чтобы развернуть менеджер блоков.
<br>
You can move, add and edit blocks without the need for complex coding!
Вы можете перемещать, добавлять и редактировать блоки без необходимости программирования!
</p>
EOF;
@@ -462,7 +488,7 @@ EOF;
/* Add block container (custom)*/
$container = new \IPS\cms\Blocks\Container;
$container->parent_id = 0;
$container->name = "Custom";
$container->name = "Дополнительно";
$container->type = 'block';
$container->key = 'block_custom';
$container->save();
@@ -470,7 +496,7 @@ EOF;
/* Add block container (plugins) */
$container = new \IPS\cms\Blocks\Container;
$container->parent_id = 0;
$container->name = "Plugins";
$container->name = "Плагины";
$container->type = 'block';
$container->key = 'block_plugins';
$container->save();
@@ -587,17 +613,44 @@ EOF;
}
/**
* Write the IN_DEV templates to disk
* Default front navigation
*
* @return void
* @code
// Each item...
array(
'key' => 'Example', // The extension key
'app' => 'core', // [Optional] The extension application. If ommitted, uses this application
'config' => array(...), // [Optional] The configuration for the menu item
'title' => 'SomeLangKey', // [Optional] If provided, the value of this language key will be copied to menu_item_X
'children' => array(...), // [Optional] Array of child menu items for this item. Each has the same format.
)
return array(
'rootTabs' => array(), // These go in the top row
'browseTabs' => array(), // These go under the Browse tab on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Browse tab may not exist)
'browseTabsEnd' => array(), // These go under the Browse tab after all other items on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Browse tab may not exist)
'activityTabs' => array(), // These go under the Activity tab on a new install or when restoring the default configuraiton; or in the top row if installing the app later (when the Activity tab may not exist)
)
* @endcode
* @return array
*/
public function _writeInDevTemplates()
public function defaultFrontNavigation()
{
if ( \IPS\IN_DEV )
{
//\IPS\cms\Theme::writeInDev();
}
$browseTabs = array();
try
{
$defaultPage = \IPS\cms\Pages\Page::getDefaultPage();
$browseTabs[] = array( 'key' => 'Pages', 'config' => array( 'menu_content_page' => $defaultPage->id, 'menu_title_page_type' => 0 ) );
}
catch( \OutOfRangeException $ex ) { }
return array(
'rootTabs' => array(),
'browseTabs' => $browseTabs,
'browseTabsEnd' => array(),
'activityTabs' => array()
);
}
}