Version 4.1.19
This commit is contained in:
1 parent
28bd025b35
commit
2bd5025018
2674 files changed
+233518
-77766
No files matched your search
+151
-45
@@ -5,207 +5,313 @@ Invision Power Services, Inc. is grateful to the following projects, whose work
|
||||
has been used throughout the IPS Community Suite to add style, flair and functionality
|
||||
to our product.
|
||||
|
||||
NULLING
|
||||
Last Updated: 15 March 2017
|
||||
Author: IPBMafia.ru
|
||||
|
||||
AES implementation in PHP
|
||||
Last Updated: 22 July 2014
|
||||
Description: Used by \IPS\Text\Encrypt to provide two-way text encryption for storing certain data.
|
||||
Location: system/3rd_party/AES
|
||||
Included version: Last Updated: 22 July 2014
|
||||
Website: http://www.movable-type.co.uk/scripts/aes-php.html
|
||||
License: http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
Base64.js Polyfill
|
||||
Description: Polyfill for JS AtoB and BtoA methods in Chat
|
||||
Location: /applications/chat/interface/base64/base64.js
|
||||
Included version: 0.3.0
|
||||
Website: https://github.com/davidchambers/Base64.js
|
||||
License: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Buzz.js
|
||||
Included version: 1.1.8
|
||||
Description: HTML5 audio support for notifications & chat
|
||||
Location: applications/core/interface/buzz
|
||||
Included version: 1.2
|
||||
Website: http://buzz.jaysalvat.com/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
CKEditor
|
||||
Included version: 4.5.4
|
||||
Description: Provides the editor functionality for submitting content.
|
||||
Location: In development: applications/core/dev/ckeditor (custom build with additional plugins and some code changes)
|
||||
Included version: 4.6.2
|
||||
Website: http://ckeditor.com
|
||||
License: http://www.gnu.org/copyleft/lesser.html
|
||||
|
||||
Codemirror (with C-like, CSS, HTMLMixed, JavaScript, PHP, SQL and XML modes and merge, search, and searchcursor addons)
|
||||
Included version: 5.8
|
||||
Description: Provides code editor for adding code to content, editing templates in the AdminCP, etc.
|
||||
Location: In development: applications/core/dev/codemirror
|
||||
Included version: 5.22.1
|
||||
Website: http://codemirror.net
|
||||
License: http://codemirror.net/LICENSE
|
||||
|
||||
Cropper
|
||||
Description: Provides cropping functionality for profile photos
|
||||
Location: applications/core/interface/cropper
|
||||
Included version: 0.8
|
||||
Website: https://github.com/fengyuanchen/cropper
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Esrever
|
||||
Description: Unicode-aware string reversing, used in Chat
|
||||
Location: /applications/chat/interface/esrever/esrever.js
|
||||
Included version: 0.2.0
|
||||
Website: https://github.com/mathiasbynens/esrever
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
FontAwesome
|
||||
Included version: 4.4.0
|
||||
Description: General icons for UI
|
||||
Location: Font files in applications/core/interface/font and CSS in development in applications/core/dev/css/global/framework/fonts.css (mixed with other CSS and modified to use correct path to font files)
|
||||
Included version: 4.7.0
|
||||
Website: http://fortawesome.github.com/Font-Awesome
|
||||
License: http://fortawesome.github.com/Font-Awesome/#license
|
||||
|
||||
Google Charts
|
||||
Description: Generates charts for statistics in the AdminCP
|
||||
Location: Loaded from CDN https://www.google.com/jsapi
|
||||
Website: https://developers.google.com/chart/
|
||||
|
||||
google-code-prettify
|
||||
Description: Provides syntax highlighting for code posted in content, etc.
|
||||
Location: In development: dev/js/library/prettify and applications/core/dev/css/global/framework/prettify.css
|
||||
Included version: 4 March 2013
|
||||
Website: http://code.google.com/p/google-code-prettify/
|
||||
License: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
google-diff-mode-patch
|
||||
Description: @todo
|
||||
Location: @todo
|
||||
Included version: 19 November 2012
|
||||
Website: https://code.google.com/p/google-diff-match-patch/
|
||||
License: http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
history.js
|
||||
Description: HTML5 history API, used extensively in controllers
|
||||
Location: /dev/js/library/jquery/jquery.history.js
|
||||
Included version: 1.8b2
|
||||
Website: https://github.com/browserstate/history.js
|
||||
License: https://github.com/browserstate/history.js#license
|
||||
|
||||
HTML5shiv
|
||||
Description: Provides some HTML5 compatability for IE8
|
||||
Location: applications/core/interface/html5shiv/html5shiv.js
|
||||
Included version: 3.7.2
|
||||
Website: https://github.com/afarkas/html5shiv
|
||||
License: License: http://opensource.org/licenses/MIT
|
||||
|
||||
HTMLPurifier
|
||||
Included version: 4.6.0
|
||||
Description: Validates and cleans submitted HTML for content
|
||||
Location: system/3rd_party/HTMLPurifier
|
||||
Included version: 4.8.0
|
||||
Website: http://htmlpurifier.org
|
||||
License: http://www.gnu.org/copyleft/lesser.html
|
||||
|
||||
IcoMoon
|
||||
Description: General icons for UI
|
||||
Location: Font files in applications/core/interface/font and CSS in development in applications/core/dev/css/global/framework/fonts.css (mixed with other CSS and modified to use correct path to font files)
|
||||
Website: https://icomoon.io/
|
||||
License: http://creativecommons.org/licenses/by/4.0/
|
||||
|
||||
jQuery
|
||||
Included version: 1.11.2
|
||||
Description: JavaScript Library
|
||||
Location: In development: dev/js/library/jquery/jquery.js
|
||||
Included version: 1.12.4
|
||||
Website: http://jquery.com
|
||||
License: http://jquery.org/license
|
||||
|
||||
jQuery dotdotdot
|
||||
Included version: 1.6.16
|
||||
Website: dotdotdot.frebsite.nl
|
||||
Description: On-the-fly truncating of text in elements
|
||||
Location: dev/js/library/jquery/jquery.dotdotdot.min.js
|
||||
Included version: 1.8.3
|
||||
Website: http://dotdotdot.frebsite.nl
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jquery.hotkeys.js
|
||||
Website: https://github.com/jeresig/jquery.hotkeys
|
||||
jquery.hoverintent.js
|
||||
Description: Hover library for jQuery used for main navigation
|
||||
Location: dev/js/library/jquery/jquery.hoverintent.js
|
||||
Included version: 1.8.0
|
||||
Website: http://cherne.net/brian/resources/jquery.hoverIntent.html
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery imagesLoaded plugin
|
||||
Description: Plugin that can defer script execution until specified images have loaded
|
||||
Location: dev/js/library/jquery/jquery.imagesloaded.js
|
||||
Included version: 2.1.2 (3.x API isn't compatible with IPS4 at this time)
|
||||
Website: http://desandro.github.io/imagesloaded/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery.menuaim.js
|
||||
Description: Library that provides intelligent activation of menu items based on mouse movement
|
||||
Location: applications/core/interface/jquery/jquery.menuaim.js
|
||||
Included version: 1.1
|
||||
Website: https://github.com/kamens/jQuery-menu-aim
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery.nestedSortable.js
|
||||
Description: Extends jqueryui's sortable with nested support
|
||||
Location: applications/core/interface/jquery/jquery.nestedSortable.js
|
||||
Included version: 2.0
|
||||
Website: http://mjsarfatti.com/sandbox/nestedSortable/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery.rangyinputs.js
|
||||
Description: Simple selection/caret manipulation in textboxes
|
||||
Location: applications/core/interface/jquery/jquery.rangyinputs.js
|
||||
Included version: 1.2.0
|
||||
Website: https://github.com/timdown/rangyinputs
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery slimScroll
|
||||
Included version: 1.3.0
|
||||
Website: http://rocha.la/jQuery-slimScroll
|
||||
|
||||
jQuery.transform.js
|
||||
Description: adds support for CSS transforms to jQuery's animate(), used in ips.ui.dialog.js
|
||||
Location: dev/js/library/jquery/jquery.transform.js
|
||||
Included version: 1.0
|
||||
Website: https://github.com/louisremi/jquery.transform.js
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
jQuery UI (core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, sortable.js, datepicker.js, progressbar.js)
|
||||
Included version: 1.11.3
|
||||
Description: Javascript library for drag+drop, resizing, date polyfill
|
||||
Location: applications/core/interface/jquery/jquery-ui.js
|
||||
Included version: 1.11.4
|
||||
Website: http://jqueryui.com
|
||||
License: http://jquery.org/license
|
||||
|
||||
jQuery UI TouchPunch
|
||||
Description: Library that adds touch support to jquery ui
|
||||
Location: /applications/core/interface/jquery/jquery-touchpunch.js
|
||||
Included version: 0.2.3
|
||||
Website: http://touchpunch.furf.com/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
JSColor
|
||||
Included version: 1.4.4
|
||||
Description: Color selector polyfill
|
||||
Location: applications/core/interface/jscolor
|
||||
Included version: 1.4.5 (2.x API isn't compatible with IPS4 at this time)
|
||||
Website: http://jscolor.com
|
||||
License: http://www.gnu.org/copyleft/lesser.html
|
||||
|
||||
JShrink
|
||||
Description: Provides JavaScript minifcation
|
||||
Location: system/3rd_party/JShrink
|
||||
Included version: 1.1.0
|
||||
Website: https://github.com/tedious/JShrink
|
||||
License: https://github.com/tedious/JShrink/blob/master/LICENSE
|
||||
|
||||
jsTimezoneDetect
|
||||
Included version: 1.0.5
|
||||
Website: http://pellepim.bitbucket.org/jstz/
|
||||
Description: Provides timezone detection
|
||||
Location: dev/js/library/jstz
|
||||
Included version: 1.0.6
|
||||
Website: https://bitbucket.org/pellepim/jstimezonedetect
|
||||
License: http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
Minify
|
||||
Included Version: 2.1.7
|
||||
Website: http://code.google.com/p/minify/
|
||||
License: http://opensource.org/licenses/BSD-3-Clause
|
||||
|
||||
Mustache.js
|
||||
Included version: 1.0.0
|
||||
Description: JS templating engine
|
||||
Location: dev/js/library/mustache/
|
||||
Included version: 2.2.1
|
||||
Website: http://github.com/janl/mustache.js
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Normalize.css
|
||||
Description: Sets base CSS styles for consistency across browsers
|
||||
Location: applications/core/dev/css/global/framework/normalize.css
|
||||
Included version: 3.0.2
|
||||
Website: http://necolas.github.io/normalize.css/
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
parseUri
|
||||
Description: Used to parse URLs in JS
|
||||
Location: dev/js/framework/common/utils/ips.utils.url.js
|
||||
Included version: 1.2.2
|
||||
Website: http://blog.stevenlevithan.com/archives/parseuri
|
||||
License: http://opensource.org/licenses/MIT
|
||||
|
||||
Payment Method Icons
|
||||
Description: Credit card logo icons for UI
|
||||
Location: applications/nexus/dev/resources/front/cards
|
||||
Website: http://www.dreamstale.com/free-download-payment-method-vector-icons/
|
||||
License: http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
PclZip
|
||||
Description: Used by \IPS\Archive\Zip to provide zip handling features if the PHP Zip extension is not available
|
||||
Location: system/3rd_party/pclzip
|
||||
Included version: 2.8.2
|
||||
Website: http://www.phpconcept.net/pclzip/
|
||||
License: http://www.gnu.org/copyleft/lesser.html
|
||||
|
||||
PEAR Mail
|
||||
Included version: 1.2.0
|
||||
Website: http://pear.php.net/package/Mail
|
||||
License: http://www.opensource.org/licenses/bsd-license.php
|
||||
|
||||
PHP Diff Implementation
|
||||
Description: Computes difference between two strings, used to display differences between content revisions, themes, etc.
|
||||
Location: system/3rd_party/Diff
|
||||
Included version: 11 Feb 2013
|
||||
Website: http://code.stephenmorley.org/php/diff-implementation/
|
||||
License: http://creativecommons.org/publicdomain/zero/1.0/legalcode
|
||||
|
||||
|
||||
php-punycode
|
||||
Description: A library for Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)
|
||||
Location: system/3rd_party/php-punycode
|
||||
Included version: 2.1.0
|
||||
Website: https://github.com/true/php-punycode
|
||||
License: https://github.com/true/php-punycode/blob/master/LICENSE
|
||||
|
||||
phpQuery
|
||||
Description: Handles template hooks
|
||||
Location: system/3rd_party/phpQuery
|
||||
Included Version: 0.9.5
|
||||
Website: https://code.google.com/p/phpquery
|
||||
License: http://opensource.org/licenses/mit-license.php
|
||||
|
||||
Plupload
|
||||
Included version: 2.1.2
|
||||
Description: Facilitates uploading files
|
||||
Location: applications/core/interface/plupload
|
||||
Included version: 2.1.9
|
||||
Website: http://www.plupload.com
|
||||
License: http://www.plupload.com/license/plupload_commercial_oem.txt
|
||||
Modifications: https://github.com/moxiecode/moxie/pull/67/files
|
||||
|
||||
pop3.class.inc
|
||||
Included version: 1.17
|
||||
Website: http://www.phpclasses.org/package/1120-PHP-Communicating-with-a-POP3-mail-server.html
|
||||
License: http://opensource.org/licenses/GPL-1.0
|
||||
|
||||
Preloaders.net
|
||||
Description: Animated gif preload imags
|
||||
Website: http://preloaders.net/
|
||||
License: http://preloaders.net/en/terms_of_use
|
||||
|
||||
success.mp3 Notification Sound by RCP Tones
|
||||
Description: "Success" sound used in ips.ui.uploader.js
|
||||
Location: /applications/core/interface/sounds/success.mp3
|
||||
Website: http://rcptones.com/dev_tones/
|
||||
License: http://creativecommons.org/licenses/by/3.0/us/
|
||||
|
||||
Underscore.js
|
||||
Included version: 1.7.0
|
||||
Description: General-purpose functional JS library
|
||||
Location: dev/js/library/underscore/
|
||||
Included version: 1.8.3
|
||||
Website: http://underscorejs.org
|
||||
License: https://github.com/documentcloud/underscore/blob/master/LICENSE
|
||||
|
||||
Video.js
|
||||
Included version: 4.11.4
|
||||
Description: HTML5 video player for Gallery
|
||||
Location: applications/interface/videojs
|
||||
Included version: 4.12.15
|
||||
Website: http://www.videojs.com/
|
||||
License: https://github.com/videojs/video.js/blob/master/LICENSE
|
||||
|
||||
Whoops
|
||||
Description: Provides error handling for development mode
|
||||
Location: dev/Whoops
|
||||
Included Version: 2.1.4
|
||||
Website: http://filp.github.io/whoops/
|
||||
License: https://github.com/filp/whoops/blob/master/LICENSE.md
|
||||
|
||||
world-flags-sprite
|
||||
Description: Flag icons for UI
|
||||
Location: In development: Image files at applications/core/dev/resources/global, facilitated by custom CSS at applications/core/dev/css/global/flags.css
|
||||
Included version: Last Updated Oct 2015
|
||||
Website: https://github.com/lafeber/world-flags-sprite/
|
||||
License: https://github.com/lafeber/world-flags-sprite/blob/master/LICENSE
|
||||
|
||||
XRegExp (with addons)
|
||||
Included Version: 2.0.0
|
||||
Description: Advanced Regular Expression JS library, used in autolink editor plugin and search result highlighting
|
||||
Location: In development: dev/js/library/xregexp/xregexp-all.js
|
||||
Included Version: 3.1.1
|
||||
Website: http://xregexp.com
|
||||
License: http://mit-license.org
|
||||
License: http://mit-license.org
|
||||
|
||||
Whoops
|
||||
Website: http://filp.github.io/whoops/
|
||||
License: https://github.com/filp/whoops/blob/master/LICENSE.md
|
||||
phpass
|
||||
Description: Password strength calculator
|
||||
Location: system/3rd_party/Diff
|
||||
Website: https://github.com/rchouinard/phpass
|
||||
License: http://mit-license.org
|
||||
@@ -3,7 +3,7 @@
|
||||
/**
|
||||
* @brief UTF-8 Conversion
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief UTF-8 Conversion
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Init for UTF8 Conversion
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @package IPS Community Suite
|
||||
* @since 4 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -12,12 +12,12 @@
|
||||
namespace IPSUtf8;
|
||||
|
||||
/**
|
||||
* Class to contain IPS Social Suite autoloader and exception handler
|
||||
* Class to contain IPS Community Suite autoloader and exception handler
|
||||
*/
|
||||
class IPSUtf8
|
||||
{
|
||||
/**
|
||||
* Initiate IPS Social Suite UTF8 Converter, autoloader and exception handler
|
||||
* Initiate IPS Community Suite UTF8 Converter, autoloader and exception handler
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
@@ -71,12 +71,16 @@ class IPSUtf8
|
||||
public static function defaultConstants()
|
||||
{
|
||||
return array(
|
||||
'IPB_LOCK' => TRUE, /* Lock conversion to only IP.Board Databases */
|
||||
'FORCE_CONVERT' => FALSE, /* Enforce conversion */
|
||||
'IPB_FIREWALL' => 1, /* This is a workaround for an old exploit to prevent upgrade issues */
|
||||
'IPB_LOCK' => TRUE, /* Lock conversion to only IP.Board Databases */
|
||||
'BYPASS_SAFETY_LOCK' => FALSE,
|
||||
'FORCE_CONVERT' => FALSE, /* Enforce conversion */
|
||||
'FORCE_CONVERT_CHARSET' => NULL,
|
||||
'FORCE_CONVERT_METHOD' => NULL,
|
||||
'SOURCE_DB_CHARSET' => NULL, /* If set, will force the source database connection to use this charset */
|
||||
'UTF8_INSERT_ONLY' => FALSE, /* If true, and sql_charset is present and set to utf8 in conf_global.php, then the "fast" method will simply insert without converting. Useful for mixed collation databases where the utf8 tables are real utf8 */
|
||||
'SOURCE_DB_CHARSET' => NULL, /* If set, will force the source database connection to use this charset */
|
||||
'UTF8_INSERT_ONLY' => FALSE, /* If true, and sql_charset is present and set to utf8 in conf_global.php, then the "fast" method will simply insert without converting. Useful for mixed collation databases where the utf8 tables are real utf8 */
|
||||
'FORCE_MULTI_CONVERT' => FALSE, /* Forces the converter to use CONVERT(CONVERT(CONVERT(x AS <SOURCE_DB_CHARSET>) AS BINARY) AS UTF8) which is needed in some random old data sets */
|
||||
'LOG' => FALSE, /* Log Conversion Data */
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Web conversion process
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Web conversion process
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -16,7 +16,7 @@ use \IPSUtf8\Output\Browser\Template;
|
||||
* Web Conversion process
|
||||
*/
|
||||
class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
{
|
||||
{
|
||||
/**
|
||||
* Execute
|
||||
*
|
||||
@@ -25,7 +25,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
public function manage()
|
||||
{
|
||||
$output = NULL;
|
||||
|
||||
|
||||
switch( \IPSUtf8\Session::i()->status )
|
||||
{
|
||||
default:
|
||||
@@ -36,7 +36,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process
|
||||
*
|
||||
@@ -47,19 +47,19 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
if ( isset( \IPSUtf8\Request::i()->use_utf8mb4 ) )
|
||||
{
|
||||
$sessionData = \IPSUtf8\Session::i()->json;
|
||||
|
||||
|
||||
$sessionData['use_utf8mb4'] = ( ! empty( \IPSUtf8\Request::i()->use_utf8mb4 ) ) ? 1 : 0;
|
||||
|
||||
|
||||
\IPSUtf8\Session::i()->json = $sessionData;
|
||||
\IPSUtf8\Session::i()->save();
|
||||
}
|
||||
|
||||
|
||||
\IPSUtf8\Convert::i()->process( 100 );
|
||||
|
||||
|
||||
$json = \IPSUtf8\Session::i()->json;
|
||||
$percent = round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert()) * 100, 2 );
|
||||
$msg = "Processing " . \IPSUtf8\Session::i()->current_table . '<br>Row: ' . \IPSUtf8\Session::i()->current_row . ' of ' . \IPSUtf8\Session::i()->tables[ \IPSUtf8\Session::i()->current_table ]['count'] . ' - Total: ' . $percent . '%';
|
||||
|
||||
|
||||
if ( ! \IPSUtf8\Request::i()->isAjax() )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->output = Template::process( \IPSUtf8\Session::i()->status, $percent, $msg );
|
||||
@@ -69,7 +69,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
\IPSUtf8\Output\Browser::i()->sendOutput( json_encode( array( \IPSUtf8\Session::i()->status, $percent, $msg ) ), 200, 'application/json' );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Completed
|
||||
*
|
||||
@@ -80,7 +80,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
\IPSUtf8\Session::i()->reset();
|
||||
return $this->welcome();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Completed
|
||||
*
|
||||
@@ -91,7 +91,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
\IPSUtf8\Convert::i()->finish();
|
||||
\IPSUtf8\Output\Browser::i()->output = Template::completed( \IPSUtf8\Session::i()->timeTaken( true ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* We're finished! (In a good way)
|
||||
*
|
||||
@@ -100,11 +100,10 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
public function finish()
|
||||
{
|
||||
\IPSUtf8\Convert::i()->renameTables();
|
||||
\IPSUtf8\Convert::i()->deleteOriginalTables();
|
||||
\IPSUtf8\Session::i()->status = null;
|
||||
\IPSUtf8\Session::i()->completed_json = array();
|
||||
\IPSUtf8\Session::i()->reset();
|
||||
|
||||
|
||||
/* Attempt to automatically update conf_global.php */
|
||||
$updated = FALSE;
|
||||
|
||||
@@ -136,7 +135,7 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
|
||||
\IPSUtf8\Output\Browser::i()->output = Template::finished( $updated );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Welcome page
|
||||
*
|
||||
@@ -149,39 +148,31 @@ class browser extends \IPSUtf8\Dispatcher\Controller
|
||||
@mkdir( THIS_PATH . '/tmp' );
|
||||
@chmod( THIS_PATH . '/tmp', 0777 );
|
||||
}
|
||||
|
||||
|
||||
if ( ! is_writable( THIS_PATH . '/tmp' ) )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->error("Please ensure that '" . THIS_PATH . '/tmp' . "' is writable.");
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
if ( IPB_LOCK and ! \IPSUtf8\Session::i()->is_ipb )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->error("Cannot locate the IP.Board database tables. Please check to ensure the SQL Prefix if set, is correct in 'conf_global.php'.");
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
if ( ! count( \IPSUtf8\Session::i()->tables ) )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->error("No tables found for processing. Please check to ensure the correct database name and prefix are being used.");
|
||||
exit();
|
||||
}
|
||||
|
||||
if ( \IPSUtf8\Convert::i()->databaseIsUtf8() AND !count( \IPSUtf8\Convert::i()->getNonUtf8CollationTables() ) )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->error( 'The database tables are UTF-8, collations are correct and there is nothing to convert. You can <strong><a href="../upgrade">proceed with the upgrade</strong>.' );
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
$json = \IPSUtf8\Session::i()->json;
|
||||
$percent = ( \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) ? sprintf ("%6.2f", round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) * 100, 2 ) ) : 100;
|
||||
|
||||
$percent = ( \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) ? round( ($json['convertedCount'] / \IPSUtf8\Convert::i()->getTotalRowsToConvert() ) * 100, 2 ) : 100;
|
||||
|
||||
$isUtf8 = (boolean) ( \IPSUtf8\Convert::i()->databaseIsUtf8() );
|
||||
$processing = (boolean) ( \IPSUtf8\Session::i()->status === 'processing' );
|
||||
|
||||
|
||||
\IPSUtf8\Output\Browser::i()->output = Template::welcome( $isUtf8, \IPSUtf8\Session::i()->status, $percent );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Web conversion process
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief CLI conversion process
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -144,9 +144,11 @@ class cli
|
||||
|
||||
\IPSUtf8\Output\Cli::i()->sendOutput( "\n" . count( $convertClass::i()->getNonUtf8Tables() ) . " table(s) are not UTF-8 and need converting.\n");
|
||||
$origUtf8Charset = \IPSUtf8\Db::i('utf8')->getCharset();
|
||||
if ( version_compare( \IPSUtf8\Db::i()->server_info, '5.5.3', '>=' ) AND \IPSUtf8\Db::i('utf8')->set_charset('utf8mb4') !== FALSE )
|
||||
$canMb4 = (bool) \IPSUtf8\Db::i('utf8')->set_charset( 'utf8mb4' );
|
||||
\IPSUtf8\Db::i('utf8')->set_charset( $origUtf8Charset );
|
||||
if ( version_compare( \IPSUtf8\Db::i()->server_info, '5.5.3', '>=' ) AND $canMb4 !== FALSE )
|
||||
{
|
||||
\IPSUtf8\Output\Cli::i()->sendOutput("Use 4-byte UTF-8 Encoding (utf8mb4)?\nSome non-common symbols (such as historical scripts, music symbols and Emoji) require more space in the database to be stored. If you choose 'no', users will not be able to use these symbols on your site. If 'yes', these characters will be able to be used, but the database will use more disk space.\n<choice>[y] Enter 'y' for Yes\n[n] Enter 'n' for No</choice>", 100 );
|
||||
\IPSUtf8\Output\Cli::i()->sendOutput("Use 4-byte UTF-8 Encoding (utf8mb4)?\nSome non-common symbols (such as historical scripts, music symbols and Emoji) require more space in the database to be stored. If you choose 'no', users will not be able to use these symbols on your site. If 'yes', these characters will be able to be used, but the database will use more disk space.\n<choice>[y] Enter 'y' for Yes\n[n] Enter 'n' for No\n[x] Enter 'x' to exit</choice>", 100 );
|
||||
|
||||
$sessionData = \IPSUtf8\Session::i()->json;
|
||||
|
||||
@@ -154,15 +156,18 @@ class cli
|
||||
{
|
||||
$sessionData['use_utf8mb4'] = 1;
|
||||
}
|
||||
else
|
||||
else if ( \IPSUtf8\Output\Cli::i()->response === 'n' )
|
||||
{
|
||||
$sessionData['use_utf8mb4'] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
\IPSUtf8\Session::i()->json = $sessionData;
|
||||
\IPSUtf8\Session::i()->save();
|
||||
}
|
||||
\IPSUtf8\Db::i('utf8')->set_charset( $origUtf8Charset );
|
||||
|
||||
|
||||
\IPSUtf8\Output\Cli::i()->sendOutput( $intro );
|
||||
|
||||
@@ -26,12 +26,12 @@
|
||||
The converter will create new tables with the prefix "x_utf_". The converter will read your existing data, convert it to UTF-8 and then save it into the "x_utf_" prefixed tables.
|
||||
</p>
|
||||
<p>
|
||||
Once the data conversion has taken place, you can test the conversion by editing your <code>conf_global.php</code> file to alter the <code>sql_prefix</code> and to make sure that the <code>sql_charset</code> is set to <code>utf8</code>. The exact instructions for this
|
||||
Once the data conversion has taken place, you can test the conversion by editing your <code>conf_global.php</code> file to alter the <code>sql_tbl_prefix</code> and to make sure that the <code>sql_charset</code> is set to <code>utf8</code>. The exact instructions for this
|
||||
are shown when the conversion has finished.
|
||||
</p>
|
||||
<p>
|
||||
Once you are happy that the conversion is correct, you are prompted to <strong>finish</strong> the conversion. This will rename your existing database tables with the prefix "orig_" and the UTF-8 tables
|
||||
will be renamed to your existing prefix. You are then prompted again to edit your <code>conf_global.php</code> file to alter the <code>sql_prefix</code>.
|
||||
will be renamed to your existing prefix. You are then prompted again to edit your <code>conf_global.php</code> file to alter the <code>sql_tbl_prefix</code>.
|
||||
</p>
|
||||
<p>
|
||||
You can then delete the "orig_" prefixed tables when you are happy that the conversion is complete and the original unconverted data is no longer required.
|
||||
@@ -45,10 +45,10 @@
|
||||
</p>
|
||||
<h3>Getting Help</h3>
|
||||
<p>
|
||||
If you encounter any issues while using this conveter, please report the issue to our <a href="http://community.invisionpower.com/resources/bugs.html/_/ips-extras/">bug tracker</a>. When creating a new
|
||||
If you encounter any issues while using this converter, please report the issue to our <a href="https://invisionpower.com/4bugtrack/">bug tracker</a>. When creating a new
|
||||
bug report please copy and paste the "info" from the converter output.
|
||||
<br />
|
||||
Active IP.Board license holders can also request support via the <a href="https://invisionpower.com/clients">client center</a>.
|
||||
Active IP.Board license holders can also request support via the <a href="https://invisionpower.com/clientarea">client center</a>.
|
||||
<br />
|
||||
If you're using the command line version, please run <code>php cli.php --info</code>. If you're using the web version, please click on the "Tools" button at the top. This information
|
||||
will help us debug the issue. No sensitive data is ever revealed with this tool.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Archive table conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
@@ -16,7 +16,7 @@ namespace IPSUtf8;
|
||||
*/
|
||||
class Convert
|
||||
{
|
||||
const VERSION_ID = '1.1.18';
|
||||
const VERSION_ID = '1.1.20';
|
||||
|
||||
/**
|
||||
* @brief Data Store
|
||||
@@ -147,7 +147,7 @@ class Convert
|
||||
/* MB4? */
|
||||
$sessionData = \IPSUtf8\Session::i()->json;
|
||||
|
||||
if ( isset( $sessionData['use_utf8mb4'] ) AND ! empty( $sessionData['use_utf8mb4'] ) )
|
||||
if ( isset( $sessionData['use_utf8mb4'] ) AND $sessionData['use_utf8mb4'] )
|
||||
{
|
||||
static::$utf->set_charset( 'utf8mb4' );
|
||||
}
|
||||
@@ -301,13 +301,13 @@ class Convert
|
||||
/* Even if the current charset is set to UTF-8, if the Table Charset is latin1, we need to use this method */
|
||||
/* ... but only if the actual column isn't using utf8 */
|
||||
$columnCollation = $schematic['definition']['columns'][$col]['collation'];
|
||||
if ( defined( 'UTF8_INSERT_ONLY' ) AND UTF8_INSERT_ONLY === TRUE AND $tableCharSet == 'utf8' )
|
||||
if ( UTF8_INSERT_ONLY === TRUE AND $tableCharSet == 'utf8' )
|
||||
{
|
||||
$select[] = 'CAST( `' . $col . '` AS BINARY )';
|
||||
}
|
||||
else if ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' ) )
|
||||
else if ( FORCE_MULTI_CONVERT === FALSE AND ( \IPSUtf8\Session::i()->current_charset != 'utf-8' OR ( $tableCharSet != 'utf8' AND ! in_array( $columnCollation, array( 'utf8_unicode_ci', 'utf8mb4_unicode_ci' ) ) ) OR ( $tableCharSet == 'utf8' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' ) ) )
|
||||
{
|
||||
if ( \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' OR mb_substr( $columnCollation, 0, 5 ) == 'latin' )
|
||||
if ( \IPSUtf8\Session::i()->current_charset == 'iso-8859-1' AND mb_substr( $columnCollation, 0, 5 ) == 'latin' )
|
||||
{
|
||||
/* Casting as binary truncates non-latin characters, so if we are using real Latin1, just convert */
|
||||
$select[] = 'CONVERT( `' . $col . '` USING utf8 )';
|
||||
@@ -557,7 +557,7 @@ class Convert
|
||||
/* Optimise */
|
||||
$this->preInsert( $table );
|
||||
|
||||
$insertId = static::$utf->insert( $table['name'], $batch, false, true, $table );
|
||||
$insertId = static::$utf->insert( $table['name'], $batch, true, true, $table );
|
||||
|
||||
if ( ! empty( static::$utf->error ) )
|
||||
{
|
||||
@@ -985,7 +985,7 @@ class Convert
|
||||
$modify = array();
|
||||
$hasUnique = FALSE;
|
||||
|
||||
/* Changing collation can cause issues for duplicate enries in unique keys */
|
||||
/* Changing collation can cause issues for duplicate entries in unique keys */
|
||||
if ( isset( $tableData['definition']['indexes'] ) )
|
||||
{
|
||||
foreach( $tableData['definition']['indexes'] as $key => $index )
|
||||
@@ -1017,7 +1017,7 @@ class Convert
|
||||
/* Let's try an alter first - below may not be necessary */
|
||||
try
|
||||
{
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
}
|
||||
catch( \IPSUtf8\Db\Exception $e )
|
||||
@@ -1026,14 +1026,13 @@ class Convert
|
||||
static::$utf->query( "RENAME TABLE `" . static::$db->prefix . $name . "` TO `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " has Unique Index - temp table created from main." );
|
||||
static::$utf->query( "CREATE TABLE `" . static::$db->prefix . $name . "` LIKE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::log( $name . " created from temp table." );
|
||||
static::$utf->query( "REPLACE INTO `" . static::$db->prefix . $name . "` SELECT * FROM `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . " data copied to new table." );
|
||||
static::$utf->query( "DROP TABLE `" . static::$db->prefix . $name . "_temp`" );
|
||||
static::log( $name . "_temp dropped" );
|
||||
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` CONVERT TO CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
static::$utf->query( "ALTER TABLE `" . static::$db->prefix . $name . "` DEFAULT CHARACTER SET " . $charset . " COLLATE " . $collation );
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1078,6 +1077,12 @@ class Convert
|
||||
|
||||
/* Update table data */
|
||||
\IPSUtf8\Session::i()->updateTableData();
|
||||
|
||||
/* Update character set if we're in IP.Board */
|
||||
if ( static::$utf->checkForTable('core_sys_conf_settings' ) )
|
||||
{
|
||||
static::$utf->update( 'core_sys_conf_settings', array( 'conf_value' => '' ), array( 'conf_key=?', 'gb_char_set' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1085,7 +1090,7 @@ class Convert
|
||||
*
|
||||
* @param int $limit Process() method limit
|
||||
* @param int $cycleCount Items processed if this was in the middle of process()
|
||||
* @return void
|
||||
* @return bool|null
|
||||
*/
|
||||
public function heal( $limit=250, $cycleCount=0 )
|
||||
{
|
||||
@@ -1147,6 +1152,8 @@ class Convert
|
||||
/* Run again */
|
||||
return $this->process( ( $limit - $cycleCount ), TRUE );
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1160,7 +1167,7 @@ class Convert
|
||||
|
||||
if ( \IPSUtf8\Session::i()->current_table AND isset( \IPSUtf8\Session::i()->tables[ \IPSUtf8\Session::i()->current_table ] ) )
|
||||
{
|
||||
/* Table selected and convertion in progress */
|
||||
/* Table selected and conversion in progress */
|
||||
$table = \IPSUtf8\Session::i()->tables[ \IPSUtf8\Session::i()->current_table ];
|
||||
|
||||
static::log( "Continuing with " . $table['name'] . ' (PKEY: ' . \IPSUtf8\Session::i()->current_pkey . ')' );
|
||||
@@ -1502,6 +1509,16 @@ class Convert
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the database is IPS4 already
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function databaseIsIPS4()
|
||||
{
|
||||
return (boolean) static::$db->checkForTable( 'core_members' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the DB is UTF8 already
|
||||
*
|
||||
@@ -1686,19 +1703,22 @@ class Convert
|
||||
*/
|
||||
public static function log( $message )
|
||||
{
|
||||
$file = THIS_PATH . '/tmp/log_' . date('Y-m-d') . '.cgi';
|
||||
$isNew = false;
|
||||
|
||||
if ( ! is_file( $file ) )
|
||||
if ( LOG )
|
||||
{
|
||||
$isNew = true;
|
||||
}
|
||||
|
||||
@file_put_contents( $file, "\n" . str_repeat( '-', 48 ) . "\n" . date('r') . "\n" . $message, FILE_APPEND );
|
||||
|
||||
if ( $isNew )
|
||||
{
|
||||
@chmod( $file, 0777 );
|
||||
$file = THIS_PATH . '/tmp/log_' . date('Y-m-d') . '.cgi';
|
||||
$isNew = false;
|
||||
|
||||
if ( ! is_file( $file ) )
|
||||
{
|
||||
$isNew = true;
|
||||
}
|
||||
|
||||
@file_put_contents( $file, "\n" . str_repeat( '-', 48 ) . "\n" . date('r') . "\n" . $message, FILE_APPEND );
|
||||
|
||||
if ( $isNew )
|
||||
{
|
||||
@chmod( $file, 0777 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Binding Class for Prepared Statements
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Database Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -225,11 +225,20 @@ class Db extends \mysqli
|
||||
*/
|
||||
public function set_charset( $charset )
|
||||
{
|
||||
if ( $charset === 'utf8mb4' )
|
||||
if ( mb_substr( $charset, 0, 4 ) == 'utf8' )
|
||||
{
|
||||
$this->charset = 'utf8mb4';
|
||||
$this->collation = 'utf8mb4_unicode_ci';
|
||||
$this->binaryCollation = 'utf8mb4_bin';
|
||||
if ( $charset === 'utf8mb4' )
|
||||
{
|
||||
$this->charset = 'utf8mb4';
|
||||
$this->collation = 'utf8mb4_unicode_ci';
|
||||
$this->binaryCollation = 'utf8mb4_bin';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->charset = 'utf8';
|
||||
$this->collation = 'utf8_unicode_ci';
|
||||
$this->binaryCollation = 'utf8_bin';
|
||||
}
|
||||
}
|
||||
|
||||
return parent::set_charset( $charset );
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Exception class for database errors
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Database SELECT Statement
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 28 Aug 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -195,7 +195,7 @@ class Select implements \Iterator, \Countable
|
||||
* Get first record
|
||||
*
|
||||
* @return array
|
||||
* @throws \OutOfRangeException
|
||||
* @throws \UnderflowException
|
||||
*/
|
||||
public function first()
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Dispatcher (Web)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
@@ -22,6 +22,12 @@ class Browser extends \IPSUtf8\Dispatcher
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
/* Is this already IPS4 or has the lock been removed? */
|
||||
if( ! \BYPASS_SAFETY_LOCK and \IPSUtf8\Convert::i()->databaseIsIPS4() )
|
||||
{
|
||||
\IPSUtf8\Output\Browser::i()->error( \IPSUtf8\Output\Browser\Template::errorAlreadyIPS4() );
|
||||
}
|
||||
|
||||
$this->controller = ( \IPSUtf8\Request::i()->controller ) ? \IPSUtf8\Request::i()->controller : 'browser';
|
||||
|
||||
$fileLocation = \THIS_PATH . '/modules/browser/' . $this->controller . '.php';
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Dispatcher (CLI)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Abstract class that Controllers should extend
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Dispatcher
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Output Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -51,7 +51,7 @@ class Browser extends \IPSUtf8\Output
|
||||
public function error( $message )
|
||||
{
|
||||
/* Send output */
|
||||
$this->sendOutput( \IPSUtf8\Output\Browser\Template::wrapper( "IPS Converter", \IPSUtf8\Output\Browser\Template::error( $message ), 500 ) );
|
||||
$this->sendOutput( \IPSUtf8\Output\Browser\Template::wrapper( "IPS Converter", \IPSUtf8\Output\Browser\Template::error( $message ), true ), 500 );
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Template Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -16,7 +16,7 @@ namespace IPSUtf8\Output\Browser;
|
||||
*/
|
||||
class Template
|
||||
{
|
||||
public static function wrapper( $title="IPS Converter", $content="")
|
||||
public static function wrapper( $title="IPS Converter", $content="", $isError=false )
|
||||
{
|
||||
$iniTime = @ini_get('max_execution_time');
|
||||
$execTime = ( is_numeric( $iniTime ) ) ? $iniTime : 30;
|
||||
@@ -53,6 +53,11 @@ class Template
|
||||
<body data-url="{$url}">
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
EOFHTML;
|
||||
|
||||
if ( ! $isError )
|
||||
{
|
||||
$html .= <<<EOFHTML
|
||||
<ul class="nav nav-pills pull-right">
|
||||
<li class="{$active['convert']}"><a href="{url="?controller=browser"}">Convert</a></li>
|
||||
EOFHTML;
|
||||
@@ -66,6 +71,9 @@ EOFHTML;
|
||||
$html .= <<<EOFHTML
|
||||
<li class="{$active['tools']}"><a href="{url="?controller=tools"}">Tools</a></li>
|
||||
</ul>
|
||||
EOFHTML;
|
||||
}
|
||||
$html .= <<<EOFHTML
|
||||
<h3 class="text-muted">IPS UTF8 Converter</h3>
|
||||
</div>
|
||||
{$content}
|
||||
@@ -159,7 +167,7 @@ EOFHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Welcome page
|
||||
* Error page
|
||||
*/
|
||||
public static function error( $msg )
|
||||
{
|
||||
@@ -173,6 +181,28 @@ EOFHTML;
|
||||
return static::parse( $html );
|
||||
}
|
||||
|
||||
/**
|
||||
* Error page explaining about database being IPS4 already
|
||||
*/
|
||||
public static function errorAlreadyIPS4()
|
||||
{
|
||||
$html = <<<EOFHTML
|
||||
<p style="text-align:left">
|
||||
The target database is already IPS4. There is no conversion required and the UTF8 converter is locked.
|
||||
<br>To override this and unlock the UTF8 converter, please create a file called "constants.php" and upload it to your /admin/convertutf8/ directory with the following contents:
|
||||
</p>
|
||||
<p><textarea class="form-control" style="height:90px;"><?php
|
||||
define( 'BYPASS_SAFETY_LOCK', true );
|
||||
|
||||
</textarea>
|
||||
</p>
|
||||
<p class="text-danger">Please remember to remove the constants.php file when you are finished!</p>
|
||||
|
||||
EOFHTML;
|
||||
|
||||
return static::parse( $html );
|
||||
}
|
||||
|
||||
/**
|
||||
* Welcome page
|
||||
*/
|
||||
@@ -236,14 +266,13 @@ else if ( $isUtf8 === true )
|
||||
The database is set to UTF-8, however {$cnt} table(s) have incorrect collations and need fixing.
|
||||
<p><a class="btn btn-lg btn-info" href="{url="?controller=tools&do=collation"}">Fix UTF-8 collations</a></p>
|
||||
</p>
|
||||
<p class="text-info">
|
||||
If, after this process completes, you start to experience errors or see corrupt text, it is likely that you need to convert your data anyway. You can do this by clicking the button below.<br>
|
||||
<a class='btn btn-info' href='{url="?controller={$controller}&convert_anyway=1"}'>Run the Conversion</a>
|
||||
</p>
|
||||
EOFHTML;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the charset stored for the gb_char_set setting is not utf-8, then we'll hit an endless loop unless we fix it here */
|
||||
\IPSUtf8\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => 'utf-8' ), array( 'conf_key=?', 'gb_char_set' ) );
|
||||
|
||||
$html .= <<<EOFHTML
|
||||
|
||||
<p class="text-info">
|
||||
@@ -292,7 +321,8 @@ $label = 'Start using UTF-8 (utf8)';
|
||||
<small>
|
||||
If you have a large community, or are experiencing browser timeouts during conversion, you may wish to consider running the conversion via the Command Line.<br>
|
||||
<code>
|
||||
php {$path}/admin/convertutf8/cli.php
|
||||
cd {$path}/admin/convertutf8
|
||||
php cli.php
|
||||
</code>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Output Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Output Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 9 Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Singleton Pattern
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief HTTP Request Class
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Session Handler
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 6th Sept 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -372,6 +372,17 @@ class Session
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Skip if it's an _old or _utftemp table */
|
||||
if( mb_substr( $tableName, -4 ) == '_old' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if( mb_substr( $tableName, -8 ) == '_utftemp' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( mb_substr( $tableName, 0, mb_strlen( \IPSUtf8\Db::i()->prefix ) ) === \IPSUtf8\Db::i()->prefix )
|
||||
{
|
||||
@@ -396,7 +407,7 @@ class Session
|
||||
$data['tableCount']++;
|
||||
|
||||
$row = \IPSUtf8\Db::i()->query( "SHOW CREATE TABLE `" . \IPSUtf8\Db::i()->prefix . "{$table}`" )->fetch_assoc();
|
||||
|
||||
|
||||
if ( preg_match( '#\scharset=([a-z0-9]+?)(\s|$)#i', $row['Create Table'], $matches ) )
|
||||
{
|
||||
$tblCharset = $matches[1];
|
||||
@@ -425,10 +436,40 @@ class Session
|
||||
try
|
||||
{
|
||||
$test = @json_encode( $definition );
|
||||
|
||||
if ( json_last_error() != JSON_ERROR_NONE )
|
||||
{
|
||||
throw new \ErrorException;
|
||||
}
|
||||
}
|
||||
catch( \ErrorException $e )
|
||||
{
|
||||
$definition = static::arrayWalkRecursive( $definition, function( $value ) { return utf8_encode( $value ); } );
|
||||
|
||||
/* Try it again - if it fails this time, remove the column comments as that is likely causing the issue if they have non-latin characters */
|
||||
$test = @json_encode( $definition );
|
||||
|
||||
if ( json_last_error() != JSON_ERROR_NONE )
|
||||
{
|
||||
foreach( $definition['columns'] AS $column => $data )
|
||||
{
|
||||
if ( isset( $data['comment'] ) )
|
||||
{
|
||||
unset( $definition['columns'][ $column ]['comment'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the collation is missing, let's do a table status check and see if we can figure it out */
|
||||
if ( empty( $definition['collation'] ) )
|
||||
{
|
||||
$status = \IPSUtf8\Db::i()->query( "SHOW TABLE STATUS WHERE Name='" . \IPSUtf8\Db::i()->prefix . "{$table}'" )->fetch_assoc();
|
||||
|
||||
if( isset( $status['Collation'] ) )
|
||||
{
|
||||
$definition['collation'] = $status['Collation'];
|
||||
}
|
||||
}
|
||||
|
||||
/* Get other data */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @brief Conversion module
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Tools
|
||||
* @since 4 Sept 2013
|
||||
|
||||
+3
-2
@@ -2,12 +2,13 @@
|
||||
/**
|
||||
* @brief Admin CP bootstrap
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
define('READ_WRITE_SEPARATION', FALSE);
|
||||
require_once '../init.php';
|
||||
\IPS\Dispatcher\Admin::i()->run();
|
||||
Vendored
+1338
File diff suppressed because it is too large.
Load diff
@@ -178,7 +178,7 @@ a {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
background: #5490c0;
|
||||
position: relative;
|
||||
padding-left: 6px;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.ipsProgressBar_progress[data-progress]:after {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
left: 15px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
|
||||
.ipsMessage_error {
|
||||
background: #b52b38;
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 581 B |
+72
-10
@@ -1,27 +1,89 @@
|
||||
=============================[NOTE]=============================
|
||||
This software is Nulled!
|
||||
Nulled by IPBMafia.ru
|
||||
Buy license at https://www.invisionpower.com/buy/self-hosted
|
||||
================================================================
|
||||
IPS 4.1.13.1 Release (101038)
|
||||
=============================[NOTE]=============================
|
||||
|
||||
Invision Power Services End User License Agreement
|
||||
|
||||
|
||||
1. Acceptance
|
||||
|
||||
This software license agreement (the “Agreement”) is between you (either an individual or entity, hereinafter referred to as “You” or “Your”) and Invision Power Services, Inc. (“IPS”, “We”, “Our” or “Us”) and pertains to the IPS Community Suite software, its components, features, enhancements, updates and modifications (collectively the “Software” or “Suite”) and any related services (“Services”) provided by IPS under this Agreement.␍␍By purchasing, downloading, accessing, installing, facilitating the installation or using the Software or Services (or allowing or authorizing any other person to do so) you are warranting that you have the authority provided by your state, country or jurisdiction to enter into a legally binding contract and that you have read and agree to be bound by the terms of this Agreement. You understand and acknowledge that this Agreement comprises the entire agreement between You and IPS. This Agreement supersedes any prior agreements, promises, representations or descriptions. If you do not agree with the terms and conditions set forth hereinafter, you may not purchase, download, access, install or use the Software or Services. This Agreement may only be modified in writing, signed by an officer of IPS and You.␍␍␍2. License Scope and Grant
|
||||
This software license agreement (the “Agreement”) is between you (either an individual or entity, hereinafter referred to as “You” or “Your”) and Invision Power Services, Inc. (“IPS”, “We”, “Our” or “Us”) and pertains to the IPS Community Suite software, its components, features, enhancements, updates and modifications (collectively the “Software” or “Suite”) and any related services (“Services”) provided by IPS under this Agreement.
|
||||
|
||||
In consideration for payment of all applicable license fees and subject to the terms and conditions of this Agreement, IPS grants you a revocable, limited and non-exclusive license to install and use the Software and Services on a single installation, accessible via one URL. Access to services, components, software updates and technical support require an active license. All rights in and to the Software and Services are reserved to the use and benefit of IPS and/or its licensors, successors and assigners.␍␍(a) Test Installation. You may install and test one additional instance of the Software for the purpose of development and testing. This installation must be and remain isolated and inaccessible to the general public at all times.␍␍␍3. Restrictions␍␍Your license to use the Software and Services is subject to the following terms, conditions and restrictions on use: ␍␍(a) You may alter and modify the Software’s source code for Your use, subject to this Agreement, however, you may not distribute, publish, resell, or otherwise share the Software or derivative works based on the Software without prior express written consent from IPS.
|
||||
By purchasing, downloading, accessing, installing, facilitating the installation or using the Software or Services (or allowing or authorizing any other person to do so) you are warranting that you have the authority provided by your state, country or jurisdiction to enter into a legally binding contract and that you have read and agree to be bound by the terms of this Agreement. You understand and acknowledge that this Agreement comprises the entire agreement between You and IPS. This Agreement supersedes any prior agreements, promises, representations or descriptions. If you do not agree with the terms and conditions set forth hereinafter, you may not purchase, download, access, install or use the Software or Services. This Agreement may only be modified in writing, signed by an officer of IPS and You.
|
||||
|
||||
(b) You may not utilize the Software or Services to engage in, facilitate, or otherwise allow others to engage in any activity that violates any law or regulation or the terms and conditions within this Agreement. ␍␍(c) You are solely responsible for complying with all governmental regulations and policies. You agree to indemnify Us from any loss, action or damage arising from Your failure to use the Software in a manner inconsistent with applicable legislation. ␍␍(d) You may not remove any copyright or proprietary notices on or within the software’s source code at any time. A copyright removal license may be purchased to remove the public display of the Software’s publicly displayed copyright notice.
|
||||
|
||||
2. License Scope and Grant
|
||||
|
||||
In consideration for payment of all applicable license fees and subject to the terms and conditions of this Agreement, IPS grants you a revocable, limited and non-exclusive license to install and use the Software and Services on a single installation, accessible via one URL. Access to services, components, software updates and technical support require an active license. All rights in and to the Software and Services are reserved to the use and benefit of IPS and/or its licensors, successors and assigners.
|
||||
|
||||
(a) Test Installation. You may install and test one additional instance of the Software for the purpose of development and testing. This installation must be and remain isolated and inaccessible to the general public at all times.
|
||||
|
||||
|
||||
3. Restrictions
|
||||
|
||||
Your license to use the Software and Services is subject to the following terms, conditions and restrictions on use:
|
||||
|
||||
(a) You may alter and modify the Software’s source code for Your use, subject to this Agreement, however, you may not distribute, publish, resell, or otherwise share the Software or derivative works based on the Software without prior express written consent from IPS.
|
||||
|
||||
(b) You may not utilize the Software or Services to engage in, facilitate, or otherwise allow others to engage in any activity that violates any law or regulation or the terms and conditions within this Agreement.
|
||||
|
||||
(c) You are solely responsible for complying with all governmental regulations and policies. You agree to indemnify Us from any loss, action or damage arising from Your failure to use the Software in a manner inconsistent with applicable legislation.
|
||||
|
||||
(d) You may not remove any copyright or proprietary notices on or within the software’s source code at any time. A copyright removal license may be purchased to remove the public display of the Software’s publicly displayed copyright notice.
|
||||
|
||||
|
||||
4. Intellectual Property
|
||||
|
||||
We have the sole and exclusive right to the Software which is being licensed, not sold, to you by IPS under the terms and conditions of this agreement. The Software is protected by copyright, trademark and other intellectual property laws. IPS reserves any rights not expressly granted herein.␍␍␍5. Assignment␍␍You may not rent, lease, sell, share or authorize or temporarily assign your rights to the license or this Agreement to another individual or entity except as expressly permitted herein.␍␍(a) You may, after six months from the original purchase date, permanently transfer your licensing rights and interest in this Agreement to a third party, provided the license is active and in good standing. Any transfer and reassignment must occur via the mechanisms provided within the invisionpower.com client area and all applicable fees must be paid for the reassignment to be considered valid. ␍␍(b) You agree to provide this Agreement in its entirety to the assignee prior to reassignment and the assignee must agree to be bound to the terms of this Agreement. ␍␍(c) You acknowledge that account and non license specific materials and purchases, including, but not limited to: account credits and third party (“marketplace”) add-ons and purchases are non-transferrable under any circumstances. ␍␍(d) We reserve the right to refuse or reject reassignment at our sole discretion.
|
||||
We have the sole and exclusive right to the Software which is being licensed, not sold, to you by IPS under the terms and conditions of this agreement. The Software is protected by copyright, trademark and other intellectual property laws. IPS reserves any rights not expressly granted herein.
|
||||
|
||||
|
||||
5. Assignment
|
||||
|
||||
You may not rent, lease, sell, share or authorize or temporarily assign your rights to the license or this Agreement to another individual or entity except as expressly permitted herein.
|
||||
|
||||
(a) You may, after six months from the original purchase date, permanently transfer your licensing rights and interest in this Agreement to a third party, provided the license is active and in good standing. Any transfer and reassignment must occur via the mechanisms provided within the invisionpower.com client area and all applicable fees must be paid for the reassignment to be considered valid.
|
||||
|
||||
(b) You agree to provide this Agreement in its entirety to the assignee prior to reassignment and the assignee must agree to be bound to the terms of this Agreement.
|
||||
|
||||
(c) You acknowledge that account and non license specific materials and purchases, including, but not limited to: account credits and third party (“marketplace”) add-ons and purchases are non-transferrable under any circumstances.
|
||||
|
||||
(d) We reserve the right to refuse or reject reassignment at our sole discretion.
|
||||
|
||||
|
||||
6. Termination
|
||||
␍This Agreement shall remain in effect until terminated. Your rights under this Agreement will automatically terminate without notice from Us in the event you fail to comply with any term or condition within this Agreement. Upon termination of this Agreement, you shall immediately cease all use of the Software and destroy all copies, full or partial, of the Software that may be in your possession or otherwise under your control.
|
||||
|
||||
␍7. Modification
|
||||
␍We reserve the right to amend or modify the terms of this Agreement at any time, and to change, discontinue or impose conditions on any aspect of the Software or related Service and to provide notification solely by posting an updated version of the Agreement on the invisionpower.com website. You acknowledge that you are solely responsible for regularly reviewing this Agreement and our policies. Continued use of the Software after modification to the Agreement constitutes your binding consent to such changes.
|
||||
This Agreement shall remain in effect until terminated. Your rights under this Agreement will automatically terminate without notice from Us in the event you fail to comply with any term or condition within this Agreement. Upon termination of this Agreement, you shall immediately cease all use of the Software and destroy all copies, full or partial, of the Software that may be in your possession or otherwise under your control.
|
||||
|
||||
␍8. Disclaimer of Warranty
|
||||
␍THE SOFTWARE IS PROVIDED “AS-IS” AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, WE DISCLAIM ALL OTHER WARRANTIES, CONDITIONS, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, BY STATUTE, COMMON LAW, USAGE OR OTHERWISE, REGARDING THE SOFTWARE AND ANY RELATED SERVICES, INCLUDING THEIR FITNESS FOR A PARTICULAR PURPOSE, THEIR QUALITY, THEIR MERCHANTABILITY, OR THEIR NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SOFTWARE OR ANY RELATED SERVICES IS SECURE, OR IS FREE FROM BUGS, VIRUSES, ERRORS, OR OTHER PROGRAM LIMITATIONS, OR THAT DEFECTS WILL BE CORRECTED. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. THE ENTIRE RISK AS TO THE RESULTS, QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM US OR OUR EMPLOYEES, REPRESENTATIVE OR AGENTS OR THROUGH OR FROM THE SOFTWARE OR OUR WEBSITE SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED WITHIN. THIS SECTION WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
␍9. Limitation of Liability␍␍TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL WE, OUR SUBSIDIARIES, OFFICERS, DIRECTORS, SHAREHOLDERS, PARTNERS, EMPLOYEES, AGENTS, CONTRACTORS OR OUR SUCCESSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING, BUT NOT LIMITED TO PERSONAL INJURY OR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, EXEMPLARY, PUNITIVE, COVER, CONSEQUENTIAL OR OTHER DAMAGES, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, LOSS OF USE, COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, LOSS OF GOODWILL OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO THE USE OF, OR INABILITY TO USE, THE SOFTWARE OR ANY RELATED SERVICES OR CONTENT, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE. WITHOUT LIMITING THE FOREGOING, IN NO EVENT SHALL OUR TOTAL LIABILITY TO YOU FOR ACTUAL DAMAGES FOR ANY CAUSE WHATSOEVER EXCEED THE AMOUNT PAID BY YOU TO LICENSE THE SOFTWARE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE FOREGOING LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. THESE LIMITATIONS WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.␍␍␍10. Indemnification␍␍You agree to fully indemnify and hold us, our successors, officers, directors, shareholders, partners, employees, agents, contracts and our successors harmless from and against any claim, suit, hearing, action, expense or demand, including without limitation to: all claims for damages, fees or costs (including attorneys’ fees), arising out of or related to the use of the Software and/or any related Services by you, your agents or representatives, anyone under your control, or by any third party using your equipment or accounts to use the Software or Services (for purposes of this section, collectively, “you”); the violation by you of any provision of this Agreement; the violation by you and any laws or regulations; or the infringement or misappropriation by you any copyright, trademark or any other intellectual property right, proprietary right, property right or any other right of ours or any third party. We reserve the right to assume the exclusive defense and control of any matter otherwise subject to indemnification by you, in which event you will cooperate with us in asserting any available defenses and, as set forth above, be fully responsible for our attorneys’ fees.␍␍␍11. Governing Law␍␍The license and this Agreement are governed by and construed in accordance with the laws of the State of Virginia, United States of America. You hereby consent to exclusive jurisdiction and venue in the County of Bedford and State of Virginia. By agreeing to the terms of this Agreement, you are waiving any claims that you might otherwise have against IPS based on the laws of other jurisdictions.␍␍␍12. Severability␍␍If, for any reason, a court of competent jurisdiction deems any provision or part of this Agreement to be unlawful or unenforceable, the remainder of the Agreement shall remain in full force and effect.␍
|
||||
7. Modification
|
||||
|
||||
We reserve the right to amend or modify the terms of this Agreement at any time, and to change, discontinue or impose conditions on any aspect of the Software or related Service and to provide notification solely by posting an updated version of the Agreement on the invisionpower.com website. You acknowledge that you are solely responsible for regularly reviewing this Agreement and our policies. Continued use of the Software after modification to the Agreement constitutes your binding consent to such changes.
|
||||
|
||||
|
||||
8. Disclaimer of Warranty
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS-IS” AND TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, WE DISCLAIM ALL OTHER WARRANTIES, CONDITIONS, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, BY STATUTE, COMMON LAW, USAGE OR OTHERWISE, REGARDING THE SOFTWARE AND ANY RELATED SERVICES, INCLUDING THEIR FITNESS FOR A PARTICULAR PURPOSE, THEIR QUALITY, THEIR MERCHANTABILITY, OR THEIR NON-INFRINGEMENT. WE DO NOT WARRANT THAT THE SOFTWARE OR ANY RELATED SERVICES IS SECURE, OR IS FREE FROM BUGS, VIRUSES, ERRORS, OR OTHER PROGRAM LIMITATIONS, OR THAT DEFECTS WILL BE CORRECTED. SOME JURISDICTIONS DO NOT ALLOW EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. THE ENTIRE RISK AS TO THE RESULTS, QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM US OR OUR EMPLOYEES, REPRESENTATIVE OR AGENTS OR THROUGH OR FROM THE SOFTWARE OR OUR WEBSITE SHALL CREATE ANY WARRANTY NOT EXPRESSLY STATED WITHIN. THIS SECTION WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
|
||||
9. Limitation of Liability
|
||||
|
||||
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL WE, OUR SUBSIDIARIES, OFFICERS, DIRECTORS, SHAREHOLDERS, PARTNERS, EMPLOYEES, AGENTS, CONTRACTORS OR OUR SUCCESSORS BE LIABLE FOR ANY DAMAGES WHATSOEVER, INCLUDING, BUT NOT LIMITED TO PERSONAL INJURY OR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, EXEMPLARY, PUNITIVE, COVER, CONSEQUENTIAL OR OTHER DAMAGES, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, LOSS OF DATA, LOSS OF USE, COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, LOSS OF GOODWILL OR ANY OTHER COMMERCIAL DAMAGES OR LOSSES, ARISING OUT OF OR RELATED TO THE USE OF, OR INABILITY TO USE, THE SOFTWARE OR ANY RELATED SERVICES OR CONTENT, HOWEVER CAUSED, REGARDLESS OF THE THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE. WITHOUT LIMITING THE FOREGOING, IN NO EVENT SHALL OUR TOTAL LIABILITY TO YOU FOR ACTUAL DAMAGES FOR ANY CAUSE WHATSOEVER EXCEED THE AMOUNT PAID BY YOU TO LICENSE THE SOFTWARE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE FOREGOING LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. THESE LIMITATIONS WILL SURVIVE THE TERMINATION OF THIS AGREEMENT.
|
||||
|
||||
|
||||
10. Indemnification
|
||||
|
||||
You agree to fully indemnify and hold us, our successors, officers, directors, shareholders, partners, employees, agents, contracts and our successors harmless from and against any claim, suit, hearing, action, expense or demand, including without limitation to: all claims for damages, fees or costs (including attorneys’ fees), arising out of or related to the use of the Software and/or any related Services by you, your agents or representatives, anyone under your control, or by any third party using your equipment or accounts to use the Software or Services (for purposes of this section, collectively, “you”); the violation by you of any provision of this Agreement; the violation by you and any laws or regulations; or the infringement or misappropriation by you any copyright, trademark or any other intellectual property right, proprietary right, property right or any other right of ours or any third party. We reserve the right to assume the exclusive defense and control of any matter otherwise subject to indemnification by you, in which event you will cooperate with us in asserting any available defenses and, as set forth above, be fully responsible for our attorneys’ fees.
|
||||
|
||||
|
||||
11. Governing Law
|
||||
|
||||
The license and this Agreement are governed by and construed in accordance with the laws of the State of Virginia, United States of America. You hereby consent to exclusive jurisdiction and venue in the County of Bedford and State of Virginia. By agreeing to the terms of this Agreement, you are waiving any claims that you might otherwise have against IPS based on the laws of other jurisdictions.
|
||||
|
||||
|
||||
12. Severability
|
||||
|
||||
If, for any reason, a court of competent jurisdiction deems any provision or part of this Agreement to be unlawful or unenforceable, the remainder of the Agreement shall remain in full force and effect.
|
||||
@@ -1,15 +1,15 @@
|
||||
<ips:template parameters="$form, $path" />
|
||||
<div class='ipsMessage ipsMessage_error'>
|
||||
Cannot write the '{$path}/conf_global.php' file
|
||||
{lang="confglobal_make" sprintf="$path"}
|
||||
</div>
|
||||
{{if ! file_exists( $path . '/conf_global.php')}}
|
||||
<p>
|
||||
Please create a file in {$path} called conf_global.php.
|
||||
<br />Copy and paste the contents of the box above into this new file and CHMOD to 0777.
|
||||
{lang="confglobal_note" sprintf="$path"}
|
||||
<br />{lang="confglobal_write"}
|
||||
</p>
|
||||
{{else}}
|
||||
<p>
|
||||
Please CHMOD to conf_global.php 0777.
|
||||
{lang="confglobal_777"}
|
||||
</p>
|
||||
{{endif}}
|
||||
{$form|raw}
|
||||
@@ -21,11 +21,16 @@
|
||||
<script src="js/multipleRedirect.js"></script>
|
||||
</head>
|
||||
<body class='ipsApp ipsApp_installer'>
|
||||
|
||||
<!-- Nulled by IPBMafia.ru -->
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('input[name="diagnostics_reporting_checkbox"]').attr("disabled","disabled");
|
||||
});
|
||||
</script>
|
||||
<div id='elInstaller_wrap'>
|
||||
<div id='ipsLayout_header' class='ipsClearfix' role='banner'>
|
||||
<header>
|
||||
<a href='/' id='elSiteTitle'><span id='elLogo'><img src='img/logo.png' alt=''></span> Install IPS Community Suite 4</a>
|
||||
<a href='/' id='elSiteTitle'><span id='elLogo'><img src='img/logo.png' alt=''></span> {lang="banner"} (Русская версия)</a>
|
||||
<!--<div class='logged_in right'>
|
||||
<ul id='user_links' class='ipsList_inline'>
|
||||
<li><a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">{lang="install_guide"}</a></li>
|
||||
@@ -34,18 +39,18 @@
|
||||
</header>
|
||||
</div>
|
||||
<main id='elInstaller_body'>
|
||||
{{if \IPS\Request::i()->controller !== 'done' and !$initError and ( ( \IPS\Dispatcher::i()->step != 1 AND \IPS\Dispatcher::i()->step != 6 ) || \IPS\Request::i()->start )}}
|
||||
{{if \IPS\Request::i()->controller !== 'done' and !$initError and ( \IPS\Dispatcher::i()->step || \IPS\Request::i()->start )}}
|
||||
<div class='ipsPad ipsAreaBackground_light'>
|
||||
<h1 class='ipsType_pageTitle'>
|
||||
Step: {$title}
|
||||
{lang="step_s" sprintf="$title"}
|
||||
</h1>
|
||||
</div>
|
||||
<div class='ipsColumns ipsPad'>
|
||||
<div class='ipsColumn ipsColumn_wide ipsPad' id='elInstaller_stepsWrap'>
|
||||
<ul id='elInstaller_steps'>
|
||||
{{foreach array( 1 => 'System Check', 2 => 'License', 3 => 'Applications', 4 => 'Server Details', 5 => 'Admin', 6 => 'Install' ) as $i => $lang}}
|
||||
{{foreach array( 1 => 'healthcheck', 2 => 'license', 3 => 'applications', 4 => 'serverdetails', 5 => 'admin', 6 => 'install' ) as $i => $lang}}
|
||||
<li class='{{if \IPS\Dispatcher::i()->step == $i}}elInstaller_stepActive{{elseif \IPS\Dispatcher::i()->step > $i}}elInstaller_stepDone{{endif}}'>
|
||||
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i> {$lang}
|
||||
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i> {lang="$lang"}
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
@@ -58,34 +63,35 @@
|
||||
</div>
|
||||
{{elseif \IPS\Request::i()->controller === 'done'}}
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Your IPS Community Suite 4 is ready</h1>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="done_banner"}</h1>
|
||||
<p class='ipsType_normal ipsType_light'>
|
||||
The installation process is now complete and your IPS Community Suite is now ready!
|
||||
{lang="done_note"}
|
||||
</p>
|
||||
<br><br>
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
|
||||
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>Go to the AdminCP</a>
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="gotosuite"}</a>
|
||||
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>{lang="gotoacp"}</a>
|
||||
<br><br>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">Suite Documentation</a>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">{lang="docs_link"}</a>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Welcome to IPS Community Suite 4</h1>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="welcome_banner"}</h1>
|
||||
<p class='ipsType_normal ipsType_light'>
|
||||
{{if $initError}}
|
||||
Before we can begin, please rename conf_global.dist.php to conf_global.php in {$path} and ensure it is writable (usually CHMOD 0777).
|
||||
{lang="beforestart" sprintf="$path"}
|
||||
{{else}}
|
||||
This process will install your software for you. Be sure you have your license key and MySQL database details to hand.
|
||||
{lang="beforestarto"}
|
||||
{{endif}}
|
||||
</p>
|
||||
{{if $initError !== true}}
|
||||
<br><br>
|
||||
<a href='{url="controller=install&start=1"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Installation</a>
|
||||
<a href='{url="start=1"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="start_installation"}</a>
|
||||
{{endif}}
|
||||
<br><br>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">Install Guide</a>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">{lang="install_guide"}</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<p style="text-align: right; margin:10px">Nulled by IPBMafia.ru</p>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{{$canProceed = TRUE;}}
|
||||
<section>
|
||||
{{foreach $requirements['requirements'] as $k => $_requirements}}
|
||||
<h2 class="ipsType_sectionHead">{$k} Requirements</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="requirements" sprintf="$k"}</h2>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $_requirements as $item}}
|
||||
{{if !$item['success']}}{{$canProceed = FALSE;}}{{endif}}
|
||||
@@ -11,20 +11,20 @@
|
||||
</ul>
|
||||
{{endforeach}}
|
||||
{{if isset( $requirements['advice'] ) and count( $requirements['advice'] )}}
|
||||
<h2 class="ipsType_sectionHead">Recommendations</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="recommendations"}</h2>
|
||||
<br><br>
|
||||
<p class="ipsType_normal">None of these items are required in order to continue with the installation right now. However, they will be required in a future version of IPS Community Suite. You should make a note of them and contact your hosting provider or system administrator after the installation to address them. You can re-run these checks later from the <em>Support</em> section of the Administrator Control Panel.</p>
|
||||
<p class="ipsType_normal">{lang="recom_info"}</p>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $requirements['advice'] as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_error{{else}}advisory{{endif}}">{$item}</li>
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
</section>
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
{{if $canProceed}}
|
||||
<a href='{url="controller=license"}' class='ipsButton ipsButton_large ipsButton_primary'>Continue</a>
|
||||
<a href='{url="controller=license"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="continue"}</a>
|
||||
{{else}}
|
||||
<a href='' class='ipsButton ipsButton_large ipsButton_primary ipsButton_disabled'>You must correct any issues listed above before you can proceed</a>
|
||||
<a href='' class='ipsButton ipsButton_large ipsButton_primary ipsButton_disabled'>{lang="proceed_anyways"}</a>
|
||||
{{endif}}
|
||||
</div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<ips:template parameters=" " />
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Ready to begin installation</h1>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="ready_to_start"}</h1>
|
||||
<br><br>
|
||||
<a href='{url="controller=install"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Installation</a>
|
||||
<a href='{url="controller=install"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="start_installation"}</a>
|
||||
</div>
|
||||
@@ -1,7 +1,7 @@
|
||||
<ips:template parameters="$url" />
|
||||
<div class="ipsMultipleRedirect" data-url="{$url}">
|
||||
<noscript>
|
||||
<a href='{$url->setQueryString( 'mr', 'MA==' )}' class="button">{lang="start"}</a>
|
||||
<a href='{$url->setQueryString( 'mr', '1' )}' class="button">{lang="start"}</a>
|
||||
</noscript>
|
||||
<div class="no_js_hide">
|
||||
<div class="ipsRedirect ipsRedirect_loading">
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
/**
|
||||
* @brief Installer bootstrap
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 2 Apr 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
define('READ_WRITE_SEPARATION', FALSE);
|
||||
require_once '../../init.php';
|
||||
\IPS\Dispatcher\Setup::i()->setLocation('install')->run();
|
||||
@@ -1,9 +1,10 @@
|
||||
$(function(){
|
||||
|
||||
var _iterator = 0;
|
||||
|
||||
$('.no_js_hide').show();
|
||||
|
||||
var redirectStep = function( infoBox, url, baseurl ) {
|
||||
|
||||
_iterator++;
|
||||
$.ajax( url, {
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
@@ -23,9 +24,9 @@ $(function(){
|
||||
infoBox.children('.ipsRedirect_progress').show().find('.ipsProgressBar_progress').css({ width: ( response[2] + '%' ) });
|
||||
}
|
||||
|
||||
var newurl = baseurl + '&mr=' + JSON.stringify( response[0] );
|
||||
var newurl = baseurl + '&mr=' + _iterator;
|
||||
|
||||
if ( response[0] == 'JTIyX19kb25lJTIy' ) {
|
||||
if ( response.done && response.done == true ) {
|
||||
window.location = newurl;
|
||||
} else {
|
||||
redirectStep( infoBox, newurl, baseurl );
|
||||
@@ -72,6 +73,6 @@ $(function(){
|
||||
};
|
||||
|
||||
$('.ipsMultipleRedirect').each(function(){
|
||||
redirectStep( $(this).children('.no_js_hide'), $(this).attr('data-url') + '&mr=MA==', $(this).attr('data-url') );
|
||||
redirectStep( $(this).children('.no_js_hide'), $(this).attr('data-url') + '&mr=1', $(this).attr('data-url') );
|
||||
});
|
||||
})
|
||||
+163
-128
@@ -2,52 +2,57 @@
|
||||
|
||||
$lang = array(
|
||||
|
||||
'installer' => "IPS Community Suite Installer - %s",
|
||||
'healthcheck' => "System Check",
|
||||
'install_step_1' => "Setting up database...",
|
||||
'install_step_2' => "Installing applications and modules...",
|
||||
'install_step_3' => "Installing settings...",
|
||||
'install_step_4' => "Creating admin user...",
|
||||
'install_step_5' => "Installing tasks...",
|
||||
'install_step_6' => "Installing language pack...",
|
||||
'install_step_7' => "Installing languages...",
|
||||
'install_step_8' => "Installing email templates...",
|
||||
'install_step_9' => "Installing themes...",
|
||||
'install_step_10' => "Installing javascript...",
|
||||
'install_step_11' => "Installing search keywords...",
|
||||
'install_step_12' => "Installing hooks and widgets....",
|
||||
'generic_error' => "An unknown error occurred",
|
||||
'error' => "Error",
|
||||
'error_title' => "Error",
|
||||
'page_doesnt_exist' => "That page doesn't exist.",
|
||||
'err_installer_locked' => "The installer is locked.",
|
||||
'err_conf_noexist' => "In order to install the IPS Community Suite, rename the <em>conf_global.php.dist</em> file to <em>conf_global.php</em>. If you are not sure how to do this, contact your hosting provider.",
|
||||
'err_conf_nowrite' => "In order to install the IPS Community Suite, you must make the <em>conf_global.php</em> writeable. If you are not sure how to do this, contact your hosting provider.",
|
||||
'form_required' => "This field is required.",
|
||||
'form_email_bad' => "That is not a valid email address.",
|
||||
'form_password_confirm' => "The passwords do not match.",
|
||||
'step' => "Step %d",
|
||||
'continue' => "Continue",
|
||||
'install_guide' => "Need help? Consult the Installation Guide →",
|
||||
'err_password_length' => "Passwords must be at least 3 characters",
|
||||
|
||||
'requirements_php_version_success' => "PHP version %s.",
|
||||
'requirements_php_version_success_53x' => "PHP version %s. <strong>Please see advice below</strong>",
|
||||
'requirements_php_version_fail' => "You are running PHP version %s. You need PHP 5.3.0 or above. You should contact your hosting provider or system administrator to ask for an upgrade.",
|
||||
'requirements_php_version_advice' => "You are running PHP version %s which is now end of life.<br>Please note that IPS Community Suite 4.1.1 and newer <strong>will require PHP 5.4.0</strong> as a minimum.<br>You can continue to install IPS Community Suite 4.1.0 using your current PHP version.",
|
||||
'requirements_curl_success' => "cURL extension loaded.",
|
||||
'requirements_curl_fopen' => "fsockopen function available",
|
||||
'requirements_curl_advice' => "You do not have the cURL PHP extension loaded or it is running a version less than 7.36. While this is not required, it is recommended.",
|
||||
'requirements_curl_fail' => "You do not have the cURL PHP extension loaded (or it is running a version less than 7.36) and the fsockopen function is disabled. You should contact your hosting provider or system administrator to ask either for cURL version 7.36 or greater to be installed, or the fsockopen function to be enabled. cURL is recommended.",
|
||||
'requirements_mb_success' => "Multibyte String extension loaded",
|
||||
'requirements_mb_regex' => "The Multibyte String extension has been configured with the --disable-mbregex option. You should contact your hosting provider or system administrator to ask for it to be reconfigured without that option.",
|
||||
'requirements_mb_fail' => "You do not have the Multibyte String PHP extension loaded which is required. You should contact your hosting provider or system administrator to ask for it to be enabled. It must be configured <em>without</em> the --disable-mbregex option.",
|
||||
'requirements_extension_success' => "%s extension loaded",
|
||||
'requirements_extension_fail' => "You do not have the %s PHP extension loaded which is required. You should contact your hosting provider or system administrator to ask for it to be enabled.",
|
||||
'requirements_extension_advice' => "You do not have the %s PHP extension loaded. While this is not required, it is recommended.",
|
||||
'installer' => "Установка IPS Community Suite - %s",
|
||||
'healthcheck' => "Проверка системы",
|
||||
'install_step_1' => "Настройка базы данных...",
|
||||
'install_step_2' => "Установка приложений и модулей...",
|
||||
'install_step_3' => "Установка настроек...",
|
||||
'install_step_4' => "Создание администратора...",
|
||||
'install_step_5' => "Установка задач...",
|
||||
'install_step_6' => "Установка языкового пакета...",
|
||||
'install_step_7' => "Установка языков...",
|
||||
'install_step_8' => "Установка email шаблонов...",
|
||||
'install_step_9' => "Установка тем...",
|
||||
'install_step_10' => "Установка javascript...",
|
||||
'install_step_11' => "Установка поисковых слов...",
|
||||
'install_step_12' => "Установка хуков и виджетов....",
|
||||
'generic_error' => "Произошла неизвестная ошибка",
|
||||
'installation_error' => "Ошибка установки",
|
||||
'installer_locked' => "Установщик заблокирован.",
|
||||
'error' => "Ошибка",
|
||||
'error_title' => "Ошибка",
|
||||
'page_doesnt_exist' => "Такой страницы не существует.",
|
||||
'err_installer_locked' => "Установщик заблокирован.",
|
||||
'err_conf_noexist' => "Для установки IPS Community Suite Вам необходимо переименовать файл <em>conf_global.php.dist</em> в <em>conf_global.php</em>. Если вы не уверены как это сделать, обратитесь к вашему хостинг-провайдеру.",
|
||||
'err_conf_nowrite' => "Для установки IPS Community Suite Вам необходимо сделать файл <em>conf_global.php</em> доступным для записи. Если вы не уверены как это сделать, обратитесь к вашему хостинг-провайдеру.",
|
||||
'form_required' => "Это обязательное для заполнения поле.",
|
||||
'form_email_bad' => "Неверный адрес электронной почты.",
|
||||
'form_password_confirm' => "Пароли не совпадают.",
|
||||
'step' => "Шаг %d",
|
||||
'continue' => "Продолжить",
|
||||
'install_guide' => "Нужна помощь? Обратитесь к Руководству по установке →",
|
||||
'err_password_length' => "Пароли должны быть не менее 3 символов",
|
||||
|
||||
'requirements_php_version_success' => "PHP версия %s.",
|
||||
'requirements_php_version_fail' => "Вы используете PHP версии %s. Необходима версия %s или выше (рекомендуется %s или выше). Вы должны связаться с вашим хостинг-провайдером или системным администратором для обновления.",
|
||||
'requirements_php_version_fail_no_recommended' => "Вы используете PHP версии %s. Необходима версия %s или выше. Вы должны связаться с вашим хостинг-провайдером или системным администратором для обновления.",
|
||||
'requirements_php_version_advice' => "Вы используете PHP версии %s. Эта версия совместима, но мы рекомендуем версию %s или выше.",
|
||||
'requirements_mysql_version_fail' => "Вы используете MySQL версии %s. Необходима версия MySQL %s или выше (%s или выше рекомендуется). Вы должны обратиться к своему хостинг-провайдеру или системному администратору с просьбой обновить версию MySQL.",
|
||||
'requirements_curl_success' => "cURL расширение загружено",
|
||||
'requirements_curl_fopen' => "fsockopen функция доступна",
|
||||
'requirements_curl_advice' => "У Вас не загружено PHP расширение cURL или версия данного расширения ниже 7.36. Это рекомендация",
|
||||
'requirements_curl_fail' => "У Вас не загружено PHP расширение cURL (или версия этого расширения ниже 7.36) и функция fsockopen отключена. Вы должны связаться с вашим хостинг-провайдером или системным администратором для установки расширения cURL версии 7.36 или выше, или включения функции fsockopen.",
|
||||
'requirements_mb_success' => "Multibyte String расширение загружено",
|
||||
'requirements_mb_regex' => "Расширение Multibyte String настроено с опцией --disable-mbregex. Вы должны связаться с вашим хостинг-провайдером или системным администратором с просьбой отключить эту опцию у расширения.",
|
||||
'requirements_mb_overload' => "PHP конфигурация имеет настройку mbstring.func_overload со значением больше 0. Вы должны обратиться к вашему хостинг-провайдеру или системному администратору, чтобы отключить перегрузку функций.",
|
||||
'requirements_mb_fail' => "У Вас не загружено PHP расширение Multibyte String, которое является обязательным. Вы должны обратиться к своему хостинг-провайдеру или системному администратору за помощью в установке. Расширение должно быть настроено <em>без</em> опции --disable-mbregex.",
|
||||
'requirements_extension_success' => "%s расширение загружено",
|
||||
'requirements_extension_fail' => "У Вас не загружено PHP расширение %s, которое является обязательным. Вы должны обратиться к своему хостинг-провайдеру или системному администратору за помощью в установке.",
|
||||
'requirements_extension_advice' => "У Вас не загружено PHP расширение %s. Его загрузка не обязательна, но желательна.",
|
||||
'requirements_extension_dom' => "DOM",
|
||||
'requirements_extension_gd' => "GD",
|
||||
'requirements_extension_mysqli' => "MySQLi",
|
||||
'requirements_extension_exif' => "Exif",
|
||||
'requirements_extension_openssl' => "OpenSSL",
|
||||
'requirements_extension_session' => "Session",
|
||||
'requirements_extension_simplexml' => "SimpleXML",
|
||||
@@ -56,98 +61,128 @@ $lang = array(
|
||||
'requirements_extension_xmlwriter' => "XMLWriter",
|
||||
'requirements_extension_zip' => "Zip",
|
||||
'requirements_extension_phar' => "Phar",
|
||||
'requirements_memory_limit_success' => "%s memory limit.",
|
||||
'requirements_memory_limit_fail' => "Your PHP memory limit is set to %s but should be set to 128M or more. You should contact your hosting provider or system administrator to ask for this to be changed.",
|
||||
'requirements_suhosin_limit' => "PHP setting %s is set to %s. This can cause problems in some areas. We recommended a value of %s or above.",
|
||||
'requirements_file_system' => "File System",
|
||||
'requirements_file_writable' => "%s is writable",
|
||||
'dir_does_not_exist' => "%s does not exist.",
|
||||
'dir_is_not_writable' => "%s cannot be written to. Please adjust the permissions on it or contact your hosting provider for assistance.",
|
||||
'file_storage_test_error_amazon' => "There appears to be a problem with your Amazon (%s) file storage settings which can cause problems with uploads.<br> After attempting to upload a file to the directory, the URL to the file is returning a HTTP %s error. Update your settings and then check and see if the problem has been resolved",
|
||||
'ftp_err_no_ext' => "Your server does not support using FTP storage. Please contact your hosting provider to ask for PHP FTP extension to be enabled.",
|
||||
'ftp_err_no_ssl' => "Your server does not support using SSL-FTP storage. Please contact your hosting provider to ask for PHP OpenSSL extension to be enabled or use a different protocol.",
|
||||
'ftp_err_no_sftp' => "Your server does not support using SFTP storage. Please contact your hosting provider to ask for PHP SSH2 extension to be enabled or use a different protocol.",
|
||||
'ftp_err-COULD_NOT_CONNECT' => "A connection to the host could not be established. Check the host and port provided are correct.",
|
||||
'ftp_err-COULD_NOT_LOGIN' => "Authentication failed. Check the username and password provided are correct.",
|
||||
'ftp_err-COULD_NOT_CHDIR' => "Could not move into the directory specified. Check the directory is correct and the user provided has permission to access it.",
|
||||
'ftp_err-COULD_NOT_UPLOAD' => "Could not upload to the FTP server. Check the user has permission to write files.",
|
||||
'ftp_err-COULD_NOT_DELETE' => "Could not delete from the FTP server. Check the user has permission to delete files.",
|
||||
'file_storage_test_error_ftp' => "There appears to be a problem with your FTP (%s) storage settings which can cause problems with uploads.<br> After attempting to upload a file to the directory, the URL to the file is returning a HTTP %s error. Update your settings and then check and see if the problem has been resolved",
|
||||
'file_storage_test_ftp_unexpected_response' => "There appears to be a problem with your FTP (%s) storage settings. Please contact technical support.",
|
||||
'hook_file_not_writable' => "You must make the file %s writeable (usually by setting the CHMOD for the file or the plugins folder to 0777) before you can continue.",
|
||||
'license' => "License",
|
||||
'lkey' => "License Key",
|
||||
'lkey_help' => "Get License Key",
|
||||
'generic_server_error' => "There was an error communicating with the IPS License Server. Please try again later or contact IPS technical support for assistance.",
|
||||
'license_server_error' => "There was an error communicating with the IPS License Server: %s. Please try again later or contact IPS technical support for assistance.",
|
||||
'license_key_not_found' => "The license key supplied is not valid. Please check the provided key and try again or contact IPS technical support for more assistance.",
|
||||
'license_key_legacy' => "The license key supplied is not compatible with this version of the IPS Community Suite. Please contact IPS technical support for assistance.",
|
||||
'license_key_active' => "An installation has already been activated for this license key. Your license key entitles you to one installation only. If you need to change the URL associated with your license, contact IPS technical support.",
|
||||
'license_key_test_active' => "A test installation has already been activated for this license key. Your license key entitles you to one test installation only.",
|
||||
'eula' => "License Agreement",
|
||||
'eula_suffix' => "I have read and agree to the license agreement",
|
||||
'eula_err' => "You must agree to the license agreement.",
|
||||
'requirements_memory_limit_success' => "Лимит памяти %s.",
|
||||
'requirements_memory_limit_fail' => "Лимит PHP памяти установлен в %s, однако необходимо 128М или выше. Вы должны обратиться к своему хостинг-провайдеру или системному администратору с просьбой изменить лимит памяти.",
|
||||
'requirements_suhosin_limit' => "PHP настройка %s установлена %s. Это может вызвать некоторы проблемы. Мы рекомендуем значение в %s или выше.",
|
||||
'requirements_suhosin_cookie_encrypt' => "PHP настройка suhosin.cookie.encrypt установлена в значение 1. Это может вызвать проблемы в некоторых областях сайта, например с функцией автоматического сохранения контента в редакторе. Рекомендуется установить настройку в значение 0 для её отключения.",
|
||||
'requirements_file_system' => "Файловая система",
|
||||
'requirements_file_writable' => "%s доступна для записи",
|
||||
'dir_does_not_exist' => "%s не существует.",
|
||||
'dir_is_not_writable' => "%s недоступна для записи. Пожалуйста, измените разрешения, либо обратитесь к вашему хостинг-провайдеру за помощью.",
|
||||
'file_storage_test_error_amazon' => "Возникла проблема с настройками хранения файлов в Amazon (%s), которая может вызывать проблемы с загрузкой.<br>После попытки загрузить файл в директорию, URL адрес файла вернул HTTP ошибку %s. Обновите ваши настройки и попробуйте снова",
|
||||
'ftp_err_no_ext' => "Ваш сервер не поддерживает хранение файлов с помощью протокола FTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером для дополнительной информации.",
|
||||
'ftp_err_no_ssl' => "Ваш сервер не поддерживает хранение файлов с помощью протокола SSL-FTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером и сообщите о том, что OpenSSL PHP расширение должно использовать другой протокол.",
|
||||
'ftp_err_no_sftp' => "Ваш сервер не поддерживает хранение файлов с помощью протокола SFTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером и сообщите о том, что SSH2 PHP расширение должно быть включено или должно использовать другой протокол.",
|
||||
'ftp_err-COULD_NOT_CONNECT' => "Соединение не может быть установлено. Проверьте указанный порт и хост.",
|
||||
'ftp_err-COULD_NOT_LOGIN' => "Ошибка аутентификации. Проверьте имя пользователя и пароль.",
|
||||
'ftp_err-COULD_NOT_CHDIR' => "Не удалось переместить в указанную директорию. Убедитесь в том, что директория доступна.",
|
||||
'ftp_err-COULD_NOT_UPLOAD' => "Не удалось загрузить на FTP сервер. Проверьте разрешения пользователя на запись файлов.",
|
||||
'ftp_err-COULD_NOT_DELETE' => "Не удалось удалить с FTP сервера. Проверьте разрешения пользователя на удаление файлов.",
|
||||
'file_storage_test_error_ftp' => "Возникла проблема с настройками хранения файлов через FTP, которая может вызывать проблемы с загрузкой.<br>После попытки загрузить файл в директорию, URL адрес файла вернул HTTP ошибку %s. Обновите ваши настройки и попробуйте снова.",
|
||||
'file_storage_test_ftp_unexpected_response' => "Возникла проблема с настройками хранения файлов через FTP. Пожалуйста, обратитесь в службу технической поддержки.",
|
||||
'hook_file_not_writable' => "Для продолжения необходимо сделать доступным для записи файл %s (как правило, путем установки CHMOD 0777 для файла или папки плагинов).",
|
||||
'license' => "Лицензия",
|
||||
'lkey' => "Лицензионный ключ",
|
||||
'lkey_help' => "Получить лицензионный ключ",
|
||||
'license_generic_error' => "Возникла ошибка при соединении с сервером лицензии IPS License Server. Пожалуйста, повторите попытку позже или свяжитесь с технической поддержкой IPS.",
|
||||
'license_server_error' => "Возникла ошибка при соединении с сервером лицензии IPS License Server: %s. Пожалуйста, повторите попытку позже или свяжитесь с технической поддержкой IPS.",
|
||||
'license_key_not_found' => "Указанный лицензионный ключ недействителен. Пожалуйста, повторите попытку или обратитесь в службу технической поддержки IPS для получения дополнительной информации.",
|
||||
'license_key_legacy' => "Указанный лицензионный ключ не совместим с этой версией IPS Community Suite. Пожалуйста, свяжитесь с технической поддержкой компании IPS.",
|
||||
'license_key_active' => "Для данного лицензионного ключа установка уже была активирована. Лицензионный ключ дает вам право только на одну установку. Если вам нужно изменить URL-адрес вашего лицензионного ключа, пожалуйста, обратитесь в службу технической поддержки IPS.",
|
||||
'license_key_test_active'=> "Для данного лицензионного ключа тестовая установка уже была активирована. Лицензионный ключ дает вам право только на одну тестовую установку.",
|
||||
'eula' => "Лицензионное соглашение",
|
||||
'eula_suffix' => "Я прочитал и согласен с условиями лицензионного соглашения",
|
||||
'eula_err' => "Вы должны согласиться с лицензионным соглашением.",
|
||||
|
||||
'applications' => "Applications",
|
||||
'apps' => "Applications to install",
|
||||
'default_app' => "Default application",
|
||||
'default_app_desc' => "The application selected here will be used as the default landing page when visitors first come to your site.",
|
||||
'default_app_invalid' => "Invalid Default",
|
||||
'err_min_php' => "Your server needs to be running PHP %s or higher to install this application (your server is running %s). Contact your hosting provider to have your server upgraded.",
|
||||
'err_min_php_setting' => "Your server needs to have the PHP <em>%s</em> setting set to %s or higher to install this application (your server is set to %s). Contact your hosting provider to have this changed.",
|
||||
'err_php_extension' => "Your server needs to have the PHP <em>%s</em> extension enabled to install this application. Contact your hosting provider to have this enabled.",
|
||||
'err_not_writable' => "The directory %s needs to be writable. Please change the directory's CHMOD to 0777",
|
||||
'err_tmp_dir_create' => "Your server does not allow temporary files to be created in the configured temporary directory. To work around this issue please create a file named constants.php at %s with the following code in it:<br><br><span><?php<br><br>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_tmp_dir_adjust' => "Your server does not allow temporary files to be created in the configured temporary directory. To work around this issue please edit the file named constants.php at %s and add following code to it:<br><br><span>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'serverdetails' => "Server Details",
|
||||
'mysql_server' => "MySQL Server Details",
|
||||
'sql_host' => "Host",
|
||||
'sql_host_desc' => "If you are not sure, leave at the default value.",
|
||||
'sql_user' => "Username",
|
||||
'sql_user_desc' => "If you are not sure what your MySQL Server username and password is, contact your hosting provider for assistance.",
|
||||
'sql_pass' => "Password",
|
||||
'sql_database' => "Database Name",
|
||||
'sql_database_desc' => "If the database does not exist we will try to create it. If your MySQL user does not have permission and you're not sure how to create a database, contact your hosting provider for assistance.",
|
||||
'sql_tbl_prefix' => "Table Prefix",
|
||||
'sql_tbl_prefix_desc' => "If provided, all database tables created will be prefixed with the value provided. It is recommended this is left blank.",
|
||||
'sql_port' => "Port",
|
||||
'sql_port_desc' => "If you are not sure, leave at the default value.",
|
||||
'sql_socket' => "Socket",
|
||||
'sql_socket_desc' => "If not provided, the server's default setting will be used. If you're not sure, leave at the default value.",
|
||||
'sql_utf8mb4' => "Use 4-Byte UTF-8 Unicode Encoding?",
|
||||
'sql_utf8mb4_desc' => "Some non-common symbols (such as historical scripts, music symbols and Emoji) require more space in the database to be stored. If you leave this setting disabled, users will not be able to use these symbols on your site. If enabled, these characters will be able to be used, but the database will use more disk space.",
|
||||
'err_no_utf8mb4' => "4-Byte UTF-8 Unicode Encoding is only available in MySQL 5.5.3 and above. You can uncheck that option to continue (it can be changed later), or contact your hosting provider or server administrator to upgrade your version of MySQL.",
|
||||
'http_server' => "Web Server Details",
|
||||
'base_url' => "Site URL",
|
||||
'err_db_exists' => "There is already an IPS Community Suite installation in that database. Choose a different database or use a table prefix.",
|
||||
'err_db_cant_create' => "The Database does not exist and cannot be created automatically. Please create the database manually or contact your hosting provider if you are unsure how to do this.",
|
||||
'applications' => "Приложения",
|
||||
'apps' => "Приложения для установки",
|
||||
'default_app' => "Приложение по умолчанию",
|
||||
'default_app_desc' => "Выбранное приложение будет использовано в качестве основного.",
|
||||
'default_app_invalid' => "Неверное по умолчанию",
|
||||
'err_min_php' => "На Вашем сервере должна быть установлена PHP %s или выше (версия на сервере - %s). Обратитесь к вашему хостинг-провайдеру для обновления сервера.",
|
||||
'err_min_php_setting' => "На Вашем сервере должно быть установлено <em>%s</em> в %s или выше (на сервере установлено %s). Обратитесь к вашему хостинг-провайдеру для изменения настройки.",
|
||||
'err_php_extension' => "На Вашем сервере должно быть включено PHP расширение - <em>%s</em> для установки. Обратитесь к вашему хостинг-провайдеру для включения расширения.",
|
||||
'err_not_writable' => "Директория %s должна быть доступна для записи. Пожалуйста, измените права директории на 0777",
|
||||
'err_tmp_dir_create' => "Ваш сервер не позволяет создавать временные файлы в сконфигурированном временном каталоге. Для решения этой проблемы, пожалуйста, создайте файл с именем constants.php в %s со следующим кодом:<br><br><span><?php<br><br>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_tmp_dir_adjust' => "Ваш сервер не позволяет создавать временные файлы в сконфигурированном временном каталоге. Для решения этой проблемы, пожалуйста, отредактируйте файл с именем constants.php в %s и добавьте следующий код:<br><br><span>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'serverdetails' => "Данные сервер",
|
||||
'mysql_server' => "Данные MySQL",
|
||||
'sql_host' => "Хост",
|
||||
'sql_host_desc' => "Если вы не уверены, не меняйте значение данного поля.",
|
||||
'sql_user' => "Имя пользователя",
|
||||
'sql_user_desc' => "Если Вы не знаете имени пользователя и пароля MySQL сервера, обратитесь к вашему хостинг-провайдеру за помощью.",
|
||||
'sql_pass' => "Пароль",
|
||||
'sql_database' => "База данных",
|
||||
'sql_database_desc' => "Если база данных не существует, мы попробуем её создать. Если пользователь MySQL не имеет доступа к базе данных и вы не знаете как её создать, обратитесь к вашему хостинг-провайдеру за помощью.",
|
||||
'sql_tbl_prefix' => "Префикс таблиц",
|
||||
'sql_tbl_prefix_desc' => "Если указано, все таблицы базы данных будут созданы с данным префиксом. Рекомендуется оставить поле пустым.",
|
||||
'sql_port' => "Порт",
|
||||
'sql_port_desc' => "Если Вы не уверены, оставьте значение по умолчанию.",
|
||||
'sql_socket' => "Сокет",
|
||||
'sql_socket_desc' => "Если не указано, сервер использует настройку по умолчанию.",
|
||||
'sql_utf8mb4' => "Использовать 4-байтовую UTF-8 кодировку?",
|
||||
'sql_utf8mb4_desc' => "Некоторые символы (например исторические скрипты, музыкальные символы и смайлы Emoji) для хранения требуют больше места в базе данных. Если отключить данный параметр, пользователи не смогут использовать эти символы на вашем сайте. Если включить, эти символы могут быть использованы на сайте, однако база данных будет использовать больше дискового пространства Вашего сервера.",
|
||||
'err_no_utf8mb4' => "4-байтовая UTF-8 кодировка доступна только в MySQL 5.5.3 и выше. Вы можете отключить эту опцию сейчас (можно будет включить позднее), или обратитесь к Ваше хостинг-провайдеру или администратору сервера для обновления версии MySQL.",
|
||||
'http_server' => "Данные веб-сервера",
|
||||
'base_url' => "URL-адрес сайта",
|
||||
'err_db_exists' => "В этоу базу данных уже произведена установка IPS Community Suite. Укажите другую базу данных или используйте другой префикс таблиц.",
|
||||
'err_db_cant_create' => "База данных не существует и не может быть создана автоматически. Пожалуйста, создайте базу данных вручную или свяжитесь с вашим хостинг-провайдером за помощью.",
|
||||
'diagnostics_reporting' => "Отправить данные для диагностики в IPS?",
|
||||
'diagnostics_reporting_desc' => "Помогите улучшить IPS Community Suite путём автоматической отправки необходимых данных. Отправляемые данные не содержат никакой конфиденциальной информации о ваших пользователях или о вашем сообществе.",
|
||||
|
||||
'conf_global_error' => "",
|
||||
|
||||
'admin' => "Administrator Account",
|
||||
'admin_user' => "Display Name",
|
||||
'admin_pass1' => "Password",
|
||||
'admin_pass2' => "Confirm Password",
|
||||
'admin_email' => "Email Address",
|
||||
'admin' => "Аккаунт администратора",
|
||||
'admin_user' => "Отображаемое имя",
|
||||
'admin_pass1' => "Пароль",
|
||||
'admin_pass2' => "Подтверждение",
|
||||
'admin_email' => "Email адрес",
|
||||
|
||||
'install' => "Install",
|
||||
'start' => "Start",
|
||||
'redirecting' => "Redirecting...",
|
||||
'redirecting_wait' => "Please wait while we transfer you...",
|
||||
'installing' => "Installing...",
|
||||
'install' => "Установка",
|
||||
'start' => "Старт",
|
||||
'redirecting' => "Перенаправление...",
|
||||
'redirecting_wait' => "Подождите, пока мы Вас переместим...",
|
||||
'installing' => "Установка...",
|
||||
|
||||
'done' => "Installation Complete!",
|
||||
'done' => "Установка завершена!",
|
||||
|
||||
/* filesizes */
|
||||
'filesize_Y' => '%s YB',
|
||||
'filesize_Z' => '%s ZB',
|
||||
'filesize_E' => '%s EB',
|
||||
'filesize_P' => '%s PB',
|
||||
'filesize_T' => '%s TB',
|
||||
'filesize_G' => '%s GB',
|
||||
'filesize_M' => '%s MB',
|
||||
'filesize_k' => '%s kB',
|
||||
'filesize_b' => '%s B',
|
||||
'unlimited' => "Unlimited",
|
||||
'filesize_Y' => '%s ЙБ',
|
||||
'filesize_Z' => '%s ЗБ',
|
||||
'filesize_E' => '%s ЭБ',
|
||||
'filesize_P' => '%s ПБ',
|
||||
'filesize_T' => '%s ТБ',
|
||||
'filesize_G' => '%s ГБ',
|
||||
'filesize_M' => '%s МБ',
|
||||
'filesize_k' => '%s кБ',
|
||||
'filesize_b' => '%s Б',
|
||||
'unlimited' => "Неограниченно",
|
||||
|
||||
'ready_to_start' => "Готовы начать установку",
|
||||
'start_installation' => "Начать установку",
|
||||
'requirements' => "%s Требования",
|
||||
'recommendations' => "Рекомендации",
|
||||
'recom_info' => "Ни одно из этих требований не мешает произвести установку прямо сейчас. Тем не менее, эти требования будет необходимы для будущих версий IPS Community Suite. Вы должны принять это к сведению и связаться с вашим хостинг-провайдером или системным администратором после установки. Вы можете повторно запустить эту проверку требований позже из раздела <em>Поддержка</em> админцентра.",
|
||||
|
||||
'proceed_anyways' => "Вы должны исправить все проблемы, указанные выше, перед продолжением",
|
||||
'confglobal_777' => "Пожалуйста, установите права 0777 на файл conf_global.php.",
|
||||
'confglobal_write' => "Скопируйте и вставьте содержимое окна выше в этот новый файл и установите CHMOD в 0777.",
|
||||
'confglobal_make' => "Не удалось записать файл '%s/conf_global.php'",
|
||||
'confglobal_note' => "Пожалуйста, создайте файл в %s под названием conf_global.php.",
|
||||
'banner' => "Установка IPS Community Suite 4",
|
||||
'step_s' => "Шаг: %s",
|
||||
'done_banner' => "Ваш IPS Community Suite 4 готов к работе",
|
||||
'done_note' => "Процесс установки завершён и Ваш IPS Community Suite готов!",
|
||||
'gotosuite' => "Перейти на сайт",
|
||||
'gotoacp' => "Админцентр",
|
||||
'docs_link' => "Документация",
|
||||
'welcome_banner' => "Добро пожаловать в IPS Community Suite 4",
|
||||
'admin' => "Администратор",
|
||||
'beforestart' => "Прежде чем мы сможем начать, пожалуйста, переименуйте conf_global.dist.php в conf_global.php в %s и убедитесь, что он доступен для записи (CHMOD 0777).",
|
||||
'beforestarto' => "Этот процесс установит ваше программное обеспечение для вас. Убедитесь в том, что у Вас есть лицензионный ключ и данные от базы данных MySQL под рукой.",
|
||||
|
||||
'install_guide' => "Руководство по установке",
|
||||
|
||||
'session_check_fail' => "Мастер установки использует PHP сессии для хранения данных, однако PHP сессии в настоящее время не работают корректно на вашем сервере. С этой проблемой вам нужно обратиться к вашему хостинг-провайдеру.",
|
||||
|
||||
);
|
||||
Vendored
+1338
File diff suppressed because it is too large.
Load diff
@@ -185,7 +185,7 @@ a {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
background: #5490c0;
|
||||
position: relative;
|
||||
padding-left: 6px;
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.ipsProgressBar_progress[data-progress]:after {
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<div class='ipsField_fieldList_content'>
|
||||
<label for='app_{$key}' class='ipsFieldRow_label'>{$data['name']}</label>
|
||||
<dl class='ipsVersions{{if $data['disabled']}} disabled{{endif}}'>
|
||||
<dt>Current Version</dt>
|
||||
<dt>{lang="current_version"}</dt>
|
||||
<dd>{$data['current']}</dd>
|
||||
<dt>Available Version</dt>
|
||||
<dt>{lang="available_version"}</dt>
|
||||
<dd>{$data['available']}</dd>
|
||||
</dl>
|
||||
{{if !empty( $data['errors'] )}}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<ips:template parameters="" />
|
||||
<p class='ipsMessage ipsMessage_error'>There are no applications available to upgrade</p>
|
||||
<p class='ipsMessage ipsMessage_error'>{lang="no_apps_upgrade"}</p>
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<a href='../../' class='ipsButton ipsButton_large ipsButton_primary'>Exit upgrader</a>
|
||||
<a href='../../' class='ipsButton ipsButton_large ipsButton_primary'>{lang="exit_upgrader"}</a>
|
||||
</div>
|
||||
@@ -6,8 +6,7 @@
|
||||
<pre class="ipsCode prettyprint lang-sql">{$query}{{if mb_substr( $query, -1 ) != ';'}};{{endif}}</pre>
|
||||
{{endforeach}}
|
||||
<div class="ipsAreaBackground ipsPad ipsType_center">
|
||||
{{$mr = \IPS\core\Setup\Upgrade::adjustMultipleRedirect( array( 'extra' => array( 'lastSqlId' => $_SESSION['lastJsonIndex'] - 0.1 ) ) );}}
|
||||
<a href="{$url->setQueryString( array( 'key' => $_SESSION['uniqueKey'], 'mr_continue' => NULL, 'run_anyway' => 1, 'mr' => $mr ) )}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_auto"}</a>
|
||||
<a href="{$url->setQueryString( array( 'key' => $_SESSION['uniqueKey'], 'mr_continue' => NULL, 'run_anyway' => 1, 'mr' => 1 ) )}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_auto"}</a>
|
||||
{lang="or"}
|
||||
<a href="{$url}" data-action="redirectContinue" class="ipsButton ipsButton_primary">{lang="manual_query_manual"}</a>
|
||||
</div>
|
||||
@@ -1,4 +1,4 @@
|
||||
<ips:template parameters="$name, $value, $required, $options, $disabled=FALSE, $toggles=array(), $descriptions=array(), $userSuppliedInput='', $unlimited=NULL, $unlimitedLang=NULL" />
|
||||
<ips:template parameters="$name, $value, $required, $options, $disabled=FALSE, $toggles=array(), $descriptions=array(), $warnings=array(), $userSuppliedInput='', $unlimited=NULL, $unlimitedLang=NULL" />
|
||||
{{if $unlimited !== NULL}}
|
||||
<ul class="ipsField_fieldList" role="radiogroup">
|
||||
<li>
|
||||
@@ -26,6 +26,12 @@
|
||||
{$descriptions[ $k ]|raw}
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if isset( $warnings[ $k ] )}}
|
||||
<div id="{$name}_{$k}_warning">
|
||||
<br>
|
||||
<p class='ipsMessage ipsMessage_warning'>{$warnings[ $k ]|raw}</p>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
</ul>
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<a href='{url="controller=applications&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="go_back"}</a>
|
||||
<a href='{url="controller=customoptions&key={$_SESSION['uniqueKey']}"}&disable={expression="\IPS\Request::i()->warnings"}' class='ipsButton ipsButton_large ipsButton_alternate'>{lang="continue_anyway"}</a>
|
||||
<a href='{url="controller=confirm&key={$_SESSION['uniqueKey']}"}&disable={expression="\IPS\Request::i()->warnings"}' class='ipsButton ipsButton_large ipsButton_alternate'>{lang="continue_anyway"}</a>
|
||||
</div>
|
||||
@@ -1,7 +1,11 @@
|
||||
<ips:template parameters="" />
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<a href='{url="controller=upgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Upgrade</a>
|
||||
<a href='{url="controller=upgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="start_upgrade"}</a>
|
||||
</div>
|
||||
<div class='ipsType_large'>
|
||||
{lang="upgrade_confirm"}
|
||||
{{if \IPS\CIC}}
|
||||
{lang="upgrade_confirm_cic"}
|
||||
{{else}}
|
||||
{lang="upgrade_confirm"}
|
||||
{{endif}}
|
||||
</div>
|
||||
@@ -1,8 +1,8 @@
|
||||
<ips:template parameters="" />
|
||||
<section>
|
||||
<p class='ipsMessage ipsMessage_warning'>Your community suite data or database configuration is saved in an encoding other than UTF-8. Before your site can be upgraded to the 4.0.0 Community Suite, we must convert the encoding to UTF-8.</p>
|
||||
<p class='ipsMessage ipsMessage_warning'>{lang="convert_charset_info"}</p>
|
||||
</section>
|
||||
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<a href='../convertutf8' class='ipsButton ipsButton_large ipsButton_primary'>Convert character set</a>
|
||||
<a href='../convertutf8' class='ipsButton ipsButton_large ipsButton_primary'>{lang="convert_charset"}</a>
|
||||
</div>
|
||||
@@ -0,0 +1,21 @@
|
||||
<ips:template parameters="$disabledApps, $disabledPlugins" />
|
||||
<div class="ipsPad">
|
||||
<p class="ipsType_normal">{lang="third_party_stuff_disabled"}</p>
|
||||
{{if count( $disabledApps )}}
|
||||
<p class="ipsType_normal">{lang="third_party_stuff_disabled_apps"}</p>
|
||||
<ul class='ipsList_bullets'>
|
||||
{{foreach $disabledApps as $app}}
|
||||
<li>{$app}</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
{{if count( $disabledPlugins )}}
|
||||
<p class="ipsType_normal">{lang="third_party_stuff_disabled_plugins"}</p>
|
||||
<ul class='ipsList_bullets'>
|
||||
{{foreach $disabledPlugins as $plugin}}
|
||||
<li>{$plugin}</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
<p class="ipsType_normal">{lang="third_party_stuff_disabled_end"}</p>
|
||||
</div>
|
||||
@@ -9,8 +9,8 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
{{if $retryUrl}}
|
||||
<a href="$retryUrl" class='ipsButton'>Retry?</a>
|
||||
<a href="$retryUrl" class='ipsButton'>{lang="retry"}</a>
|
||||
{{endif}}
|
||||
{{if $showContinueUrl}}
|
||||
<a href="$showContinueUrl" class='ipsButton'>Continue</a>
|
||||
<a href="$showContinueUrl" class='ipsButton'>{lang="continue"}</a>
|
||||
{{endif}}
|
||||
@@ -16,16 +16,22 @@
|
||||
<link rel='stylesheet' href='css/installer.css' media='all'>
|
||||
<script type="text/javascript">
|
||||
var IPS_TIMEOUT = 30;
|
||||
var IPS_MR_ERROR = "{lang="js_confirm_mrerror"}";
|
||||
</script>
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/multipleRedirect.js"></script>
|
||||
</head>
|
||||
<body class='ipsApp ipsApp_installer'>
|
||||
|
||||
<!-- Nulled by IPBMafia.ru -->
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$('input[name="diagnostics_reporting_checkbox"]').attr("disabled","disabled");
|
||||
});
|
||||
</script>
|
||||
<div id='elInstaller_wrap'>
|
||||
<div id='ipsLayout_header' class='ipsClearfix' role='banner'>
|
||||
<header>
|
||||
<a href='/' id='elSiteTitle'><span id='elLogo'><img src='img/logo.png' alt=''></span> Upgrade IPS Community Suite 4</a>
|
||||
<a href='/' id='elSiteTitle'><span id='elLogo'><img src='img/logo.png' alt=''></span> {lang="upgrader_banner"} (Русская версия)</a>
|
||||
</header>
|
||||
</div>
|
||||
<main id='elInstaller_body'>
|
||||
@@ -38,9 +44,9 @@
|
||||
<div class='ipsColumns ipsPad'>
|
||||
<div class='ipsColumn ipsColumn_wide ipsPad' id='elInstaller_stepsWrap'>
|
||||
<ul id='elInstaller_steps'>
|
||||
{{foreach array( 1 => 'Login', 2 => 'System Check', 3 => 'License', 4 => 'Applications', 5 => 'Upgrade Options', 6 => 'Confirm', 7 => 'Upgrade' ) as $i => $lang}}
|
||||
{{foreach array( 1 => 'login', 2 => 'healthcheck', 3 => 'license', 4 => 'applications', 5 => 'confirm', 6 => 'upgrade' ) as $i => $lang}}
|
||||
<li class='{{if \IPS\Dispatcher::i()->step == $i}}elInstaller_stepActive{{elseif \IPS\Dispatcher::i()->step > $i}}elInstaller_stepDone{{endif}}'>
|
||||
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i> {$lang}
|
||||
<i class='{{if \IPS\Dispatcher::i()->step == $i or ( !\IPS\Dispatcher::i()->step and $i == 1 )}}fa fa-circle{{elseif \IPS\Dispatcher::i()->step > $i}}fa fa-check{{else}}fa fa-circle-o{{endif}}'></i> {lang="$lang"}
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
@@ -53,34 +59,46 @@
|
||||
</div>
|
||||
{{elseif \IPS\Request::i()->controller === 'done'}}
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Your IPS Community Suite 4 is ready</h1>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="done_banner"}</h1>
|
||||
<p class='ipsType_normal ipsType_light'>
|
||||
{lang="upgrade_complete"}
|
||||
</p>
|
||||
{{if isset( $_SESSION['upgrade_postUpgrade'] )}}
|
||||
<br>
|
||||
{{foreach $_SESSION['upgrade_postUpgrade'] as $app => $setupSteps}}
|
||||
{{foreach $_SESSION['upgrade_postUpgrade'][ $app ] as $step => $message}}
|
||||
<p class='ipsType_normal'>
|
||||
{$message|raw}
|
||||
</p>
|
||||
{{endforeach}}
|
||||
{{endforeach}}
|
||||
{{unset( $_SESSION['upgrade_postUpgrade'] );}}
|
||||
{{endif}}
|
||||
<br><br>
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>Go to the suite</a>
|
||||
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>Go to the AdminCP</a>
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="go_to_suite"}</a>
|
||||
<a href='{expression="rtrim( \IPS\Settings::i()->base_url, '/' ) . '/' . \IPS\CP_DIRECTORY"}' class='ipsButton ipsButton_large ipsButton_normal'>{lang="go_to_acp"}</a>
|
||||
<br><br>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">Suite Documentation</a>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/docs')"}" target="_blank">{lang="suite_docs"}</a>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>Welcome to IPS Community Suite 4</h1>
|
||||
<h1 class='ipsType_pageTitle' id='elInstaller_welcome'>{lang="start_banner"}</h1>
|
||||
<p class='ipsType_normal ipsType_light'>
|
||||
{{if $initError}}
|
||||
{$initError}
|
||||
{{else}}
|
||||
This process will install your software for you. Be sure you have your license key and MySQL database details to hand.
|
||||
{lang="start_info"}
|
||||
{{endif}}
|
||||
</p>
|
||||
{{if !$initError}}
|
||||
<br><br>
|
||||
<a href='{url="&start=1"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Upgrade</a>
|
||||
<a href='{url="&start=1"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="start_upgrade"}</a>
|
||||
{{endif}}
|
||||
<br><br>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">Install Guide</a>
|
||||
<a href="{expression="\IPS\Http\Url::ips('docs/install_guide')"}" target="_blank">{lang="install_docs"}</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
<p style="text-align: right; margin:10px">Nulled by IPBMafia.ru</p>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
{{$canProceed = TRUE;}}
|
||||
<section>
|
||||
{{if $designerMode}}
|
||||
<h2 class="ipsType_sectionHead">Designers' Mode On</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="hc_designers_mode"}</h2>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{$canProceed = FALSE;}}
|
||||
<li class="fail inline">
|
||||
Designers' Mode is currently enabled.
|
||||
{lang="hc_designers_enabled"}
|
||||
</li>
|
||||
<li class='ipsType_normal'>
|
||||
<a href="{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&disableDesignersMode=1"}" class="ipsButton ipsButton_negative">Disable Designers' Mode now</a>
|
||||
<div class='ipsType_light ipsType_small'>Disabling Designers' Mode now will <strong>not</strong> synchronize your templates.<br>If you need to save your edited files, please synchronize them via the ACP > Customization > Themes before disabling Designer's Mode.</div>
|
||||
<a href="{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&disableDesignersMode=1"}" class="ipsButton ipsButton_negative">{lang="hc_disable_designers"}</a>
|
||||
<div class='ipsType_light ipsType_small'>{lang="hc_designers_dis_info"}</div>
|
||||
</li>
|
||||
</ul>
|
||||
{{endif}}
|
||||
{{foreach $requirements['requirements'] as $k => $_requirements}}
|
||||
<h2 class="ipsType_sectionHead">{$k} Requirements</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="hc_requirements" sprintf="$k"}</h2>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $_requirements as $item}}
|
||||
{{if !$item['success']}}{{$canProceed = FALSE;}}{{endif}}
|
||||
@@ -24,9 +24,9 @@
|
||||
</ul>
|
||||
{{endforeach}}
|
||||
{{if isset( $requirements['advice'] ) and count( $requirements['advice'] )}}
|
||||
<h2 class="ipsType_sectionHead">Recommendations</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="hc_recommendations"}</h2>
|
||||
<br><br>
|
||||
<p class="ipsType_normal">None of these items are required in order to continue with the upgrade right now. However, they will be required in a future version of IPS Community Suite. You should make a note of them and contact your hosting provider or system administrator after the upgrade to address them. You can re-run these checks later from the <em>Support</em> section of the Administrator Control Panel.</p>
|
||||
<p class="ipsType_normal">{lang="hc_recommendations_info"}</p>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{foreach $requirements['advice'] as $key => $item}}
|
||||
<li class="{{if $key === 'php'}}ipsMessage ipsMessage_warning{{else}}advisory{{endif}}">{$item}</li>
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
{{if $canProceed}}
|
||||
<a href='{url="controller=license&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>Continue</a>
|
||||
<a href='{url="controller=license&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="continue"}</a>
|
||||
{{else}}
|
||||
<a href='' class='ipsButton ipsButton_large ipsButton_primary ipsButton_disabled'>You must correct any issues listed above before you can proceed</a>
|
||||
<a href='' class='ipsButton ipsButton_large ipsButton_primary ipsButton_disabled'>{lang="hc_no_continue"}</a>
|
||||
{{endif}}
|
||||
</div>
|
||||
@@ -1,6 +1,6 @@
|
||||
<ips:template parameters="$form, $active" />
|
||||
<section>
|
||||
<h2 class="ipsType_sectionHead">License</h2>
|
||||
<h2 class="ipsType_sectionHead">{lang="license"}</h2>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
{{if $active === NULL}}
|
||||
<li class="fail">{lang="lkey_not_providen"}</li>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<section>
|
||||
<h2 class="ipsType_sectionHead">{lang="upgrade_unfinished"}</h2>
|
||||
<ul class="ipsPad ipsType_large ipsList_checks">
|
||||
<li class="advisory">You have an unfinished upgrade from {datetime="$time" norelative="true"}</li>
|
||||
<li class="advisory">{lang="unfinished_upgrade_info" sprintf="(string) \IPS\DateTime::ts($time)"}</li>
|
||||
<li>
|
||||
<strong>{lang="upgrade_applications"}</strong>
|
||||
<ul>
|
||||
@@ -15,13 +15,13 @@
|
||||
<strong>{lang="upgrade_status"}</strong>
|
||||
<ul>
|
||||
<li>{lang="status"}: {$json['step']}</li>
|
||||
<li>{lang="application"}: {{if isset( $json['data'][1] )}}{$json['data'][1]}{{else}}<em>Not set</em>{{endif}}
|
||||
<li>{lang="current_version"}: {{if isset( $json['data']['extra']['_current'] )}}{$json['data']['extra']['_current']}{{else}}<em>Not set</em>{{endif}}
|
||||
<li>{lang="application"}: {{if isset( $json['data'][1] )}}{$json['data'][1]}{{else}}<em>{lang="continue_not_set"}</em>{{endif}}
|
||||
<li>{lang="current_version"}: {{if isset( $json['data']['extra']['_current'] )}}{$json['data']['extra']['_current']}{{else}}<em>{lang="continue_not_set"}</em>{{endif}}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<div class='ipsPad_double ipsType_center'>
|
||||
<a href='{url="controller=continueupgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary ipsButton_positive'>Continue Upgrade</a>
|
||||
<a href='{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&skippreviousupgrade=1"}' class='ipsButton ipsButton_large ipsButton_primary'>Start Fresh Upgrade</a>
|
||||
<a href='{url="controller=continueupgrade&key={$_SESSION['uniqueKey']}"}' class='ipsButton ipsButton_large ipsButton_primary ipsButton_positive'>{lang="continue_upgrade"}</a>
|
||||
<a href='{url="controller=systemcheck&key={$_SESSION['uniqueKey']}&skippreviousupgrade=1"}' class='ipsButton ipsButton_large ipsButton_primary'>{lang="start_fresh_upgrade"}</a>
|
||||
</div>
|
||||
@@ -21,8 +21,8 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
{{if $retryUrl}}
|
||||
<a href="$retryUrl" class='ipsButton'>Retry?</a>
|
||||
<a href="$retryUrl" class='ipsButton'>{lang="retry"}</a>
|
||||
{{endif}}
|
||||
{{if $showContinueUrl}}
|
||||
<a href="$showContinueUrl" class='ipsButton'>Continue</a>
|
||||
<a href="$showContinueUrl" class='ipsButton'>{lang="continue"}</a>
|
||||
{{endif}}
|
||||
@@ -2,23 +2,25 @@
|
||||
/**
|
||||
* @brief Upgrader bootstrap
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @since 20 May 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
define('READ_WRITE_SEPARATION', FALSE);
|
||||
|
||||
require_once '../../init.php';
|
||||
|
||||
if( \IPS\IN_DEV )
|
||||
{
|
||||
die( "You must disable developer mode (IN_DEV) in order to run the upgrader" );
|
||||
die( "Вы должны отключить Режим разработчика (IN_DEV) для запуска мастера обновлений" );
|
||||
}
|
||||
|
||||
if( \IPS\NO_WRITES )
|
||||
{
|
||||
die( "You must disable no-writes mode (NO_WRITES) in order to run the upgrader" );
|
||||
die( "Вы должны отключить режим, запрещающий запись файлов (NO_WRITES) для запуска мастера обновлений" );
|
||||
}
|
||||
|
||||
if( \IPS\QUERY_LOG )
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
$(function(){
|
||||
var _iterator = 0;
|
||||
|
||||
$('.no_js_hide').show();
|
||||
|
||||
var redirectStep = function( infoBox, url, baseurl ) {
|
||||
|
||||
_iterator++;
|
||||
$.ajax( url, {
|
||||
dataType: 'json',
|
||||
cache: false,
|
||||
@@ -43,9 +44,9 @@ $(function(){
|
||||
infoBox.children('.ipsRedirect_progress').show().find('.ipsProgressBar_progress').css({ width: ( response[2] + '%' ) });
|
||||
}
|
||||
|
||||
var newurl = baseurl + '&mr=' + JSON.stringify( response[0] );
|
||||
var newurl = baseurl + '&mr=' + _iterator;
|
||||
|
||||
if ( response[0] == 'JTIyX19kb25lJTIy' ) {
|
||||
if ( response.done && response.done == true ) {
|
||||
window.location = newurl;
|
||||
} else {
|
||||
redirectStep( infoBox, newurl, baseurl );
|
||||
|
||||
+266
-214
@@ -2,78 +2,89 @@
|
||||
|
||||
$lang = array(
|
||||
|
||||
'login' => "Login",
|
||||
'healthcheck' => "System Check",
|
||||
'unfinished_upgrade' => "Unfinished Upgrade",
|
||||
'upgrading' => "Starting upgrade...",
|
||||
'done' => "Upgrade Complete!",
|
||||
'start' => "Start",
|
||||
'redirecting' => "Redirecting...",
|
||||
'redirecting_wait' => "Please wait while we transfer you...",
|
||||
'upgrade_step_1' => "Upgrading database...",
|
||||
'upgrade_step_2' => "Checking database...",
|
||||
'upgrade_step_3' => "Upgrading applications...",
|
||||
'upgrade_step_4' => "Upgrading settings, tasks, widgets and search keywords...",
|
||||
'upgrade_step_5' => "Upgrading languages...",
|
||||
'upgrade_step_6' => "Upgrading email templates...",
|
||||
'upgrade_step_7' => "Upgrading theme settings...",
|
||||
'upgrade_step_8' => "Removing old theme templates, css and images...",
|
||||
'upgrade_step_9' => "Upgrading theme templates, css and images...",
|
||||
'upgrade_step_10' => "Upgrading javascript...",
|
||||
'upgrade_complete' => "The upgrade process is now complete and your IPS Community Suite is now ready!",
|
||||
'upgrade_unfinished' => "Unfinished Upgrade",
|
||||
'upgrade_applications' => "Upgrading Applications",
|
||||
'upgrade_status' => "Upgrade Status",
|
||||
'generic_error' => "An unknown error occurred",
|
||||
'license_key' => "License Key",
|
||||
'apps' => "Applications to upgrade",
|
||||
'confirmpage' => "Confirm Upgrade",
|
||||
'install_ready' => "Ready to begin installation",
|
||||
'install_start' => "Start Installation",
|
||||
'login' => "Авторизация",
|
||||
'healthcheck' => "Проверка системы",
|
||||
'unfinished_upgrade' => "Незаконченное обновление",
|
||||
'upgrading' => "Начало обновления...",
|
||||
'done' => "Обновление завершено!",
|
||||
'start' => "Старт",
|
||||
'redirecting' => "Перенаправление...",
|
||||
'redirecting_wait' => "Подождите, пока мы перенаправим вас...",
|
||||
'upgrade_step_1' => "Обновление базы данных...",
|
||||
'upgrade_step_2' => "Проверка базы данных...",
|
||||
'upgrade_step_3' => "Обновление приложений...",
|
||||
'upgrade_step_4' => "Обновление настроек, задач, виджетов и поисковых слов...",
|
||||
'upgrade_step_5' => "Обновление языков...",
|
||||
'upgrade_step_6' => "Обновление email шаблонов...",
|
||||
'upgrade_step_7' => "Обновление настроек тем...",
|
||||
'upgrade_step_8' => "Удаление устаревших шаблонов темы, css и изображений...",
|
||||
'upgrade_step_9' => "Обновление шаблонов тем, css и изображений...",
|
||||
'upgrade_step_10' => "Обновление javascript...",
|
||||
'upgrade_complete' => "Процесс обновления завершен и ваш IPS Community Suite готов к использованию!",
|
||||
'upgrade_unfinished' => "Незавершённое обновление",
|
||||
'upgrade_applications' => "Обновляемые приложения",
|
||||
'upgrade_status' => "Статус обновления",
|
||||
'generic_error' => "Произошла неизвестная ошибка",
|
||||
'license_key' => "Лицензионный ключ",
|
||||
'apps' => "Приложения для обновления",
|
||||
'confirmpage' => "Подтвердить обновление",
|
||||
'confirm' => "Подтвердить",
|
||||
'install_ready' => "Готовы начать установку",
|
||||
'install_start' => "Начать установку",
|
||||
'upgrade_error' => "Ошибка обновления",
|
||||
'no_conf_global' => "Не удалось найти файл conf_global.php.",
|
||||
'bad_conf_global' => "Файл conf_global.php недействителен",
|
||||
'create_conf_global' => "Пожалуйста, создайте директорию %s и сделайте её доступной для записи. Если вы не знаете, как это сделать, обратитесь к вашему хостинг-провайдеру.",
|
||||
'session_no_good' => "Нам не удалось запустить PHP сессию. Вам нужно связаться с вашим хостинг-провайдером, чтобы настроить конфигурацию PHP, прежде чем продолжить. Ошибка: %s",
|
||||
'upgrade_group_not_exist' => "У вас нет разрешения на запуск обновления, потому что вашей группы не существует.",
|
||||
|
||||
'sign_in_short' => "Sign In",
|
||||
'auth' => "Display Name or Email Address",
|
||||
'password' => "Password",
|
||||
'error_title' => "Error",
|
||||
'guest' => "Guest",
|
||||
'username' => "Display Name",
|
||||
'email_address' => "Email Address",
|
||||
'username_or_email' => "Username or Email Address",
|
||||
'login_err_no_account' => "The %s you entered does not belong to any account. Make sure that it is typed correctly.",
|
||||
'login_err_bad_password' => "The password you entered is incorrect. Please try again (make sure your caps lock is off).",
|
||||
'login_err_locked_unlock' => "Your account has been locked. Try again in {# [1:minute][?:minutes]}.",
|
||||
'login_err_locked_nounlock' => "Your account has been locked. Try again later.",
|
||||
'login_err_no_cookies' => "Your browser does not accept cookies which are required in order to log in.",
|
||||
'sign_in_with_these' => "Or sign in with one of these services",
|
||||
'login_err_remote_validate' => "You must validate your account at another site before you can log in successfully. Please <a href='%s' target='_blank'>click here</a> to validate your account.",
|
||||
'login_connect_generic_error' => "There was an error processing your login request at one of the sites in our network.",
|
||||
'invalid_login_as_user_key' => "Secure login key mismatch",
|
||||
'err_password_length' => "Passwords must be at least 3 characters",
|
||||
'sign_in_faster' => "Sign In Faster",
|
||||
'sign_in_connect' => "Sign in via one of these sites.",
|
||||
'login_facebook' => "Sign in with Facebook",
|
||||
'login_twitter' => "Sign in with Twitter",
|
||||
'login_google' => "Sign in with Google",
|
||||
'login_linkedin' => "Sign in with LinkedIn",
|
||||
'login_live' => "Sign in with Microsoft",
|
||||
'sign_in_short' => "Авторизация",
|
||||
'auth' => "Отображаемое имя или Email",
|
||||
'password' => "Пароль",
|
||||
'error_title' => "Ошибка",
|
||||
'guest' => "Гость",
|
||||
'username' => "Отображаемое имя",
|
||||
'email_address' => "Email адрес",
|
||||
'username_or_email' => "Имя пользователя или Email",
|
||||
'login_err_no_account' => "Введённый Вами %s не принадлежит к какой-либо учётной записи.",
|
||||
'login_err_bad_password' => "Введенный вами пароль недействителен. Пожалуйста, попробуйте еще раз (убедитесь, что отключён Caps Lock).",
|
||||
'login_err_locked_unlock' => "Ваш аккаунт заблокирован. Повторите попытку через {# [1:минуту][2:минуты][3:минуты][4:минуты][?:минут]}.",
|
||||
'login_err_locked_nounlock' => "Ваш аккаунт заблокирован. Повторите попытку позже.",
|
||||
'login_err_no_cookies' => "Ваш браузер не принимает cookies, необходимые для авторизации на сайте.",
|
||||
'sign_in_with_these' => "Или войдите с помощью одного из этих сервисов",
|
||||
'login_err_remote_validate' => "Вы должны подтвердить Ваш аккаунт на другом сайте прежде, чем успешно авторизуетесь. Пожалуйста <a href='%s' target='_blank'>нажмите здесь</a> для подтверждения аккаунта.",
|
||||
'login_connect_generic_error' => "Возникла ошибка вашего запроса авторизации.",
|
||||
'login_upgrader_no_permission' => "У вас нет разрешения на запуск процесса обновления.",
|
||||
'invalid_login_as_user_key' => "Ключ безопасного входа не совпадает",
|
||||
'err_password_length' => "Пароль должен быть не менее 3 символов",
|
||||
'sign_in_faster' => "Авторизуйтесь более быстро",
|
||||
'sign_in_connect' => "Авторизация с помощью одного из этих сервисов.",
|
||||
'login_facebook' => "Войти с помощью Facebook",
|
||||
'login_twitter' => "Войти с помощью Twitter",
|
||||
'login_google' => "Войти с помощью Google",
|
||||
'login_linkedin' => "Войти с помощью LinkedIn",
|
||||
'login_live' => "Войти с помощью Microsoft",
|
||||
|
||||
'requirements_php_version_success' => "PHP version %s.",
|
||||
'requirements_php_version_success_53x' => "PHP version %s. <strong>Please see advice below</strong>",
|
||||
'requirements_php_version_fail' => "You are running PHP version %s. You need PHP 5.3.0 or above. You should contact your hosting provider or system administrator to ask for an upgrade.",
|
||||
'requirements_php_version_advice' => "You are running PHP version %s which is now end of life.<br>Please note that IPS Community Suite 4.1.1 and newer <strong>will require PHP 5.4.0</strong> as a minimum.<br>You can continue to upgrade to IPS Community Suite 4.1.0 using your current PHP version.",
|
||||
'requirements_curl_success' => "cURL extension loaded.",
|
||||
'requirements_curl_fopen' => "fsockopen function available",
|
||||
'requirements_curl_advice' => "You do not have the cURL PHP extension loaded or it is running a version less than 7.36. While this is not required, it is recommended.",
|
||||
'requirements_curl_fail' => "You do not have the cURL PHP extension loaded (or it is running a version less than 7.36) and the fsockopen function is disabled. You should contact your hosting provider or system administrator to ask either for cURL version 7.36 or greater to be installed, or the fsockopen function to be enabled. cURL is recommended.",
|
||||
'requirements_mb_success' => "Multibyte String extension loaded",
|
||||
'requirements_mb_regex' => "The Multibyte String extension has been configured with the --disable-mbregex option. You should contact your hosting provider or system administrator to ask for it to be reconfigured without that option.",
|
||||
'requirements_mb_fail' => "You do not have the Multibyte String PHP extension loaded which is required. You should contact your hosting provider or system administrator to ask for it to be enabled. It must be configured <em>without</em> the --disable-mbregex option.",
|
||||
'requirements_extension_success' => "%s extension loaded",
|
||||
'requirements_extension_fail' => "You do not have the %s PHP extension loaded which is required. You should contact your hosting provider or system administrator to ask for it to be enabled.",
|
||||
'requirements_extension_advice' => "You do not have the %s PHP extension loaded. While this is not required, it is recommended.",
|
||||
'hook_file_not_writable' => "You must make the file %s writeable (usually by setting the CHMOD for the file or the plugins folder to 0777) before you can continue.",
|
||||
|
||||
'requirements_php_version_success' => "PHP версия %s.",
|
||||
'requirements_php_version_fail' => "Вы используете PHP версии %s. Необходима версия %s или выше (рекомендуется %s или выше). Вы должны связаться с вашим хостинг-провайдером или системным администратором для обновления.",
|
||||
'requirements_php_version_fail_no_recommended' => "Вы используете PHP версии %s. Необходима версия %s или выше. Вы должны связаться с вашим хостинг-провайдером или системным администратором для обновления.",
|
||||
'requirements_php_version_advice' => "Вы используете PHP версии %s. Эта версия совместима, но мы рекомендуем версию %s или выше.",
|
||||
'requirements_curl_success' => "cURL расширение загружено",
|
||||
'requirements_curl_fopen' => "fsockopen функция доступна",
|
||||
'requirements_curl_advice' => "У Вас не загружено PHP расширение cURL или версия данного расширения ниже 7.36. Это рекомендация",
|
||||
'requirements_curl_fail' => "У Вас не загружено PHP расширение cURL (или версия этого расширения ниже 7.36) и функция fsockopen отключена. Вы должны связаться с вашим хостинг-провайдером или системным администратором для установки расширения cURL версии 7.36 или выше, или включения функции fsockopen.",
|
||||
'requirements_mb_success' => "Multibyte String расширение загружено",
|
||||
'requirements_mb_regex' => "Расширение Multibyte String настроено с опцией --disable-mbregex. Вы должны связаться с вашим хостинг-провайдером или системным администратором с просьбой отключить эту опцию у расширения.",
|
||||
'requirements_mb_overload' => "PHP конфигурация имеет настройку mbstring.func_overload со значением больше 0. Вы должны обратиться к вашему хостинг-провайдеру или системному администратору, чтобы отключить перегрузку функций.",
|
||||
'requirements_mb_fail' => "У Вас не загружено PHP расширение Multibyte String, которое является обязательным. Вы должны обратиться к своему хостинг-провайдеру или системному администратору за помощью в установке. Расширение должно быть настроено <em>без</em> опции --disable-mbregex.",
|
||||
'requirements_extension_success' => "%s расширение загружено",
|
||||
'requirements_extension_fail' => "У Вас не загружено PHP расширение %s, которое является обязательным. Вы должны обратиться к своему хостинг-провайдеру или системному администратору за помощью в установке.",
|
||||
'requirements_extension_advice' => "У Вас не загружено PHP расширение %s. Его загрузка не обязательна, но желательна.",
|
||||
'hook_file_not_writable' => "Для продолжения необходимо сделать доступным для записи файл %s (как правило, путем установки CHMOD 0777 для файла или папки плагинов).",
|
||||
'requirements_extension_dom' => "DOM",
|
||||
'requirements_extension_gd' => "GD",
|
||||
'requirements_extension_exif' => "Exif",
|
||||
'requirements_extension_mysqli' => "MySQLi",
|
||||
'requirements_extension_openssl' => "OpenSSL",
|
||||
'requirements_extension_session' => "Session",
|
||||
@@ -83,123 +94,125 @@ $lang = array(
|
||||
'requirements_extension_xmlwriter' => "XMLWriter",
|
||||
'requirements_extension_zip' => "Zip",
|
||||
'requirements_extension_phar' => "Phar",
|
||||
'requirements_memory_limit_success' => "%s memory limit.",
|
||||
'requirements_memory_limit_fail' => "Your PHP memory limit is set to %s but should be set to 128M or more. You should contact your hosting provider or system administrator to ask for this to be changed.",
|
||||
'requirements_suhosin_limit' => "PHP setting %s is set to %s. This can cause problems in some areas. We recommended a value of %s or above.",
|
||||
'requirements_mysql_version_success'=> "MySQL version %s.",
|
||||
'requirements_mysql_version_fail' => "You are running MySQL version %s. You need MySQL 5.1.3 or above (5.6 or above recommended). You should contact your hosting provider or system administrator to ask for an upgrade.",
|
||||
'requirements_mysql_version_advice' => "You are running MySQL version %s. While this version is compatible, we recommend version 5.6 or above.",
|
||||
'requirements_mysql_utf8_success' => "All database tables UTF8.",
|
||||
'requirements_mysql_utf8_fail' => "Some or all of the tables or columns in your database are not using a UTF-8 collation (%s). You must <a href='../convertutf8'>convert your database to UTF-8</a> in order to continue.",
|
||||
'requirements_mysql_utf8_info' => "%s is %s",
|
||||
'requirements_file_system' => "File System",
|
||||
'requirements_file_writable' => "%s is writable",
|
||||
'dir_does_not_exist' => "%s does not exist.",
|
||||
'dir_is_not_writable' => "%s cannot be written to. Please adjust the permissions on it or contact your hosting provider for assistance.",
|
||||
'file_storage_test_error_amazon' => "There appears to be a problem with your Amazon (%s) file storage settings which can cause problems with uploads.<br> After attempting to upload a file to the directory, the URL to the file is returning a HTTP %s error. Update your settings and then check and see if the problem has been resolved",
|
||||
'ftp_err_no_ext' => "Your server does not support using FTP storage. Please contact your hosting provider to ask for PHP FTP extension to be enabled.",
|
||||
'ftp_err_no_ssl' => "Your server does not support using SSL-FTP storage. Please contact your hosting provider to ask for PHP OpenSSL extension to be enabled or use a different protocol.",
|
||||
'ftp_err_no_sftp' => "Your server does not support using SFTP storage. Please contact your hosting provider to ask for PHP SSH2 extension to be enabled or use a different protocol.",
|
||||
'ftp_err-COULD_NOT_CONNECT' => "A connection to the host could not be established. Check the host and port provided are correct.",
|
||||
'ftp_err-COULD_NOT_LOGIN' => "Authentication failed. Check the username and password provided are correct.",
|
||||
'ftp_err-COULD_NOT_CHDIR' => "Could not move into the directory specified. Check the directory is correct and the user provided has permission to access it.",
|
||||
'ftp_err-COULD_NOT_UPLOAD' => "Could not upload to the FTP server. Check the user has permission to write files.",
|
||||
'ftp_err-COULD_NOT_DELETE' => "Could not delete from the FTP server. Check the user has permission to delete files.",
|
||||
'file_storage_test_error_ftp' => "There appears to be a problem with your FTP (%s) storage settings which can cause problems with uploads.<br> After attempting to upload a file to the directory, the URL to the file is returning a HTTP %s error. Update your settings and then check and see if the problem has been resolved",
|
||||
'file_storage_test_ftp_unexpected_response' => "There appears to be a problem with your FTP (%s) storage settings. Please contact technical support.",
|
||||
'requirements_memory_limit_success' => "Лимит памяти %s.",
|
||||
'requirements_memory_limit_fail' => "Лимит PHP памяти установлен в %s, однако необходимо 128М или выше. Вы должны обратиться к своему хостинг-провайдеру или системному администратору с просьбой изменить лимит памяти.",
|
||||
'requirements_suhosin_limit' => "PHP настройка %s установлена %s. Это может вызвать некоторы проблемы. Мы рекомендуем значение в %s или выше.",
|
||||
'requirements_suhosin_cookie_encrypt' => "PHP настройка suhosin.cookie.encrypt установлена в значение 1. Это может вызвать проблемы в некоторых областях сайта, например с функцией автоматического сохранения контента в редакторе. Рекомендуется установить настройку в значение 0 для её отключения.",
|
||||
'requirements_mysql_version_success'=> "MySQL версия %s.",
|
||||
'requirements_mysql_version_fail' => "Вы используете MySQL версии %s. Необходима версия MySQL %s или выше (рекомендуется %s или выше). Вы должны обратиться к своему хостинг-провайдеру или системному администратору для повышения версии.",
|
||||
'requirements_mysql_version_advice' => "Вы используете MySQL версии %s. Хотя эта версия совместима, мы рекомендуем %s или выше.",
|
||||
'requirements_mysql_utf8_success' => "Все таблицы базы данных в UTF8.",
|
||||
'requirements_mysql_utf8_fail' => "Некоторые или все столбцы или таблицы в базе данных не используют сравнение UTF-8 (%s). Вы должны <a href='../convertutf8'>сконвертировать вашу базу данных в UTF-8</a> для продолжения.",
|
||||
'requirements_mysql_utf8_info' => "%s %s",
|
||||
'requirements_file_system' => "Файловая система",
|
||||
'requirements_file_writable' => "%s доступна для записи",
|
||||
'dir_does_not_exist' => "%s не существует.",
|
||||
'dir_is_not_writable' => "%s недоступен для записи. Пожалуйста, настройте права доступа или обратитесь к своему хостинг-провайдеру.",
|
||||
'file_storage_test_error_amazon' => "Возникла проблема с настройками хранения файлов в Amazon (%s), которая может вызывать проблемы с загрузкой.<br>После попытки загрузить файл в директорию, URL адрес файла вернул HTTP ошибку %s. Обновите ваши настройки и попробуйте снова.",
|
||||
'ftp_err_no_ext' => "Ваш сервер не поддерживает хранение файлов с помощью протокола FTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером для дополнительной информации.",
|
||||
'ftp_err_no_ssl' => "Ваш сервер не поддерживает хранение файлов с помощью протокола SSL-FTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером и сообщите о том, что OpenSSL PHP расширение должно использовать другой протокол.",
|
||||
'ftp_err_no_sftp' => "Ваш сервер не поддерживает хранение файлов с помощью протокола SFTP. Пожалуйста, свяжитесь с вашим хостинг-провайдером и сообщите о том, что SSH2 PHP расширение должно быть включено или должно использовать другой протокол.",
|
||||
'ftp_err-COULD_NOT_CONNECT' => "Соединение не может быть установлено. Проверьте указанный порт и хост.",
|
||||
'ftp_err-COULD_NOT_LOGIN' => "Ошибка аутентификации. Проверьте имя пользователя и пароль.",
|
||||
'ftp_err-COULD_NOT_CHDIR' => "Не удалось переместить в указанную директорию. Убедитесь в доступности директории.",
|
||||
'ftp_err-COULD_NOT_UPLOAD' => "Не удалось загрузить на FTP сервер. Проверьте разрешения пользователя на запись файлов.",
|
||||
'ftp_err-COULD_NOT_DELETE' => "Не удалось удалить с FTP сервера. Проверьте разрешения пользователя на удаление файлов.",
|
||||
'file_storage_test_error_ftp' => "Возникла проблема с настройками хранения файлов через FTP, которая может вызывать проблемы с загрузкой.<br>После попытки загрузить файл в директорию, URL адрес файла вернул HTTP ошибку %s. Обновите ваши настройки и попробуйте снова.",
|
||||
'file_storage_test_ftp_unexpected_response' => "Возникла проблема с настройками хранения файлов через FTP. Пожалуйста, обратитесь в службу технической поддержки.",
|
||||
|
||||
|
||||
'ipb_reg_number' => "License Key",
|
||||
'license_key_not_found' => "The license key could not be found",
|
||||
'generic_server_error' => "There was an error communicating with the IPS License Server. Please try again later or contact IPS technical support for assistance.",
|
||||
'license_server_error' => "There was an error communicating with the IPS License Server: %s. Please try again later or contact IPS technical support for assistance.",
|
||||
'license_key_legacy' => "The license key supplied is not compatible with this version of the IPS Community Suite. Please contact IPS technical support for assistance.",
|
||||
'license_key_active' => "An installation has already been activated for this license key. Your license key entitles you to one installation only. If you need to change the URL associated with your license, contact IPS technical support.",
|
||||
'license_key_test_active' => "A test installation has already been activated for this license key. Your license key entitles you to one test installation only.",
|
||||
|
||||
|
||||
'upgrade_confirm' => "Your community will now be upgraded to the latest version. There is no way to go back to the old version and it is recommended that you backup your community before continuing. Your hosting provider or system administrator will be able to take a backup if you are not sure how to do so.",
|
||||
'location' => "Location",
|
||||
'current_version' => "Current Version",
|
||||
|
||||
|
||||
'forums' => "Forums",
|
||||
'core' => "System",
|
||||
'blog' => "Blog",
|
||||
'nexus' => "Nexus",
|
||||
'gallery' => "Gallery",
|
||||
'chat' => "Chat",
|
||||
'downloads' => "Downloads",
|
||||
'calendar' => "Calendar",
|
||||
'session_check_fail' => "Инструмент обновления использует PHP сессии для хранения данных, однако они работают не правильно на вашем сервере. Для решения этого вопроса вам необходимо связаться с вашим хостинг-провайдером.",
|
||||
|
||||
'apps_will_be_disabled' => "Some applications are not compatible with the core. You need to be upgrade all applications in the suite, otherwise the following applications will be disabled:",
|
||||
'continue_anyway' => "Continue Anyway",
|
||||
'go_back' => "Go Back",
|
||||
|
||||
'installer' => "IPS Community Suite Installer - %s",
|
||||
|
||||
'error' => "Error",
|
||||
'page_doesnt_exist' => "That page doesn't exist.",
|
||||
'upgrade_session_error' => "The security token used to validate your session is missing or invalid. This can happen if you have been inactive for a long time or followed an incorrect link to the upgrader. Please restart the upgrader to resolve this issue.",
|
||||
|
||||
'err_conf_noexist' => "In order to install the IPS Community Suite, rename the <em>conf_global.php.dist</em> file to <em>conf_global.php</em>. If you are not sure how to do this, contact your hosting provider.",
|
||||
'err_conf_nowrite' => "In order to install the IPS Community Suite, you must make the <em>conf_global.php</em> writeable. If you are not sure how to do this, contact your hosting provider.",
|
||||
'err_tmp_dir_create' => "Your server does not allow temporary files to be created in the configured temporary directory. To work around this issue please create a file named constants.php at %s with the following code in it:<br><br><span><?php<br><br>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_tmp_dir_adjust' => "Your server does not allow temporary files to be created in the configured temporary directory. To work around this issue please edit the file named constants.php at %s and add following code to it:<br><br><span>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_missing_app_data' => "An application's data file is missing: %s",
|
||||
|
||||
'form_required' => "This field is required.",
|
||||
|
||||
'step' => "Step %d",
|
||||
'continue' => "Continue",
|
||||
'install_guide' => "Need help? Consult the Installation Guide →",
|
||||
'ipb_reg_number' => "Лицензионный ключ",
|
||||
'license_key_not_found' => "Лицензионный ключ не найден",
|
||||
'license_generic_error' => "Возникла ошибка при соединении с сервером лицензии IPS License Server. Пожалуйста, повторите попытку позже или свяжитесь с технической поддержкой IPS.",
|
||||
'license_server_error' => "Возникла ошибка при соединении с сервером лицензии IPS License Server: %s. Пожалуйста, повторите попытку позже или свяжитесь с технической поддержкой IPS.",
|
||||
'license_key_legacy' => "Указанный лицензионный ключ не совместим с этой версией IPS Community Suite. Пожалуйста, свяжитесь с технической поддержкой компании IPS.",
|
||||
'license_key_active' => "Для данного лицензионного ключа уже была активирована установка. Лицензионный ключ дает вам право только на одну установку. Если Вам нужно изменить URL лицении, пожалуйста, свяжитесь с технической поддержкой компании IPS.",
|
||||
'license_key_test_active' => "Тестовая установка для данного лицензионного ключа уже была активирована. Лицензионный ключ дает вам право только на одну тестовую установку.",
|
||||
|
||||
'license' => "License",
|
||||
'license_inactive' => 'Your license is currently inactive. You will need to <a href="http://www.invisionpower.com/clients" target="_blank">renew</a> before you can upgrade.',
|
||||
'lkey' => "License Key",
|
||||
'lkey_help' => "Help",
|
||||
'lkey_err' => "The license key could not be activated. Please contact technical support for further assistance.",
|
||||
'lkey_not_providen' => "Your license has not been provided. Please supply your license key in order to continue.",
|
||||
'eula' => "License Agreement",
|
||||
'eula_suffix' => "I have read and agree to the license agreement",
|
||||
'eula_err' => "You must agree to the license agreement.",
|
||||
'upgrade_confirm' => "Ваше сообщество будет обновлено до последней версии. Вы больше не сможете вернуться к прошлой версии, поэтому рекомендуется сделать резервную копию перед продолжением. Ваш хостинг-провайдер или системный администратор сможет сделать резервную копию, если у вас нет знаний в этом.",
|
||||
'upgrade_confirm_cic' => "Ваше сообщество сейчас будет обновлено до последней версии.",
|
||||
'location' => "Шаг",
|
||||
'current_version' => "Текущая версия",
|
||||
'available_version' => "Доступная версия",
|
||||
|
||||
'applications' => "Applications",
|
||||
'application' => "Application",
|
||||
'forums' => "Форумы",
|
||||
'core' => "Система",
|
||||
'blog' => "Блоги",
|
||||
'nexus' => "Магазин",
|
||||
'gallery' => "Галерея",
|
||||
'chat' => "Чат",
|
||||
'downloads' => "Загрузки",
|
||||
'calendar' => "Календарь",
|
||||
|
||||
'err_min_php' => "Your server needs to be running PHP %s or higher to install this application (your server is running %s). Contact your hosting provider to have your server upgraded.",
|
||||
'err_min_php_setting' => "Your server needs to have the PHP <em>%s</em> setting set to %s or higher to install this application (your server is set to %s). Contact your hosting provider to have this changed.",
|
||||
'err_php_extension' => "Your server needs to have the PHP <em>%s</em> extension enabled to install this application. Contact your hosting provider to have this enabled.",
|
||||
'err_not_writable' => "The directory %s needs to be writable. Please change the directory's CHMOD to 0777",
|
||||
'apps_will_be_disabled' => "Некоторые приложения не совместимы с ядром. Вы должны обновить все приложения на сайте, в противном случае следующие приложения будут отключены:",
|
||||
'continue_anyway' => "Продолжить всё равно",
|
||||
'go_back' => "Вернуться",
|
||||
|
||||
'installer' => "Установка IPS Community Suite - %s",
|
||||
|
||||
'error' => "Ошибка",
|
||||
'page_doesnt_exist' => "Эта страница не существует.",
|
||||
'upgrade_session_error' => "Ключ безопасности, используемый для проверки вашей сесии, отсутствует или недействителен. Это может произойти тогда, когда Вы были неактивные продолжительное время или ссылка, по которой Вы перешли к процессу обновления, недействительна. Пожалуйста, перезагрузите страницу обновления, чтобы решить эту проблему.",
|
||||
|
||||
'err_conf_noexist' => "Для установки IPS Community Suite необходимо переименовать файл <em>conf_global.php.dist</em> в <em>conf_global.php</em>. Если вы не знаете как это сделать, обратитесь к вашему хостинг-провайдеру.",
|
||||
'err_conf_nowrite' => "Для установки IPS Community Suite Вы должны сделать файл <em>conf_global.php</em> доступным для записи. Если вы не знаете как это сделать, обратитесь к вашему хостинг-провайдеру.",
|
||||
'err_tmp_dir_create' => "Ваш сервер не позволяет создавать временные файлы в сконфигурированном временном каталоге. Для решения этой проблемы, пожалуйста, создайте файл с именем constants.php в %s со следующим кодом:<br><br><span><?php<br><br>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_tmp_dir_adjust' => "Ваш сервер не позволяет создавать временные файлы в сконфигурированном временном каталоге. Для решения этой проблемы, пожалуйста, отредактируйте файл с именем constants.php в %s и добавьте следующий код:<br><br><span>define( 'TEMP_DIRECTORY', dirname( __FILE__ ) . '/uploads' );</span>",
|
||||
'err_missing_app_data' => "Данные приложения отсутствуют: %s",
|
||||
|
||||
'form_required' => "Это обязательное для заполнения поле.",
|
||||
|
||||
'step' => "Шаг %d",
|
||||
'continue' => "Продолжить",
|
||||
'install_guide' => "Нужна помощь? Обратитесь к Руководству по установке →",
|
||||
|
||||
'license' => "Лицензия",
|
||||
'license_inactive' => 'Ваша лицензия в данный момент неактивна. Вам нужно <a href="https://www.invisionpower.com/clientarea" target="_blank">продлить</a> лицензию перед обновлением.',
|
||||
'lkey' => "Ключ лицензии",
|
||||
'lkey_help' => "Помощь",
|
||||
'lkey_err' => "Лицензионный ключ не может быть активирован. Пожалуйста, свяжитесь со службой технической поддержки за помощью.",
|
||||
'lkey_not_providen' => "Ваша лицензия не была предоставлена. Пожалуйста, укажите Ваш лицензионный ключ для продолжения.",
|
||||
'eula' => "Лицензионное соглашение",
|
||||
'eula_suffix' => "Я прочитал и согласен с условиями лицензионного соглашения",
|
||||
'eula_err' => "Вы должны согласиться с лицензионным соглашением.",
|
||||
|
||||
'applications' => "Приложения",
|
||||
'application' => "Приложение",
|
||||
|
||||
'err_min_php' => "На Вашем сервере должна быть установлена %s версия PHP или выше (в данный момент установлена %s). Обратитесь к вашему хостинг-провайдеру для возможности обновления.",
|
||||
'err_min_php_setting' => "На Вашем сервере должна быть включена PHP настройка <em>%s</em> до %s или выше (сейчас на сервере - %s). Обратитесь к вашему хостинг-провайдеру для возможности изменения настройки.",
|
||||
'err_php_extension' => "На Вашем сервере должно быть включено PHP расширение <em>%s</em>. Обратитесь к вашему хостинг-провайдеру для возможности включения.",
|
||||
'err_not_writable' => "Директория %s должна быть доступна для записи. Пожалуйста, измените CHMOD на 0777",
|
||||
|
||||
'conf_global_error' => "",
|
||||
|
||||
'install' => "Install",
|
||||
'upgrade' => "Upgrade",
|
||||
'database_collation' => "Last table checked %s, checking for more",
|
||||
'database_collation_start' => "Checking database collations",
|
||||
'cannot_continue_upgrade' => "Cannot continue with this upgrade as the saved data is incomplete",
|
||||
'install' => "Установка",
|
||||
'upgrade' => "Обновление",
|
||||
'database_collation' => "Проверена таблица %s, проверка остальных",
|
||||
'database_collation_start' => "Проверка сравнения базы данных",
|
||||
'cannot_continue_upgrade' => "Нельзя продолжить это обновление, т.к. сохранённые данные неполны",
|
||||
|
||||
'manual_query_header' => "Требуется ваше действие",
|
||||
'manual_query_auto' => "Попробовать запустить автоматически",
|
||||
'manual_query_manual' => "Я запустил запросы вручную и подтверждаю, что они были выполнены успешно",
|
||||
'manual_query_instructions' => "В базу данных необходимо внести некоторые изменения. Так как изменение нужно внести в объёмную таблицу, автоматический способ может вызвать ошибку. Поэтому, рекомендуется сделать эти изменения вручную, запустив перечисленные ниже запросы с помощью командной строки на вашем MySQL сервере.",
|
||||
|
||||
'manual_query_header' => "Manual Action Required",
|
||||
'manual_query_auto' => "Try to run automatically",
|
||||
'manual_query_manual' => "I have run the queries manually and confirm they were run successfully",
|
||||
'manual_query_instructions' => "Some changes need to be made to your database. Because this affects a very large table, doing this automatically may time out. Therefore, it is recommended that you make these changes by manually running the queries listed below through the command line on your MySQL server.",
|
||||
|
||||
/* filesizes */
|
||||
'filesize_Y' => '%s YB',
|
||||
'filesize_Z' => '%s ZB',
|
||||
'filesize_E' => '%s EB',
|
||||
'filesize_P' => '%s PB',
|
||||
'filesize_T' => '%s TB',
|
||||
'filesize_G' => '%s GB',
|
||||
'filesize_M' => '%s MB',
|
||||
'filesize_k' => '%s kB',
|
||||
'filesize_b' => '%s B',
|
||||
'unlimited' => "Unlimited",
|
||||
'filesize_Y' => '%s ЙБ',
|
||||
'filesize_Z' => '%s ЗБ',
|
||||
'filesize_E' => '%s ЭБ',
|
||||
'filesize_P' => '%s ПБ',
|
||||
'filesize_T' => '%s ТБ',
|
||||
'filesize_G' => '%s ГБ',
|
||||
'filesize_M' => '%s МБ',
|
||||
'filesize_k' => '%s кБ',
|
||||
'filesize_b' => '%s Б',
|
||||
'unlimited' => "Неограниченно",
|
||||
|
||||
/* !Countries */
|
||||
'country-AF' => "Afghanistan",
|
||||
'country-AX' => "Åland Islands",
|
||||
'country-AX' => "Г…land Islands",
|
||||
'country-AL' => "Albania",
|
||||
'country-DZ' => "Algeria",
|
||||
'country-AS' => "American Samoa",
|
||||
@@ -252,10 +265,10 @@ $lang = array(
|
||||
'country-CD' => "Congo, The Democratic Republic Of The",
|
||||
'country-CK' => "Cook Islands",
|
||||
'country-CR' => "Costa Rica",
|
||||
'country-CI' => "Côte d’Ivoire",
|
||||
'country-CI' => "Côte d’Ivoire",
|
||||
'country-HR' => "Croatia",
|
||||
'country-CU' => "Cuba",
|
||||
'country-CW' => "Curaçao",
|
||||
'country-CW' => "CuraГ§ao",
|
||||
'country-CY' => "Cyprus",
|
||||
'country-CZ' => "Czech Republic",
|
||||
'country-DK' => "Denmark",
|
||||
@@ -378,11 +391,11 @@ $lang = array(
|
||||
'country-PT' => "Portugal",
|
||||
'country-PR' => "Puerto Rico",
|
||||
'country-QA' => "Qatar",
|
||||
'country-RE' => "Réunion",
|
||||
'country-RE' => "RГ©union",
|
||||
'country-RO' => "Romania",
|
||||
'country-RU' => "Russian Federation",
|
||||
'country-RW' => "Rwanda",
|
||||
'country-BL' => "Saint Barthélemy",
|
||||
'country-BL' => "Saint BarthГ©lemy",
|
||||
'country-SH' => "Saint Helena, Ascension and Tristan Da Cunha",
|
||||
'country-KN' => "Saint Kitts and Nevis",
|
||||
'country-LC' => "Saint Lucia",
|
||||
@@ -447,54 +460,93 @@ $lang = array(
|
||||
'country-YE' => "Yemen",
|
||||
'country-ZM' => "Zambia",
|
||||
'country-ZW' => "Zimbabwe",
|
||||
|
||||
|
||||
|
||||
/* ! 32000 Upgrade options */
|
||||
'32000_avatar_or_photo' => "Profile Photo",
|
||||
'32000_avatar_or_photo_desc' => "While earlier versions of IP.Board allowed users to specify both a profile photo and an account avatar, users are only able to specify one account image in the latest releases of IP.Board. If users have both an avatar and a profile photo, select which one should be retained during the upgrade.",
|
||||
'avph_avatar' => "Avatar",
|
||||
'avph_photo' => "Photo",
|
||||
|
||||
'32000_avatar_or_photo' => "Фотография профиля",
|
||||
'32000_avatar_or_photo_desc' => "Прошлые версии IP.Board позволяли пользователям указывать как не только фотографию пользователя, но и аватар аккаунта, в последних же версиях пользователи могут указывать только одно изображение своего аккаунта. Если пользователи имеют как аватар, так и фотографию, выберите то фото, которое должно быть сохранено при обновлении.",
|
||||
'avph_avatar' => "Аватар",
|
||||
'avph_photo' => "Фото",
|
||||
|
||||
/* ! 40000 Nexus Upgrade Options */
|
||||
'40000_nexus_staff' => "Support Staff",
|
||||
'40000_nexus_staff_desc' => "Support staff cannot be converted during the upgrade. Please log in and set up support staff as administrators in the admin control panel after the upgrade and then review support department staff settings.",
|
||||
'40000_nexus_modules' => "Custom Modules",
|
||||
'40000_nexus_modules_desc' => "Custom code to run when packages are purchased, etc. cannot be converted during the upgrade. <a href='https://remoteservices.invisionpower.com/docs/devdocs-commerce-actions' target='_blank'>More information</a>",
|
||||
|
||||
'40000_nexus_staff' => "Сотрудники поддержки",
|
||||
'40000_nexus_staff_desc' => "Сотрудники поддержки не могут быть сконвертированы в процессе обновления. Пожалуйста, войдите на форум и установите сотрудников поддержки в качестве администраторов в админцентре, затем произведите обновление и настройте отделы и сотрудников поддержки.",
|
||||
'40000_nexus_modules' => "Дополнительные модули",
|
||||
'40000_nexus_modules_desc' => "Дополнительный код запускается в тех случаях, когда купленные продукты и т.д. не могут быть конвертированы при обновлении. <a href='https://remoteservices.invisionpower.com/docs/devdocs-commerce-actions' target='_blank'>Подробная информация</a>",
|
||||
|
||||
/* ! 40000 Forum Upgrade options */
|
||||
'40000_qa_forum' => "Question and Answer Forums",
|
||||
'40000_qa_forum_desc' => "In previous versions, you could enable a 'Mark Solved' feature on a per-forum basis. IPS 4 enhances this so you can enable a Question and Answer mode which allows members to ask questions, answer other's and rate answers.",
|
||||
'40000_qa_forum_0' => "Don't convert to Question and Answer mode",
|
||||
'40000_qa_forum_1' => "Convert 'Mark Solved' forums to Question and Answer mode",
|
||||
'40000_qa_forum' => "Форумы вопрсов и ответов",
|
||||
'40000_qa_forum_desc' => "В предыдущих версиях, вы можете включить функцию 'Вопрос решён' для каждого отдельного форума. IPS 4 улучшает эту функцию, позволяя вам включать режим Вопросов и Ответов, который ползволяет пользователям задавать вопросы, отвечать на вопросы других пользователей и голосовать за ответы.",
|
||||
'40000_qa_forum_0' => "Не конвертировать в режим Вопросов и Ответов",
|
||||
'40000_qa_forum_1' => "Конвертировать форумы с активированной функцией 'Вопрос решён' в режим Вопросов и Ответов",
|
||||
|
||||
|
||||
/* ! 40000 Core Upgrade options */
|
||||
'40000_username_or_displayname' => "User's Display Name",
|
||||
'40000_username_or_displayname_desc' => "Earlier versions of IP.Board allowed users to specify a username that can be used to log in and a separate display name to be shown on posts. The latest version only allows one or the other. In the latest versions, you can log in with an email address so we recommend keeping the display name which is what most are used to seeing.",
|
||||
'40000_name' => "Username",
|
||||
'40000_display_name' => "Display Name",
|
||||
'40000_acp_restrictions' => "ACP Restrictions",
|
||||
|
||||
'40000_username_or_displayname' => "Отображаемое имя пользователя",
|
||||
'40000_username_or_displayname_desc' => "Прошлые версии IP.Board позволяли пользователям указывать как имя пользователя для авторизации, так и отображаемое имя для показа в сообщениях. Последняя версия позволяет выбрать только одно или другое имя пользователя. В последних версиях Вы можете авторизоваться при помощи своего Email адреса, мы рекомендуем оставить отображаемое имя, т.к. большинство пользователей привыкло их видеть.",
|
||||
'40000_name' => "Имя пользователя",
|
||||
'40000_display_name' => "Отображаемое имя",
|
||||
'40000_acp_restrictions' => "Ограничения админцентра",
|
||||
|
||||
/* ! 42000 Gallery Upgrade options */
|
||||
'42000_members_album' => "Select the Member's Album category",
|
||||
'42000_new_members_album' => "Or create a new Member's Album category",
|
||||
'42000_members_album' => "Выберите категорию Пользовательского Альбома",
|
||||
'42000_new_members_album' => "Или создайте новую категорию",
|
||||
|
||||
/* ! 40000 CMS options */
|
||||
'cms_database_title' => "Select page for database %s",
|
||||
'cms_database_desc' => "A database may only be embedded into one page in 4.0. Select which page the database should remain embedded on. It will be removed from all other pages.",
|
||||
|
||||
/* ! 100003 Convert Friend Options */
|
||||
'100003_follow_options' => "Convert friends to followers?",
|
||||
'100003_no_convert' => "Don't convert",
|
||||
'100003_convert' => "Convert",
|
||||
'100003_convert_desc' => "In this version of IPS Community Suite, members can no longer add other members as friends. However members can follow other members and receive notifications when the members they are following post. You can convert friends to followers, so any members who are friends with another member will now be following them, however this will mean they will start receiving notifications which may be undesired. It is recommended you do not convert.",
|
||||
|
||||
'cms_database_title' => "Выберите страницу для базы данных %s",
|
||||
'cms_database_desc' => "В 4.0 база данных может быть встроена только в одну страницу. Выберите страницу, на которой будет располагаться база данных. Она будет удалена из всех остальных страницах.",
|
||||
|
||||
/* ! 100003 Convert Friend Options */
|
||||
'100003_follow_options' => "Конвертировать друзей в подписчиков?",
|
||||
'100003_no_convert' => "Не конвертировать",
|
||||
'100003_convert' => "Конвертировать",
|
||||
'100003_convert_desc' => "В новой версии IPS Community Suite, пользователи больше не могут добавлять других пользователей в качестве друзей. Однако, пользователи могут подписываться на других пользователей и получать уведомления, когда пользователи, на которых подписаны, публикуют любую информацию. Вы можете конвертировать друзей в подписчиков, таким образом, пользователи, являющиеся друзями других пользователей, будут получать нежелательные уведомления. Мы не рекомендуем конвертировать друзей в подписчики.",
|
||||
|
||||
/* ! 101000 revert globalTemplate */
|
||||
'101000_globalTemplate_revert' => "Revert custom themes which contain out of date globalTemplate templates?",
|
||||
'101000_globalTemplate_revert_desc' => "In IPS Community Suite 4.1, the template 'utilitiesMenu' has been removed. This is used within the globalTemplate. After upgrading, you may see a message about the theme being out of date if you do not revert.<br><strong>Reverting templates will lose any customizations</strong>",
|
||||
'101000_yes' => "Yes, revert losing customiztions",
|
||||
'101000_no' => "No, I will manually adjust the templates after upgrading",
|
||||
'101000_globalTemplate_revert' => "Восстановить пользовательские темы, содержащие устаревшие шаблоны globalTemplate?",
|
||||
'101000_globalTemplate_revert_desc' => "В IPS Community Suite 4.1 был удалён шаблон 'utilitiesMenu', который используется в globalTemplate. После обновления, вы можете увидеть сообщение о том, что тема устарела, если не отмените изменения.<br><strong>Отмена изменений в шаблонах удалит все правки.</strong>",
|
||||
'101000_yes' => "Да, отменить изменения",
|
||||
'101000_no' => "Нет, я вручную внесу изменения в шаблоны после обновления",
|
||||
|
||||
/* ! CMS 101000 Options */
|
||||
'40000_cms_htmlconversion' => "Pages HTML",
|
||||
'40000_cms_htmlconversion' => "HTML код",
|
||||
'40000_cms_htmlconversion_desc' => "HTML в страницах, блоках и шаблонах в приложении не может быть конвертирован при обновлении. В то время как эти страницы и блоки будут продолжать работать, вы сможете интегрировать HTML код в общий стиль IPS Community Suite после обновления.",
|
||||
|
||||
'third_party_stuff_disabled' => "У вас установлены приложения или плагины сторонних разработчиков, которые потенциально могут вызвать проблемы во время или после обновления и были отключены.",
|
||||
'third_party_stuff_disabled_apps' => "Следующие сторонние приложения были отключены:",
|
||||
'third_party_stuff_disabled_plugins'=> "Следующие сторонние плагины были отключены:",
|
||||
'third_party_stuff_disabled_end' => "После обновления вы можете посетить админцентр и поочерёдно включить каждое приложение или плагин и удостовериться в их работоспособности.",
|
||||
'101000_disable_3rdparty' => "Отключённые Приложения и Плагины",
|
||||
|
||||
'no_apps_upgrade' => 'Доступных для обновления приложений нет',
|
||||
'exit_upgrader' => "Выйти из обновления",
|
||||
'retry' => "Повторить?",
|
||||
'convert_charset' => "Конвертирование набора символов",
|
||||
'convert_charset_info' => "Ваши данные сообщества или конфигурация базы данных сохраняет данные в кодировке, отличной от UTF-8. Перед обновлением Вашего сайта, мы должны конвертировать кодировку в UTF-8.",
|
||||
'start_upgrade' => "Начать обновление",
|
||||
'continue_upgrade' => "Продолжить обгновление",
|
||||
'start_fresh_upgrade' => "Начать новое обновление",
|
||||
'continue_not_set' => "Не установлено",
|
||||
'unfinished_upgrade_info' => "У вас есть незавершенный обновление с %s",
|
||||
'hc_designers_mode' => "Режим Дизайнеров включён",
|
||||
'hc_designers_enabled' => "Режим Дизайнеров в настоящее время включён",
|
||||
'hc_disable_designers' => "Отключить Режим Дизайнеров",
|
||||
'hc_designers_dis_info' => "Отключение Режима Дизайнеров <strong>НЕ</strong> синхронизирует ваши шаблоны.<br>Если вам нужно сохранить отредактированные файлы, пожалуйста, синхронизируйте их с помощью Админцентра > Кастомизация > Темы перед отключением Режима Дизайнеров.",
|
||||
'hc_requirements' => "%s Требования",
|
||||
'hc_recommendations' => "Рекомендации",
|
||||
'hc_recommendations_info' => "Ни одно из этих требований не мешает произвести установку прямо сейчас. Тем не менее, эти требования будет необходимы для будущих версий IPS Community Suite. Вы должны принять это к сведению и связаться с вашим хостинг-провайдером или системным администратором после установки. Вы можете повторно запустить эту проверку требований позже из раздела <em>Поддержка</em> админцентра.",
|
||||
'hc_no_continue' => "Вы должны исправить все проблемы, указанные выше, перед продолжением",
|
||||
'upgrader_banner' => "Обновление IPS Community Suite 4",
|
||||
'upgradeoptions' => 'Параметры обновления',
|
||||
'done_banner' => "Ваш IPS Community Suite 4 готов к работе",
|
||||
'go_to_suite' => "Перейти на сайт",
|
||||
'go_to_acp' => "Админцентр",
|
||||
'suite_docs' => "Документация",
|
||||
'start_banner' => "Добро пожаловать в IPS Community Suite 4",
|
||||
'start_info' => "Этот процесс установит ваше программное обеспечение для вас. Убедитесь в том, что у Вас есть лицензионный ключ и данные от базы данных MySQL под рукой.",
|
||||
'install_docs' => "Руководство по установке",
|
||||
'js_confirm_mrerror' => 'Сервер обнаружил несколько случаев, когда ему не удалось ответить на запросы.\Нажмите \'OK\' для перезагрузки этой страницы и повтора этого шага установки.',
|
||||
'diagnostics_reporting' => "Отправить данные для диагностики в IPS?",
|
||||
'diagnostics_reporting_desc' => "Помогите улучшить IPS Community Suite путём автоматической отправки необходимых данных. Отправляемые данные не содержат никакой конфиденциальной информации о ваших пользователях или о вашем сообществе.",
|
||||
|
||||
|
||||
);
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief API bootstrap
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @since 18 Feb 2013
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
require_once '../init.php';
|
||||
\IPS\Dispatcher\Api::i()->run();
|
||||
@@ -3,7 +3,7 @@
|
||||
* @brief Blog 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 Blog
|
||||
* @since 3 Mar 2014
|
||||
* @version
|
||||
@@ -51,4 +51,37 @@ class _Application extends \IPS\Application
|
||||
{
|
||||
return 'file-text';
|
||||
}
|
||||
|
||||
/**
|
||||
* Default front navigation
|
||||
*
|
||||
* @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 defaultFrontNavigation()
|
||||
{
|
||||
return array(
|
||||
'rootTabs' => array(),
|
||||
'browseTabs' => array( array( 'key' => 'Blogs' ) ),
|
||||
'browseTabsEnd' => array(),
|
||||
'activityTabs' => array()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Blogs API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 9 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Blog Blogs API
|
||||
*/
|
||||
class _blogs extends \IPS\Api\Controller
|
||||
{
|
||||
/**
|
||||
* GET /blog/blogs
|
||||
* Get list of blogs
|
||||
*
|
||||
* @apiparam string owners Comma-delimited list of member IDs - if provided, only blogs owned by those members are returned (can be used in conjection with groups or set to 0 to exclude member-created blogs)
|
||||
* @apiparam string groups Comma-delimited list of group IDs - if provided, only blogs owned by those groups are returned (can be used in conjection with members or set to 0 to exclude group blogs)
|
||||
* @apiparam int pinned If 1, only blogs which are pinned are returned, if 0 only not pinned
|
||||
* @apiparam string sortBy What to sort by. Can be 'count_entries' for number of entries, 'last_edate' for last entry date or do not specify for ID
|
||||
* @apiparam string sortDir Sort direction. Can be 'asc' or 'desc' - defaults to 'asc'
|
||||
* @apiparam int page Page number
|
||||
* @return \IPS\Api\PaginatedResponse<IPS\blog\Entry>
|
||||
*/
|
||||
public function GETindex()
|
||||
{
|
||||
/* Where clause */
|
||||
$where = array();
|
||||
|
||||
/* Owners */
|
||||
if ( isset( \IPS\Request::i()->owners ) and isset( \IPS\Request::i()->groups ) )
|
||||
{
|
||||
$where[] = array( '( ' . \IPS\Db::i()->in( 'blog_member_id', array_filter( explode( ',', \IPS\Request::i()->owners ) ) ) . ' OR ' . \IPS\Db::i()->findInSet( 'blog_groupblog_ids', array_filter( explode( ',', \IPS\Request::i()->groups ) ) ) . ' )' );
|
||||
}
|
||||
elseif ( isset( \IPS\Request::i()->owners ) )
|
||||
{
|
||||
$where[] = array( '( ' . \IPS\Db::i()->in( 'blog_member_id', array_filter( explode( ',', \IPS\Request::i()->owners ) ) ) . ' OR blog_groupblog_ids<>? )', '' );
|
||||
}
|
||||
elseif ( isset( \IPS\Request::i()->groups ) )
|
||||
{
|
||||
$where[] = array( '( blog_member_id>0 OR ' . \IPS\Db::i()->findInSet( 'blog_groupblog_ids', array_filter( explode( ',', \IPS\Request::i()->groups ) ) ) . ' )' );
|
||||
}
|
||||
|
||||
/* Pinned */
|
||||
if ( isset( \IPS\Request::i()->pinned ) )
|
||||
{
|
||||
$where[] = array( 'blog_pinned=?', intval( \IPS\Request::i()->pinned ) );
|
||||
}
|
||||
|
||||
/* Sort */
|
||||
if ( isset( \IPS\Request::i()->sortBy ) and in_array( \IPS\Request::i()->sortBy, array( 'count_entries', 'last_edate' ) ) )
|
||||
{
|
||||
$sortBy = 'blog_' . \IPS\Request::i()->sortBy;
|
||||
}
|
||||
else
|
||||
{
|
||||
$sortBy = 'blog_id';
|
||||
}
|
||||
$sortDir = ( isset( \IPS\Request::i()->sortDir ) and in_array( mb_strtolower( \IPS\Request::i()->sortDir ), array( 'asc', 'desc' ) ) ) ? \IPS\Request::i()->sortDir : 'asc';
|
||||
|
||||
/* Return */
|
||||
return new \IPS\Api\PaginatedResponse(
|
||||
200,
|
||||
\IPS\Db::i()->select( '*', 'blog_blogs', $where, "{$sortBy} {$sortDir}" ),
|
||||
isset( \IPS\Request::i()->page ) ? \IPS\Request::i()->page : 1,
|
||||
'IPS\blog\Blog',
|
||||
\IPS\Db::i()->select( 'COUNT(*)', 'blog_blogs', $where )->first()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /blog/blogs/{id}
|
||||
* Get information about a specific blog
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @throws 2B302/1 INVALID_ID The blog ID does not exist
|
||||
* @return \IPS\blog\Blog
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
return new \IPS\Api\Response( 200, \IPS\blog\Blog::load( $id )->apiOutput() );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B302/1', 404 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entry Comments API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 8 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
|
||||
/* To prentry PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Blog Entry Comments API
|
||||
*/
|
||||
class _comments extends \IPS\Content\Api\CommentController
|
||||
{
|
||||
/**
|
||||
* Class
|
||||
*/
|
||||
protected $class = 'IPS\blog\Entry\Comment';
|
||||
|
||||
/**
|
||||
* GET /blog/comments
|
||||
* Get list of comments
|
||||
*
|
||||
* @apiparam string blogs Comma-delimited list of calendar IDs
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only topics started by those members are returned
|
||||
* @apiparam int locked If 1, only comments from entries which are locked are returned, if 0 only unlocked
|
||||
* @apiparam int hidden If 1, only comments which are hidden are returned, if 0 only not hidden
|
||||
* @apiparam int pinned If 1, only posts from topics which are pinned are returned, if 0 only not pinned
|
||||
* @apiparam int featured If 1, only comments from entries which are featured are returned, if 0 only not featured
|
||||
* @apiparam int draft If 1, only draft entries are returned, if 0 only published
|
||||
* @apiparam string sortBy What to sort by. Can be 'date', 'title' or leave unspecified for ID
|
||||
* @apiparam string sortDir Sort direction. Can be 'asc' or 'desc' - defaults to 'asc'
|
||||
* @apiparam int page Page number
|
||||
* @return \IPS\Api\PaginatedResponse<IPS\blog\Entry\Comment>
|
||||
*/
|
||||
public function GETindex()
|
||||
{
|
||||
/* Where clause */
|
||||
$where = array();
|
||||
|
||||
/* Draft */
|
||||
if ( isset( \IPS\Request::i()->draft ) )
|
||||
{
|
||||
$where[] = array( 'entry_status=?', \IPS\Request::i()->draft ? 'draft' : 'published' );
|
||||
}
|
||||
|
||||
/* Return */
|
||||
return $this->_list( $where, 'blogs' );
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /blog/comments/{id}
|
||||
* View information about a specific comment
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @throws 2B301/1 INVALID_ID The comment ID does not exist
|
||||
* @return \IPS\blog\Entry\Comment
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
return new \IPS\Api\Response( 200, \IPS\blog\Entry\Comment::load( $id )->apiOutput() );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B301/1', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /blog/comments
|
||||
* Create a comment
|
||||
*
|
||||
* @reqapiparam int entry The ID number of the entry the comment is for
|
||||
* @reqapiparam int author The ID number of the member making the comment (0 for guest)
|
||||
* @apiparam string author_name If author is 0, the guest name that should be used
|
||||
* @reqapiparam string content The comment content as HTML (e.g. "<p>This is a comment.</p>")
|
||||
* @apiparam datetime date The date/time that should be used for the comment date. If not provided, will use the current date/time
|
||||
* @apiparam string ip_address The IP address that should be stored for the comment. If not provided, will use the IP address from the API request
|
||||
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
|
||||
* @throws 2B301/2 INVALID_ID The comment ID does not exist
|
||||
* @throws 1B301/3 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1B301/4 NO_CONTENT No content was supplied
|
||||
* @return \IPS\blog\Entry\Comment
|
||||
*/
|
||||
public function POSTindex()
|
||||
{
|
||||
/* Get topic */
|
||||
try
|
||||
{
|
||||
$entry = \IPS\blog\Entry::load( \IPS\Request::i()->entry );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B301/2', 403 );
|
||||
}
|
||||
|
||||
/* Get author */
|
||||
if ( \IPS\Request::i()->author )
|
||||
{
|
||||
$author = \IPS\Member::load( \IPS\Request::i()->author );
|
||||
if ( !$author->member_id )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1B301/3', 404 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
}
|
||||
|
||||
/* Check we have a post */
|
||||
if ( !\IPS\Request::i()->content )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_CONTENT', '1B301/4', 403 );
|
||||
}
|
||||
|
||||
/* Do it */
|
||||
return $this->_create( $entry, $author );
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /blog/comments/{id}
|
||||
* Edit a comment
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int author The ID number of the member making the comment (0 for guest)
|
||||
* @apiparam string author_name If author is 0, the guest name that should be used
|
||||
* @apiparam string content The comment content as HTML (e.g. "<p>This is a comment.</p>")
|
||||
* @apiparam int hidden 1/0 indicating if the topic should be hidden
|
||||
* @throws 2B301/5 INVALID_ID The comment ID does not exist
|
||||
* @throws 1B301/6 NO_AUTHOR The author ID does not exist
|
||||
* @return \IPS\blog\Entry\Comment
|
||||
*/
|
||||
public function POSTitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
/* Load */
|
||||
$comment = \IPS\blog\Entry\Comment::load( $id );
|
||||
|
||||
/* Do it */
|
||||
try
|
||||
{
|
||||
return $this->_edit( $comment );
|
||||
}
|
||||
catch ( \InvalidArgumentException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1B301/6', 400 );
|
||||
}
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B301/5', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE /blog/comments/{id}
|
||||
* Deletes a comment
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @throws 2B301/7 INVALID_ID The comment ID does not exist
|
||||
* @return void
|
||||
*/
|
||||
public function DELETEitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\blog\Entry\Comment::load( $id )->delete();
|
||||
|
||||
return new \IPS\Api\Response( 200, NULL );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B301/7', 404 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Blog Entries API
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 9 Dec 2015
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\api;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Blog Entries API
|
||||
*/
|
||||
class _entries extends \IPS\Content\Api\ItemController
|
||||
{
|
||||
/**
|
||||
* Class
|
||||
*/
|
||||
protected $class = 'IPS\blog\Entry';
|
||||
|
||||
/**
|
||||
* GET /blog/entries
|
||||
* Get list of entries
|
||||
*
|
||||
* @apiparam string blogs Comma-delimited list of blog IDs
|
||||
* @apiparam string authors Comma-delimited list of member IDs - if provided, only entries started by those members are returned
|
||||
* @apiparam int locked If 1, only entries which are locked are returned, if 0 only unlocked
|
||||
* @apiparam int hidden If 1, only entries which are hidden are returned, if 0 only not hidden
|
||||
* @apiparam int pinned If 1, only entries which are pinned are returned, if 0 only not pinned
|
||||
* @apiparam int featured If 1, only entries which are featured are returned, if 0 only not featured
|
||||
* @apiparam int draft If 1, only draft entries are returned, if 0 only published
|
||||
* @apiparam string sortBy What to sort by. Can be 'date' for creation date, 'title' or leave unspecified for ID
|
||||
* @apiparam string sortDir Sort direction. Can be 'asc' or 'desc' - defaults to 'asc'
|
||||
* @apiparam int page Page number
|
||||
* @return \IPS\Api\PaginatedResponse<IPS\blog\Entry>
|
||||
*/
|
||||
public function GETindex()
|
||||
{
|
||||
/* Where clause */
|
||||
$where = array();
|
||||
|
||||
/* Draft */
|
||||
if ( isset( \IPS\Request::i()->draft ) )
|
||||
{
|
||||
$where[] = array( 'entry_status=?', \IPS\Request::i()->draft ? 'draft' : 'published' );
|
||||
}
|
||||
|
||||
/* Return */
|
||||
return $this->_list( $where, 'blogs' );
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /blog/entries/{id}
|
||||
* View comments on an entry
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @apiparam int page Page number
|
||||
* @throws 2B300/1 INVALID_ID The entry ID does not exist
|
||||
* @return \IPS\Api\PaginatedResponse<IPS\blog\Entry\Comment>
|
||||
*/
|
||||
public function GETitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
return $this->_comments( $id, 'IPS\blog\Entry\Comment' );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B300/1', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /blog/entries
|
||||
* Create an entry
|
||||
*
|
||||
* @reqapiparam int blog The ID number of the blog the entry should be created in
|
||||
* @reqapiparam int author The ID number of the member creating the entry (0 for guest)
|
||||
* @reqapiparam string title The entry title
|
||||
* @reqapiparam string entry The entry content as HTML (e.g. "<p>This is a blog entry.</p>")
|
||||
* @apiparam bool draft If this is a draft
|
||||
* @apiparam string prefix Prefix tag
|
||||
* @apiparam string tags Comma-separated list of tags (do not include prefix)
|
||||
* @apiparam datetime date The date/time that should be used for the entry date. If not provided, will use the current date/time
|
||||
* @apiparam string ip_address The IP address that should be stored for the entry/post. If not provided, will use the IP address from the API request
|
||||
* @apiparam int locked 1/0 indicating if the entry should be locked
|
||||
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
|
||||
* @apiparam int pinned 1/0 indicating if the entry should be pinned
|
||||
* @apiparam int featured 1/0 indicating if the entry should be featured
|
||||
* @throws 1B300/2 NO_BLOG The blog ID does not exist
|
||||
* @throws 1B300/3 NO_AUTHOR The author ID does not exist
|
||||
* @throws 1B300/4 NO_TITLE No title was supplied
|
||||
* @throws 1B300/5 NO_CONTENT No content was supplied
|
||||
* @return \IPS\blog\Entry
|
||||
*/
|
||||
public function POSTindex()
|
||||
{
|
||||
/* Get blog */
|
||||
try
|
||||
{
|
||||
$blog = \IPS\blog\Blog::load( \IPS\Request::i()->blog );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_BLOG', '1B300/2', 400 );
|
||||
}
|
||||
|
||||
/* Get author */
|
||||
if ( \IPS\Request::i()->author )
|
||||
{
|
||||
$author = \IPS\Member::load( \IPS\Request::i()->author );
|
||||
if ( !$author->member_id )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1B300/3', 400 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
}
|
||||
|
||||
/* Check we have a title and a description */
|
||||
if ( !\IPS\Request::i()->title )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_TITLE', '1B300/4', 400 );
|
||||
}
|
||||
if ( !\IPS\Request::i()->entry )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_CONTENT', '1B300/5', 400 );
|
||||
}
|
||||
|
||||
/* Do it */
|
||||
return new \IPS\Api\Response( 201, $this->_create( $blog, $author )->apiOutput() );
|
||||
}
|
||||
|
||||
/**
|
||||
* POST /blog/entries/{id}
|
||||
* Edit a blog entry
|
||||
*
|
||||
* @reqapiparam int blog The ID number of the blog the entry should be created in
|
||||
* @reqapiparam int author The ID number of the member creating the entry (0 for guest)
|
||||
* @reqapiparam string title The entry title
|
||||
* @reqapiparam string entry The entry content as HTML (e.g. "<p>This is a blog entry.</p>")
|
||||
* @apiparam bool draft If this is a draft
|
||||
* @apiparam string prefix Prefix tag
|
||||
* @apiparam string tags Comma-separated list of tags (do not include prefix)
|
||||
* @apiparam datetime date The date/time that should be used for the entry date. If not provided, will use the current date/time
|
||||
* @apiparam string ip_address The IP address that should be stored for the entry/post. If not provided, will use the IP address from the API request
|
||||
* @apiparam int locked 1/0 indicating if the entry should be locked
|
||||
* @apiparam int hidden 0 = unhidden; 1 = hidden, pending moderator approval; -1 = hidden (as if hidden by a moderator)
|
||||
* @apiparam int pinned 1/0 indicating if the entry should be pinned
|
||||
* @apiparam int featured 1/0 indicating if the entry should be featured
|
||||
* @throws 2B300/6 INVALID_ID The entry ID is invalid
|
||||
* @throws 1B300/7 NO_BLOG The blog ID does not exist
|
||||
* @throws 1B300/8 NO_AUTHOR The author ID does not exist
|
||||
* @return \IPS\blog\Entry
|
||||
*/
|
||||
public function POSTitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$entry = \IPS\blog\Entry::load( $id );
|
||||
|
||||
/* New blog */
|
||||
if ( isset( \IPS\Request::i()->blog ) and \IPS\Request::i()->blog != $entry->forum_id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$newBlog = \IPS\blog\Blog::load( \IPS\Request::i()->blog );
|
||||
$entry->move( $newBlog );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_BLOG', '1B300/7', 400 );
|
||||
}
|
||||
}
|
||||
|
||||
/* New author */
|
||||
if ( isset( \IPS\Request::i()->author ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
$member = \IPS\Member::load( \IPS\Request::i()->author );
|
||||
if ( !$member->member_id )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
|
||||
$entry->changeAuthor( $member );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1B300/8', 400 );
|
||||
}
|
||||
}
|
||||
|
||||
/* Everything else */
|
||||
$this->_createOrUpdate( $entry );
|
||||
|
||||
/* Save and return */
|
||||
$entry->save();
|
||||
return new \IPS\Api\Response( 200, $entry->apiOutput() );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B300/6', 404 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create or update entry
|
||||
*
|
||||
* @param \IPS\Content\Item $item The item
|
||||
* @return \IPS\Content\Item
|
||||
*/
|
||||
protected function _createOrUpdate( \IPS\Content\Item $item )
|
||||
{
|
||||
/* Is draft */
|
||||
if ( isset( \IPS\Request::i()->draft ) )
|
||||
{
|
||||
$item->status = \IPS\Request::i()->draft ? 'draft' : 'published';
|
||||
}
|
||||
|
||||
/* Content */
|
||||
if ( isset( \IPS\Request::i()->entry ) )
|
||||
{
|
||||
$item->content = \IPS\Request::i()->entry;
|
||||
}
|
||||
|
||||
/* Pass up */
|
||||
return parent::_createOrUpdate( $item );
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE /blog/entries/{id}
|
||||
* Delete an entry
|
||||
*
|
||||
* @param int $id ID Number
|
||||
* @throws 2B300/9 INVALID_ID The entry ID does not exist
|
||||
* @return void
|
||||
*/
|
||||
public function DELETEitem( $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\blog\Entry::load( $id )->delete();
|
||||
|
||||
return new \IPS\Api\Response( 200, NULL );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'INVALID_ID', '2B300/9', 404 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1 +1,163 @@
|
||||
{"app=blog&module=blogs&controller=settings&searchResult=form_blog_enable_rating":{"lang_key":"blog_enable_rating","restriction":"settings_manage","keywords":["blog ratings"]},"app=blog&module=blogs&controller=settings&searchResult=form_blog_allow_rssimport":{"lang_key":"blog_allow_rssimport","restriction":"settings_manage","keywords":["blog rss import"]},"app=blog&module=blogs&controller=settings&searchResult=form_blog_allow_rss":{"lang_key":"blog_allow_rss","restriction":"settings_manage","keywords":["blog rss export"]},"app=blog&module=blogs&controller=settings":{"lang_key":"menu__blog_blogs_settings","restriction":"settings_manage","keywords":["blog settings"]},"app=blog&module=blogs&controller=blogs":{"lang_key":"menu__blog_blogs_blogs","restriction":"blogs_manage","keywords":["blogs","manage blogs","group blogs"]}}
|
||||
{
|
||||
"app=blog&module=blogs&controller=blogs": {
|
||||
"lang_key": "menu__blog_blogs_blogs",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blogs",
|
||||
"group blogs",
|
||||
"manage blogs",
|
||||
"блоги",
|
||||
"управление блогами",
|
||||
"групповые блоги"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&do=form": {
|
||||
"lang_key": "menu__blog_blogs_blogs",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"add blog",
|
||||
"создать блог",
|
||||
"добавить блог"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=blog_desc_wrap": {
|
||||
"lang_key": "blog_desc",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog description",
|
||||
"описание блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=blog_member_id": {
|
||||
"lang_key": "blog_member_id",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog author",
|
||||
"автор блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=blog_name": {
|
||||
"lang_key": "blog_name",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog name",
|
||||
"название блога",
|
||||
"имя блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=form_1_blog_enable_rss": {
|
||||
"lang_key": "blog_enable_rss",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog rss feed",
|
||||
"rss лента",
|
||||
"rss лента блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=form_1_blog_type": {
|
||||
"lang_key": "blog_type",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog author",
|
||||
"group blog",
|
||||
"автор блога",
|
||||
"блог группы",
|
||||
"групповой блог"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=form_new_blog_enable_rss": {
|
||||
"lang_key": "blog_enable_rss",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog rss feed",
|
||||
"rss feed",
|
||||
"rss лента",
|
||||
"rss лента блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=blogs&searchResult=form_new_blog_type": {
|
||||
"lang_key": "blog_type",
|
||||
"restriction": "blogs_manage",
|
||||
"keywords": [
|
||||
"blog type",
|
||||
"group blog",
|
||||
"тип блога",
|
||||
"блог группы",
|
||||
"групповой блог"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=settings": {
|
||||
"lang_key": "menu__blog_blogs_settings",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"blog settings",
|
||||
"настройки блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=settings&searchResult=form_blog_allow_rss": {
|
||||
"lang_key": "blog_allow_rss",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"blog rss export",
|
||||
"rss export",
|
||||
"rss лента",
|
||||
"rss лента блога",
|
||||
"экспорт RSS"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=settings&searchResult=form_blog_allow_rssimport": {
|
||||
"lang_key": "blog_allow_rssimport",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"blog rss import",
|
||||
"rss import",
|
||||
"импорт rss",
|
||||
"rss импорт",
|
||||
"rss импорт блога"
|
||||
]
|
||||
},
|
||||
"app=blog&module=blogs&controller=settings&searchResult=form_blog_enable_rating": {
|
||||
"lang_key": "blog_enable_rating",
|
||||
"restriction": "settings_manage",
|
||||
"keywords": [
|
||||
"blog ratings",
|
||||
"ratings",
|
||||
"рейтинги блога",
|
||||
"рейтинг",
|
||||
"рейтинги"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=4_g_blog_allowlocal": {
|
||||
"lang_key": "g_blog_allowlocal",
|
||||
"restriction": "groups_manage",
|
||||
"keywords": [
|
||||
"blogs",
|
||||
"blogs permission",
|
||||
"create blogs",
|
||||
"post blogs",
|
||||
"создать блог",
|
||||
"блоги",
|
||||
"создавать блоги"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=g_blog_allowdelete": {
|
||||
"lang_key": "g_blog_allowdelete",
|
||||
"restriction": "groups_manage",
|
||||
"keywords": [
|
||||
"delete blogs",
|
||||
"delete own blogs",
|
||||
"удаление блога",
|
||||
"удалять свои блоги",
|
||||
"удалить свой блог"
|
||||
]
|
||||
},
|
||||
"app=core&module=members&controller=groups&searchResult=g_blog_allowprivate": {
|
||||
"lang_key": "g_blog_allowprivate",
|
||||
"restriction": "groups_manage",
|
||||
"keywords": [
|
||||
"private blogs",
|
||||
"приватные блоги",
|
||||
"личные блоги"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<emails><template><template_app>blog</template_app><template_name>digests__item</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
|
||||
<td dir='{dir}' width='40' align='center' valign='top' class=' '>
|
||||
<img src='{$entry->author()->photo}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
|
||||
<img src='{$entry->author()->get_photo( true, true )}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
|
||||
</td>
|
||||
<td dir='{dir}' align='left'>
|
||||
<p style='font-family: "Helvetica Neue", helvetica, sans-serif; margin: 0; font-size: 13px; font-weight: bold'>
|
||||
@@ -17,7 +17,7 @@
|
||||
<p style='font-family: "Helvetica Neue", helvetica, sans-serif; margin: 0; font-size: 13px; margin-bottom: 15px'>
|
||||
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
{{foreach range( 1, 5 ) as $i}}{{if $i <= $entry->averageRating()}}<img src='{resource="email/rating_on.png" location="interface" app="core"}' width='14' height='13' style='vertical-align: middle; margin-right: 2px'>{{else}}<img src='{resource="email/rating_off.png" location="interface" app="core"}' width='14' height='13' style='vertical-align: middle; margin-right: 2px'>{{endif}}{{endforeach}}
|
||||
{{foreach range( 1, 5 ) as $i}}{{if $i <= $entry->averageRating()}}<img src='{resource="email/rating_on.png" location="interface" app="core"}' width='14' height='13' style='vertical-align: middle; margin-right: 2px'>{{elseif ( $i - 0.5 ) <= $entry->averageRating()}}<img src='{resource="email/rating_half.png" location="interface" app="core"}' width='14' height='13' style='vertical-align: middle; margin-right: 2px'>{{else}}<img src='{resource="email/rating_off.png" location="interface" app="core"}' width='14' height='13' style='vertical-align: middle; margin-right: 2px'>{{endif}}{{endforeach}}
|
||||
|
||||
{{endif}}
|
||||
<strong style='font-family: "Helvetica Neue", helvetica, sans-serif; font-size: 13px;'>
|
||||
@@ -28,7 +28,7 @@
|
||||
</tr>]]></template_content_html><template_data>$entry, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("x_created_entry_in", FALSE, array( 'sprintf' => array( $entry->author()->name, $entry->container()->_title ) ) )}: {$entry->title} ({$entry->url()})
|
||||
]]></template_content_plaintext></template><template><template_app>blog</template_app><template_name>digests__comment</template_name><template_content_html><![CDATA[<tr style='border-bottom: 1px solid #eeeeee'>
|
||||
<td dir='{dir}' width='40' align='center' valign='top' class=' '>
|
||||
<img src='{$comment->author()->photo}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
|
||||
<img src='{$comment->author()->get_photo( true, true )}' width='32' height='32' style='border: 1px solid #000; vertical-align: middle;'>
|
||||
</td>
|
||||
<td dir='{dir}' align='left'>
|
||||
<p style='font-family: "Helvetica Neue", helvetica, sans-serif; margin: 0; font-size: 13px; font-weight: bold'>
|
||||
@@ -38,7 +38,7 @@
|
||||
<a href='{$comment->item()->url()}' style='text-decoration: none;'>{$comment->item()->name}</a>
|
||||
</h2>
|
||||
<div style='font-family: "Helvetica Neue", helvetica, sans-serif; line-height: 22px; margin-top: 5px; margin-bottom: 5px; border-left: 3px solid #8c8c8c; padding-left: 15px; font-size: 14px; margin-left: 15px'>
|
||||
{$email->parseTextForEmail( $comment->content() )|raw}
|
||||
{$email->parseTextForEmail( $comment->content(), $email->language )|raw}
|
||||
</div>
|
||||
</td>
|
||||
</tr>]]></template_content_html><template_data>$comment, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("x_commented_entry", FALSE, array( 'sprintf' => array( $comment->author()->name ) ) )}: {$comment->item()->name} ({$comment->url()})
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
"friendly": "entry/{#id}-{?}",
|
||||
"real": "app=blog&module=blogs&controller=entry",
|
||||
"verify": "\\IPS\\blog\\Entry",
|
||||
"alias": "blog/{#blogid}/entry-{#id}-{?}"
|
||||
"alias": "blog/{!}/entry-{#id}-{?}"
|
||||
},
|
||||
"blog_submit": {
|
||||
"friendly": "submit",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<javascript app="blog">
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="101012" javascript_position="1000050">/**
|
||||
* IPS Social Suite 4
|
||||
<file javascript_app="blog" javascript_location="front" javascript_path="controllers/browse" javascript_name="ips.browse.list.js" javascript_type="controller" javascript_version="101093" javascript_position="1000050">/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2013 Invision Power Services - http://www.invisionpower.com
|
||||
*
|
||||
* ips.browse.list.js - Blog browse list controller
|
||||
@@ -30,6 +30,7 @@
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<order app="global" path="/dev/js//framework/">templates
|
||||
common/ips.loader.js
|
||||
common/ui
|
||||
common/utils
|
||||
common
|
||||
@@ -43,6 +44,4 @@ app.js</order>
|
||||
<order app="global" path="/dev/js//library//jquery">jquery.js
|
||||
jquery.history.js
|
||||
jquery.transform.js</order>
|
||||
<order app="global" path="/dev/js//library//xregexp">xregexp-all.js
|
||||
xregexp-lookbehind.js</order>
|
||||
</javascript>
|
||||
@@ -1,33 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="blog" version="101012">
|
||||
<app key="blog" version="101093">
|
||||
<word key="__app_blog" js="0">Blogs</word>
|
||||
<word key="frontnavigation_blogs" js="0">Blogs</word>
|
||||
<word key="__indefart_blog_entry_comment" js="0">a comment on a blog entry</word>
|
||||
<word key="__indefart_blog_entry" js="0">a blog entry</word>
|
||||
<word key="__defart_blog_entry_comment" js="0">comment on a blog entry</word>
|
||||
<word key="__defart_blog_entry" js="0">blog entry</word>
|
||||
<word key="blog_entry_container" js="0">blog</word>
|
||||
<word key="blog_entry_pl_lc" js="0">blog entries</word>
|
||||
<word key="module__blog_blogs" js="0">Blogs</word>
|
||||
<word key="menu__blog_blogs" js="0">Blogs</word>
|
||||
<word key="menu__blog_blogs_settings" js="0">Settings</word>
|
||||
<word key="menu__blog_blogs_blogs" js="0">Blogs</word>
|
||||
<word key="acp_search_title_blog_Blogs" js="0">Blogs</word>
|
||||
<word key="acplog__entries_published" js="0">Automatically published blog entries (%s published)</word>
|
||||
<word key="filestorage__blog_Entries" js="0">IP.Blog Entries</word>
|
||||
<word key="filestorage__blog_Entries" js="0">Blog Entries</word>
|
||||
<word key="add_blog" js="0">Add Blog</word>
|
||||
<word key="block_blog_Overview" js="0">Blog Overview</word>
|
||||
<word key="editor__blog_Blogs" js="0">Blogs</word>
|
||||
<word key="editor__blog_Entries" js="0">Blog Entries</word>
|
||||
<word key="task__blogrssimport" js="0">Checks RSS/Atom feeds for new articles and imports into Blog.</word>
|
||||
<word key="task__blogrssimport" js="0">Checks RSS/Atom feeds for new articles and imports into Blogs.</word>
|
||||
<word key="filestorage__blog_Blogs" js="0">Blog Cover Photos</word>
|
||||
<word key="entry_blog_id" js="0">Blog</word>
|
||||
<word key="r__blogs" js="0">Blogs</word>
|
||||
<word key="r__blog_settings_manage" js="0">Can edit blog settings?</word>
|
||||
<word key="r__blogs_manage" js="0">Can manage blogs?</word>
|
||||
<word key="blog_member_deleted" js="0">Member has been deleted</word>
|
||||
<word key="rebuilding_blog_entry_images" js="0">Rebuilding blog entry images</word>
|
||||
<word key="acplogs__blog_settings" js="0">Updated blog settings</word>
|
||||
<word key="blog_enable_rating" js="0">Enable blog ratings?</word>
|
||||
<word key="blog_settings_rss" js="0">RSS Settings</word>
|
||||
<word key="blog_allow_rssimport" js="0">Allow RSS imports</word>
|
||||
<word key="blog_allow_rss" js="0">Allow RSS exports</word>
|
||||
<word key="blog_allow_rss_desc" js="0"><![CDATA[Only content that is available to guests will be shown. For more options, create a <a href='{internal.app=core&module=discovery&controller=rss}'>Custom RSS Feed</a>]]></word>
|
||||
<word key="blogs" js="0">Blogs</word>
|
||||
<word key="blog_word_custom" js="0">Blog Name</word>
|
||||
<word key="blog_blog_member_id" js="0">Blog Author</word>
|
||||
@@ -41,13 +47,18 @@
|
||||
<word key="add_blog_entry" js="0">Add Blog Entry</word>
|
||||
<word key="entry_pl" js="0">Blog Entries</word>
|
||||
<word key="blog_entry_comment_pl" js="0">Blog Comments</word>
|
||||
<word key="blog_entry_comment_pl_lc" js="0">blog comments</word>
|
||||
<word key="entry_comments" js="0">Comments</word>
|
||||
<word key="blog_num_views" js="0">{!# [1:view][?:views]}</word>
|
||||
<word key="manage_blog" js="0">Manage Blog</word>
|
||||
<word key="select_blog" js="0">Select Blog</word>
|
||||
<word key="search_contextual_item_blogs" js="0">This Blog</word>
|
||||
<word key="search_contextual_item_blog_entry" js="0">This Entry</word>
|
||||
<word key="blog_settings" js="0">Blog Settings</word>
|
||||
<word key="blog_name" js="0">Name</word>
|
||||
<word key="blog_name_group" js="0">Name</word>
|
||||
<word key="blog_desc" js="0">Description</word>
|
||||
<word key="blog_desc_group" js="0">Description</word>
|
||||
<word key="blog_desc_placeholder" js="0">Add a description...</word>
|
||||
<word key="blog_type" js="0">Type</word>
|
||||
<word key="blog_type_normal" js="0">Single author</word>
|
||||
@@ -58,12 +69,14 @@
|
||||
<word key="blog_groupblog_name" js="0">Group Name</word>
|
||||
<word key="blog_groupblog_name_desc" js="0">Used in place of the owner's name when viewing a Group Blog.</word>
|
||||
<word key="edit_blog" js="0">Edit Blog</word>
|
||||
<word key="delete_blog" js="0">Delete</word>
|
||||
<word key="delete_blog" js="0">Delete Blog</word>
|
||||
<word key="blog_privacy" js="0">Privacy</word>
|
||||
<word key="blog_privacy_open" js="0">Everyone can read this blog</word>
|
||||
<word key="blog_privacy_private" js="0">Only the members I choose can read this blog</word>
|
||||
<word key="blog_social_group" js="0">Members allowed to read this blog</word>
|
||||
<word key="no_blog_author_selected" js="0">No Blog Author selected</word>
|
||||
<word key="modlog__action_delete_blog" js="0">Deleted Blog %s</word>
|
||||
<word key="delete_blog_confirm" js="0">Are you sure you want to delete this blog?</word>
|
||||
<word key="submit_entry" js="0">Submit New Blog Entry</word>
|
||||
<word key="blog_entry_title" js="0">Title</word>
|
||||
<word key="blog_entry_tags" js="0">Tags</word>
|
||||
@@ -79,7 +92,7 @@
|
||||
<word key="entry_submit" js="0">Submit Entry</word>
|
||||
<word key="entry_information" js="0">Entry Details</word>
|
||||
<word key="blog_entry__save" js="0">Save</word>
|
||||
<word key="immediately" js="0">Immediately</word>
|
||||
<word key="entry_ip_address" js="0">IP Address</word>
|
||||
<word key="entry_gallery_album" js="0">Album</word>
|
||||
<word key="entry_gallery_album_desc" js="0">You can associate an album from the Gallery with this entry to display images alongside the entry content</word>
|
||||
<word key="block_entryFeed" js="0">Blog Entry Feed</word>
|
||||
@@ -92,6 +105,8 @@
|
||||
<word key="block_blogStatistics_desc" js="0">Shows general blog statistics</word>
|
||||
<word key="total_blogs" js="0">Total Blogs</word>
|
||||
<word key="total_entries" js="0">Total Entries</word>
|
||||
<word key="block_recentEntries" js="0">Recent Entries</word>
|
||||
<word key="block_recentEntries_desc" js="0">Shows recent entries</word>
|
||||
<word key="prev_entry" js="0">Previous entry</word>
|
||||
<word key="next_entry" js="0">Next entry</word>
|
||||
<word key="blog_entry__comment_placeholder" js="0">Add a comment...</word>
|
||||
@@ -135,7 +150,7 @@
|
||||
<word key="this_is_group" js="0">This is a group blog</word>
|
||||
<word key="unread_blog" js="0">This entry is unread</word>
|
||||
<word key="read_blog" js="0">You've read this entry</word>
|
||||
<word key="go_to_blog" js="0">Go to the blog "%s"</word>
|
||||
<word key="go_to_blog" js="0">Go to the blog %s</word>
|
||||
<word key="latest_entry" js="0">Latest Entry</word>
|
||||
<word key="no_entries" js="0">No blog entries have been created</word>
|
||||
<word key="pin_blog" js="0">Pin</word>
|
||||
@@ -172,7 +187,8 @@
|
||||
<word key="most_recent_entry" js="0">Most recent entry</word>
|
||||
<word key="blog_byline_nodate" js="0">A blog by %s</word>
|
||||
<word key="blog_last_entry_date" js="0">Last entry posted %s</word>
|
||||
<word key="digest_area_entry" js="0">Entries</word>
|
||||
<word key="digest_area_blog_blog" js="0">Blogs</word>
|
||||
<word key="digest_area_blog_entry" js="0">Entries</word>
|
||||
<word key="x_created_entry_in" js="0">%s posted a blog entry in %s</word>
|
||||
<word key="x_commented_entry" js="0">%s commented on an entry</word>
|
||||
<word key="loc_blog_viewing_index" js="0">Browsing Blogs</word>
|
||||
@@ -219,5 +235,8 @@
|
||||
<word key="widget__blog_edate" js="0">Last entry date</word>
|
||||
<word key="widget__blog_count_entries" js="0">Number of entries</word>
|
||||
<word key="widget__blog_count_comments" js="0">Number of comments</word>
|
||||
<word key="__api_blog_comments" js="0">Comments</word>
|
||||
<word key="__api_blog_entries" js="0">Entries</word>
|
||||
<word key="__api_blog_blogs" js="0">Blogs</word>
|
||||
</app>
|
||||
</language>
|
||||
@@ -0,0 +1,242 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="blog" version="101093">
|
||||
<word key_rus="Блоги" key="__app_blog" js="0">Blogs</word>
|
||||
<word key_rus="Блоги" key="frontnavigation_blogs" js="0">Blogs</word>
|
||||
<word key_rus="комментарий на запись в блоге" key="__indefart_blog_entry_comment" js="0">a comment on a blog entry</word>
|
||||
<word key_rus="блог" key="blog_entry_container" js="0">blog</word>
|
||||
<word key_rus="записи блога" key="blog_entry_pl_lc" js="0">blog entries</word>
|
||||
<word key_rus="запись в блоге" key="__indefart_blog_entry" js="0">a blog entry</word>
|
||||
<word key_rus="комментарий к записи блога" key="__defart_blog_entry_comment" js="0">comment on a blog entry</word>
|
||||
<word key_rus="запись блога" key="__defart_blog_entry" js="0">blog entry</word>
|
||||
<word key_rus="Блоги" key="module__blog_blogs" js="0">Blogs</word>
|
||||
<word key_rus="Блоги" key="menu__blog_blogs" js="0">Blogs</word>
|
||||
<word key_rus="Настройки" key="menu__blog_blogs_settings" js="0">Settings</word>
|
||||
<word key_rus="Блоги" key="menu__blog_blogs_blogs" js="0">Blogs</word>
|
||||
<word key_rus="Блоги" key="acp_search_title_blog_Blogs" js="0">Blogs</word>
|
||||
<word key_rus="Автоматически опубликованные записи блога (%s опубликовано)" key="acplog__entries_published" js="0">Automatically published blog entries (%s published)</word>
|
||||
<word key_rus="Записи блогов" key="filestorage__blog_Entries" js="0">Blog Entries</word>
|
||||
<word key_rus="Добавить блог" key="add_blog" js="0">Add Blog</word>
|
||||
<word key_rus="Обзор блога" key="block_blog_Overview" js="0">Blog Overview</word>
|
||||
<word key_rus="Блоги" key="editor__blog_Blogs" js="0">Blogs</word>
|
||||
<word key_rus="Записи блога" key="editor__blog_Entries" js="0">Blog Entries</word>
|
||||
<word key_rus="Проверка RSS/Atom лент на новые статьи и импорт в Блоги." key="task__blogrssimport" js="0">Checks RSS/Atom feeds for new articles and imports into Blogs.</word>
|
||||
<word key_rus="Обложки блогов" key="filestorage__blog_Blogs" js="0">Blog Cover Photos</word>
|
||||
<word key_rus="Блог" key="entry_blog_id" js="0">Blog</word>
|
||||
<word key_rus="Блоги" key="r__blogs" js="0">Blogs</word>
|
||||
<word key_rus="Можно редактировать настройки блога?" key="r__blog_settings_manage" js="0">Can edit blog settings?</word>
|
||||
<word key_rus="Можно управлять блогами?" key="r__blogs_manage" js="0">Can manage blogs?</word>
|
||||
<word key_rus="Пользователь был удалён" key="blog_member_deleted" js="0">Member has been deleted</word>
|
||||
<word key_rus="Перестроение изображений записей блога" key="rebuilding_blog_entry_images" js="0">Rebuilding blog entry images</word>
|
||||
<word key_rus="Обновленные настройки блога" key="acplogs__blog_settings" js="0">Updated blog settings</word>
|
||||
<word key_rus="Включить рейтинги блогов?" key="blog_enable_rating" js="0">Enable blog ratings?</word>
|
||||
<word key_rus="Настройки RSS" key="blog_settings_rss" js="0">RSS Settings</word>
|
||||
<word key_rus="Разрешить RSS импорт" key="blog_allow_rssimport" js="0">Allow RSS imports</word>
|
||||
<word key_rus="Разрешить RSS экспорт" key="blog_allow_rss" js="0">Allow RSS exports</word>
|
||||
<word key_rus="Будет отображён контент, доступный для гостей. Для получения дополнительных возможностей, создайте <a href='{internal.app=core&module=discovery&controller=rss}'>Пользовательскую RSS ленту</a>" key="blog_allow_rss_desc" js="0"><![CDATA[Only content that is available to guests will be shown. For more options, create a <a href='{internal.app=core&module=discovery&controller=rss}'>Custom RSS Feed</a>]]></word>
|
||||
<word key_rus="Блоги" key="blogs" js="0">Blogs</word>
|
||||
<word key_rus="Название блога" key="blog_word_custom" js="0">Blog Name</word>
|
||||
<word key_rus="Автор блога" key="blog_blog_member_id" js="0">Blog Author</word>
|
||||
<word key_rus="Блог" key="blogs_sg" js="0">Blog</word>
|
||||
<word key_rus="Создать блог" key="create_blog" js="0">Create a blog</word>
|
||||
<word key_rus="Создать новый блог" key="create_new_blog" js="0">Create a new blog</word>
|
||||
<word key_rus="Добавить запись в блог" key="add_entry_to" js="0">Add entry to a blog</word>
|
||||
<word key_rus="Запись блога" key="blog_entry" js="0">Blog Entry</word>
|
||||
<word key_rus="Записи блога" key="blog_entry_pl" js="0">Blog Entries</word>
|
||||
<word key_rus="Комментарии блога" key="blog_entry_comment" js="0">Blog Comment</word>
|
||||
<word key_rus="Добавить запись" key="add_blog_entry" js="0">Add Blog Entry</word>
|
||||
<word key_rus="Записи блога" key="entry_pl" js="0">Blog Entries</word>
|
||||
<word key_rus="Комментарии блога" key="blog_entry_comment_pl" js="0">Blog Comments</word>
|
||||
<word key_rus="комментарии блога" key="blog_entry_comment_pl_lc" js="0">blog comments</word>
|
||||
<word key_rus="Комментарии" key="entry_comments" js="0">Comments</word>
|
||||
<word key_rus="{!# [*1:просмотр][*2:просмотра][*3:просмотра][*4:просмотра][11:просмотров][12:просмотров][13:просмотров][14:просмотров][?:просмотров]}" key="blog_num_views" js="0">{!# [1:view][?:views]}</word>
|
||||
<word key_rus="Управление блогом" key="manage_blog" js="0">Manage Blog</word>
|
||||
<word key_rus="Выбор блога" key="select_blog" js="0">Select Blog</word>
|
||||
<word key_rus="Этот блог" key="search_contextual_item_blogs" js="0">This Blog</word>
|
||||
<word key_rus="Эта запись" key="search_contextual_item_blog_entry" js="0">This Entry</word>
|
||||
<word key_rus="Настройки блога" key="blog_settings" js="0">Blog Settings</word>
|
||||
<word key_rus="Название" key="blog_name" js="0">Name</word>
|
||||
<word key_rus="Название" key="blog_name_group" js="0">Name</word>
|
||||
<word key_rus="Описание" key="blog_desc" js="0">Description</word>
|
||||
<word key_rus="Описание" key="blog_desc_group" js="0">Description</word>
|
||||
<word key_rus="Добавить описание..." key="blog_desc_placeholder" js="0">Add a description...</word>
|
||||
<word key_rus="Тип" key="blog_type" js="0">Type</word>
|
||||
<word key_rus="Один автор" key="blog_type_normal" js="0">Single author</word>
|
||||
<word key_rus="Группа" key="blog_type_group" js="0">Group</word>
|
||||
<word key_rus="Групповые блоги управляются всеми пользователям выбранных групп." key="blog_type_group_desc" js="0">Group blogs are jointly managed by all members in selected groups.</word>
|
||||
<word key_rus="Группы" key="blog_groupblog_ids" js="0">Groups</word>
|
||||
<word key_rus="Автор" key="blog_member_id" js="0">Author</word>
|
||||
<word key_rus="Название группы" key="blog_groupblog_name" js="0">Group Name</word>
|
||||
<word key_rus="Используется вместо имени владельца при просмотре группового блога." key="blog_groupblog_name_desc" js="0">Used in place of the owner's name when viewing a Group Blog.</word>
|
||||
<word key_rus="Изменить блог" key="edit_blog" js="0">Edit Blog</word>
|
||||
<word key_rus="Удалить блог" key="delete_blog" js="0">Delete Blog</word>
|
||||
<word key_rus="Приватность" key="blog_privacy" js="0">Privacy</word>
|
||||
<word key_rus="Все пользователи могут читать этот блог" key="blog_privacy_open" js="0">Everyone can read this blog</word>
|
||||
<word key_rus="Только выбранные мной пользователи могут читать этот блог" key="blog_privacy_private" js="0">Only the members I choose can read this blog</word>
|
||||
<word key_rus="Кто может читать этот блог" key="blog_social_group" js="0">Members allowed to read this blog</word>
|
||||
<word key_rus="Автор блога не выбран" key="no_blog_author_selected" js="0">No Blog Author selected</word>
|
||||
<word key_rus="Удалён блог %s" key="modlog__action_delete_blog" js="0">Deleted Blog %s</word>
|
||||
<word key_rus="Вы уверены, что хотите удалить этот блог?" key="delete_blog_confirm" js="0">Are you sure you want to delete this blog?</word>
|
||||
<word key_rus="Создать новую запись в блоге" key="submit_entry" js="0">Submit New Blog Entry</word>
|
||||
<word key_rus="Название" key="blog_entry_title" js="0">Title</word>
|
||||
<word key_rus="Теги" key="blog_entry_tags" js="0">Tags</word>
|
||||
<word key_rus="Автоподписка" key="blog_entry_auto_follow" js="0">Auto Follow</word>
|
||||
<word key_rus="Сообщить мне при публикации комментариев" key="blog_entry_auto_follow_suffix" js="0">Notify me when other comments are posted</word>
|
||||
<word key_rus="Контент" key="blog_entry_content" js="0">Content</word>
|
||||
<word key_rus="Дата публикации" key="blog_entry_date" js="0">Publish Time</word>
|
||||
<word key_rus="Опубликовать" key="blog_entry_publish" js="0">Publish</word>
|
||||
<word key_rus="Запись блога" key="blog_entry_mainTab" js="0">Blog Entry</word>
|
||||
<word key_rus="Опрос" key="blog_entry_pollTab" js="0">Poll</word>
|
||||
<word key_rus="" key="blog_entry_poll" js="0"></word>
|
||||
<word key_rus="Добавить запись в блог" key="create_blog_entry" js="0">Create Blog Entry</word>
|
||||
<word key_rus="Добавить запись" key="entry_submit" js="0">Submit Entry</word>
|
||||
<word key_rus="Детали записи" key="entry_information" js="0">Entry Details</word>
|
||||
<word key_rus="Сохранить" key="blog_entry__save" js="0">Save</word>
|
||||
<word key_rus="IP-адрес" key="entry_ip_address" js="0">IP Address</word>
|
||||
<word key_rus="Альбом" key="entry_gallery_album" js="0">Album</word>
|
||||
<word key_rus="Вы можете связать альбом из Галереи с этой записью для отображения изображений рядом с содержимым данной записи" key="entry_gallery_album_desc" js="0">You can associate an album from the Gallery with this entry to display images alongside the entry content</word>
|
||||
<word key_rus="Лента записей блогов" key="block_entryFeed" js="0">Blog Entry Feed</word>
|
||||
<word key_rus="Создание ленты записей из блогов" key="block_entryFeed_desc" js="0">Create a feed of blog entries</word>
|
||||
<word key_rus="Блоги" key="widget_feed_container_blog_entry" js="0">Blogs</word>
|
||||
<word key_rus="Последние комментарии из ваших блогов" key="block_latestComments" js="0">Latest Comments From Your Blogs</word>
|
||||
<word key_rus="Отображение списка последних комментариев" key="block_latestComments_desc" js="0">Shows a list of latest comments from the logged in member's blogs</word>
|
||||
<word key_rus="Просмотр записи %s" key="view_this_entry" js="0">View the entry %s</word>
|
||||
<word key_rus="Статистика Блогов" key="block_blogStatistics" js="0">Blog Statistics</word>
|
||||
<word key_rus="Отображение основной статистики блогов" key="block_blogStatistics_desc" js="0">Shows general blog statistics</word>
|
||||
<word key_rus="Всего блогов" key="total_blogs" js="0">Total Blogs</word>
|
||||
<word key_rus="Всего записей" key="total_entries" js="0">Total Entries</word>
|
||||
<word key_rus="Последние записи" key="block_recentEntries" js="0">Recent Entries</word>
|
||||
<word key_rus="Отображение последних записей блогов" key="block_recentEntries_desc" js="0">Shows recent entries</word>
|
||||
<word key_rus="Предыдущая запись" key="prev_entry" js="0">Previous entry</word>
|
||||
<word key_rus="Следующая запись" key="next_entry" js="0">Next entry</word>
|
||||
<word key_rus="Добавить комментарий..." key="blog_entry__comment_placeholder" js="0">Add a comment...</word>
|
||||
<word key_rus="Добавить комментарий" key="blog_entry_submit_comment" js="0">Submit Comment</word>
|
||||
<word key_rus="Действия" key="entry_actions" js="0">Entry Actions</word>
|
||||
<word key_rus="Изменить эту запись" key="edit_title_blog" js="0">Edit this blog entry</word>
|
||||
<word key_rus="Сделать популярной эту запись" key="feature_title_blog" js="0">Feature this blog entry</word>
|
||||
<word key_rus="Сделать эту запись непопулярной" key="unfeature_title_blog" js="0">Unfeature this blog entry</word>
|
||||
<word key_rus="Закрепить эту запись" key="pin_title_blog" js="0">Pin this blog entry</word>
|
||||
<word key_rus="Открепить эту запись" key="unpin_title_blog" js="0">Unpin this blog entry</word>
|
||||
<word key_rus="Скрыть эту запись" key="hide_title_blog" js="0">Hide this blog entry</word>
|
||||
<word key_rus="Показать эту запись" key="unhide_title_blog" js="0">Unhide this blog entry</word>
|
||||
<word key_rus="Заблокировать эту запись" key="blog_lock_title" js="0">Lock this blog entry</word>
|
||||
<word key_rus="Разблокировать эту запись" key="blog_unlock_title" js="0">Unlock this blog entry</word>
|
||||
<word key_rus="Переместить эту запись" key="blog_move_title" js="0">Move this blog entry</word>
|
||||
<word key_rus="Удалить эту запись" key="blog_delete_title" js="0">Delete this blog entry</word>
|
||||
<word key_rus="Одобрить эту запись" key="approve_title_blog" js="0">Approve this blog entry</word>
|
||||
<word key_rus="Жалоба" key="report_entry" js="0">Report Entry</word>
|
||||
<word key_rus="Неопубликовано" key="unpublished" js="0">Unpublished</word>
|
||||
<word key_rus="Эта запись блога заблокирована, но вы можете добавлять новые комментарии к ней." key="blog_entry_locked_can_comment" js="0">This blog entry is locked, but your permissions allow you to add new comments.</word>
|
||||
<word key_rus="Эта запись блога заблокирована для комментирования." key="blog_entry_locked_cannot_comment" js="0">This blog entry is now closed to further comments.</word>
|
||||
<word key_rus="Запись опубликовал %s" key="entry_posted" js="0">Entry posted by %s</word>
|
||||
<word key_rus="%s опубликовует запись" key="entry_future_posted" js="0">Entry by %s publishes on</word>
|
||||
<word key_rus="Изображения" key="entry_images" js="0">Images</word>
|
||||
<word key_rus="{!#[*1:комментарий][*2:комментария][*3:комментария][*4:комментария][11:комментариев][12:комментариев][13:комментариев][14:комментариев][?:комментариев]}" key="blog_comments" js="0">{!#[1:comment][?:comments]}</word>
|
||||
<word key_rus="{!#[*1:запись][*2:записи][*3:записи][*4:записи][11:записей][12:записей][13:записей][14:записей][?:записей]}" key="blog_entries" js="0">{!#[1:entry][?:entries]}</word>
|
||||
<word key_rus="{!#[*1:просмотр][*2:просмотра][*3:просмотра][*4:просмотра][11:просмотров][12:просмотров][13:просмотров][14:просмотров][?:просмотров]}" key="blog_views" js="0">{!#[1:view][?:views]}</word>
|
||||
<word key_rus="Последние записи" key="recent_entries" js="0">Recent Entries</word>
|
||||
<word key_rus="Популярные записи" key="featured_entries" js="0">Featured Entries</word>
|
||||
<word key_rus="Блоги нашего сообщества" key="our_community_blogs" js="0">Our community blogs</word>
|
||||
<word key_rus="Мои блоги" key="my_blogs" js="0">My Blogs</word>
|
||||
<word key_rus="Блоги с записями" key="blogs_with_content" js="0">Blogs With Entries</word>
|
||||
<word key_rus="По последней записи" key="sort_last_edate" js="0">Last Entry</word>
|
||||
<word key_rus="По рейтингу" key="sort_rating_total" js="0">Rating</word>
|
||||
<word key_rus="Из блога" key="from_the_blog" js="0">From the blog</word>
|
||||
<word key_rus="Просмотреть больше записей из %s" key="see_more_entries" js="0">See more entries from %s</word>
|
||||
<word key_rus="В блоге ещё нет записей" key="no_entries_yet" js="0">No blog entries yet</word>
|
||||
<word key_rus="Подробнее о данной записи" key="read_more_entry" js="0">Read more of this entry</word>
|
||||
<word key_rus="Просмотр комментариев этой записи" key="see_comments_on_entry" js="0">See comments for this entry</word>
|
||||
<word key_rus="Добавить новую запись" key="add_entry" js="0">Add new entry</word>
|
||||
<word key_rus="Это групповой блог" key="this_is_group" js="0">This is a group blog</word>
|
||||
<word key_rus="Запись не прочитана" key="unread_blog" js="0">This entry is unread</word>
|
||||
<word key_rus="Вы прочитали эту запись" key="read_blog" js="0">You've read this entry</word>
|
||||
<word key_rus="Перейти в блог %s" key="go_to_blog" js="0">Go to the blog %s</word>
|
||||
<word key_rus="Последняя запись" key="latest_entry" js="0">Latest Entry</word>
|
||||
<word key_rus="Ни одной записи в блоге ещё не создано" key="no_entries" js="0">No blog entries have been created</word>
|
||||
<word key_rus="Закрепить" key="pin_blog" js="0">Pin</word>
|
||||
<word key_rus="Открепить" key="unpin_blog" js="0">Unpin</word>
|
||||
<word key_rus="Блог %s" key="blog_by" js="0">A blog by %s</word>
|
||||
<word key_rus="Групповой блог %s" key="group_blog_by" js="0">A group blog by %s</word>
|
||||
<word key_rus="Авторы этого блога" key="contributors_to_this" js="0">Contributors to this blog</word>
|
||||
<word key_rus="О блоге" key="about_this_blog" js="0">About this blog</word>
|
||||
<word key_rus="Записи в этом блоге" key="entries_in_this_blog" js="0">Entries in this blog</word>
|
||||
<word key_rus="RSS лента отключена" key="blog_rss_offline" js="0">RSS feed disabled</word>
|
||||
<word key_rus="Эта RSS лента отключена, т.к. настройка "Разрешить RSS экспорт" в настоящее время неактивна в админцентре или отключена в настройках блога." key="blog_rss_offline_admin" js="0">This RSS feed is disabled either because the setting "Allow RSS exports" is currently disabled in the ACP or it is disabled in the individual blog settings.</word>
|
||||
<word key_rus="Включить RSS ленту" key="blog_enable_rss" js="0">Enable RSS Feed</word>
|
||||
<word key_rus="Разрешить этому блогу присутствовать в RSS ленте" key="blog_enable_rss_desc" js="0">Allow this blog to be syndicated with others by enabling RSS</word>
|
||||
<word key_rus="Последние записи" key="blog_rss_title" js="0">Latest Entries</word>
|
||||
<word key_rus="Импорт RSS/Atom" key="blog_rss_import" js="0">Atom/RSS Import</word>
|
||||
<word key_rus="URL" key="blog_rss_import_url" js="0">URL</word>
|
||||
<word key_rus="Имя пользователя HTTP авторизации" key="blog_rss_import_auth_user" js="0">HTTP Authorization Username</word>
|
||||
<word key_rus="Большинство лент не запрашивают авторизацию и вы может оставить это поле пустым." key="blog_rss_import_auth_user_desc" js="0">Most feeds do not require authorization and you can leave this blank.</word>
|
||||
<word key_rus="Пароль HTTP авторизации" key="blog_rss_import_auth_pass" js="0">HTTP Authorization Password</word>
|
||||
<word key_rus="Большинство лент не запрашивают авторизацию и вы может оставить это поле пустым." key="blog_rss_import_auth_pass_desc" js="0">Most feeds do not require authorization and you can leave this blank.</word>
|
||||
<word key_rus="Теги" key="blog_rss_import_tags" js="0">Tags</word>
|
||||
<word key_rus="Текст ссылки" key="blog_rss_import_show_link" js="0">Text to use for link</word>
|
||||
<word key_rus="Появится в нижней части сообщения, ссылаясь на оригинал статьи." key="blog_rss_import_show_link_desc" js="0">Will appear at the bottom of the post, linking to the original article.</word>
|
||||
<word key_rus="Посмотреть полный текст статьи" key="blog_rss_import_show_link_default" js="0">View the full article</word>
|
||||
<word key_rus="Включить импорт RSS" key="blog_enable_rss_import" js="0">Enable RSS import</word>
|
||||
<word key_rus="Импорт записей из внешних источников" key="blog_enable_rss_import_desc" js="0">Import entries from an external source using RSS</word>
|
||||
<word key_rus="Запись блога" key="embed_blog_entry" js="0">Blog Entry</word>
|
||||
<word key_rus="Блог" key="embed_blog" js="0">Blog</word>
|
||||
<word key_rus="Посмотреть этот блог" key="view_this_blog" js="0">View this blog</word>
|
||||
<word key_rus="Блоги" key="user_blogs" js="0">Blogs</word>
|
||||
<word key_rus="Блоги" key="profile_blog_blog" js="0">Blogs</word>
|
||||
<word key_rus="Также содействует с:" key="also_contributes" js="0">Also contributes to:</word>
|
||||
<word key_rus="Содействует с" key="contributes_to" js="0">Contributes To</word>
|
||||
<word key_rus="Последняя запись" key="most_recent_entry" js="0">Most recent entry</word>
|
||||
<word key_rus="Блог %s" key="blog_byline_nodate" js="0">A blog by %s</word>
|
||||
<word key_rus="Последняя запись размещена %s" key="blog_last_entry_date" js="0">Last entry posted %s</word>
|
||||
<word key_rus="Блоги" key="digest_area_blog_blog" js="0">Blogs</word>
|
||||
<word key_rus="Записи" key="digest_area_blog_entry" js="0">Entries</word>
|
||||
<word key_rus="%s опубликовал запись блога в %s" key="x_created_entry_in" js="0">%s posted a blog entry in %s</word>
|
||||
<word key_rus="%s прокомментировал запись" key="x_commented_entry" js="0">%s commented on an entry</word>
|
||||
<word key_rus="Просмотр Блогов" key="loc_blog_viewing_index" js="0">Browsing Blogs</word>
|
||||
<word key_rus="Создание блога" key="loc_blog_creating" js="0">Creating a Blog</word>
|
||||
<word key_rus="Просмотр блога: %s" key="loc_blog_viewing_blog" js="0">Viewing Blog: %s</word>
|
||||
<word key_rus="Добавление записи блога в: %s" key="loc_blog_adding_entry" js="0">Adding a Blog Entry in: %s</word>
|
||||
<word key_rus="Просмотр записи: %s" key="loc_blog_viewing_entry" js="0">Viewing Entry: %s</word>
|
||||
<word key_rus="Блоги" key="modperms__core_Content_blog_Entry" js="0">Blogs</word>
|
||||
<word key_rus="Можно закреплять записи?" key="can_pin_blog_entry" js="0">Can pin entries?</word>
|
||||
<word key_rus="Можно откреплять записи?" key="can_unpin_blog_entry" js="0">Can unpin entries?</word>
|
||||
<word key_rus="Можно устанавливать записи популярными?" key="can_feature_blog_entry" js="0">Can feature entries?</word>
|
||||
<word key_rus="Можно устанавливать записи непопулярными?" key="can_unfeature_blog_entry" js="0">Can unfeature entries?</word>
|
||||
<word key_rus="Можно редактировать записи?" key="can_edit_blog_entry" js="0">Can edit entries?</word>
|
||||
<word key_rus="Можно скрывать записи?" key="can_hide_blog_entry" js="0">Can hide entries?</word>
|
||||
<word key_rus="Можно отображать записи?" key="can_unhide_blog_entry" js="0">Can unhide entries?</word>
|
||||
<word key_rus="Можно просматривать скрытые записи?" key="can_view_hidden_blog_entry" js="0">Can view hidden entries?</word>
|
||||
<word key_rus="Можно перемещать записи?" key="can_move_blog_entry" js="0">Can move entries?</word>
|
||||
<word key_rus="Можно блокировать записи?" key="can_lock_blog_entry" js="0">Can lock entries?</word>
|
||||
<word key_rus="Можно разблокировать записи?" key="can_unlock_blog_entry" js="0">Can unlock entries?</word>
|
||||
<word key_rus="Можно отвечать на заблокированные записи?" key="can_reply_to_locked_blog_entry" js="0">Can reply to locked entries?</word>
|
||||
<word key_rus="Можно удалять записи?" key="can_delete_blog_entry" js="0">Can delete entries?</word>
|
||||
<word key_rus="Можно редактировать комментарии?" key="can_edit_blog_entry_comment" js="0">Can edit comments?</word>
|
||||
<word key_rus="Можно скрывать комментарии?" key="can_hide_blog_entry_comment" js="0">Can hide comments?</word>
|
||||
<word key_rus="Можно отображать комментарии?" key="can_unhide_blog_entry_comment" js="0">Can unhide comments?</word>
|
||||
<word key_rus="Можно просматривать скрытые комментарии?" key="can_view_hidden_blog_entry_comment" js="0">Can view hidden comments?</word>
|
||||
<word key_rus="Можно удалять комментарии?" key="can_delete_blog_entry_comment" js="0">Can delete comments?</word>
|
||||
<word key_rus="Можно устанавливать дату будующих публикаций?" key="can_future_publish_blog_entry" js="0">Can set a future publishing date?</word>
|
||||
<word key_rus="Можно просматривать записи блога других пользователей, ожидающие публикации?" key="can_view_future_blog_entry" js="0">Can view pending publishing blog entries authored by other members?</word>
|
||||
<word key_rus="Блог" key="group__blog_Blog" js="0">Blog</word>
|
||||
<word key_rus="Можно создавать блоги?" key="g_blog_allowlocal" js="0">Can create blogs?</word>
|
||||
<word key_rus="Максимальное количество блогов" key="g_blog_maxblogs" js="0">Maximum number of blogs</word>
|
||||
<word key_rus="Можно создавать приватные блоги?" key="g_blog_allowprivate" js="0">Can create private blogs?</word>
|
||||
<word key_rus="Приватные блоги могут просматриваться только выбранными автором пользователями." key="g_blog_allowprivate_desc" js="0">Private blogs can only be seen by the members that the creator chooses.</word>
|
||||
<word key_rus="Можно добавлять опросы к записям блога?" key="g_blog_allowpoll" js="0">Can add polls to blog entries?</word>
|
||||
<word key_rus="Можно комментировать записи блога?" key="g_blog_allowcomment" js="0">Can comment on blog entries?</word>
|
||||
<word key_rus="Можно модерировать записи собственного блога?" key="g_blog_allowownmod" js="0">Can moderate own blog entries?</word>
|
||||
<word key_rus="Пользователь сможет: редактировать комментарии и записи, удалять комментарии и записи, и блокировать записи от комментирования." key="g_blog_allowownmod_desc" js="0">The user will be able to: edit comments and entries, delete comments and entries, and lock entries from further comments.</word>
|
||||
<word key_rus="Можно удалять свои блоги?" key="g_blog_allowdelete" js="0">Can delete own blogs?</word>
|
||||
<word key_rus="Комментарии в блогах" key="block_blogCommentFeed" js="0">Blog Comments</word>
|
||||
<word key_rus="Отображение комментариев из блогов" key="block_blogCommentFeed_desc" js="0">Display comments from blogs.</word>
|
||||
<word key_rus="Блоги" key="block_blogs" js="0">Blogs</word>
|
||||
<word key_rus="Отображение списка блогов" key="block_blogs_desc" js="0">Display a list of blogs.</word>
|
||||
<word key_rus="Последняя запись размещена" key="widget_blog_last_date" js="0">Last entry posted</word>
|
||||
<word key_rus="Дата последней записи" key="widget__blog_edate" js="0">Last entry date</word>
|
||||
<word key_rus="Количество записей" key="widget__blog_count_entries" js="0">Number of entries</word>
|
||||
<word key_rus="Количество комментариев" key="widget__blog_count_comments" js="0">Number of comments</word>
|
||||
<word key_rus="Комментарии" key="__api_blog_comments" js="0">Comments</word>
|
||||
<word key_rus="Записи" key="__api_blog_entries" js="0">Entries</word>
|
||||
<word key_rus="Блоги" key="__api_blog_blogs" js="0">Blogs</word>
|
||||
</app>
|
||||
</language>
|
||||
@@ -23,10 +23,10 @@
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 8,
|
||||
"length": 20,
|
||||
"name": "blog_member_id",
|
||||
"type": "MEDIUMINT",
|
||||
"unsigned": false,
|
||||
"type": "BIGINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
@@ -184,20 +184,6 @@
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_groupblog": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"name": "blog_groupblog",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_last_edate": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
@@ -212,34 +198,6 @@
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_owner_only": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 1,
|
||||
"name": "blog_owner_only",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_authorized_users": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 255,
|
||||
"name": "blog_authorized_users",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_count_entries": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
@@ -297,18 +255,18 @@
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_rating_average": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "0",
|
||||
"length": 11,
|
||||
"name": "blog_rating_average",
|
||||
"type": "INT",
|
||||
"unsigned": true,
|
||||
"type": "DECIMAL",
|
||||
"length": 11,
|
||||
"decimals": 1,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"blog_cover_photo": {
|
||||
"allow_null": true,
|
||||
@@ -365,6 +323,34 @@
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
"blog_name": {
|
||||
"name": "blog_name",
|
||||
"type": "TEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"blog_desc": {
|
||||
"name": "blog_desc",
|
||||
"type": "TEXT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -378,16 +364,6 @@
|
||||
"blog_id"
|
||||
]
|
||||
},
|
||||
"blog_groupblog": {
|
||||
"type": "key",
|
||||
"name": "blog_groupblog",
|
||||
"length": [
|
||||
null
|
||||
],
|
||||
"columns": [
|
||||
"blog_groupblog"
|
||||
]
|
||||
},
|
||||
"blog_grabber": {
|
||||
"type": "key",
|
||||
"name": "blog_grabber",
|
||||
@@ -428,18 +404,6 @@
|
||||
"blog_member_id"
|
||||
]
|
||||
},
|
||||
"auth_user": {
|
||||
"type": "key",
|
||||
"name": "auth_user",
|
||||
"length": [
|
||||
null,
|
||||
190
|
||||
],
|
||||
"columns": [
|
||||
"blog_owner_only",
|
||||
"blog_authorized_users"
|
||||
]
|
||||
},
|
||||
"as_list_view": {
|
||||
"type": "key",
|
||||
"name": "as_list_view",
|
||||
@@ -457,8 +421,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"collation": "utf8mb4_unicode_ci",
|
||||
"engine": "InnoDB"
|
||||
"collation": "utf8mb4_unicode_ci"
|
||||
},
|
||||
"blog_entries": {
|
||||
"name": "blog_entries",
|
||||
@@ -548,18 +511,18 @@
|
||||
"zerofill": false
|
||||
},
|
||||
"entry_content": {
|
||||
"allow_null": true,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 0,
|
||||
"name": "entry_content",
|
||||
"type": "TEXT",
|
||||
"unsigned": false,
|
||||
"type": "MEDIUMTEXT",
|
||||
"length": 0,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"entry_status": {
|
||||
"allow_null": true,
|
||||
@@ -1027,10 +990,10 @@
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": null,
|
||||
"length": 10,
|
||||
"length": 20,
|
||||
"name": "comment_member_id",
|
||||
"type": "INT",
|
||||
"unsigned": false,
|
||||
"type": "BIGINT",
|
||||
"unsigned": true,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
},
|
||||
@@ -1319,8 +1282,8 @@
|
||||
},
|
||||
"rss_member": {
|
||||
"name": "rss_member",
|
||||
"type": "MEDIUMINT",
|
||||
"length": 8,
|
||||
"type": "BIGINT",
|
||||
"length": 20,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
|
||||
+111
-100
@@ -4,7 +4,7 @@
|
||||
<div class='ipsBox ipsSpacer_bottom'>
|
||||
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="featured_entries"}</h2>
|
||||
<div class='ipsClearfix'>
|
||||
<div class="cFeaturedTopics ipsCarousel ipsClearfix" data-ipsCarousel data-ipsCarousel-fullSizeItems data-ipsCarousel-shadows='false'>
|
||||
<div class="cFeaturedTopics ipsCarousel ipsClearfix" data-ipsCarousel data-ipsCarousel-slideshow data-ipsCarousel-fullSizeItems data-ipsCarousel-shadows='false'>
|
||||
<ul class='cTopicCarousel ipsClearfix ipsList_reset' data-role='carouselItems'>
|
||||
{{foreach $featured as $entry}}
|
||||
<li class='ipsCarousel_item ipsAreaBackground_reset ipsClearfix'>
|
||||
@@ -121,14 +121,14 @@
|
||||
<ul class='ipsDataList ipsDataList_reducedSpacing ipsType_medium ipsList_reset ipsType_light'>
|
||||
{{foreach $blog->_recentEntries as $entry}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsDataItem_main'>
|
||||
<div class='ipsDataItem_main ipsType_break ipsContained'>
|
||||
{{if $entry->unread()}}
|
||||
<a href='{$entry->url()}' title='{lang="view_this_entry" sprintf="$entry->name"}' class=''>
|
||||
<span class='ipsItemStatus ipsItemStatus_tiny'><i class='fa fa-circle'></i></span>
|
||||
</a>
|
||||
{{endif}}
|
||||
<a href='{$entry->url()}' title='{lang="view_this_entry" sprintf="$entry->name"}' class='ipsType_break'>
|
||||
{wordbreak="$entry->name"}
|
||||
<a href='{$entry->url()}' title='{lang="view_this_entry" sprintf="$entry->name"}'>
|
||||
{truncate="$entry->name" length="50"}
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
@@ -148,33 +148,35 @@
|
||||
{template="userPhoto" app="core" params="$blog->latestEntry()->author(), 'mini'" group="global"}
|
||||
<div>
|
||||
<strong class='ipsType_minorHeading'>{lang="latest_entry"}</strong><br>
|
||||
<h3 class='ipsType_reset ipsType_sectionHead ipsType_blendLinks'>
|
||||
{{if $blog->latestEntry()->locked()}}<i class='fa fa-lock'></i> {{endif}}{$blog->latestEntry()->caption}
|
||||
<h3 class='ipsType_reset ipsType_sectionHead ipsType_blendLinks ipsContained_container'>
|
||||
{{if $blog->latestEntry()->locked()}}<span><i class='fa fa-lock'></i></span> {{endif}}{$blog->latestEntry()->caption}
|
||||
{{if $blog->latestEntry()->isFutureDate() || $blog->latestEntry()->mapped('pinned') || $blog->latestEntry()->mapped('featured') || $blog->latestEntry()->hidden() === -1 || $blog->latestEntry()->hidden() === 1 || $blog->latestEntry()->status === 'draft'}}
|
||||
{{if $blog->latestEntry()->isFutureDate()}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$blog->latestEntry()->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$blog->latestEntry()->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span></span>
|
||||
{{elseif $blog->latestEntry()->hidden() === -1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$blog->latestEntry()->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$blog->latestEntry()->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $blog->latestEntry()->hidden() === 1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $blog->latestEntry()->status === 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $blog->latestEntry()->mapped('pinned')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $blog->latestEntry()->mapped('featured')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
<a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}'>
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{wordbreak="$blog->latestEntry()->name"}
|
||||
</a>
|
||||
<div class='ipsType_break ipsContained'>
|
||||
<a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}' class='ipsTruncate ipsTruncate_line'>
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$blog->latestEntry()->name}
|
||||
</a>
|
||||
</div>
|
||||
</h3>
|
||||
{{if !( $blog->owner() instanceof \IPS\Member )}}
|
||||
<p class='ipsType_medium ipsType_reset ipsType_light'>{lang="byline" htmlsprintf="trim( $blog->latestEntry()->author()->link() )"} {datetime="$blog->latestEntry()->date"}</p>
|
||||
@@ -189,7 +191,7 @@
|
||||
<strong><a href='{$blog->latestEntry()->url()}' title='{lang="read_more_entry"}'>{lang="read_more"}</a></strong>
|
||||
</li>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating()" group="global"}</li>
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating(), 5, $blog->latestEntry()->memberRating()" group="global"}</li>
|
||||
{{endif}}
|
||||
{{if !$blog->latestEntry()->num_comments}}
|
||||
<li class='ipsType_light'>{lang="num_comments" pluralize="$blog->latestEntry()->num_comments"}</li>
|
||||
@@ -249,7 +251,7 @@
|
||||
</div>
|
||||
|
||||
<div class='ipsEmbedded_content'>
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_mini ipsClearfix ipsType_medium'>
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_notPhone ipsPhotoPanel_mini ipsClearfix ipsType_medium'>
|
||||
{{if $blog->owner() instanceof \IPS\Member}}
|
||||
{template="userPhoto" group="global" app="core" params="$blog->owner(), 'mini', NULL, '', FALSE"}
|
||||
{{endif}}
|
||||
@@ -281,7 +283,7 @@
|
||||
<div class='ipsColumns ipsColumns_collapsePhone'>
|
||||
<div class='ipsColumn ipsColumn_fluid'>
|
||||
<h3 class='ipsType_sectionHead ipsType_break ipsTruncate ipsTruncate_line'>
|
||||
<a href='{$blog->url()}'>{lang="blogs_blog_{$blog->id}" wordbreak="true"}</a> {{if $showSmall && !($blog->owner() instanceof \IPS\Member)}} <span class='ipsType_light ipsType_medium' data-ipsTooltip title='{lang="this_is_group"}'><i class='fa fa-users'></i> {lang="byline_nodate" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $blog->id )"}</span>{{endif}}
|
||||
<a href='{$blog->url()}'>{{if $blog->member_id}}{$blog->_title}{{else}}{lang="blogs_blog_{$blog->id}"}{{endif}}</a> {{if $showSmall && !($blog->owner() instanceof \IPS\Member)}} <span class='ipsType_light ipsType_medium' data-ipsTooltip title='{lang="this_is_group"}'><i class='fa fa-users'></i> {lang="byline_nodate" sprintf="\IPS\Member::loggedIn()->language()->addToStack( 'blogs_groupblog_name_' . $blog->id )"}</span>{{endif}}
|
||||
</h3>
|
||||
<ul class='ipsGrid cProfileBlog_stats'>
|
||||
<li class='ipsGrid_span4'><strong class='ipsType_normal'>{$blog->_items}</strong><br>{lang="blog_entries" pluralize="$blog->_items"}</li>
|
||||
@@ -296,12 +298,12 @@
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{wordbreak="$blog->latestEntry()->name"}
|
||||
{$blog->latestEntry()->name}
|
||||
</a>
|
||||
<ul class='ipsList_inline ipsType_medium ipsType_light'>
|
||||
<li>{datetime="$blog->latestEntry()->date"}</li>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating()" group="global"}</li>
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating(), 5, $blog->latestEntry()->memberRating()" group="global"}</li>
|
||||
{{endif}}
|
||||
{{if !$blog->latestEntry()->num_comments}}
|
||||
<li class='ipsType_light'>{lang="num_comments" pluralize="$blog->latestEntry()->num_comments"}</li>
|
||||
@@ -357,8 +359,7 @@
|
||||
{template="pageHeader" if="!\IPS\Request::i()->isAjax()" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack( 'create_blog_entry' )"}
|
||||
{$form|raw}
|
||||
]]></template>
|
||||
<template template_group="submit" template_name="submitFormTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="blog"><![CDATA[{{$modOptions=array('blog_entry_date');}}
|
||||
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm>
|
||||
<template template_group="submit" template_name="submitFormTemplate" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class=''" template_location="front" template_app="blog"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
<input type="hidden" name="{$k}" value="{$v}">
|
||||
@@ -386,7 +387,7 @@
|
||||
<div id='ipsTabs_tabs_{$id}_{$id}_tab_{$name}_panel' class="ipsTabs_panel ipsPad" aria-labelledby="{$id}_tab_{$name}" aria-hidden="false">
|
||||
<ul class='ipsForm ipsForm_vertical'>
|
||||
{{foreach $contents as $inputName => $input}}
|
||||
{$input|raw}
|
||||
{$input|raw}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -396,9 +397,7 @@
|
||||
<ul class='ipsForm ipsForm_vertical'>
|
||||
{{foreach $elements as $collection}}
|
||||
{{foreach $collection as $inputName => $input}}
|
||||
{{if !in_array( $inputName, $modOptions )}}
|
||||
{$input|raw}
|
||||
{{endif}}
|
||||
{$input|raw}
|
||||
{{endforeach}}
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
@@ -432,7 +431,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{if !( $blog->owner() instanceof \IPS\Member )}}
|
||||
{{if !( $blog->owner() instanceof \IPS\Member ) and count( $blog->contributors() )}}
|
||||
<div class='cBlogContributors ipsClearfix ipsResponsive_hidePhone'>
|
||||
<h2 class='ipsType_minorHeading'>{lang="contributors_to_this"}</h2>
|
||||
<ul class='cBlogView_contributors'>
|
||||
@@ -523,7 +522,7 @@
|
||||
{{endif}}
|
||||
|
||||
{{if $table->canModerate()}}
|
||||
<form action="{$table->baseUrl}" method="post" data-role='moderationTools' data-ipsPageAction>
|
||||
<form action="{$table->baseUrl->csrf()}" method="post" data-role='moderationTools' data-ipsPageAction>
|
||||
<div class='ipsClear ipsPad {{foreach $table->classes as $class}}{$class} {{endforeach}}' id='elTable_{$table->uniqueId}' data-role="tableRows" data-controller='blog.front.browse.list'>
|
||||
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
|
||||
</div>
|
||||
@@ -611,7 +610,7 @@
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="blogViewLarge" template_data="$entry, $table, $first = FALSE" template_location="front" template_app="blog"><![CDATA[
|
||||
<article class='cBlogView_entry ipsContained {{if $entry->hidden()}}ipsModerated{{endif}}' data-controller="core.front.core.lightboxedImages">
|
||||
<article class='cBlogView_entry ipsContained ipsType_break {{if $entry->hidden()}}ipsModerated{{endif}}' data-controller="core.front.core.lightboxedImages">
|
||||
<header class='ipsPhotoPanel ipsPhotoPanel_notPhone ipsPhotoPanel_small ipsSpacer_bottom'>
|
||||
{template="userPhoto" app="core" params="$entry->author()" group="global"}
|
||||
<div>
|
||||
@@ -639,11 +638,11 @@
|
||||
{{if $entry->prefix()}}
|
||||
{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}
|
||||
{{endif}}
|
||||
<a href="{$entry->url()}" class='ipsType_blendLinks' title="{lang="read_more_about" sprintf="$entry->name"}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
<a href="{$entry->url()}" class='ipsType_blendLinks' title="{lang="read_more_about" sprintf="$entry->name"} {{if $entry->canEdit()}}{lang="click_hold_edit"}{{endif}}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}<span data-role="editableTitle">{wordbreak="$entry->name"}</span>{{else}}{wordbreak="$entry->name"}{{endif}}
|
||||
{{if $entry->canEdit()}}<span data-role="editableTitle">{$entry->name}</span>{{else}}{$entry->name}{{endif}}
|
||||
</a>
|
||||
</h2>
|
||||
<p class='ipsType_light ipsType_reset ipsType_blendLinks'>
|
||||
@@ -653,7 +652,7 @@
|
||||
</header>
|
||||
|
||||
<section class='ipsType_normal ipsType_richText ipsType_break ipsSpacer_both' data-ipsTruncate {{if $first}}data-ipsTruncate-size='20 lines'{{else}}data-ipsTruncate-size='7 lines'{{endif}}>
|
||||
{$entry->content|raw}
|
||||
{$entry->content()|raw}
|
||||
</section>
|
||||
{{if count( $entry->tags() )}}
|
||||
<div class='ipsSpacer_top'>
|
||||
@@ -670,47 +669,49 @@
|
||||
{{endif}}
|
||||
<li><strong><a href='{$entry->url()}' title="{lang="read_more_about" sprintf="$entry->name"}">{lang="read_more"}</a></strong></li>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
<li>{template="rating" app="core" params="'small', $entry->averageRating()" group="global"}</li>
|
||||
<li>{template="rating" app="core" params="'small', $entry->averageRating(), 5, $entry->memberRating()" group="global"}</li>
|
||||
{{endif}}
|
||||
<li><a href='{$entry->url()}#comments' title='{lang="view_comments"}' class='ipsType_light'>{lang="num_comments" pluralize="$entry->num_comments"}</a></li>
|
||||
<li class='ipsType_light'>{lang="num_views_with_number" pluralize="$entry->views"}</li>
|
||||
</ul>
|
||||
</article>]]></template>
|
||||
<template template_group="view" template_name="blogViewMedium" template_data="$entry, $table" template_location="front" template_app="blog"><![CDATA[
|
||||
<article class='cBlogView_entry ipsContained {{if $entry->hidden()}}ipsModerated{{endif}}' data-controller="core.front.core.lightboxedImages">
|
||||
<article class='cBlogView_entry {{if $entry->hidden()}}ipsModerated{{endif}}' data-controller="core.front.core.lightboxedImages">
|
||||
<header class='ipsPhotoPanel ipsPhotoPanel_mini ipsPhotoPanel_notPhone'>
|
||||
{template="userPhoto" app="core" params="$entry->author(), 'mini'" group="global"}
|
||||
<div>
|
||||
<h2 class='ipsType_sectionHead ipsType_blendLinks ipsTruncate ipsTruncate_line'>
|
||||
<h2 class='ipsType_sectionHead ipsType_blendLinks ipsContained_container'>
|
||||
{{if $entry->isFutureDate() || $entry->mapped('pinned') || $entry->mapped('featured') || $entry->hidden() === -1 || $entry->hidden() === 1}}
|
||||
{{if $entry->isFutureDate() and $entry->status !== 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span></span>
|
||||
{{elseif $entry->hidden() === 1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('pinned')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('featured')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
{{if $entry->prefix()}}
|
||||
{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}
|
||||
<span>{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}</span>
|
||||
{{endif}}
|
||||
<a href="{$entry->url()}" title="{lang="read_more_about" sprintf="$entry->name"}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{wordbreak="$entry->name"}
|
||||
</a>
|
||||
<div class='ipsContained ipsType_break'>
|
||||
<a href="{$entry->url()}" title="{lang="read_more_about" sprintf="$entry->name"} {{if $entry->canEdit()}}{lang="click_hold_edit"}{{endif}}" {{if $entry->canEdit()}}data-role="editableTitle"{{endif}}>
|
||||
{{if $entry->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{$entry->name}
|
||||
</a>
|
||||
</div>
|
||||
</h2>
|
||||
<p class='ipsType_light ipsType_reset ipsType_blendLinks'>
|
||||
{lang="byline" htmlsprintf="$entry->author()->link()"}{datetime="$entry->date"}
|
||||
</p>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
{template="rating" app="core" params="'large', $entry->averageRating()" group="global"}
|
||||
{template="rating" app="core" params="'large', $entry->averageRating(), 5, $entry->memberRating()" group="global"}
|
||||
{{endif}}
|
||||
</div>
|
||||
</header>
|
||||
@@ -732,12 +733,12 @@
|
||||
</ul>
|
||||
</article>]]></template>
|
||||
<template template_group="view" template_name="comments" template_data="$entry" template_location="front" template_app="blog"><![CDATA[<div class='ipsBox'>
|
||||
<div data-controller='core.front.core.commentFeed' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$entry->url()}' data-feedID='entry-{$entry->id}' id='comments'>
|
||||
<div data-controller='core.front.core.commentFeed, core.front.core.ignoredComments' {{if settings.auto_polling_enabled}}data-autoPoll{{endif}} data-baseURL='{$entry->url()}' data-feedID='entry-{$entry->id}' id='comments'>
|
||||
<div class='ipsPad'>
|
||||
<h2 class='ipsType_sectionHead' data-role="comment_count">{lang="num_comments_uc" pluralize="$entry->num_comments"}</h2>
|
||||
<hr class='ipsHr'>
|
||||
{{if $entry->commentPageCount() > 1}}
|
||||
{$entry->commentPagination()|raw}
|
||||
{$entry->commentPagination( array('tab') )|raw}
|
||||
<br><br>
|
||||
{{endif}}
|
||||
<div data-role='commentFeed' data-controller='core.front.core.moderation'>
|
||||
@@ -761,7 +762,7 @@
|
||||
</div>
|
||||
{{if $entry->commentPageCount() > 1}}
|
||||
<hr class='ipsHr'>
|
||||
{$entry->commentPagination()|raw}
|
||||
{$entry->commentPagination( array('tab') )|raw}
|
||||
{{endif}}
|
||||
{{if $entry->commentForm() || $entry->locked() || \IPS\Member::loggedin()->restrict_post || \IPS\Member::loggedIn()->members_bitoptions['unacknowledged_warnings']}}
|
||||
<div class='ipsAreaBackground ipsPad ipsClear ipsSpacer_top' data-role='replyArea'>
|
||||
@@ -783,7 +784,8 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
</div>
|
||||
]]></template>
|
||||
<template template_group="view" template_name="coverPhotoOverlay" template_data="$blog" template_location="front" template_app="blog"><![CDATA[{{if ( $blog->owner() instanceof \IPS\Member ) && \IPS\Request::i()->module == 'view'}}
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_mini'>
|
||||
{template="userPhoto" group="global" app="core" params="$blog->owner(), 'mini'"}
|
||||
@@ -814,33 +816,40 @@
|
||||
{template="blogHeader" group="view" app="blog" params="$entry->container()"}
|
||||
</header>
|
||||
|
||||
<article class='ipsBox ipsPad ipsSpacer_top'>
|
||||
<article class='ipsBox ipsPad ipsSpacer_top ipsType_break'>
|
||||
<header>
|
||||
<h1 class='ipsType_pageTitle ipsType_largeTitle ipsType_break'>
|
||||
<h1 class='ipsType_pageTitle ipsType_largeTitle ipsContained_container'>
|
||||
{{if $entry->isFutureDate() || $entry->mapped('pinned') || $entry->mapped('featured') || $entry->hidden() === -1 || $entry->hidden() === 1 || $entry->status === 'draft'}}
|
||||
{{if $entry->isFutureDate() and $entry->status !== 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->futureDateBlurb()}'><i class='fa fa-clock-o'></i></span></span>
|
||||
{{elseif $entry->hidden() === -1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{$entry->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span></span>
|
||||
{{elseif $entry->hidden() === 1}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $entry->status === 'draft'}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_warning" data-ipsTooltip title='{lang="unpublished"}'><i class='fa fa-pencil-square-o'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('pinned')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="pinned"}'><i class='fa fa-thumb-tack'></i></span></span>
|
||||
{{endif}}
|
||||
{{if $entry->mapped('featured')}}
|
||||
<span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span>
|
||||
<span><span class="ipsBadge ipsBadge_icon ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span></span>
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
|
||||
{{if $entry->prefix()}}
|
||||
{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}
|
||||
{{if $entry->prefix() OR ( $entry->canEdit() AND $entry::canTag() AND $entry::canPrefix() )}}
|
||||
<span {{if !$entry->prefix()}}class='ipsHide'{{endif}} {{if ( $entry->canEdit() AND $entry::canTag() AND $entry::canPrefix() )}}data-editablePrefix{{endif}}>
|
||||
{template="prefix" group="global" app="core" params="$entry->prefix( TRUE ), $entry->prefix()"}
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if $entry->canEdit()}}
|
||||
<div class='ipsType_break ipsContained' data-controller="core.front.core.moderation">
|
||||
{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}<span data-role="editableTitle" title='{lang="click_hold_edit"}'>{$entry->name}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class='ipsType_break ipsContained'>{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}{$entry->name}</div>
|
||||
{{endif}}
|
||||
{wordbreak="$entry->name"}
|
||||
{{if $entry->locked()}}<i class='fa fa-lock'></i> {{endif}}{$entry->caption}
|
||||
</h1>
|
||||
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_tiny ipsSpacer_top'>
|
||||
@@ -854,8 +863,8 @@
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
{$entry->rating()|raw}
|
||||
{{endif}}
|
||||
{{if count( $entry->tags() )}}
|
||||
{template="tags" group="global" app="core" params="$entry->tags()"}
|
||||
{{if count( $entry->tags() ) OR ( $entry->canEdit() AND $entry::canTag() )}}
|
||||
{template="tags" group="global" app="core" params="$entry->tags(), FALSE, FALSE, ( $entry->canEdit() AND $entry::canTag() ) ? $entry->url() : NULL"}
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -867,7 +876,7 @@
|
||||
{$poll|raw}
|
||||
{{endif}}
|
||||
|
||||
{$entry->content|raw}
|
||||
{$entry->content()|raw}
|
||||
</div>
|
||||
|
||||
{{if $entry->_album}}
|
||||
@@ -929,7 +938,7 @@
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{endif}}
|
||||
{{if !\IPS\Member::loggedIn()->group['gbw_no_report'] }}
|
||||
{{if ! $entry->container()->social_group and !\IPS\Member::loggedIn()->group['gbw_no_report'] }}
|
||||
<a href='{$entry->url('report')}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title="{lang="report_entry"}" data-ipsDialog-remoteSubmit data-ipsDialog-flashMessage="{lang="report_submit_success"}" title="{lang="report_entry"}">{lang="report_entry"}</a>
|
||||
{{endif}}
|
||||
|
||||
@@ -942,21 +951,21 @@
|
||||
|
||||
{{if $previous or $next}}
|
||||
<nav class="ipsPager ipsGrid ipsClearFix ipsList_inline">
|
||||
<div class="ipsGrid_span6 ipsPager_prev">
|
||||
{{if $previous}}
|
||||
<a href="{$previous->url()}" title="{lang="prev_entry"}" rel="prev">
|
||||
<span class="ipsPager_type">{lang="prev_entry"}</span>
|
||||
<span class="ipsPager_title ipsType_break">{wordbreak="$previous->name"}</span>
|
||||
</a>
|
||||
<div class="ipsGrid_span6 ipsPager_prev">
|
||||
<a href="{$previous->url()}" title="{lang="prev_entry"}">
|
||||
<span class="ipsPager_type">{lang="prev_entry"}</span>
|
||||
<span class="ipsPager_title ipsTruncate ipsTruncate_line">{$previous->name}</span>
|
||||
</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{if $next}}
|
||||
<div class="ipsGrid_span6 ipsType_right ipsPager_next">
|
||||
<a href="{$next->url()}" title="{lang="next_entry"}" rel="next">
|
||||
<span class="ipsPager_type">{lang="next_entry"}</span>
|
||||
<span class="ipsPager_title ipsType_break">{wordbreak="$next->name"}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="ipsGrid_span6 ipsType_right ipsPager_next">
|
||||
<a href="{$next->url()}" title="{lang="next_entry"}">
|
||||
<span class="ipsPager_type">{lang="next_entry"}</span>
|
||||
<span class="ipsPager_title ipsTruncate ipsTruncate_line">{$next->name}</span>
|
||||
</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
</nav>
|
||||
<hr class='ipsHr'>
|
||||
@@ -976,7 +985,7 @@
|
||||
<div class='ipsType_center'>
|
||||
<p class='ipsType_large'>{lang="no_entries"}</p>
|
||||
{{if $container->can('add')}}
|
||||
<a href='{url="app=blog&module=blog&controller=submit&id={$container->_id}" seoTemplate="blog_submit"}' class='ipsButton ipsButton_primary ipsButton_medium'>{lang="submit_entry"}</a>
|
||||
<a href='{url="app=blog&module=blogs&controller=submit&id={$container->_id}" seoTemplate="blog_submit"}' class='ipsButton ipsButton_primary ipsButton_medium'>{lang="submit_entry"}</a>
|
||||
{{endif}}
|
||||
</div>]]></template>
|
||||
<template template_group="view" template_name="rows" template_data="$table, $headers, $entries" template_location="front" template_app="blog"><![CDATA[{{if count( $entries ) > 0}}
|
||||
@@ -1035,7 +1044,7 @@
|
||||
<a href='#elBlogManage_menu' id='elBlogManage' data-ipsMenu class='ipsButton ipsButton_link ipsButton_medium ipsButton_fullWidth'>{lang="manage_blog"} <i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elBlogManage_menu' class='ipsMenu ipsMenu_normal ipsHide'>
|
||||
|
||||
{{if $blog->canEdit() }}
|
||||
{{if $blog->canEdit() AND !$blog->groupblog_ids}}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'editBlog', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' title="{lang="edit_blog"}" data-ipsDialog data-ipsDialog-title="{lang="edit_blog"}">{lang="edit_blog"}</a>
|
||||
</li>
|
||||
@@ -1059,7 +1068,7 @@
|
||||
|
||||
{{if $blog->canDelete() }}
|
||||
<li class='ipsMenu_item'>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'deleteBlog', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' data-confirm title="{lang="delete_blog"}">{lang="delete_blog"}</a>
|
||||
<a href='{$blog->url()->setQueryString( array( 'do' => 'deleteBlog', 'csrfKey' => \IPS\Session::i()->csrfKey ) )}' data-confirm title="{lang="delete_blog"}" data-confirmMessage="{lang="delete_blog_confirm"}" >{lang="delete_blog"}</a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
@@ -1084,7 +1093,7 @@
|
||||
{template="userPhoto" group="global" app="core" params="$comment->author(), 'tiny'"}
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<a href="{$comment->url()}" class='ipsType_medium ipsType_break'>{wordbreak="$comment->item()->name"}</a><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsType_medium ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div>
|
||||
<p class='ipsType_reset ipsType_medium ipsType_light ipsType_blendLinks'>{lang="byline_nodate" htmlsprintf="$comment->author()->link()"} · <a href="{$comment->url()}" class='ipsDataItem_title ipsType_break ipsType_blendLinks'>{$comment->dateLine()|raw}</a></p>
|
||||
<div class='ipsType_medium ipsType_textBlock ipsType_richText ipsType_break ipsContained ipsSpacer_top ipsSpacer_half' data-ipsTruncate data-ipsTruncate-type='remove' data-ipsTruncate-size='{{if $orientation == 'vertical'}}6 lines{{else}}2 lines{{endif}}'>
|
||||
{$comment->truncated( true )|raw}
|
||||
@@ -1110,7 +1119,7 @@
|
||||
{template="reputationBadge" group="global" app="core" params="$comment->author()"}
|
||||
</h3>
|
||||
<p class='ipsComment_meta ipsType_light ipsType_medium'>
|
||||
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks' title='{lang="share_this_comment"}'>{$comment->dateLine()|raw}</a>
|
||||
<a href='{$comment->item()->url()->setQueryString( array( 'do' => 'findComment', 'comment' => $comment->id ) )}' class='ipsType_blendLinks'>{$comment->dateLine()|raw}</a>
|
||||
{{if $comment->editLine()}}
|
||||
({lang="edited_lc"})
|
||||
{{endif}}
|
||||
@@ -1129,10 +1138,10 @@
|
||||
</div>
|
||||
|
||||
<div class='ipsPad ipsClearfix'>
|
||||
{{if in_array( 'IPS\Content\Reputation', class_implements( $comment ) ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight}}
|
||||
{{if in_array( 'IPS\Content\Reputation', class_implements( $comment ) ) and settings.reputation_highlight and $comment->reputation() >= settings.reputation_highlight and settings.reputation_enabled}}
|
||||
<strong class='ipsComment_popularFlag' data-ipsTooltip title='{lang="this_is_a_popular_comment"}'><i class='fa fa-star'></i></strong>
|
||||
{{endif}}
|
||||
<a href="{$comment->url()}" class='ipsDataItem_title ipsType_break'>{wordbreak="$comment->item()->name"}</a><br>
|
||||
<div class='ipsType_break ipsContained'><a href="{$comment->url()}" class='ipsDataItem_title ipsTruncate ipsTruncate_line'>{$comment->item()->name}</a></div><br>
|
||||
<div data-role='commentContent' class='ipsType_normal ipsType_richText ipsType_break ipsContained' data-controller='core.front.core.lightboxedImages'>
|
||||
{{if $comment->hidden() === 1 && $comment->author()->member_id == \IPS\Member::loggedIn()->member_id}}
|
||||
<strong class='ipsType_medium ipsType_warning'><i class='fa fa-info-circle'></i> {lang="comment_awaiting_approval"}</strong>
|
||||
@@ -1162,7 +1171,7 @@
|
||||
{{foreach $blogs as $blog}}
|
||||
<li class='ipsDataItem'>
|
||||
<div class='ipsColumns ipsColumns_collapsePhone'>
|
||||
<h4 class='ipsType_large ipsType_reset'>{$blog->_title}</h4>
|
||||
<h4 class='ipsSpacer_top ipsSpacer_half ipsType_reset ipsTruncate ipsTruncate_line'><a href="{$blog->url()}" title='{lang="view_this_blog" sprintf="$blog->_title"}'>{$blog->_title}</a></h4>
|
||||
<div>
|
||||
<ul class='ipsGrid'>
|
||||
<li class='ipsGrid_span4'><strong class='ipsType_normal'>{$blog->_items}</strong><br>{lang="blog_entries" pluralize="$blog->_items"}</li>
|
||||
@@ -1199,9 +1208,11 @@
|
||||
<span class='ipsItemStatus ipsItemStatus_tiny'><i class='fa fa-circle'></i></span>
|
||||
</a>
|
||||
{{endif}}
|
||||
<a href='{$entry->url()}' title='{lang="view_this_entry" sprintf="$entry->name"}' class='ipsType_break'>
|
||||
{wordbreak="$entry->name"}
|
||||
</a>
|
||||
<div class='ipsContained ipsType_break'>
|
||||
<a href='{$entry->url()}' title='{lang="view_this_entry" sprintf="$entry->name"}' class='ipsType_break'>
|
||||
{$entry->name}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
@@ -1216,12 +1227,12 @@
|
||||
<div>
|
||||
<strong class='ipsType_minorHeading'>{lang="latest_entry"}</strong><br>
|
||||
<h3 class='ipsType_reset ipsType_sectionHead ipsType_blendLinks'>
|
||||
<a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}'>
|
||||
<div class='ipsType_break ipsContained'><a href='{$blog->latestEntry()->url()}' title='{lang="view_this_entry" sprintf="$blog->latestEntry()->name"}'>
|
||||
{{if $blog->latestEntry()->unread()}}
|
||||
<span class='ipsItemStatus' data-ipsTooltip title="{lang="unread_blog"}"><i class="fa fa-circle"></i></span>
|
||||
{{endif}}
|
||||
{wordbreak="$blog->latestEntry()->name"}
|
||||
</a>
|
||||
{$blog->latestEntry()->name}
|
||||
</a></div>
|
||||
{{if $blog->latestEntry()->locked()}}<i class='fa fa-lock'></i> {{endif}}{$blog->latestEntry()->caption}
|
||||
{{if $blog->latestEntry()->isFutureDate() || $blog->latestEntry()->mapped('pinned') || $blog->latestEntry()->mapped('featured') || $blog->latestEntry()->hidden() === -1 || $blog->latestEntry()->hidden() === 1 || $blog->latestEntry()->status === 'draft'}}
|
||||
{{if $blog->latestEntry()->isFutureDate()}}
|
||||
@@ -1255,7 +1266,7 @@
|
||||
<strong><a href='{$blog->latestEntry()->url()}' title='{lang="read_more_entry"}'>{lang="read_more"}</a></strong>
|
||||
</li>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating()" group="global"}</li>
|
||||
<li>{template="rating" app="core" params="'small', $blog->latestEntry()->averageRating(), 5, $blog->latestEntry()->memberRating()" group="global"}</li>
|
||||
{{endif}}
|
||||
{{if !$blog->latestEntry()->num_comments}}
|
||||
<li class='ipsType_light'>{lang="num_comments" pluralize="$blog->latestEntry()->num_comments"}</li>
|
||||
@@ -1324,10 +1335,10 @@
|
||||
{template="userPhoto" app="core" params="$entry->author(), 'tiny'" group="global"}
|
||||
</div>
|
||||
<div class='ipsDataItem_main'>
|
||||
<a href="{$entry->url('getLastComment')}" title='{lang="view_this_entry" sprintf="$entry->_title"}' class='ipsType_medium ipsType_break'>{wordbreak="$entry->name"}</a><br>
|
||||
<span class='ipsType_blendLinks ipsType_light ipsType_medium ipsType_break ipsContained'>{lang="byline_nodate" htmlsprintf="$entry->author()->link()"} {lang="in"} <a href='{$entry->container()->url()}' class='ipsType_blendLinks'>{$entry->container()->_title}</a></span>
|
||||
<div class='ipsContained ipsType_break'><a href="{$entry->url('getLastComment')}" title='{lang="view_this_entry" sprintf="$entry->_title"}' class='ipsType_medium ipsTruncate ipsTruncate_line'>{$entry->name}</a></div>
|
||||
<span class='ipsType_blendLinks ipsType_light ipsType_medium ipsType_break ipsContained'>{lang="byline_nodate" htmlsprintf="$entry->author()->link()"} {lang="in"} <a href='{$entry->container()->url()}' class='ipsType_blendLinks ipsTruncate ipsTruncate_line'>{$entry->container()->_title}</a></span>
|
||||
{{if \IPS\Settings::i()->blog_enable_rating}}
|
||||
{template="rating" group="global" location="front" app="core" params="'small', $entry->averageRating()"}
|
||||
{template="rating" group="global" location="front" app="core" params="'small', $entry->averageRating(), 5, $entry->memberRating()"}
|
||||
{{endif}}
|
||||
<span class='ipsType_medium ipsType_reset'>{{if !$entry->num_comments}}<span class='ipsType_light'>{{endif}}<i class='fa fa-comment'></i> {number="$entry->num_comments"}{{if !$entry->num_comments}}</span>{{endif}}</span>
|
||||
{{if $orientation == 'horizontal'}}
|
||||
|
||||
@@ -97,5 +97,79 @@
|
||||
"101009": "4.1.0 Beta 10",
|
||||
"101010": "4.1.0",
|
||||
"101011": "4.1.1",
|
||||
"101012": "4.1.2"
|
||||
"101012": "4.1.2",
|
||||
"101013": "4.1.3",
|
||||
"101014": "4.1.3.1",
|
||||
"101015": "4.1.3.2",
|
||||
"101016": "4.1.4",
|
||||
"101017": "4.1.4.1",
|
||||
"101018": "4.1.5",
|
||||
"101019": "4.1.5.1",
|
||||
"101020": "4.1.5.2",
|
||||
"101021": "4.1.6",
|
||||
"101022": "4.1.6.1",
|
||||
"101023": "4.1.7",
|
||||
"101024": "4.1.8",
|
||||
"101025": "4.1.8.1",
|
||||
"101026": "4.1.9",
|
||||
"101027": "4.1.10",
|
||||
"101028": "4.1.11",
|
||||
"101029": "4.1.11.1",
|
||||
"101030": "4.1.12",
|
||||
"101031": "4.1.12.1",
|
||||
"101032": "4.1.12.2",
|
||||
"101033": "4.1.12.3",
|
||||
"101034": "4.1.13 Beta 1",
|
||||
"101035": "4.1.13 Beta 2",
|
||||
"101036": "4.1.13",
|
||||
"101037": "4.1.13",
|
||||
"101038": "4.1.13.1",
|
||||
"101040": "4.1.13.2",
|
||||
"101041": "4.1.13.2",
|
||||
"101042": "4.1.14 Beta 1",
|
||||
"101043": "4.1.14 Beta 2",
|
||||
"101044": "4.1.14 Beta 3",
|
||||
"101045": "4.1.14 Beta 4",
|
||||
"101046": "4.1.14 Beta 5",
|
||||
"101049": "4.1.14 Beta 6",
|
||||
"101050": "4.1.14 Beta 7",
|
||||
"101051": "4.1.14 RC",
|
||||
"101052": "4.1.14",
|
||||
"101053": "4.1.14.1",
|
||||
"101054": "4.1.14.2",
|
||||
"101055": "4.1.14.3",
|
||||
"101056": "4.1.15",
|
||||
"101057": "4.1.15 Beta 1",
|
||||
"101058": "4.1.15 Beta 2",
|
||||
"101059": "4.1.15 Beta 2a",
|
||||
"101060": "4.1.15 Beta 3",
|
||||
"101061": "4.1.15",
|
||||
"101062": "4.1.15",
|
||||
"101063": "4.1.15",
|
||||
"101064": "4.1.16 Beta 1",
|
||||
"101065": "4.1.16 Beta 2",
|
||||
"101066": "4.1.16 Beta 3",
|
||||
"101067": "4.1.16 Beta 4",
|
||||
"101068": "4.1.16 Beta 5",
|
||||
"101069": "4.1.16",
|
||||
"101070": "4.1.16.1",
|
||||
"101071": "4.1.17 Beta 1",
|
||||
"101072": "4.1.17 Beta 1a",
|
||||
"101073": "4.1.17 Beta 1b",
|
||||
"101074": "4.1.17 Beta 2",
|
||||
"101075": "4.1.17 Beta 3",
|
||||
"101076": "4.1.17 Beta 3",
|
||||
"101077": "4.1.17",
|
||||
"101078": "4.1.17.1",
|
||||
"101079": "4.1.18 Beta 1",
|
||||
"101082": "4.1.18 Beta 1b",
|
||||
"101083": "4.1.18 Beta 2",
|
||||
"101084": "4.1.18 Beta 3",
|
||||
"101085": "4.1.18",
|
||||
"101088": "4.1.18.1",
|
||||
"101089": "4.1.18.2",
|
||||
"101090": "4.1.19 Beta 1",
|
||||
"101091": "4.1.19 Beta 2",
|
||||
"101092": "4.1.19 Beta 3",
|
||||
"101093": "4.1.19"
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief BBCode Tag
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blogs
|
||||
* @since 05 Feb 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\BBCode;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* BBCode Tag
|
||||
*/
|
||||
class _blog
|
||||
{
|
||||
/**
|
||||
* Permission Check
|
||||
*
|
||||
* @param \IPS\Member $member The member
|
||||
* @param string $area The Editor area
|
||||
* @return bool
|
||||
*/
|
||||
public function permissionCheck( \IPS\Member $member, $area )
|
||||
{
|
||||
return \IPS\Text\Parser::canUse( $member, 'ipsLink', $area );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Configuration
|
||||
*
|
||||
* @code
|
||||
return array(
|
||||
'tag' => 'span', // The HTML tag to use
|
||||
'attributes' => array( ... ) // Key/Value pairs of attributes to use (optional) - can use {option} to get the [tag=option] value
|
||||
'callback' => function( $node, $matches, $document ) // A callback to modify the DOMNode object
|
||||
{
|
||||
...
|
||||
},
|
||||
'block' => FALSE, // If this is a block-level tag (optional, default false)
|
||||
'single' => FALSE, // If this is a single tag, with no content (optional, default false)
|
||||
)
|
||||
* @endcode
|
||||
* @return array
|
||||
*/
|
||||
public function getConfiguration()
|
||||
{
|
||||
return array(
|
||||
'tag' => 'a',
|
||||
'callback' => function( \DOMElement $node, $matches, \DOMDocument $document )
|
||||
{
|
||||
try
|
||||
{
|
||||
$node->setAttribute( 'href', (string) \IPS\blog\Blog::load( intval( $matches[2] ) )->url() );
|
||||
}
|
||||
catch ( \Exception $e ) {}
|
||||
|
||||
return $node;
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief BBCode Tag
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blogs
|
||||
* @since 08 Feb 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\BBCode;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* BBCode Tag
|
||||
*/
|
||||
class _entry
|
||||
{
|
||||
/**
|
||||
* Permission Check
|
||||
*
|
||||
* @param \IPS\Member $member The member
|
||||
* @param string $area The Editor area
|
||||
* @return bool
|
||||
*/
|
||||
public function permissionCheck( \IPS\Member $member, $area )
|
||||
{
|
||||
return \IPS\Text\Parser::canUse( $member, 'ipsLink', $area );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Configuration
|
||||
*
|
||||
* @code
|
||||
return array(
|
||||
'tag' => 'span', // The HTML tag to use
|
||||
'attributes' => array( ... ) // Key/Value pairs of attributes to use (optional) - can use {option} to get the [tag=option] value
|
||||
'callback' => function( $node, $matches, $document ) // A callback to modify the DOMNode object
|
||||
{
|
||||
...
|
||||
},
|
||||
'block' => FALSE, // If this is a block-level tag (optional, default false)
|
||||
'single' => FALSE, // If this is a single tag, with no content (optional, default false)
|
||||
)
|
||||
* @endcode
|
||||
* @return array
|
||||
*/
|
||||
public function getConfiguration()
|
||||
{
|
||||
return array(
|
||||
'tag' => 'a',
|
||||
'callback' => function( \DOMElement $node, $matches, \DOMDocument $document )
|
||||
{
|
||||
try
|
||||
{
|
||||
$node->setAttribute( 'href', (string) \IPS\blog\Entry::load( intval( $matches[2] ) )->url() );
|
||||
}
|
||||
catch ( \Exception $e ) {}
|
||||
|
||||
return $node;
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Content Router extension: Blog
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 04 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Create Menu Extension : Entry
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Dashboard extension: Overview
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Editor Extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 04 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -54,11 +54,20 @@ class _Blogs
|
||||
* @param int|null $id1 Primary ID
|
||||
* @param int|null $id2 Secondary ID
|
||||
* @param string|null $id3 Arbitrary data
|
||||
* @param array $attachment The attachment data
|
||||
* @return bool
|
||||
*/
|
||||
public function attachmentPermissionCheck( $member, $id1, $id2, $id3 )
|
||||
public function attachmentPermissionCheck( $member, $id1, $id2, $id3, $attachment )
|
||||
{
|
||||
return \IPS\blog\Blog::load( $id1 )->can( 'view', $member );
|
||||
/* The attachment is attached to a comment */
|
||||
if ( $id2 )
|
||||
{
|
||||
return \IPS\blog\Entry\Comment::load( $id2 )->canView( $member );
|
||||
}
|
||||
else
|
||||
{
|
||||
return \IPS\blog\Blog::load( $id1 )->can( 'view', $member );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -72,7 +81,15 @@ class _Blogs
|
||||
*/
|
||||
public function attachmentLookup( $id1, $id2, $id3 )
|
||||
{
|
||||
return \IPS\blog\Blog::load( $id1 );
|
||||
/* The attachment is attached to a comment */
|
||||
if ( $id2 )
|
||||
{
|
||||
return \IPS\blog\Entry\Comment::load( $id2 )->canView( $member );
|
||||
}
|
||||
else
|
||||
{
|
||||
return \IPS\blog\Blog::load( $id1 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Editor Extension: Blog Entries
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -46,7 +46,7 @@ class _Entries
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Permission check for attachments
|
||||
*
|
||||
@@ -54,9 +54,10 @@ class _Entries
|
||||
* @param int|null $id1 Primary ID
|
||||
* @param int|null $id2 Secondary ID
|
||||
* @param string|null $id3 Arbitrary data
|
||||
* @param array $attachment The attachment data
|
||||
* @return bool
|
||||
*/
|
||||
public function attachmentPermissionCheck( $member, $id1, $id2, $id3 )
|
||||
public function attachmentPermissionCheck( $member, $id1, $id2, $id3, $attachment )
|
||||
{
|
||||
return \IPS\blog\Entry::load( $id1 )->canView( $member );
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief File Storage Extension: Blogs (cover photos)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 16 Jun 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief File Storage Extension: Blog Entries (cover photos)
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 30 May 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Front Navigation Extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -35,13 +35,13 @@ class _Blogs extends \IPS\core\FrontNavigation\FrontNavigationAbstract
|
||||
}
|
||||
|
||||
/**
|
||||
* Can access?
|
||||
* Can the currently logged in user access the content this item links to?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function canView()
|
||||
public function canAccessContent()
|
||||
{
|
||||
return parent::canView() and \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'blog', 'blogs' ) );
|
||||
return \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'blog', 'blogs' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief Admin CP Group Form
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 11 Jul 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -56,11 +56,12 @@ class _Blog
|
||||
{
|
||||
if( $group->g_id != \IPS\Settings::i()->guest_group )
|
||||
{
|
||||
$group->g_blog_allowlocal = $values['g_blog_allowlocal'];
|
||||
$group->g_blog_maxblogs = $values['g_blog_maxblogs'];
|
||||
$group->g_blog_allowprivate = $values['g_blog_allowprivate'];
|
||||
$group->g_blog_allowownmod = $values['g_blog_allowownmod'];
|
||||
$group->g_blog_allowdelete = $values['g_blog_allowdelete'];
|
||||
/* We intval here because (some of) the columns do not accept null values, but these are null when creating a new group */
|
||||
$group->g_blog_allowlocal = (int) $values['g_blog_allowlocal'];
|
||||
$group->g_blog_maxblogs = (int) $values['g_blog_maxblogs'];
|
||||
$group->g_blog_allowprivate = (int) $values['g_blog_allowprivate'];
|
||||
$group->g_blog_allowownmod = (int) $values['g_blog_allowownmod'];
|
||||
$group->g_blog_allowdelete = (int) $values['g_blog_allowdelete'];
|
||||
}
|
||||
|
||||
$group->g_blog_allowcomment = $values['g_blog_allowcomment'];
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief ACP Live Search Extension
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -73,4 +73,14 @@ class _Blogs
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is default for current page?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isDefault()
|
||||
{
|
||||
return \IPS\Dispatcher::i()->application->directory == 'blog';
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Member Sync
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 20 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -55,8 +55,12 @@ class _Blog
|
||||
|
||||
foreach( \IPS\blog\Blog::loadByOwner( $member ) as $blog )
|
||||
{
|
||||
$blog->member_id = 0;
|
||||
$blog->save();
|
||||
/* We only want to do this if the blog is owned by the member - loadByOwner() also returns Blogs that are assigned to member groups */
|
||||
if ( !$blog->groupblog_ids )
|
||||
{
|
||||
/* Delete blog entries & blog */
|
||||
\IPS\Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\blog\Blog', 'id' => $blog->id, 'deleteWhenDone' => TRUE ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Profile extension: Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 02 Apr 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Background Task
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blogs
|
||||
* @since 12 Apr 2016
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
|
||||
namespace IPS\blog\extensions\core\Queue;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Background Task
|
||||
*/
|
||||
class _RebuildEntryImages
|
||||
{
|
||||
/**
|
||||
* @brief Number of entry images to rebuild per cycle
|
||||
*/
|
||||
public $rebuild = 10;
|
||||
|
||||
/**
|
||||
* Parse data before queuing
|
||||
*
|
||||
* @param array $data
|
||||
* @return array
|
||||
*/
|
||||
public function preQueueData( $data )
|
||||
{
|
||||
$data['count'] = (int) \IPS\Db::i()->select( 'count(*)', 'blog_entries', "entry_image<>''" )->first();
|
||||
|
||||
if( $data['count'] == 0 )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run Background Task
|
||||
*
|
||||
* @param mixed $data Data as it was passed to \IPS\Task::queue()
|
||||
* @param int $offset Offset
|
||||
* @return int New offset
|
||||
* @throws \IPS\Task\Queue\OutOfRangeException Indicates offset doesn't exist and thus task is complete
|
||||
*/
|
||||
public function run( $data, $offset )
|
||||
{
|
||||
$select = \IPS\Db::i()->select( '*', 'blog_entries', "entry_image<>''", 'entry_id ASC', array( $offset, $this->rebuild ) );
|
||||
|
||||
if ( !$select->count() )
|
||||
{
|
||||
throw new \IPS\Task\Queue\OutOfRangeException;
|
||||
}
|
||||
|
||||
foreach ( $select as $entry )
|
||||
{
|
||||
try
|
||||
{
|
||||
$filePath = \IPS\ROOT_PATH . '/uploads/' . $entry['entry_image'];
|
||||
|
||||
if ( ! file_exists( $filePath ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Have we processed this before? It's a bit crude but it is accurate */
|
||||
if ( mb_substr( trim( $entry['entry_content'] ), 0, 37 ) === '<a href="<fileStore.core_Attachment>/' and mb_stristr( $entry['entry_content'], '/' . $entry['entry_image'] . '.' ) and mb_stristr( $entry['entry_content'], 'data-fileid="' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$file = \IPS\File::create( 'core_Attachment', $entry['entry_image'], NULL, NULL, FALSE, $filePath );
|
||||
$attachment = $file->makeAttachment('', \IPS\Member::load( $entry['entry_author_id'] ) );
|
||||
$fileName = htmlspecialchars( $attachment['attach_file'], \IPS\HTMLENTITIES, 'UTF-8', TRUE );
|
||||
|
||||
$image = <<<IMAGE
|
||||
<a href="<fileStore.core_Attachment>/{$file}" class="ipsAttachLink ipsAttachLink_image" style="float:left;"><img data-fileid="{$attachment['attach_id']}" src="<fileStore.core_Attachment>/{$file}" class="ipsImage ipsImage_thumbnailed" style="margin:10px;" alt="{$fileName}"></a>
|
||||
IMAGE;
|
||||
|
||||
\IPS\Db::i()->update( 'blog_entries', array( 'entry_content' => $image . $entry['entry_content'] ), array( 'entry_id=?', $entry['entry_id'] ) );
|
||||
|
||||
$map = array(
|
||||
'attachment_id' => $attachment['attach_id'],
|
||||
'location_key' => 'blog_Entries',
|
||||
'id1' => $entry['entry_id'],
|
||||
'id2' => NULL,
|
||||
'id3' => NULL,
|
||||
'temp' => NULL,
|
||||
);
|
||||
|
||||
\IPS\Db::i()->replace( 'core_attachments_map', $map );
|
||||
}
|
||||
catch ( \Exception $e ) {}
|
||||
}
|
||||
|
||||
return $offset + $this->rebuild;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Progress
|
||||
*
|
||||
* @param mixed $data Data as it was passed to \IPS\Task::queue()
|
||||
* @param int $offset Offset
|
||||
* @return array( 'text' => 'Doing something...', 'complete' => 50 ) Text explaining task and percentage complete
|
||||
* @throws \OutOfRangeException Indicates offset doesn't exist and thus task is complete
|
||||
*/
|
||||
public function getProgress( $data, $offset )
|
||||
{
|
||||
return array(
|
||||
'text' => \IPS\Member::loggedIn()->language()->addToStack( 'rebuilding_blog_entry_images', FALSE ),
|
||||
'complete' => ( isset( $data['count'] ) AND $data['count'] )
|
||||
? ( round( 100 / $data['count'] * $offset, 2 ) )
|
||||
: 100
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Group Blogs Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -56,7 +56,7 @@ class _blogs extends \IPS\Node\Controller
|
||||
$table->mainColumn = 'word_custom';
|
||||
|
||||
$table->joins = array(
|
||||
array( 'select' => 'w.word_custom', 'from' => array( 'core_sys_lang_words', 'w' ), 'where' => "w.word_key=CONCAT( 'blogs_blog_', blog_blogs.blog_id ) AND w.lang_id=" . \IPS\Member::loggedIn()->language()->id )
|
||||
array( 'select' => 'CASE WHEN blog_blogs.blog_member_id THEN blog_blogs.blog_name ELSE w.word_custom END as word_custom', 'from' => array( 'core_sys_lang_words', 'w' ), 'where' => "w.word_key=CONCAT( 'blogs_blog_', blog_blogs.blog_id ) AND w.lang_id=" . \IPS\Member::loggedIn()->language()->id )
|
||||
);
|
||||
|
||||
/* Sort stuff */
|
||||
@@ -71,9 +71,30 @@ class _blogs extends \IPS\Node\Controller
|
||||
);
|
||||
|
||||
$table->parsers = array(
|
||||
'blog_member_id' => function( $val, $row )
|
||||
'blog_member_id' => function( $val, $row )
|
||||
{
|
||||
return \IPS\Member::load( $val )->link();
|
||||
try
|
||||
{
|
||||
return \IPS\Member::load( $val )->link();
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
},
|
||||
'word_custom' => function( $val, $row )
|
||||
{
|
||||
if ( ! $val )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack('blog_member_deleted');
|
||||
}
|
||||
|
||||
if( $row['blog_member_id'] )
|
||||
{
|
||||
$val = htmlspecialchars( $val, ENT_QUOTES | \IPS\HTMLENTITIES, 'UTF-8', FALSE );
|
||||
}
|
||||
|
||||
return $val;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Blog Settings
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -31,7 +31,7 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'blog_settings_manage' );
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'settings_manage', 'blog' );
|
||||
parent::execute();
|
||||
}
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
/**
|
||||
* @brief All Blogs
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @subpackage
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
*/
|
||||
@@ -24,16 +24,6 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
*/
|
||||
class _browse extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* Execute
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
parent::execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Manage
|
||||
*
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Create Blog
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 24 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief View Blog Entry Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -44,10 +44,10 @@ class _entry extends \IPS\Content\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2B202/1', 403, '' );
|
||||
}
|
||||
|
||||
if ( $this->entry->cover_photo )
|
||||
|
||||
if ( $this->entry->container()->cover_photo )
|
||||
{
|
||||
\IPS\Output::i()->metaTags['og:image'] = $this->entry->cover_photo;
|
||||
\IPS\Output::i()->metaTags['og:image'] = \IPS\File::get( 'blog_Blogs', $this->entry->container()->cover_photo )->url;
|
||||
}
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
@@ -79,7 +79,7 @@ class _entry extends \IPS\Content\Controller
|
||||
$previous = \IPS\Db::i()->select(
|
||||
'*',
|
||||
'blog_entries',
|
||||
array( 'entry_blog_id=? AND entry_date<?', $this->entry->blog_id, $this->entry->date ),
|
||||
array( 'entry_blog_id=? AND entry_date<? AND entry_status=? AND entry_is_future_entry=0', $this->entry->blog_id, $this->entry->date, "published" ),
|
||||
'entry_date DESC'
|
||||
,1
|
||||
)->first();
|
||||
@@ -94,7 +94,7 @@ class _entry extends \IPS\Content\Controller
|
||||
$next = \IPS\Db::i()->select(
|
||||
'*',
|
||||
'blog_entries',
|
||||
array( 'entry_blog_id=? AND entry_date>?', $this->entry->blog_id, $this->entry->date ),
|
||||
array( 'entry_blog_id=? AND entry_date>? AND entry_status=? AND entry_is_future_entry=0', $this->entry->blog_id, $this->entry->date, "published" ),
|
||||
'entry_date ASC'
|
||||
,1
|
||||
)->first();
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief Submit
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 10 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -55,7 +55,7 @@ class _submit extends \IPS\Dispatcher\Controller
|
||||
$form = \IPS\blog\Entry::create( $blog );
|
||||
$formTemplate = $form->customTemplate( array( call_user_func_array( array( \IPS\Theme::i(), 'getTemplate' ), array( 'submit', 'blog' ) ), 'submitFormTemplate' ) );
|
||||
|
||||
\IPS\Session::i()->setLocation( $blog->url(), array(), 'loc_blog_adding_entry', array( "blogs_blog_{$blog->id}" => TRUE ) );
|
||||
\IPS\Session::i()->setLocation( $blog->url(), array(), 'loc_blog_adding_entry', $blog->member_id ? array( $blog->_title => FALSE ) : array( "blogs_blog_{$blog->id}" => TRUE ) );
|
||||
\IPS\Output::i()->breadcrumb[] = array( $blog->url(), $blog->_title );
|
||||
\IPS\Output::i()->sidebar['enabled'] = FALSE;
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'submit' )->submit( $formTemplate );
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
/**
|
||||
* @brief View Blog Entry Controller
|
||||
* @author <a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
|
||||
* @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc.
|
||||
* @copyright (c) 2001 - 2016 Invision Power Services, Inc.
|
||||
* @license http://www.invisionpower.com/legal/standards/
|
||||
* @package IPS Social Suite
|
||||
* @package IPS Community Suite
|
||||
* @subpackage Blog
|
||||
* @since 03 Mar 2014
|
||||
* @version SVN_VERSION_NUMBER
|
||||
@@ -46,6 +46,11 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2B201/1', 404, '' );
|
||||
}
|
||||
|
||||
if ( $this->blog->cover_photo )
|
||||
{
|
||||
\IPS\Output::i()->metaTags['og:image'] = \IPS\File::get( $this->_coverPhotoStorageExtension(), $this->blog->cover_photo )->url;
|
||||
}
|
||||
|
||||
parent::execute();
|
||||
}
|
||||
@@ -81,7 +86,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
);
|
||||
|
||||
/* Online User Location */
|
||||
\IPS\Session::i()->setLocation( $this->blog->url(), array(), 'loc_blog_viewing_blog', array( "blogs_blog_{$this->blog->id}" => TRUE ) );
|
||||
\IPS\Session::i()->setLocation( $this->blog->url(), array(), 'loc_blog_viewing_blog', $this->blog->member_id ? array( $this->blog->_title => FALSE ) : array( "blogs_blog_{$this->blog->id}" => TRUE ) );
|
||||
|
||||
/* Output */
|
||||
\IPS\Output::i()->title = $this->blog->_title;
|
||||
@@ -93,7 +98,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'front_browse.js', 'blog', 'front' ) );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'view' )->view( $this->blog, (string) $table );
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item', FALSE, array( 'sprintf' => array( \IPS\Member::loggedIn()->language()->addToStack( 'blog' ) ) ) ) ] = array( 'type' => 'blog_entry', 'nodes' => $this->blog->_id );
|
||||
\IPS\Output::i()->contextualSearchOptions[ \IPS\Member::loggedIn()->language()->addToStack( 'search_contextual_item_blogs' ) ] = array( 'type' => 'blog_entry', 'nodes' => $this->blog->_id );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,7 +108,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
*/
|
||||
protected function editBlog()
|
||||
{
|
||||
if( !$this->blog->canEdit() )
|
||||
if( !$this->blog->canEdit() OR $this->blog->groupblog_ids )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/2', 403, '' );
|
||||
}
|
||||
@@ -151,10 +156,16 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '2B201/3', 403, '' );
|
||||
}
|
||||
|
||||
/* Make sure the user confirmed the deletion */
|
||||
\IPS\Request::i()->confirmedDelete();
|
||||
|
||||
$this->blog->disabled = TRUE;
|
||||
$this->blog->save();
|
||||
|
||||
|
||||
/* Log */
|
||||
\IPS\Session::i()->modLog( 'modlog__action_delete_blog', array( $this->blog->name => FALSE ) );
|
||||
|
||||
\IPS\Task::queue( 'core', 'DeleteOrMoveContent', array( 'class' => 'IPS\blog\Blog', 'id' => $this->blog->id, 'deleteWhenDone' => TRUE ) );
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=blog&module=blogs&controller=browse', 'front', 'blogs' ) );
|
||||
}
|
||||
@@ -199,10 +210,13 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'blog_rss_offline', '2B201/5', 403, 'blog_rss_offline_admin' );
|
||||
}
|
||||
|
||||
$document = \IPS\Xml\Rss::newDocument( $this->blog->url(), \IPS\Member::loggedIn()->language()->get("blogs_blog_{$this->blog->id}"), \IPS\Member::loggedIn()->language()->get("blogs_blog_{$this->blog->id}_desc") );
|
||||
|
||||
/* We have to use get() to ensure CDATA tags wrap the blog title properly */
|
||||
$title = $this->blog->member_id ? $this->blog->name : \IPS\Member::loggedIn()->language()->get( "blogs_blog_{$this->blog->id}" );
|
||||
|
||||
$document = \IPS\Xml\Rss::newDocument( $this->blog->url(), $title, $this->blog->description );
|
||||
|
||||
foreach ( \IPS\blog\Entry::getItemsWithPermission( array( array( 'entry_blog_id=?', $this->blog->id ), array( 'entry_status!=?', 'draft' ) ), 'entry_date DESC', 25, 'read', FALSE, 0, new \IPS\Member ) as $entry )
|
||||
foreach ( \IPS\blog\Entry::getItemsWithPermission( array( array( 'entry_blog_id=?', $this->blog->id ), array( 'entry_status!=?', 'draft' ) ), 'entry_date DESC', 25, 'read', \IPS\Content\Hideable::FILTER_PUBLIC_ONLY, 0, new \IPS\Member ) as $entry )
|
||||
{
|
||||
$document->addItem( $entry->name, $entry->url(), $entry->content, \IPS\DateTime::ts( $entry->date ), $entry->id );
|
||||
}
|
||||
@@ -244,10 +258,10 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'blog_enable_rss_import', $feed->url ? TRUE : FALSE, FALSE, array( 'togglesOn' => array( 'blog_rss_import_url', 'blog_rss_import_auth_user', 'blog_rss_import_auth_pass', 'blog_rss_import_show_link', 'blog_rss_import_tags' ) ) ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Url( 'blog_rss_import_url', $feed ? $feed->url : NULL, TRUE, array(), NULL, NULL, NULL, 'blog_rss_import_url' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_auth_user', $feed ? $feed->rss_auth_user : NULL, FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_auth_user' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_auth_pass', $feed ? $feed->rss_auth_pass : NULL, FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_auth_pass' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_show_link', $feed->rss_import_show_link ?: \IPS\Member::loggedIn()->language()->addToStack('blog_rss_import_show_link_default' ), FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_show_link' ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_auth_user', $feed ? $feed->auth_user : NULL, FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_auth_user' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_auth_pass', $feed ? $feed->auth_pass : NULL, FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_auth_pass' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Text( 'blog_rss_import_show_link', $feed->import_show_link ?: \IPS\Member::loggedIn()->language()->addToStack('blog_rss_import_show_link_default' ), FALSE, array(), NULL, NULL, NULL, 'blog_rss_import_show_link' ) );
|
||||
|
||||
$options = array( 'autocomplete' => array( 'unique' => TRUE, 'source' => \IPS\Content\Item::definedTags( $this->blog ), 'freeChoice' => ( \IPS\Settings::i()->tags_open_system ? TRUE : FALSE ) ) );
|
||||
if ( \IPS\Settings::i()->tags_force_lower )
|
||||
{
|
||||
@@ -275,7 +289,8 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
}
|
||||
|
||||
$options['autocomplete']['prefix'] = \IPS\Content\Item::canPrefix( NULL, $this->blog );
|
||||
|
||||
$options['autocomplete']['disallowedCharacters'] = array( '#' ); // @todo Pending \IPS\Http\Url rework, hashes cannot be used in URLs
|
||||
|
||||
/* Language strings for tags description */
|
||||
if ( \IPS\Settings::i()->tags_open_system )
|
||||
{
|
||||
@@ -351,7 +366,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
$feed->save();
|
||||
$feed->run();
|
||||
|
||||
\IPS\DB::i()->update( 'core_tasks', array( 'enabled' => 1 ), array( '`key`=?', 'blogrssimport' ) );
|
||||
\IPS\Db::i()->update( 'core_tasks', array( 'enabled' => 1 ), array( '`key`=?', 'blogrssimport' ) );
|
||||
|
||||
/* Redirect */
|
||||
\IPS\Output::i()->redirect( $this->blog->url() );
|
||||
@@ -399,7 +414,7 @@ class _view extends \IPS\Helpers\CoverPhoto\Controller
|
||||
protected function _coverPhotoSet( \IPS\Helpers\CoverPhoto $photo )
|
||||
{
|
||||
$this->blog->cover_photo = (string) $photo->file;
|
||||
$this->blog->cover_photo_offset = $photo->offset;
|
||||
$this->blog->cover_photo_offset = (int) $photo->offset;
|
||||
$this->blog->save();
|
||||
}
|
||||
|
||||
|
||||
Loaded 100 of 2674 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user