Alex Trofimov 6 лет назад
Родитель
Сommit
e06cb0e381

+ 5 - 0
inc/classes/BxDolPage.php

@@ -270,6 +270,11 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return true;
     }
 
+    public function isVisiblePage ()
+    {
+        return $this->_isVisiblePage($this->_aObject);
+    }
+
     /**
      * Replace provided markers in a string
      * @param $mixed string or array to replace markers in

+ 7 - 2
inc/classes/BxDolWiki.php

@@ -155,13 +155,18 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
     /**
      * Generate wiki contents - list of all wiki pages
      */
-    public function getContents ()
+    public function getContents ($sAllExceptSpecified = '', $sOnlySpecified = '')
     {
-        if (!($a = $this->_oQuery->getPages()))
+        $aAllExceptSpecified = $sAllExceptSpecified ? explode(',', $sAllExceptSpecified) : array();
+        $aOnlySpecified = $sOnlySpecified ? explode(',', $sOnlySpecified) : array();
+        if (!($a = $this->_oQuery->getPages($aAllExceptSpecified, $aOnlySpecified)))
             return '';
 
         $aVars = array('bx_repeat:pages' => array());
         foreach ($a as $r) {
+            $oPage = BxDolPage::getObjectInstance($r['object']);
+            if (!$oPage->isVisiblePage())
+                continue;
             $sUrl = $this->getPageUrl($r['uri']);
             $aVars['bx_repeat:pages'][] = array(
                 'url' => $sUrl,

+ 7 - 2
inc/classes/BxDolWikiQuery.php

@@ -126,9 +126,14 @@ class BxDolWikiQuery extends BxDolDb
         return $this->getRow("SELECT `p`.`title`, `p`.`uri` FROM `sys_objects_page` AS `p` INNER JOIN `sys_pages_blocks` AS `b` ON (`p`.`object` = `b`.`object` AND `b`.`id` = ? AND `p`.`module` = ?) LIMIT 1", array($iBlockId, $this->_aObject['module']));
     }
 
-    public function getPages ()
+    public function getPages ($aAllExceptSpecified = array(), $aOnlySpecified = array())
     {
-        return $this->getAll("SELECT `title`, `uri` FROM `sys_objects_page` WHERE `module` = ?", array($this->_aObject['module']));
+        $sWhere = '';
+        if ($aOnlySpecified)
+            $sWhere = " AND `uri` IN(" . $this->implode_escape($aOnlySpecified) . ")";
+        elseif ($aAllExceptSpecified)
+            $sWhere = " AND `uri` NOT IN(" . $this->implode_escape($aAllExceptSpecified) . ")";
+        return $this->getAll("SELECT `title`, `uri`, `object` FROM `sys_objects_page` WHERE `module` = ?" . $sWhere, array($this->_aObject['module']));
     }
 
     public function insertPage ($sUri, $sUrl, $sTitleLangKey, $iType = 1, $iLayoutId = 5, $iVisibleForLevels = 2147483647, $sClass = 'BxTemplPageWiki')

+ 4 - 2
modules/boonex/wiki/classes/BxWikiModule.php

@@ -35,18 +35,20 @@ class BxWikiModule extends BxDolModule
      * @code {{~bx_wiki:contents~}} @endcode
      * 
      * Wiki contents - list of pages
+     * @param $sAllExceptSpecified optional comma separated list of URIs of pages to filter out
+     * @param $sOnlySpecified optional comma separated list of URIs of pages to show only
      *
      * @see BxWikiModule::serviceContents
      */
     /** 
      * @ref bx_wiki-contents "contents"
      */
-    public function serviceContents ()
+    public function serviceContents ($sAllExceptSpecified = '', $sOnlySpecified = '')
     {
         if (!($oWiki = BxDolWiki::getObjectInstance($this->getName())))
             return '';
         
-        return $oWiki->getContents();
+        return $oWiki->getContents($sAllExceptSpecified, $sOnlySpecified);
     }
 
     /**

+ 6 - 0
modules/boonex/wiki/install/langs/en.xml

@@ -5,6 +5,12 @@
     <string name="_bx_wiki_object_title"><![CDATA[Wiki]]></string>
     <string name="_bx_wiki_page_home"><![CDATA[Wiki Home]]></string>
     <string name="_bx_wiki_block_home"><![CDATA[Wiki Home]]></string>
+    <string name="_bx_wiki_block_contents"><![CDATA[Contents]]></string>
+    <string name="_bx_wiki_block_administration"><![CDATA[Administration]]></string>
+    <string name="_bx_wiki_page_missing_translations"><![CDATA[Missing Translations]]></string>
+    <string name="_bx_wiki_block_missing_translations"><![CDATA[Missing Translations]]></string>
+    <string name="_bx_wiki_page_outdated_translations"><![CDATA[Outdated Translations]]></string>
+    <string name="_bx_wiki_block_outdated_translations"><![CDATA[Outdated Translations]]></string>
     <string name="_bx_wiki_menu_item_title_system_home"><![CDATA[Wiki]]></string>
     <string name="_bx_wiki_option_design_box"><![CDATA[Default design box for new block]]></string>
 </resources>

+ 28 - 1
modules/boonex/wiki/install/sql/install.sql

@@ -8,7 +8,13 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 ('bx_wiki_home', 1, 'bx_wiki', '', '_bx_wiki_block_contents', 0, 2147483647, '0', 'wiki', '', 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~}}', 'Initial version', UNIX_TIMESTAMP());
+(@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);
+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);
@@ -16,6 +22,27 @@ 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());
 
+-- Wiki missing translations page
+
+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_missing_translations', 'wiki-missing-translations', '', '_bx_wiki_page_missing_translations', 'bx_wiki', 0, 0, 1, 5, '', 192, 1, 'r.php?_q=wiki/wiki-missing-translations', '', '', '', 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_missing_translations', 1, 'bx_wiki', '', '_bx_wiki_block_missing_translations', 0, 192, '0', 'wiki', '', 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, '### Missing translations for English:\r\n\r\n{{~bx_wiki:missing_translations["en"]~}}', 'Initial version', UNIX_TIMESTAMP());
+
+-- Wiki outdated translations page
+
+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_outdated_translations', 'wiki-outdated-translations', '', '_bx_wiki_page_outdated_translations', 'bx_wiki', 0, 0, 1, 5, '', 192, 1, 'r.php?_q=wiki/wiki-outdated-translations', '', '', '', 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_outdated_translations', 1, 'bx_wiki', '', '_bx_wiki_block_outdated_translations', 0, 192, '0', 'wiki', '', 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, '### Outdated translations for English:\r\n\r\n{{~bx_wiki:outdated_translations["en"]~}}', 'Initial version', UNIX_TIMESTAMP());
 
 -- Studio page and widget