فهرست منبع

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

RomanL 6 سال پیش
والد
کامیت
fe5fd78086

+ 6 - 0
inc/classes/BxDolSearch.php

@@ -818,6 +818,12 @@ class BxDolSearchResult implements iBxDolReplaceable
                    $sFieldTable = isset($aValue['table']) ? $aValue['table'] : $this->aCurrent['table'];
                    $sqlCondition = "`{$sFieldTable}`.`{$aValue['field']}` ";
                    switch ($aValue['operator']) {
+                       case 'empty value':
+                            $sqlCondition .= " = '' ";
+                            break;
+                       case 'not empty value':
+                            $sqlCondition .= " != '' ";
+                            break;
                        case 'nothing':
                             $sqlCondition = " 0 ";
                             break;

+ 18 - 2
inc/classes/BxDolWiki.php

@@ -168,9 +168,10 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
             if (!$oPage->isVisiblePage())
                 continue;
             $sUrl = $this->getPageUrl($r['uri']);
+            $sTitle = _t($r['title']);
             $aVars['bx_repeat:pages'][] = array(
                 'url' => $sUrl,
-                'title' => _t($r['title']),
+                'title' => $sTitle ? $sTitle : _t('_Empty'),
             );
         }
         usort($aVars['bx_repeat:pages'], function ($r1, $r2) {
@@ -297,7 +298,7 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
             'delete-version' => 'allow_delete_for_levels',
             'delete-block' => 'allow_delete_for_levels',
             'get-traaslation' => 'allow_translate_for_levels',
-            'history' => true,
+            'history' => isLogged(),
             'unsafe' => 'allow_unsafe_for_levels',
         );
         if (!isset($aTypes[$sType]))
@@ -679,10 +680,25 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
                 }
             }
 
+            // update indexing data
+            $this->updateBlockIndexingData($iBlockId);
+
             return array('code' => 0, 'actions' => array('Reload', 'ClosePopup'), 'block_id' => $iBlockId);
         }
     }
 
+    protected function updateBlockIndexingData($iBlockId)
+    {
+        if (!($aLangs = $this->_oQuery->getBlockLangs ($iBlockId)))
+            return false;
+        $sText = '';
+        foreach ($aLangs as $sLang) {
+            $aWikiVer = $this->_oQuery->getBlockContent ($iBlockId, $sLang, false, false);
+            $sText .= trim(strip_tags($aWikiVer['content'])) . ' ';
+        }
+        return $this->_oQuery->updateBlockIndexingData ($iBlockId, $sText);
+    }
+
     protected function getPageUrl ($sPageUri, $bPermalink = true, $bAddRootUrl = true)
     {
         $sUrl = ($bAddRootUrl ? BX_DOL_URL_ROOT : '') . 'r.php?_q=' . $this->_aObject['uri'] . '/' . $sPageUri;

+ 10 - 0
inc/classes/BxDolWikiQuery.php

@@ -75,6 +75,16 @@ class BxDolWikiQuery extends BxDolDb
         return $aRow ? $aRow : false;
     }
 
