Просмотр исходного кода

Merge branch 'master' of https://github.com/unaio/una

AntonLV 7 лет назад
Родитель
Сommit
96be5b4627
29 измененных файлов с 193 добавлено и 138 удалено
  1. 2 1
      inc/classes/BxDolPreloader.php
  2. 6 1
      inc/utils.inc.php
  3. 2 2
      install/sql/system.sql
  4. 2 2
      modules/base/general/classes/BxBaseModGeneralFormEntry.php
  5. 1 1
      modules/boonex/accounts/install/langs/en.xml
  6. 10 3
      modules/boonex/albums/classes/BxAlbumsDb.php
  7. 1 1
      modules/boonex/albums/classes/BxAlbumsTemplate.php
  8. 1 0
      modules/boonex/albums/install/langs/en.xml
  9. 1 0
      modules/boonex/albums/install/sql/enable.sql
  10. 2 0
      modules/boonex/convos/install/langs/en.xml
  11. 4 1
      modules/boonex/english/data/langs/system/en.xml
  12. 2 2
      modules/boonex/forum/install/sql/install.sql
  13. 0 29
      modules/boonex/froala/classes/BxFroalaAlerts.php
  14. 17 0
      modules/boonex/froala/classes/BxFroalaModule.php
  15. 5 4
      modules/boonex/froala/install/sql/disable.sql
  16. 7 7
      modules/boonex/froala/install/sql/enable.sql
  17. 11 0
      modules/boonex/froala/template/css/editor.css
  18. 1 1
      modules/boonex/organizations/install/langs/en.xml
  19. 1 1
      modules/boonex/persons/install/langs/en.xml
  20. 1 1
      modules/boonex/posts/install/sql/install.sql
  21. 2 1
      modules/boonex/russian/data/langs/bx_albums/ru.xml
  22. 2 0
      modules/boonex/russian/data/langs/bx_convos/ru.xml
  23. 3 1
      modules/boonex/russian/data/langs/system/ru.xml
  24. 76 70
      modules/boonex/smtpmailer/classes/BxSMTPModule.php
  25. 5 5
      studio/classes/BxDolStudioTools.php
  26. 2 2
      studio/classes/BxDolStudioToolsAudit.php
  27. 13 0
      template/css/common.css
  28. 12 1
      template/css/editor.less
  29. 1 1
      template/scripts/BxBaseServiceAccount.php

+ 2 - 1
inc/classes/BxDolPreloader.php

@@ -47,7 +47,8 @@ class BxDolPreloader extends BxDolFactory implements iBxDolSingleton
             $this->_aTypes[$sType] = 'add' . bx_gen_method_name($sType);
 
         $this->_aMarkers = array(
-            'dir_plugins_public' => BX_DIRECTORY_PATH_PLUGINS_PUBLIC
+            'dir_plugins_public' => BX_DIRECTORY_PATH_PLUGINS_PUBLIC,
+            'dir_plugins_modules' => BX_DIRECTORY_PATH_MODULES,
         );
     }
 

+ 6 - 1
inc/utils.inc.php

