瀏覽代碼

#2304 Wiki functionality: wiki module

Alex Trofimov 6 年之前
父節點
當前提交
79e953bdbe

+ 4 - 2
inc/classes/BxDolWiki.php

@@ -116,11 +116,12 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
     {
     {
         if (!$sLang)
         if (!$sLang)
             $sLang = bx_lang_name();
             $sLang = bx_lang_name();
-        $s = $this->_oQuery->getBlockContent ($iBlockId, $sLang);
+        $a = $this->_oQuery->getBlockContent ($iBlockId, $sLang);
 
 
         require_once(BX_DIRECTORY_PATH_PLUGINS . "parsedown/Parsedown.php");
         require_once(BX_DIRECTORY_PATH_PLUGINS . "parsedown/Parsedown.php");
         $oParsedown = new Parsedown();
         $oParsedown = new Parsedown();
-        $s = $oParsedown->text($s);
+        $oParsedown->setSafeMode($a['unsafe'] ? false : true);
+        $s = $oParsedown->text($a['content']);
 
 
         $s = $this->addControls($iBlockId, $s);
         $s = $this->addControls($iBlockId, $s);
 
 
@@ -152,6 +153,7 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
             'edit' => 'allow_edit_for_levels',
             'edit' => 'allow_edit_for_levels',
             'delete' => 'allow_delete_for_levels',
             'delete' => 'allow_delete_for_levels',
             'translate' => 'allow_translate_for_levels',
             'translate' => 'allow_translate_for_levels',
+            'unsafe' => 'allow_unsafe_for_levels',
         );
         );
         if (!isset($aTypes[$sType]) || !isset($this->_aObject[$aTypes[$sType]]))
         if (!isset($aTypes[$sType]) || !isset($this->_aObject[$aTypes[$sType]]))
             return false;
             return false;

+ 3 - 3
inc/classes/BxDolWikiQuery.php

@@ -52,15 +52,15 @@ class BxDolWikiQuery extends BxDolDb
         }
         }
 
 
         // get latest revision for specific language
         // get latest revision for specific language
-        $aRow = $this->getRow("SELECT `content` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `language` = :lang $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
+        $aRow = $this->getRow("SELECT `content`, `unsafe` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `language` = :lang $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
 
 
         // if translation isn't found for specific language then get latest revision for main language 
         // if translation isn't found for specific language then get latest revision for main language 
         if (!$aRow) {
         if (!$aRow) {
             unset($aBind['lang']);
             unset($aBind['lang']);
-            $aRow = $this->getRow("SELECT `content` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `main_language` = 1 $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
+            $aRow = $this->getRow("SELECT `content`, `unsafe` FROM `sys_pages_wiki_blocks` WHERE `block_id` = :block AND `main_language` = 1 $sWhere ORDER BY `revision` DESC LIMIT 1", $aBind);
         }
         }
 
 
-        return $aRow ? $aRow['content'] : false;
+        return $aRow ? $aRow : false;
     }
     }
 }
 }
 
 

+ 1 - 0
install/sql/system.sql