+    public function getBlockLangs ($iBlockId)
+    {
+        return $this->getColumn("SELECT `language` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block GROUP BY `language`", array('block' => $iBlockId));
+    }
+
+    public function updateBlockIndexingData ($iBlockId, $sText)
+    {
+        return $this->query("UPDATE `sys_pages_blocks` SET `text` = :text, `text_updated` = :updated WHERE `id` = :id", array('text' => $sText, 'updated' => time(), 'id' => $iBlockId));
+    }
+
     public function getBlockHistory ($iBlockId, $sLang)
     {
         $aBind = array('block' => $iBlockId, 'language' => $sLang);

+ 7 - 2
inc/js/classes/BxDolWiki.js

@@ -14,11 +14,11 @@ function BxDolWiki (sObject, eContainer, oOptions) {
     this._sActionUrl = sUrlRoot + 'r.php?_q=' + this._oOptions.wiki_action_uri + '-action/';
     this._sCurrentLang = this._oOptions['language'];
     this._oTranslations = {};
-    this.bindEvents();    
 }
 
 BxDolWiki.prototype.bindEvents = function () {
     var self = this;
+    var e = $('#bx-popup-ajax-wrapper-bx-wiki-menu-' + this._oOptions.block_id);
     var oEvents = {
         "edit": "onEdit",
         "delete-version": "onDeleteVersion",
@@ -27,7 +27,8 @@ BxDolWiki.prototype.bindEvents = function () {
         "history": "onHistory",
     }
     $.each(oEvents, function (sSel, sFunc) {
-        $(self._eCont).find(".bx-wiki-controls-menu a." + sSel).on('click', {wiki_obj:self}, function() {
+        e.find(".bx-menu-item a." + sSel).on('click', {wiki_obj:self}, function() {
+            $(".bx-popup-active").dolPopupHide(); // close menu popup
             BxDolWiki.prototype[sFunc].apply(self);
             return false;
         });
@@ -87,10 +88,14 @@ BxDolWiki.prototype.onChangeLangSelector = function (e) {
 };
 
 BxDolWiki.prototype.onTranslate = function () {
+    this._sCurrentLang = this._oOptions['language'];
+    this._oTranslations = {};
     this.popup('translate');
 };
 
 BxDolWiki.prototype.onEdit = function () {
+    this._sCurrentLang = this._oOptions['language'];
+    this._oTranslations = {};
     this.popup('edit');
 };
 

+ 1 - 1
inc/version.inc.php

@@ -7,6 +7,6 @@
  * @{
  */
 
-define('BX_DOL_VERSION', '10.1.0-DEV1'); ///< system files version, for DB version @see bx_get_ver, DB and files version must match
+define('BX_DOL_VERSION', '11.0.0-DEV1'); ///< system files version, for DB version @see bx_get_ver, DB and files version must match
 
 /** @} */

+ 1 - 1
install/index.php

@@ -10,7 +10,7 @@
 define ('BX_DOL_INSTALL',  true);
 define ('BX_SKIP_INSTALL_CHECK', true);
 
-define ('BX_DOL_VER', '10.1.0-DEV1');
+define ('BX_DOL_VER', '11.0.0-DEV1');
 
 define ('BX_INSTALL_DEFAULT_LANGUAGE', 'en');
 

+ 8 - 8
install/sql/system.sql

@@ -3207,9 +3207,9 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 ('sys_privacy_group_custom', 'system', 'do_cancel', '_sys_form_ps_gc_input_caption_do_cancel', '', 0, 'button', '_sys_form_ps_gc_input_caption_system_do_cancel', '', '', 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', '', '', '', '', '', 0, 0),
 
 ('sys_wiki', 'system', 'block_id', '', '', 0, 'hidden', '', '_sys_form_wiki_input_caption_block_id', '', 0, 0, 0, '', '', '', '', '', '', 'Int', '', 0, 0),
-('sys_wiki', 'system', 'language', '', '', 0, 'radio_set', '', '_sys_form_wiki_input_caption_lang', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
+('sys_wiki', 'system', 'language', '', '', 0, 'radio_set', '', '_sys_form_wiki_input_caption_lang', '_sys_form_wiki_input_caption_lang_info', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
 ('sys_wiki', 'system', 'content_main', '', '', 0, 'custom', '', '_sys_form_wiki_input_caption_content_main', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('sys_wiki', 'system', 'content', '', '', 0, 'textarea', '', '_sys_form_wiki_input_caption_content', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
+('sys_wiki', 'system', 'content', '', '', 0, 'textarea', '', '_sys_form_wiki_input_caption_content', '_sys_form_wiki_input_caption_content_info', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
 ('sys_wiki', 'system', 'notes', '', '', 0, 'text', '', '_sys_form_wiki_input_caption_notes', '', 0, 0, 0, '', '', '', '', '', '', 'Xss', '', 1, 0),
 ('sys_wiki', 'system', 'do_submit', '_sys_submit', '', 0, 'submit', '_sys_form_wiki_input_caption_submit', '', '', 0, 0, 0, '', '', '', '', '', '', '', '', 0, 0),
 ('sys_wiki', 'system', 'close', '_sys_close', '', 0, 'reset', '_sys_form_wiki_input_caption_close', '', '', 0, 0, 0, 'a:2:{s:7:\"onclick\";s:46:\"$(\'.bx-popup-applied:visible\').dolPopupHide();\";s:5:\"class\";s:22:\"bx-def-margin-sec-left\";}', '', '', '', '', '', '', '', 1, 0),
@@ -3817,7 +3817,7 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('sys_create_post', '_sys_menu_title_create_post', 'sys_add_content_links', 'system', 15, 0, 1, 'BxTemplMenuCreatePost', ''),
 ('sys_add_relation', '_sys_menu_title_add_relation', '', 'system', 6, 0, 1, 'BxTemplMenuAddRelation', ''),
 ('sys_vote_reactions_do', '_sys_menu_title_vote_reactions_do', '', 'system', 3, 0, 1, 'BxTemplVoteReactionsMenuDo', ''),
-('sys_wiki', '_sys_menu_title_wiki', 'sys_wiki', 'system', 9, 0, 1, 'BxTemplMenuWiki', '');
+('sys_wiki', '_sys_menu_title_wiki', 'sys_wiki', 'system', 6, 0, 1, 'BxTemplMenuWiki', '');
 
 CREATE TABLE IF NOT EXISTS `sys_menu_sets` (
   `set_name` varchar(64) NOT NULL,
@@ -3976,11 +3976,11 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit
 
 -- wiki menu
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
-('sys_wiki', 'system', 'edit', '', '_sys_menu_item_title_wiki_edit', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 1),
-('sys_wiki', 'system', 'delete-version', '', '_sys_menu_item_title_wiki_delete_version', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 2),
-('sys_wiki', 'system', 'delete-block', '', '_sys_menu_item_title_wiki_delete_block', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 3),
-('sys_wiki', 'system', 'translate', '', '_sys_menu_item_title_wiki_translate', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 4),
-('sys_wiki', 'system', 'history', '', '_sys_menu_item_title_wiki_history', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 5);
+('sys_wiki', 'system', 'edit', '', '_sys_menu_item_title_wiki_edit', '', '', '', 'edit', '', '', 0, 2147483646, '', 1, 0, 1, 1),
+('sys_wiki', 'system', 'delete-version', '', '_sys_menu_item_title_wiki_delete_version', '', '', '', 'times', '', '', 0, 2147483646, '', 1, 0, 1, 2),
+('sys_wiki', 'system', 'delete-block', '', '_sys_menu_item_title_wiki_delete_block', '', '', '', 'times-circle', '', '', 0, 2147483646, '', 1, 0, 1, 3),
+('sys_wiki', 'system', 'translate', '', '_sys_menu_item_title_wiki_translate', '', '', '', 'language', '', '', 0, 2147483646, '', 1, 0, 1, 4),
+('sys_wiki', 'system', 'history', '', '_sys_menu_item_title_wiki_history', '', '', '', 'history', '', '', 0, 2147483646, '', 1, 0, 1, 5);
 
 -- --------------------------------------------------------
 

+ 1 - 31
modules/base/general/template/css/main.css

@@ -145,36 +145,6 @@ div.bx-base-general-comments div.bx-base-general-comments-counter-holder {
     border-width: 0px;
 }
 
-/* unit */
-.bx-def-unit-live-search {
-    width:236px;
-    width:14.75;
-    overflow:hidden;
-}
-
-.bx-def-unit-live-search .bx-def-unit-info {
-    width:188px;
-    width:11.75;
-}
-
-.bx-def-unit-live-search .bx-def-unit-img:not(.empty) {
-    background-size:cover;
-    background-repeat:no-repeat;
-    background-position:center center;
-}
-.bx-def-unit-live-search .bx-def-unit-img-empty {
-    position: relative;
-    display: -webkit-flex;
-    display: flex;
-    -webkit-align-items: center;
-    align-items: center;
-    -webkit-justify-content: center;
-    justify-content: center;
-}
-.bx-def-unit-live-search .bx-def-unit-img-empty i {
-    font-size: 1.2rem;
-}
-
 /* unit meta */
 .bx-base-general-unit-meta {
     white-space: normal;
@@ -327,4 +297,4 @@ div.bx-badge.bx-badge-compact img{
 }
 #bx-popup-ajax-wrapper-sys_set_badges li INPUT[type="checkbox"] {
     margin-right: 0.5rem;
-}
+}

+ 3 - 0
modules/base/profile/classes/BxBaseModProfileModule.php

@@ -29,6 +29,9 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         if(!empty($CNF['FIELD_ALLOW_POST_TO']))
             $this->_aSearchableNamesExcept[] = $CNF['FIELD_ALLOW_POST_TO'];
 
+        if(!empty($CNF['FIELD_ALLOW_CONTACT_TO']))
+            $this->_aSearchableNamesExcept[] = $CNF['FIELD_ALLOW_CONTACT_TO'];
+
         $this->_iAccountId = getLoggedId();
     }
 

+ 2 - 11
modules/base/profile/classes/BxBaseModProfileTemplate.php

@@ -397,20 +397,11 @@ class BxBaseModProfileTemplate extends BxBaseModGeneralTemplate
     /**
      * Get profile cover image url
      */
-    function urlCover ($aData, $bSubstituteNoImage = true)
+    function urlCover ($aData, $bSubstituteNoImage = false)
     {
         $CNF = &$this->_oConfig->CNF;
 
-        $sImageUrl = $this->_image($CNF['FIELD_COVER'], $CNF['OBJECT_IMAGES_TRANSCODER_COVER'], '', $aData, false);
-        if($sImageUrl === false) {
-            $iImageId = (int)getParam('sys_site_cover_common');
-            $oImageTranscoder = BxDolTranscoderImage::getObjectInstance(BX_DOL_TRANSCODER_OBJ_COVER);
-            if($oImageTranscoder && $iImageId != 0)
-                $sImageUrl = $oImageTranscoder->getFileUrl($iImageId);
-        }
-
-        if($bSubstituteNoImage && !$sImageUrl)
-            $sImageUrl = $this->getImageUrl('cover.svg');
+        $sImageUrl = $this->_image($CNF['FIELD_COVER'], $CNF['OBJECT_IMAGES_TRANSCODER_COVER'], '', $aData, $bSubstituteNoImage);
 
         return $sImageUrl;
     }

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

@@ -2294,6 +2294,7 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_form_wiki_input_caption_lang_info"><![CDATA[★ - main(original) language, red - outdated or missing translation]]></string>
 	<string name="_sys_form_wiki_input_caption_lang_err"><![CDATA[Please select value]]></string>
 	<string name="_sys_form_wiki_input_caption_content"><![CDATA[Content]]></string>
+	<string name="_sys_form_wiki_input_caption_content_info"><![CDATA[Markdown syntax and macros are supported.]]></string>
 	<string name="_sys_form_wiki_input_caption_content_main"><![CDATA[Main(original) Content]]></string>
 	<string name="_sys_form_wiki_input_caption_notes"><![CDATA[Notes]]></string>
 	<string name="_sys_form_wiki_input_caption_submit"><![CDATA[Submit]]></string>

+ 17 - 0
modules/boonex/russian/data/langs/bx_wiki/ru.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="ru" flag="ru" title="Russian">
+    <string name="_sys_module_wiki"><![CDATA[Вики]]></string>
+    <string name="_bx_wiki"><![CDATA[Вики]]></string>
+    <string name="_bx_wiki_txt_sample_single"><![CDATA[вики]]></string>
+    <string name="_bx_wiki_object_title"><![CDATA[Вики]]></string>
+    <string name="_bx_wiki_page_home"><![CDATA[Вики - Home]]></string>
+    <string name="_bx_wiki_block_home"><![CDATA[Вики]]></string>
+    <string name="_bx_wiki_block_contents"><![CDATA[Содержание]]></string>
+    <string name="_bx_wiki_block_administration"><![CDATA[Управление]]></string>
+    <string name="_bx_wiki_page_missing_translations"><![CDATA[Отсутствующие переводы]]></string>
+    <string name="_bx_wiki_block_missing_translations"><![CDATA[Отсутствующие переводы]]></string>
+    <string name="_bx_wiki_page_outdated_translations"><![CDATA[Устаревшие переводы]]></string>
+    <string name="_bx_wiki_block_outdated_translations"><![CDATA[Устаревшие переводы]]></string>
+    <string name="_bx_wiki_menu_item_title_system_home"><![CDATA[Вики]]></string>
+    <string name="_bx_wiki_option_design_box"><![CDATA[Дизайн для вики блока по умолчанию]]></string>
+</resources>

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

@@ -2283,6 +2283,7 @@
     <string name="_sys_form_wiki_input_caption_lang_info"><![CDATA[★ - основной(оригинальный) язык, красным помечен отсутствующий или устаревший перевод]]></string>
     <string name="_sys_form_wiki_input_caption_lang_err"><![CDATA[Пожалуйста выберите значение]]></string>
 	<string name="_sys_form_wiki_input_caption_content"><![CDATA[Содержимое]]></string>
+    <string name="_sys_form_wiki_input_caption_content_info"><![CDATA[Можно использовать маркдаун cинтаксис и макросы.]]></string>
     <string name="_sys_form_wiki_input_caption_content_main"><![CDATA[Основное(оригинальное) содержимое]]></string>
 	<string name="_sys_form_wiki_input_caption_notes"><![CDATA[Заметки]]></string>
 	<string name="_sys_form_wiki_input_caption_submit"><![CDATA[Сохранить]]></string>

+ 1 - 1
modules/boonex/wiki/classes/BxWikiConfig.php

@@ -18,7 +18,7 @@ class BxWikiConfig extends BxBaseModGeneralConfig
         $this->CNF = array_merge($this->CNF, array (
 
             // module icon
-            'ICON' => 'fab wikipedia-w',
+            'ICON' => 'far file-word',
 
             // some language keys
             'T' => array (

+ 2 - 2
modules/boonex/wiki/install/sql/enable.sql

@@ -33,10 +33,10 @@ INSERT INTO `sys_rewrite_rules` (`preg`, `service`, `active`) VALUES
 
 SET @iSiteMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_site' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
 INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
-('sys_site', 'bx_wiki', 'wiki-home', '', '_bx_wiki_menu_item_title_system_home', 'r.php?_q=wiki/wiki-home', '', '', 'fab wikipedia-w', '', 2147483647, 1, 1, IFNULL(@iSiteMenuOrder, 0) + 1);
+('sys_site', 'bx_wiki', 'wiki-home', '', '_bx_wiki_menu_item_title_system_home', 'r.php?_q=wiki/wiki-home', '', '', 'far file-word', '', 2147483647, 1, 1, IFNULL(@iSiteMenuOrder, 0) + 1);
 
 -- MENU: add to homepage menu
 
 SET @iHomepageMenuOrder = (SELECT `order` FROM `sys_menu_items` WHERE `set_name` = 'sys_homepage' AND `active` = 1 ORDER BY `order` DESC LIMIT 1);
 INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
-('sys_homepage', 'bx_wiki', 'wiki-home', '', '_bx_wiki_menu_item_title_system_home', 'r.php?_q=wiki/wiki-home', '', '', 'fab wikipedia-w', '', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);
+('sys_homepage', 'bx_wiki', 'wiki-home', '', '_bx_wiki_menu_item_title_system_home', 'r.php?_q=wiki/wiki-home', '', '', 'far file-word', '', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);

+ 6 - 6
modules/boonex/wiki/install/sql/install.sql

@@ -4,20 +4,20 @@
 INSERT INTO `sys_objects_page` (`object`, `uri`, `title_system`, `title`, `module`, `cover`, `cover_image`, `type_id`, `layout_id`, `submenu`, `visible_for_levels`, `visible_for_levels_editable`, `url`, `meta_description`, `meta_keywords`, `meta_robots`, `cache_lifetime`, `cache_editable`, `deletable`, `override_class_name`, `override_class_file`) VALUES
 ('bx_wiki_home', 'wiki-home', '', '_bx_wiki_page_home', 'bx_wiki', 0, 0, 1, 1, '', 2147483647, 1, 'r.php?_q=wiki/wiki-home', '', '', '', 0, 1, 0, 'BxTemplPageWiki', '');
 
-INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
-('bx_wiki_home', 1, 'bx_wiki', '', '_bx_wiki_block_contents', 0, 2147483647, '0', 'wiki', '', 0, 1, 1, 1);
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `text`, `text_updated`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_wiki_home', 1, 'bx_wiki', '', '_bx_wiki_block_contents', 0, 2147483647, '0', 'wiki', '', '# Contents', UNIX_TIMESTAMP(), 0, 1, 1, 1);
 SET @iBlockId = LAST_INSERT_ID();
 INSERT INTO `sys_pages_wiki_blocks` (`block_id`, `revision`, `language`, `main_lang`, `profile_id`, `content`, `notes`, `added`) VALUES
 (@iBlockId, 1, 'en', 1, 0, '# Contents\r\n\r\n{{~bx_wiki:contents["wiki-missing-translations,wiki-outdated-translations"]~}}', 'Initial version', UNIX_TIMESTAMP());
 
-INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
-('bx_wiki_home', 1, 'bx_wiki', '', '_bx_wiki_block_administration', 0, 192, '0', 'wiki', '', 0, 1, 1, 2);
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `text`, `text_updated`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_wiki_home', 1, 'bx_wiki', '', '_bx_wiki_block_administration', 0, 192, '0', 'wiki', '', '# Administration', UNIX_TIMESTAMP(), 0, 1, 1, 2);
 SET @iBlockId = LAST_INSERT_ID();
 INSERT INTO `sys_pages_wiki_blocks` (`block_id`, `revision`, `language`, `main_lang`, `profile_id`, `content`, `notes`, `added`) VALUES
 (@iBlockId, 1, 'en', 1, 0, '# Administration\r\n\r\n{{~bx_wiki:contents["","wiki-missing-translations,wiki-outdated-translations"]~}}', 'Initial version', UNIX_TIMESTAMP());
 
-INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `deletable`, `copyable`, `active`, `order`) VALUES
-('bx_wiki_home', 2, 'bx_wiki', '', '_bx_wiki_block_home', 0, 2147483647, '0', 'wiki', '', 0, 1, 1, 1);
+INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `title`, `designbox_id`, `visible_for_levels`, `hidden_on`, `type`, `content`, `text`, `text_updated`, `deletable`, `copyable`, `active`, `order`) VALUES
+('bx_wiki_home', 2, 'bx_wiki', '', '_bx_wiki_block_home', 0, 2147483647, '0', 'wiki', '', '# Wiki Home\r\n\r\nInsert **your content** here', UNIX_TIMESTAMP(), 0, 1, 1, 1);
 SET @iBlockId = LAST_INSERT_ID();
 INSERT INTO `sys_pages_wiki_blocks` (`block_id`, `revision`, `language`, `main_lang`, `profile_id`, `content`, `notes`, `added`) VALUES
 (@iBlockId, 1, 'en', 1, 0, '# Wiki Home\r\n\r\nInsert **your content** here', 'Initial version', UNIX_TIMESTAMP());

+ 20 - 1
studio/template/scripts/BxBaseStudioBuilderPage.php

@@ -575,6 +575,9 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
                         $aBlock['content'] = implode($this->sParamsDivider, array($iImageId, $sImageAlign));
                 }
 
+                // add indexing data
+                $aBlock = array_merge($aBlock, $this->getIndexingDataForBlock($aBlock['type'], $aBlock['content']));
+
                 if(!$this->oDb->insertBlock($aBlock)) {
                     if($sContentKey != "")
                         $oLanguage->deleteLanguageString($sContentKey);
@@ -786,7 +789,10 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
         if($oForm->isSubmittedAndValid()) {
             $this->onSaveBlock($oForm, $aBlock);
 
-            if($oForm->update($iId) !== false)
+            // add indexing data
+            $aBlockAddon = $this->getIndexingDataForBlock($aBlock['type'], $oForm->getCleanValue('content'));
+
+            if($oForm->update($iId, $aBlockAddon) !== false)
                 return array('eval' => $sJsObject . '.onEditBlock(oData)');
             else
                 return array('msg' => _t('_adm_bp_err_block_edit'));
@@ -1788,6 +1794,19 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
 
         return $aTmplParams;
     }
+
+    protected function getIndexingDataForBlock($sType, $sContent)
+    {
+        $aBlock = array();   
+        switch($sType) {
+            case BX_DOL_STUDIO_BP_BLOCK_HTML:
+            case BX_DOL_STUDIO_BP_BLOCK_RAW:
+                $aBlock['text'] = trim(strip_tags($sContent));
+                $aBlock['text_updated'] = time();
+                break;
+        }
+        return $aBlock;
+    }
 }
 
 /** @} */

+ 30 - 0
template/css/default.less

@@ -636,6 +636,36 @@ h3,
     .padding(3px);
 }
 
+.bx-def-unit-live-search {
+    width:236px;
+    width:14.75;
+    overflow:hidden;
+}
+
+.bx-def-unit-live-search .bx-def-unit-info {
+    width:188px;
+    width:11.75;
+}
+
+.bx-def-unit-live-search .bx-def-unit-img:not(.empty) {
+    background-size:cover;
+    background-repeat:no-repeat;
+    background-position:center center;
+}
+.bx-def-unit-live-search .bx-def-unit-img-empty {
+    position: relative;
+    display: -webkit-flex;
+    display: flex;
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-justify-content: center;
+    justify-content: center;
+}
+.bx-def-unit-live-search .bx-def-unit-img-empty i {
+    font-size: 1.2rem;
+}
+
+
 
 .bx-def-gal-img-column {
     .column-width-raw(100%);

+ 13 - 2
template/css/wiki.css

@@ -1,9 +1,20 @@
-.bx-wiki-controls-menu {
+.bx-wiki-controls-info {
     float:left;
 }
-.bx-wiki-controls-info {
+.bx-wiki-controls-menu {
     float:right;
 }
+.bx-wiki-controls-menu i.sys-icon {
+    text-align: center;
+    width: 1.5rem;
+    border-radius: 0.75rem;
+    height: 1.5rem;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 0.875rem;
+    font-weight: 400;
+}
 .bx-wiki-form {
     width:37.5rem;
 }

+ 2 - 2
template/menu_vertical.html

@@ -1,7 +1,7 @@
 <ul class="bx-menu-ver bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
-        <li class="bx-def-round-corners bx-def-color-bg-hl-hover __class_add__">
-            <a href="__link__" target="__target__" onclick="__onclick__">
+        <li class="bx-menu-item __name__ bx-def-round-corners bx-def-color-bg-hl-hover __class_add__">
+            <a class="__name__" href="__link__" target="__target__" onclick="__onclick__">
                 <div class="bx-def-padding-sec">
                     <bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon><bx_if:image><img style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image><span>__title__</span>
                 </div>

+ 12 - 2
template/scripts/BxBaseMenuWiki.php

@@ -13,15 +13,25 @@
 class BxBaseMenuWiki extends BxTemplMenu
 {
     protected $_oWikiObject;
+    protected $_iBlockId;
 
     public function __construct ($aObject, $oTemplate)
     {
         parent::__construct ($aObject, $oTemplate);
+        if ($sWikiObj = bx_get('wiki_obj')) {
+            $oWiki = BxDolWiki::getObjectInstance($sWikiObj);
+            if ($oWiki) {
+                $this->_oWikiObject = $oWiki;
+                $this->_iBlockId = (int)bx_get('block_id');
+            }
+        }
     }
 
-    public function setMenuObject($o)
+    public function getCode ()
     {
-        $this->_oWikiObject = $o;
+        $s = parent::getCode ();
+        $s .= '<script>window.glBxDolWiki' . $this->_iBlockId . '.bindEvents();</script>';
+        return $s;
     }
 
     /**

+ 1 - 0
template/scripts/BxBasePagesSearchResult.php

@@ -22,6 +22,7 @@ class BxBasePagesSearchResult extends BxTemplSearchResult
             'searchFields' => array('text'),
             'restriction' => array(
                 'visible_for_levels' => array('value' => '', 'field' => 'visible_for_levels', 'operator' => '&'),
+                'url' => array('value' => 'n/a', 'field' => 'url', 'operator' => 'not empty value', 'table' => 'sys_objects_page'),
             ),
             'join' => array(
                 'albums' => array(

+ 7 - 6
template/scripts/BxBaseServiceWiki.php

@@ -128,11 +128,6 @@ class BxBaseServiceWiki extends BxDol
     {
         $this->_addCssJs ();
     
-        if (!($oMenu = BxDolMenu::getObjectInstance('sys_wiki')))
-            return '';
-
-        $oMenu->setMenuObject($oWikiObject);
-
         $sInfo = '';
         if ($aWikiVer && $aWikiVerLatest['revision'] == $aWikiVer['revision']) {
             $sInfo = bx_time_js($aWikiVer['added']);
@@ -146,7 +141,6 @@ class BxBaseServiceWiki extends BxDol
         return $o->parseHtmlByName('wiki_controls.html', array(
             'obj' => $oWikiObject->getObjectName(),
             'block_id' => $sBlockId,
-            'menu' => $oMenu->getCode(),
             'info' => $sInfo,
             'options' => json_encode(array(
                 'block_id' => $sBlockId,
@@ -154,6 +148,13 @@ class BxBaseServiceWiki extends BxDol
                 'wiki_action_uri' => $oWikiObject->getWikiUri(),
                 't_confirm_block_deletion' => _t('_sys_wiki_confirm_block_deletion'),
             )),
+            'bx_if:menu' => array(
+                'condition' => $oWikiObject->isAllowed('history'),
+                'content' => array(
+                    'obj' => $oWikiObject->getObjectName(),
+                    'block_id' => $sBlockId,
+                ),
+            ),
         ));
     }
 

+ 6 - 1
template/wiki_controls.html

@@ -1,9 +1,14 @@
 <div class="bx-wiki-controls bx-clearfix">
-    <div class="bx-wiki-controls-menu">__menu__</div>
+    <div class="bx-wiki-controls-menu">
+        <bx_if:menu>
+            <a bx-popup-id="bx-wiki-menu-__block_id__" href="javascript:void(0);" onclick="bx_menu_popup('sys_wiki', this, {}, {block_id:'__block_id__', wiki_obj:'__obj__'})"><i class="bx-def-label sys-icon sys-colored ellipsis-v"></i></a>
+        </bx_if:menu>
+    </div>
     <div class="bx-wiki-controls-info bx-def-font-grayed bx-def-font-small">__info__</div>
 </div>
 <script>
     window.glBxDolWiki__block_id__ = new BxDolWiki('__obj__', $('#bx-page-wiki-container-__block_id__'), __options__);
+
     if (location.hash.length) {
         var e = $('#' + location.hash.substr(1));
         e.css('background-color', 'yellow');