@@ -390,7 +390,8 @@ function sendMail($sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID = 0
 
     $sMailParameters = isset($aCustomHeaders['Sender']) ? "-f{$aCustomHeaders['Sender']}" : "-f{$sEmailNotify}";
 
-    $sMailSubject = !isset($aCustomHeaders['Subject']) ? '=?UTF-8?B?' . base64_encode( $sMailSubject ) . '?=' : $aCustomHeaders['Subject'];
+    if (isset($aCustomHeaders['Subject']))
+        $sMailSubject = $aCustomHeaders['Subject'];
 
     // build data for alert handler
     $bResult = null;
@@ -422,6 +423,10 @@ function sendMail($sRecipientEmail, $sMailSubject, $sMailBody, $iRecipientID = 0
         $sMailBody = html2txt($sMailBody);
     }
 
+    // encode subject
+    if (0 !== strncasecmp($sMailSubject, '=?UTF-8?B?', 10))
+        $sMailSubject = '=?UTF-8?B?' . base64_encode($sMailSubject) . '?=';
+
     // send mail or put it into queue
     $bResult = mail($sRecipientEmail, $sMailSubject, $sMailBody, $sMailHeader, $sMailParameters);
 

+ 2 - 2
install/sql/system.sql

@@ -2913,7 +2913,7 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 ('sys_login', 'system', 'rememberMe', '1', '', 0, 'switcher', '_sys_form_login_input_caption_system_remember_me', '_sys_form_login_input_remember_me', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
 ('sys_login', 'system', 'login', '_sys_form_login_input_submit', '', 0, 'submit', '_sys_form_login_input_caption_system_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 ('sys_login', 'system', 'submit_text', '', '', 0, 'custom', '_sys_form_login_input_caption_system_submit_text', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
-('sys_login', 'system', 'phone', '', '', 0, 'text', '_sys_form_login_input_caption_system_phone', '_sys_form_login_input_phone', '', 1, 0, 0, '', '', '', 'PhoneExist', '', '_sys_form_login_input_phone_error_format', 'Xss', '', 1, 0),
+('sys_login', 'system', 'phone', '', '', 0, 'text', '_sys_form_login_input_caption_system_phone', '_sys_form_login_input_phone', '_sys_form_login_input_phone_info', 1, 0, 0, '', '', '', 'PhoneExist', '', '_sys_form_login_input_phone_error_format', 'Xss', '', 1, 0),
 ('sys_login', 'system', 'code', '', '', 0, 'text', '_sys_form_login_input_caption_system_code', '_sys_form_login_input_code', '', 1, 0, 0, '', '', '', 'CodeExist', '', '_sys_form_login_input_code_error_empty', 'Xss', '', 0, 0),
 ('sys_login', 'system', 'back', '', '', '', 'value', '_sys_form_login_input_caption_system_back', '_sys_form_login_input_back', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 0, 0),
 ('sys_login', 'system', 'do_checkcode', '_sys_form_login_input_checkcode', '', 0, 'submit', '_sys_form_login_input_caption_system_checkcode', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
@@ -2940,7 +2940,7 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 ('sys_confirm_email', 'system', 'code', '', '', 0, 'text', '_sys_form_confirm_email_input_caption_system_code', '_sys_form_confirm_email_input_code', '', 1, 0, 0, '', '', '', 'CodeExist', '', '_sys_form_confirm_email_input_code_error', 'Xss', '', 0, 0),
 ('sys_confirm_email', 'system', 'do_submit', '_sys_form_confirm_email_input_submit', '', 0, 'submit', '_sys_form_confirm_email_input_caption_system_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 
-('sys_confirm_phone', 'system', 'phone', '', '', 0, 'text', '_sys_form_confirm_phone_input_caption_system_phone', '_sys_form_confirm_phone_input_phone', '', 1, 0, 0, '', '', '', 'PhoneUniq', '', '_sys_form_confirm_phone_input_phone_error_format', 'Xss', '', 1, 0),
+('sys_confirm_phone', 'system', 'phone', '', '', 0, 'text', '_sys_form_confirm_phone_input_caption_system_phone', '_sys_form_confirm_phone_input_phone', '_sys_form_confirm_phone_input_phone_info', 1, 0, 0, '', '', '', 'PhoneUniq', '', '_sys_form_confirm_phone_input_phone_error_format', 'Xss', '', 1, 0),
 ('sys_confirm_phone', 'system', 'code', '', '', 0, 'text', '_sys_form_confirm_phone_input_caption_system_code', '_sys_form_confirm_phone_confirmation_input_code', '', 1, 0, 0, '', '', '', 'CodeExist', '', '_sys_form_confirm_phone_input_code_error_empty', 'Xss', '', 0, 0),
 ('sys_confirm_phone', 'system', 'do_submit', '_sys_form_confirm_phone_input_submit', '', 0, 'submit', '_sys_form_confirm_phone_input_caption_system_do_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 ('sys_confirm_phone', 'system', 'do_sendsms', '_sys_form_confirm_phone_input_sendsms', '', 0, 'submit', '_sys_form_confirm_phone_input_caption_system_do_sendsms', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),

+ 2 - 2
modules/base/general/classes/BxBaseModGeneralFormEntry.php

@@ -219,8 +219,8 @@ class BxBaseModGeneralFormEntry extends BxTemplFormView
         }
 
         if (!empty($CNF['OBJECT_METATAGS'])) {
-            $oMetatags = BxDolMetatags::getObjectInstance($CNF['OBJECT_METATAGS']);
-            $oMetatags->onDeleteContent($iContentId);
+            $o = BxDolMetatags::getObjectInstance($CNF['OBJECT_METATAGS']);
+            if ($o) $o->onDeleteContent($iContentId);
         }
 
         // delete db record

+ 1 - 1
modules/boonex/accounts/install/langs/en.xml

@@ -52,7 +52,7 @@
 
     <string name="_bx_accnt_grid_column_title_adm_is_confirmed"><![CDATA[Confirmed]]></string>
     <string name="_bx_accnt_grid_column_title_adm_profiles"><![CDATA[Profiles]]></string>
-    <string name="_bx_accnt_grid_column_title_adm_logged"><![CDATA[Last Online]]></string>
+    <string name="_bx_accnt_grid_column_title_adm_logged"><![CDATA[Last Logged]]></string>
     <string name="_bx_accnt_grid_action_title_adm_activate"><![CDATA[Activate]]></string>
     <string name="_bx_accnt_grid_action_title_adm_suspend"><![CDATA[Suspend]]></string>
     <string name="_bx_accnt_grid_action_title_adm_edit_email"><![CDATA[Edit Email]]></string>

+ 10 - 3
modules/boonex/albums/classes/BxAlbumsDb.php

@@ -73,10 +73,17 @@ class BxAlbumsDb extends BxBaseModTextDb
         return $this->getOne($sQuery);
     }
 
-    public function getMediaListByContentId($iContentId)
+    public function getMediaListByContentId($iContentId, $iLimit = false)
     {
-        $sQuery = $this->prepare ("SELECT * FROM `" . $this->_oConfig->CNF['TABLE_FILES2ENTRIES'] . "` WHERE `content_id` = ? ORDER BY `order`", $iContentId);
-        return $this->getAll($sQuery);
+        $sLimitQuery = '';
+        $aBindings = array('id' => $iContentId);
+        if ((int)$iLimit) {
+            $sLimitQuery = ' LIMIT :limit';
+            $aBindings = array_merge($aBindings, array('limit' => (int)$iLimit));
+        }
+            
+        $sQuery = "SELECT * FROM `" . $this->_oConfig->CNF['TABLE_FILES2ENTRIES'] . "` WHERE `content_id` = :id ORDER BY `order`" . $sLimitQuery;
+        return $this->getAll($sQuery, $aBindings);
     }
 
     function getMediaBy($aParams = array())

+ 1 - 1
modules/boonex/albums/classes/BxAlbumsTemplate.php

@@ -47,7 +47,7 @@ class BxAlbumsTemplate extends BxBaseModTextTemplate
         $oTranscoder = BxDolTranscoderImage::getObjectInstance($CNF['OBJECT_TRANSCODER_BROWSE']);
 
         $aBrowseUnits = array ();
-        $aMediaList = $oModule->_oDb->getMediaListByContentId($aData[$CNF['FIELD_ID']]);
+        $aMediaList = $oModule->_oDb->getMediaListByContentId($aData[$CNF['FIELD_ID']], getParam('bx_albums_album_browsing_unit'));
         foreach ($aMediaList as $k => $a) {
             $aBrowseUnits[] = array (
                 'img_url' => $oTranscoder->getFileUrl($a['file_id']),

+ 1 - 0
modules/boonex/albums/install/langs/en.xml

@@ -10,6 +10,7 @@
 	<string name="_bx_albums_option_plain_summary_chars"><![CDATA[Number of characters in plain album description when album hasn't thumb]]></string>
 	<string name="_bx_albums_option_per_page_browse"><![CDATA[Number of items per page]]></string>
 	<string name="_bx_albums_option_per_page_profile"><![CDATA[Number of items on profile page]]></string>
+	<string name="_bx_albums_option_album_browsing_unit"><![CDATA[Number of items in album card]]></string>
 	<string name="_bx_albums_option_rss_num"><![CDATA[Number of items in RSS feed]]></string>
 	<string name="_bx_albums_option_searchable_fields"><![CDATA[Searchable fields for keyword search]]></string>
 

+ 1 - 0
modules/boonex/albums/install/sql/enable.sql

@@ -15,6 +15,7 @@ INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `c
 ('bx_albums_per_page_browse', '12', @iCategId, '_bx_albums_option_per_page_browse', 'digit', '', '', '', 10),
 ('bx_albums_per_page_profile', '6', @iCategId, '_bx_albums_option_per_page_profile', 'digit', '', '', '', 12),
 ('bx_albums_per_page_browse_showcase', '32', @iCategId, '_sys_option_per_page_browse_showcase', 'digit', '', '', '', 15),
+('bx_albums_album_browsing_unit', '10', @iCategId, '_bx_albums_option_album_browsing_unit', 'digit', '', '', '', 20),
 ('bx_albums_rss_num', '10', @iCategId, '_bx_albums_option_rss_num', 'digit', '', '', '', 20),
 ('bx_albums_searchable_fields', 'title,text', @iCategId, '_bx_albums_option_searchable_fields', 'list', '', '', 'a:2:{s:6:"module";s:9:"bx_albums";s:6:"method";s:21:"get_searchable_fields";}', 30);
 

+ 2 - 0
modules/boonex/convos/install/langs/en.xml

@@ -130,5 +130,7 @@
 <p>New reply in <a href="{PageUrl}">{PageTitle}</a> conversation from <a href="{SenderUrl}">{SenderDisplayName}</a>:</p>
 <hr />
 <p>{Message}</p>
+<hr />
+Don't reply to this email, to reply to the sender please go to <a href="{PageUrl}">conversation page</a>.
 {email_footer}]]></string>
 </resources>

+ 4 - 1
modules/boonex/english/data/langs/system/en.xml

@@ -1355,7 +1355,7 @@
 	<string name="_adm_stg_cpt_option_sys_template_cache_js_enable"><![CDATA[Enable cache for JS files]]></string>
 	<string name="_adm_stg_cpt_option_sys_template_cache_minify_css_enable"><![CDATA[Enable lessening for CSS files (cache should be enabled)]]></string>
 	<string name="_adm_stg_cpt_option_sys_template_cache_minify_js_enable"><![CDATA[Enable lessening for JS files (cache should be enabled)]]></string>
-	<string name="_adm_stg_cpt_option_sys_transcoder_queue_storage"><![CDATA[Remote video transcoding]]></string>
+	<string name="_adm_stg_cpt_option_sys_transcoder_queue_storage"><![CDATA[Remote video transcoding (requires special setup)]]></string>
 	<string name="_adm_stg_cpt_option_template"><![CDATA[Default Template]]></string>
 	<string name="_adm_stg_err_option_template"><![CDATA[Template cannot be empty and must have a valid name.]]></string>
     <string name="_adm_stg_cpt_option_use_like_operator"><![CDATA[Use operator LIKE for search (recommended for small content)]]></string>
@@ -1961,8 +1961,10 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_form_confirm_phone"><![CDATA[Phone Confirmation]]></string>
 	<string name="_sys_form_confirm_phone_input_caption_system_phone"><![CDATA[Phone]]></string>
 	<string name="_sys_form_confirm_phone_input_phone"><![CDATA[Phone]]></string>
+  <string name="_sys_form_confirm_phone_input_phone_info"><![CDATA[Enter your phone with country code]]></string>
 	<string name="_sys_form_confirm_phone_input_phone_error_format"><![CDATA[Wrong phone number, allowed digits only and start from '+']]></string>
 	<string name="_sys_form_confirm_phone_input_phone_error_not_unique"><![CDATA[This phone is already used by someone.]]></string>
+  
 	<string name="_sys_form_confirm_phone_input_caption_system_code"><![CDATA[Code]]></string>
 	<string name="_sys_form_confirm_phone_confirmation_input_code"><![CDATA[Code]]></string>
 	<string name="_sys_form_confirm_phone_input_submit"><![CDATA[Submit]]></string>
@@ -2037,6 +2039,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_form_login_input_email"><![CDATA[Email]]></string>
 	<string name="_sys_form_login_input_password"><![CDATA[Password]]></string>
 	<string name="_sys_form_login_input_phone"><![CDATA[Phone]]></string>
+  <string name="_sys_form_login_input_phone_info"><![CDATA[Enter your phone with country code]]></string>
 	<string name="_sys_form_login_input_remember_me"><![CDATA[Remember me]]></string>
 	<string name="_sys_form_login_input_sendsms"><![CDATA[Send SMS]]></string>
 	<string name="_sys_form_login_input_submit"><![CDATA[Log in]]></string>

+ 2 - 2
modules/boonex/forum/install/sql/install.sql

@@ -10,8 +10,8 @@ CREATE TABLE IF NOT EXISTS `bx_forum_discussions` (
   `thumb` int(11) NOT NULL,
   `title` varchar(255) NOT NULL,
   `cat` int(11) NOT NULL,
-  `text` text NOT NULL,
-  `text_comments` text NOT NULL,
+  `text` mediumtext NOT NULL,
+  `text_comments` mediumtext NOT NULL,
   `lr_timestamp` int(11) NOT NULL,
   `lr_profile_id` int(11) NOT NULL,
   `lr_comment_id` int(11) NOT NULL,

+ 0 - 29
modules/boonex/froala/classes/BxFroalaAlerts.php

@@ -1,29 +0,0 @@
-<?php defined('BX_DOL') or die('hack attempt');
-/**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup    Froala Froala editor integration
- * @ingroup     UnaModules
- *
- * @{
- */
-
-class BxFroalaAlerts extends BxDolAlertsResponse
-{
-    protected $_oModule;
-    function __construct()
-    {
-        parent::__construct();
-        $this->_oModule = BxDolModule::getInstance('bx_froala');
-    }
-
-    public function response($o)
-    {
-        if ('system' == $o->sUnit && 'save_setting' == $o->sAction && 'bx_froala_option_list_id' == $o->aExtras['option']) {
-            $this->_oModule->serviceUpdateMergeFields();
-        }
-    }    
-}
-
-/** @} */

+ 17 - 0
modules/boonex/froala/classes/BxFroalaModule.php

@@ -16,6 +16,23 @@ class BxFroalaModule extends BxDolModule
         parent::__construct($aModule);
     }
 
+    public function serviceInjection()
+    {
+        return "
+        <script>
+            var fFroalaAddClass = function (s) {
+                $('.bx-content-description,.cmt-body,.bx-base-text-entity-content').addClass('fr-view');
+            };
+            
+            if (typeof glOnProcessHtml === 'undefined')
+                glOnProcessHtml = [];
+            if (glOnProcessHtml instanceof Array)
+                glOnProcessHtml.push(fFroalaAddClass);
+
+            fFroalaAddClass();
+        </script>";
+    }
+
     public function actionUpload()
     {
         header('Content-Type: application/json; charset=utf-8');

+ 5 - 4
modules/boonex/froala/install/sql/disable.sql

@@ -9,9 +9,10 @@ DELETE FROM `sys_objects_editor` WHERE `object` = 'bx_froala';
 
 UPDATE `sys_options` SET `value` = 'sys_tinymce' WHERE `name` = 'sys_editor_default';
 
--- Alerts
+-- Injections
 
-SET @iHandlerId := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = 'bx_froala');
+DELETE FROM `sys_injections` WHERE `name` IN('bx_froala');
 
-DELETE FROM `sys_alerts_handlers` WHERE `id`  = @iHandlerId;
-DELETE FROM `sys_alerts` WHERE `handler_id` =  @iHandlerId ;
+-- Preloader
+
+DELETE FROM `sys_preloader` WHERE `module` = 'bx_froala';

+ 7 - 7
modules/boonex/froala/install/sql/enable.sql

@@ -23,13 +23,13 @@ INSERT INTO `sys_objects_editor` (`object`, `title`, `skin`, `override_class_nam
 
 UPDATE `sys_options` SET `value` = 'bx_froala' WHERE `name` = 'sys_editor_default';
 
+-- Injections
 
--- Alerts
+INSERT INTO `sys_injections` (`name`, `page_index`, `key`, `type`, `data`, `replace`, `active`) VALUES
+('bx_froala', 0, 'injection_footer', 'service', 'a:2:{s:6:"module";s:9:"bx_froala";s:6:"method";s:9:"injection";}', 0, 1);
 
-INSERT INTO `sys_alerts_handlers` SET `name` = 'bx_froala', `class` = 'BxFroalaAlerts', `file` = 'modules/boonex/froala/classes/BxFroalaAlerts.php';
-
-SET @iHandlerId := (SELECT `id` FROM `sys_alerts_handlers`  WHERE `name` = 'bx_froala');
-
-INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
-('system', 'save_setting', @iHandlerId);
+-- Preloader
 
+SET @iMaxOrder = (SELECT `order` FROM `sys_preloader` WHERE `type` = 'css_system' ORDER BY `order` DESC LIMIT 1);
+INSERT INTO `sys_preloader`(`module`, `type`, `content`, `active`, `order`) VALUES
+('bx_froala', 'css_system', '{dir_plugins_modules}boonex/froala/plugins/froala/css/|froala_style.min.css',  '1',  @iMaxOrder + 1);

+ 11 - 0
modules/boonex/froala/template/css/editor.css

@@ -1,3 +1,14 @@
 .fr-popup {
     z-index:1100 !important;
 }
+
+.fr-view pre {
+    /* NOTE: this style was copied to editor.css */
+    padding: 5px;
+    border: 1px solid green;
+    background-color: white;
+    color: #009900;
+    display: block;
+    margin: 0;
+    overflow-x: auto;
+}

+ 1 - 1
modules/boonex/organizations/install/langs/en.xml

@@ -309,7 +309,7 @@
 	<string name="_bx_orgs_grid_filter_item_title_adm_suspended"><![CDATA[Suspended]]></string>
 	<string name="_bx_orgs_grid_column_title_adm_active"><![CDATA[Active]]></string>
     <string name="_bx_orgs_grid_column_title_adm_fullname"><![CDATA[Name]]></string>
-    <string name="_bx_orgs_grid_column_title_adm_last_online"><![CDATA[Last Online]]></string>
+    <string name="_bx_orgs_grid_column_title_adm_last_online"><![CDATA[Last Logged]]></string>
     <string name="_bx_orgs_grid_column_title_adm_account"><![CDATA[Account]]></string>
     <string name="_bx_orgs_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
     <string name="_bx_orgs_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>

+ 1 - 1
modules/boonex/persons/install/langs/en.xml

@@ -268,7 +268,7 @@
   <string name="_bx_persons_grid_filter_item_title_adm_unconfirmed"><![CDATA[Unconfirmed]]></string>
     <string name="_bx_persons_grid_column_title_adm_active"><![CDATA[Active]]></string>
     <string name="_bx_persons_grid_column_title_adm_fullname"><![CDATA[Name]]></string>
-    <string name="_bx_persons_grid_column_title_adm_last_online"><![CDATA[Last Online]]></string>
+    <string name="_bx_persons_grid_column_title_adm_last_online"><![CDATA[Last Logged]]></string>
     <string name="_bx_persons_grid_column_title_adm_account"><![CDATA[Account]]></string>
     <string name="_bx_persons_grid_action_title_adm_delete"><![CDATA[Delete]]></string>
     <string name="_bx_persons_grid_action_title_adm_delete_with_content"><![CDATA[Delete With Content]]></string>

+ 1 - 1
modules/boonex/posts/install/sql/install.sql

@@ -8,7 +8,7 @@ CREATE TABLE IF NOT EXISTS `bx_posts_posts` (
   `thumb` int(11) NOT NULL,
   `title` varchar(255) NOT NULL,
   `cat` int(11) NOT NULL,
-  `text` text NOT NULL,
+  `text` mediumtext NOT NULL,
   `views` int(11) NOT NULL default '0',
   `rate` float NOT NULL default '0',
   `votes` int(11) NOT NULL default '0',

+ 2 - 1
modules/boonex/russian/data/langs/bx_albums/ru.xml

@@ -9,7 +9,8 @@
 	<string name="_bx_albums_option_summary_chars"><![CDATA[Количество символов в автогенерируемой сводке к альбомам]]></string>
 	<string name="_bx_albums_option_plain_summary_chars"><![CDATA[Количество символов в описании альбома при отсутствующей картинке альбома]]></string>
 	<string name="_bx_albums_option_per_page_browse"><![CDATA[Количество элементов на странице]]></string>
-	<string name="_bx_albums_option_per_page_profile"><![CDATA[Количество элементов на странице профайла]]></string>
+    <string name="_bx_albums_option_per_page_profile"><![CDATA[Количество элементов на странице профайла]]></string>
+    <string name="_bx_albums_option_album_browsing_unit"><![CDATA[Количество элементов в карточке альбома]]></string>
 	<string name="_bx_albums_option_rss_num"><![CDATA[Количество элементов в ленте RSS]]></string>
 	<string name="_bx_albums_option_searchable_fields"><![CDATA[Поля для поиска по ключевому слову]]></string>
 

+ 2 - 0
modules/boonex/russian/data/langs/bx_convos/ru.xml

@@ -130,5 +130,7 @@
 <p>Новый ответ в <a href="{PageUrl}">{PageTitle}</a> переписке от <a href="{SenderUrl}">{SenderDisplayName}</a>:</p>
 <hr />
 <p>{Message}</p>
+<hr />
+Не отвечайте на это письмо через email, чтобы ответить отправителю, нужно зайти на <a href="{PageUrl}">страницу с перепиской</a> и ответить там.
 {email_footer}]]></string>
 </resources>

+ 3 - 1
modules/boonex/russian/data/langs/system/ru.xml

@@ -1353,7 +1353,7 @@
 	<string name="_adm_stg_cpt_option_sys_template_cache_js_enable"><![CDATA[Задействовать кэш для файлов JS]]></string>
 	<string name="_adm_stg_cpt_option_sys_template_cache_minify_css_enable"><![CDATA[Задействовать уменьшение для файлов CSS (кэш должен быть задействован)]]></string>
 	<string name="_adm_stg_cpt_option_sys_template_cache_minify_js_enable"><![CDATA[Задействовать уменьшение для файлов JS (кэш должен быть задействован)]]></string>
-	<string name="_adm_stg_cpt_option_sys_transcoder_queue_storage"><![CDATA[Удалённая раскодировка видео]]></string>
+	<string name="_adm_stg_cpt_option_sys_transcoder_queue_storage"><![CDATA[Удалённая раскодировка видео (требуется дополнительная настройка)]]></string>
 	<string name="_adm_stg_cpt_option_template"><![CDATA[Основная тема]]></string>
 	<string name="_adm_stg_err_option_template"><![CDATA[Тема не может быть пустой и должна иметь приемлемое название.]]></string>
     <string name="_adm_stg_cpt_option_use_like_operator"><![CDATA[Использовать для поиска оператор LIKE (рекомендуется для небольшого содержимого)]]></string>
@@ -1961,6 +1961,7 @@
 	<string name="_sys_form_confirm_phone"><![CDATA[Подтверждение телефона]]></string>
 	<string name="_sys_form_confirm_phone_input_caption_system_phone"><![CDATA[Телефон]]></string>
 	<string name="_sys_form_confirm_phone_input_phone"><![CDATA[Телефон]]></string>
+  <string name="_sys_form_confirm_phone_input_phone_info"><![CDATA[Введите телефон с кодом страны]]></string>
 	<string name="_sys_form_confirm_phone_input_phone_error_format"><![CDATA[Телефон должен содержать только цифры и начинаться с '+']]></string>
 	<string name="_sys_form_confirm_phone_input_phone_error_not_unique"><![CDATA[Этот телефон уже кем-то используется]]></string>
 	<string name="_sys_form_confirm_phone_input_caption_system_code"><![CDATA[Код]]></string>
@@ -2036,6 +2037,7 @@
 	<string name="_sys_form_login_input_email"><![CDATA[Имейл]]></string>
 	<string name="_sys_form_login_input_password"><![CDATA[Пароль]]></string>
 	<string name="_sys_form_login_input_phone"><![CDATA[Телефон]]></string>
+  <string name="_sys_form_login_input_phone_info"><![CDATA[Введите телефон с кодом страны]]></string>
 	<string name="_sys_form_login_input_remember_me"><![CDATA[Запомнить меня]]></string>
 	<string name="_sys_form_login_input_sendsms"><![CDATA[Отправить SMS]]></string>
 	<string name="_sys_form_login_input_submit"><![CDATA[Вход]]></string>

+ 76 - 70
modules/boonex/smtpmailer/classes/BxSMTPModule.php

@@ -23,97 +23,101 @@ class BxSMTPModule extends BxDolModule
     function serviceSend ($sRecipientEmail, $sMailSubject, $sMailBody, $sMailHeader, $sMailParameters, $isHtml, $aRecipientInfo = array(), $aCustomHeaders = array())
     {
         $iRet = true;
+        $sErrorMessage = '';
 
         if ($sRecipientEmail) {
 
-            $mail = new PHPMailer\PHPMailer\PHPMailer(true);
+            try {
+
+                $mail = new PHPMailer\PHPMailer\PHPMailer(true);
 
-            if ('on' == getParam('bx_smtp_on'))
-                $mail->IsSMTP();
-            // $mail->SMTPDebug = 2;
+                if ('on' == getParam('bx_smtp_on'))
+                    $mail->IsSMTP();
+                // $mail->SMTPDebug = 2;
 
-            $mail->CharSet = 'utf8';
+                $mail->CharSet = 'UTF-8';
 
-            // smtp server auth or not
-            $mail->SMTPAuth = 'on' == getParam('bx_smtp_auth') ? true : false;
+                // smtp server auth or not
+                $mail->SMTPAuth = 'on' == getParam('bx_smtp_auth') ? true : false;
 
-            // from settings, smtp server secure ssl/tls
-            $sParamSecure = getParam('bx_smtp_secure');
-            if ('SSL' == $sParamSecure || 'TLS' == $sParamSecure) {
+                // from settings, smtp server secure ssl/tls
+                $sParamSecure = getParam('bx_smtp_secure');
+                if ('SSL' == $sParamSecure || 'TLS' == $sParamSecure) {
 
-                $mail->SMTPSecure = strtolower($sParamSecure);
+                    $mail->SMTPSecure = strtolower($sParamSecure);
 
-                if ('on' == getParam('bx_smtp_allow_selfsigned')) {
-                    $mail->SMTPOptions = array(
-                        'ssl' => array(
-                            'verify_peer' => false,
-                            'verify_peer_name' => false,
-                            'allow_self_signed' => true
-                        )
-                    );
+                    if ('on' == getParam('bx_smtp_allow_selfsigned')) {
+                        $mail->SMTPOptions = array(
+                            'ssl' => array(
+                                'verify_peer' => false,
+                                'verify_peer_name' => false,
+                                'allow_self_signed' => true
+                            )
+                        );
+                    }
                 }
-            }
 
-            // from settings, smtp server
-            $sParamHost = getParam('bx_smtp_host');
-            if ($sParamHost)
-                $mail->Host = $sParamHost;
-
-            // smtp port 25, 465
-            $sParamPort = getParam('bx_smtp_port');
-            if ((int)$sParamPort > 0)
-                $mail->Port = $sParamPort;
-
-            // from settings, username and passord of smtp server
-            $mail->Username = getParam ('bx_smtp_username');
-            $mail->Password = getParam ('bx_smtp_password');
-
-            if (!isset($aCustomHeaders['From'])) {
-                $sParamSender = trim(getParam('bx_smtp_from_email'));
-                if ($sParamSender)
-                    $mail->From = $sParamSender;
-                else
-                    $mail->From = getParam('site_email_notify');
-
-                // get site name or some other name as sender's name
-                $mail->FromName = getParam ('bx_smtp_from_name');
-            } 
-
-            if (!isset($aCustomHeaders['Subject']))
-                $mail->Subject = $sMailSubject;
-
-            if ($isHtml) {
-                $mail->Body = $sMailBody;
-                $mail->AltBody = $isHtml ? strip_tags($sMailBody) : $sMailBody;
-            } else {
-                $mail->Body = $sMailBody;
-            }
+                // from settings, smtp server
+                $sParamHost = getParam('bx_smtp_host');
+                if ($sParamHost)
+                    $mail->Host = $sParamHost;
+
+                // smtp port 25, 465
+                $sParamPort = getParam('bx_smtp_port');
+                if ((int)$sParamPort > 0)
+                    $mail->Port = $sParamPort;
+
+                // from settings, username and passord of smtp server
+                $mail->Username = getParam ('bx_smtp_username');
+                $mail->Password = getParam ('bx_smtp_password');
+
+                if (!isset($aCustomHeaders['From'])) {
+                    $sParamSender = trim(getParam('bx_smtp_from_email'));
+                    if ($sParamSender)
+                        $mail->From = $sParamSender;
+                    else
+                        $mail->From = getParam('site_email_notify');
+
+                    // get site name or some other name as sender's name
+                    $mail->FromName = getParam ('bx_smtp_from_name');
+                } 
 
-            $mail->WordWrap = 50; // set word wrap
+                if (!isset($aCustomHeaders['Subject']))
+                    $mail->Subject = $sMailSubject;
 
-            $mail->AddAddress($sRecipientEmail);
+                if ($isHtml) {
+                    $mail->Body = $sMailBody;
+                    $mail->AltBody = $isHtml ? strip_tags($sMailBody) : $sMailBody;
+                } else {
+                    $mail->Body = $sMailBody;
+                }
 
-            $mail->IsHTML($isHtml ? true : false);
+                $mail->WordWrap = 50; // set word wrap
 
-            foreach ($aCustomHeaders as $sHeaderName => $sHeaderValue) {
-                if ('From' == $sHeaderName) {
-                    if (preg_match('/(.+)<(.+)>/', $sHeaderValue, $m)) {
-                        $mail->setFrom($m[2], trim($m[1]), false);
-                    }
+                $mail->AddAddress($sRecipientEmail);
+
+                $mail->IsHTML($isHtml ? true : false);
+
+                foreach ($aCustomHeaders as $sHeaderName => $sHeaderValue) {
+                    if ('From' == $sHeaderName) {
+                        if (preg_match('/(.+)<(.+)>/', $sHeaderValue, $m)) {
+                            $mail->setFrom($m[2], trim($m[1]), false);
+                        }
+                        else {
+                            $mail->setFrom($sHeaderValue, '', false);
+                        }
+                    } 
                     else {
-                        $mail->setFrom($sHeaderValue, '', false);
+                        $mail->addCustomHeader($sHeaderName, $sHeaderValue);
                     }
-                } 
-                else {
-                    $mail->addCustomHeader($sHeaderName, $sHeaderValue);
                 }
-            }
 
-            try {
                 $mail->Send();
+                
             } catch (PHPMailer\PHPMailer\Exception $e) {
                 $iRet = false;
-                $this->log("Mailer Error ($sRecipientEmail): " . $e->getMessage());
+                $sErrorMessage = $e->getMessage();
+                $this->log("Mailer Error ($sRecipientEmail): " . $sErrorMessage);
             }
         }
 
@@ -126,6 +130,8 @@ class BxSMTPModule extends BxDolModule
             'params'    => $sMailParameters,
             'recipient' => $aRecipientInfo,
             'html'      => $isHtml,
+            'ret'       => $iRet,
+            'error_message' => $sErrorMessage,
         );
         bx_alert('profile', 'send_mail', $aRecipientInfo && isset($aRecipientInfo['ID']) ? $aRecipientInfo['ID'] : 0, '', $aAlertData);
         //--- create system event [ end ]
@@ -140,7 +146,7 @@ class BxSMTPModule extends BxDolModule
 
             $isHTML = bx_get('html') == 'on' ? true : false;
             $sRecipient = bx_process_pass(bx_get('recipient'));
-            $sSubj = bx_process_pass(bx_get('subject'));
+            $sSubj = bx_get('subject');
             $sBody = bx_process_pass(bx_get('body'), $isHTML ? BX_DATA_HTML : BX_DATA_TEXT);
 
             if (sendMail($sRecipient, $sSubj, $sBody, 0, array(), BX_EMAIL_SYSTEM, $isHTML ? 'html' : ''))

+ 5 - 5
studio/classes/BxDolStudioTools.php

@@ -58,7 +58,7 @@ class BxDolStudioTools extends BxDolIO
         $sRet = <<<EOF
 <style type="text/css">
 
-    .hidden {
+    .bx-adm-hidden {
         display:none;
     }
 
@@ -175,12 +175,12 @@ EOF;
 </script>
 
 <div class="boxContent" id="adm_pages">
-    <div id="page0" class="visible">{$sAuditTab}</div>
-    <div id="page1" class="hidden">{$sPermissionsTab}</div>
-    <div id="page2" class="hidden">
+    <div id="page0" class="bx-adm-visible">{$sAuditTab}</div>
+    <div id="page1" class="bx-adm-hidden">{$sPermissionsTab}</div>
+    <div id="page2" class="bx-adm-hidden">
         <iframe frameborder="0" width="100%" height="800" scrolling="auto" src="host_tools.php?get_phpinfo=true"></iframe>
     </div>
-    <div id="page3" class="hidden">{$sCacheEnginesTab}</div>
+    <div id="page3" class="bx-adm-hidden">{$sCacheEnginesTab}</div>
 </div>
 EOF;
 

+ 2 - 2
studio/classes/BxDolStudioToolsAudit.php

@@ -46,7 +46,7 @@ class BxDolStudioToolsAudit extends BxDol
             BX_DOL_AUDIT_OK => _t('_sys_audit_title_ok'),
         );
 
-        $this->sMinPhpVer = '5.5.10';
+        $this->sMinPhpVer = '5.6.0';
         $this->aPhpSettings = array (
             'allow_url_fopen' => array('op' => '=', 'val' => true, 'type' => 'bool'),
             'allow_url_include' => array('op' => '=', 'val' => false, 'type' => 'bool'),
@@ -57,7 +57,7 @@ class BxDolStudioToolsAudit extends BxDol
             'register_globals' => array('op' => '=', 'val' => false, 'type' => 'bool'),
             'safe_mode' => array('op' => '=', 'val' => false, 'type' => 'bool'),
             'short_open_tag' => array('op' => '=', 'val' => true, 'type' => 'bool'),
-            'disable_functions' => array('op' => 'without', 'val' => 'shell_exec,eval,assert,phpinfo,getenv,ini_set,mail,fsockopen,chmod,parse_ini_file'),
+            'disable_functions' => array('op' => 'without', 'val' => 'shell_exec,eval,assert,phpinfo,getenv,ini_set,mail,fsockopen,chmod,parse_ini_file,readfile'),
             'php module: curl' => array('op' => 'module', 'val' => 'curl'),
             'php module: gd' => array('op' => 'module', 'val' => 'gd'),
             'php module: mbstring' => array('op' => 'module', 'val' => 'mbstring'),

+ 13 - 0
template/css/common.css

@@ -37,6 +37,19 @@ blockquote {
     padding-left: 10px;
 }
 
+.bx-base-text-entity-content pre,
+.bx-content-description pre,
+.cmt-body pre {
+    /* NOTE: this style was copied to editor.css */
+    padding: 5px;
+    border: 1px solid green;
+    background-color: white;
+    color: #009900;
+    display: block;
+    margin: 0;
+    overflow-x: auto;
+}
+
 .bx-main {
 	position: relative;
 	display: -webkit-flex;

+ 12 - 1
template/css/editor.less

@@ -22,6 +22,17 @@ blockquote {
     padding-left: 10px;
 }
 
+pre {
+    /* NOTE: copied from common.css */
+    padding: 5px;
+    border: 1px solid green;
+    background-color: white;
+    color: #009900;
+    display: block;
+    margin: 0;
+    overflow-x: auto;
+}
+
 .bx-hide-in-htmleditor {
     display:none;
-}
+}

+ 1 - 1
template/scripts/BxBaseServiceAccount.php

@@ -454,7 +454,7 @@ class BxBaseServiceAccount extends BxDol
      */
     protected function generateUserNewPwd($iAccountId)
     {
-        $sPwd = genRndPwd();
+        $sPwd = genRndPwd(8, false);
         $sSalt = genRndSalt();
         $sPasswordHash = encryptUserPwd($sPwd, $sSalt);