@@ -4853,6 +4853,7 @@ CREATE TABLE IF NOT EXISTS `sys_pages_wiki_blocks` (
   `main_language` tinyint(4) NOT NULL DEFAULT '0',
   `main_language` tinyint(4) NOT NULL DEFAULT '0',
   `profile_id` int(10) UNSIGNED NOT NULL,
   `profile_id` int(10) UNSIGNED NOT NULL,
   `content` mediumtext NOT NULL,
   `content` mediumtext NOT NULL,
+  `unsafe` tinyint(4) NOT NULL DEFAULT '0',
   `comment` varchar(255) NOT NULL,
   `comment` varchar(255) NOT NULL,
   `added` int(11) NOT NULL,
   `added` int(11) NOT NULL,
   `changed` int(11) NOT NULL,
   `changed` int(11) NOT NULL,

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

@@ -2,4 +2,7 @@
 <resources name="en" flag="gb" title="English">
 <resources name="en" flag="gb" title="English">
     <string name="_sys_module_wiki"><![CDATA[Wiki]]></string>
     <string name="_sys_module_wiki"><![CDATA[Wiki]]></string>
     <string name="_bx_wiki"><![CDATA[Wiki]]></string>
     <string name="_bx_wiki"><![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_menu_item_title_system_home"><![CDATA[Wiki]]></string>
 </resources>
 </resources>

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

@@ -11,3 +11,9 @@ DELETE FROM `sys_permalinks` WHERE `standard` = 'r.php?_q=wiki/' AND `permalink`
 
 
 DELETE FROM `sys_rewrite_rules` WHERE `preg` = '^wiki/(.*)$';
 DELETE FROM `sys_rewrite_rules` WHERE `preg` = '^wiki/(.*)$';
 
 
+-- Menu
+
+DELETE FROM `sys_objects_menu` WHERE `module` = 'bx_wiki';
+DELETE FROM `sys_menu_sets` WHERE `module` = 'bx_wiki';
+DELETE FROM `sys_menu_items` WHERE `module` = 'bx_wiki' OR `set_name` LIKE 'bx_wiki%';
+

+ 11 - 0
modules/boonex/wiki/install/sql/enable.sql

@@ -14,3 +14,14 @@ INSERT INTO `sys_permalinks` (`standard`, `permalink`, `check`, `compare_by_pref
 INSERT INTO `sys_rewrite_rules` (`preg`, `service`, `active`) VALUES
 INSERT INTO `sys_rewrite_rules` (`preg`, `service`, `active`) VALUES
 ('^wiki/(.*)$', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:9:"wiki_page";s:6:"params";a:2:{i:0;s:4:"wiki";i:1;s:3:"{1}";}s:5:"class";s:16:"TemplServiceWiki";}', 1);
 ('^wiki/(.*)$', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:9:"wiki_page";s:6:"params";a:2:{i:0;s:4:"wiki";i:1;s:3:"{1}";}s:5:"class";s:16:"TemplServiceWiki";}', 1);
 
 
+-- MENU: add to site menu
+
+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);
+
+-- 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', '', '', 'far wikipedia-w', '', 2147483647, 1, 1, IFNULL(@iHomepageMenuOrder, 0) + 1);

+ 12 - 0
modules/boonex/wiki/install/sql/install.sql

@@ -1,4 +1,16 @@
 
 
+-- Wiki home 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_home', 'wiki-home', '', '_bx_wiki_page_home', 'bx_wiki', 0, 0, 1, 5, '', 2147483647, 1, 'r.php?_q=wiki/home', '', '', '', 0, 1, 0, '', '');
+
+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_home', 0, 2147483647, '0', 'wiki', '', 0, 1, 1, 1);
+SET @iBlockId = LAST_INSERT_ID();
+INSERT INTO `sys_pages_wiki_blocks` (`block_id`, `revision`, `language`, `main_language`, `profile_id`, `content`, `comment`, `added`, `changed`) VALUES
+(@iBlockId, 1, 'en', 1, 0, '# Wiki Home\r\n\r\nInsert **your content** here', 'Initial version', UNIX_TIMESTAMP(), UNIX_TIMESTAMP());
+
+
 -- Studio page and widget
 -- Studio page and widget
 
 
 INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
 INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES

+ 8 - 0
modules/boonex/wiki/install/sql/uninstall.sql

@@ -1,5 +1,13 @@
 
 
+-- Delete WIKI content
 
 
+DELETE FROM `wb`, `wc`, `wp`
+USING `sys_pages_blocks` AS `wb`, `sys_pages_wiki_blocks` AS `wc`, `sys_objects_page` AS `wp`
+WHERE `wb`.`id` = `wc`.`block_id` AND `wp`.`object` = `wb`.`object` AND `wp`.`module` = 'bx_wiki';
+
+DELETE FROM `wb`, `wc`
+USING `sys_pages_blocks` AS `wb`, `sys_pages_wiki_blocks` AS `wc`
+WHERE `wb`.`id` = `wc`.`block_id` AND `wb`.`module` = 'bx_wiki';
 
 
 -- Studio page and widget
 -- Studio page and widget