Uploaded image for project: 'Blesta Core'
  1. Blesta Core
  2. CORE-994

Support Plugin: Add support for a knowledgebase

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.1.0
    • Fix Version/s: 3.4.0-b1
    • Component/s: Plugins
    • Labels:
      None

      Description

      Add a knowledge base, as part of the Support Manager plugin.

      Staff Area

      Under Support, add a link called "Knowledge Base" which will display categories and articles and allow the creation of each.

      Categories

      • Parent Category ("Top Level" by default, dropdown show "Top Level" and all other categories)
      • Name (Enter a name for the category, text input field, allow to be specified in each language)
      • Description (Optionally enter a description for the category, text area, markdown or HTML radio option, then display text area or WYSYWYG editor)
      • Permissions (Public access, default, or clients only. Radio option may be best)

      Article

      Articles can be created by navigating into a category as displayed under Support > Knowledge Base, or by clicking a "Create Article" button on the upper-right of this page.

      • Name (Enter a name for the article, text input field)
      • Category (Drop-down, nested categories are tabbed in with hyphens --. Add a link next to the drop down called "Add Category" that will add an additional drop down to select another category. If entering from a category, pre-select the category)
      • Markdown or HTML? Radio option, default to Markdown but allow HTML to be selected. If Markdown is selected, display a text-area for the article. If HTML is selected, display the WYSIWYG editor. Tab this section out exactly like Package Welcome Email by language so that the article can be created in all installed languages.
      • Permissions (Public access, default, or clients only. Radio option may be best This would only override the category permission if the category is public. Unauthenticated users cannot see public articles inside client only categories)

      Tracking: Track article views and allow them to be rated (Up vote or down vote, 1 vote per session)

      Client / Portal Area

      Create a new front facing portal page and portal box that goes to the Knowledge Base. The Knowledge Base will be structured as follows:

      • Search box at the top to search for articles
      • Browse Articles by Category
      • Most Popular Articles
      • The title of an article should be accessible in the URL for SEO purposes, limited to X characters, spaces replaced with hyphens. Open to further debate.

      Users will be able to view and rate articles on a 5-star rating system.

        Issue Links

          Activity

          Hide
          admin Paul Phillips added a comment -

          For portal/client side markup, please see..

          /repo/blesta-xtras/bootstrap-dev/knowledgebase-overview.html
          /repo/blesta-xtras/bootstrap-dev/knowledgebase-listing.html
          /repo/blesta-xtras/bootstrap-dev/knowledgebase-article.html

          Also note that instead of a 5-star rating, we will have a thumbs up / thumbs down rating instead.

          Show
          admin Paul Phillips added a comment - For portal/client side markup, please see.. /repo/blesta-xtras/bootstrap-dev/knowledgebase-overview.html /repo/blesta-xtras/bootstrap-dev/knowledgebase-listing.html /repo/blesta-xtras/bootstrap-dev/knowledgebase-article.html Also note that instead of a 5-star rating, we will have a thumbs up / thumbs down rating instead.
          Hide
          cody Cody Phillips (Inactive) added a comment - - edited

          Knowledgebase Schema overview

          support_kb_categories
          id, parent_category_id, company_id, name, description, access [public, private, hidden], date_created, date_updated

          support_kb_articles
          id, company_id, access [public, private, hidden], up_votes, down_votes, date_created, date_updated

          support_kb_article_content
          article_id, lang, title, body

          support_kb_article_categories
          category_id, article_id

          Show
          cody Cody Phillips (Inactive) added a comment - - edited Knowledgebase Schema overview support_kb_categories id, parent_category_id, company_id, name, description, access [public, private, hidden], date_created, date_updated support_kb_articles id, company_id, access [public, private, hidden], up_votes, down_votes, date_created, date_updated support_kb_article_content article_id, lang, title, body support_kb_article_categories category_id, article_id
          Hide
          tyson Tyson Phillips (Inactive) added a comment -

          Would it be useful to know who created an article, and who updated it last? How about what has changed before/after (for possible future feature to revert changes)?

          Show
          tyson Tyson Phillips (Inactive) added a comment - Would it be useful to know who created an article, and who updated it last? How about what has changed before/after (for possible future feature to revert changes)?
          Hide
          cody Cody Phillips (Inactive) added a comment -

          I don't know if creator is really important. For example, user A may create the article and define the content for en_us, then user B comes in and defines the content for de_de. So we don't really get any useful information from that.

          Also, I think adding state logging is probably overkill – at least in this revision. Having some basic logging might be good for a future rev (user A edited article, user B created article, user B added article to category, etc., etc.) but that's not necessary for this revision.

          Show
          cody Cody Phillips (Inactive) added a comment - I don't know if creator is really important. For example, user A may create the article and define the content for en_us, then user B comes in and defines the content for de_de. So we don't really get any useful information from that. Also, I think adding state logging is probably overkill – at least in this revision. Having some basic logging might be good for a future rev (user A edited article, user B created article, user B added article to category, etc., etc.) but that's not necessary for this revision.
          Hide
          cody Cody Phillips (Inactive) added a comment -

          Finalized schema:

          CREATE TABLE IF NOT EXISTS `support_kb_articles` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `company_id` int(10) unsigned NOT NULL,
            `access` enum('public','private','hidden') COLLATE utf8_unicode_ci NOT NULL,
            `up_votes` int(10) unsigned NOT NULL DEFAULT '0',
            `down_votes` int(10) unsigned NOT NULL DEFAULT '0',
            `date_created` datetime NOT NULL,
            `date_updated` datetime NOT NULL,
            PRIMARY KEY (`id`),
            KEY `company_id` (`company_id`,`access`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
          
          
          
          CREATE TABLE IF NOT EXISTS `support_kb_article_categories` (
            `category_id` int(10) unsigned NOT NULL,
            `article_id` int(10) unsigned NOT NULL,
            PRIMARY KEY (`category_id`,`article_id`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
          
          
          
          CREATE TABLE IF NOT EXISTS `support_kb_article_content` (
            `article_id` int(10) unsigned NOT NULL,
            `lang` char(5) COLLATE utf8_unicode_ci NOT NULL,
            `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
            `body` mediumtext COLLATE utf8_unicode_ci NOT NULL,
            PRIMARY KEY (`article_id`,`lang`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
          
          
          
          CREATE TABLE IF NOT EXISTS `support_kb_cateogries` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `parent_id` int(10) unsigned DEFAULT NULL,
            `company_id` int(10) unsigned NOT NULL,
            `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
            `description` text COLLATE utf8_unicode_ci NOT NULL,
            `access` enum('public','private','hidden') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'public',
            `date_created` datetime NOT NULL,
            `date_updated` datetime NOT NULL,
            PRIMARY KEY (`id`),
            KEY `company_id` (`company_id`,`parent_id`,`access`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
          
          Show
          cody Cody Phillips (Inactive) added a comment - Finalized schema: CREATE TABLE IF NOT EXISTS `support_kb_articles` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `company_id` int(10) unsigned NOT NULL, `access` enum('public','private','hidden') COLLATE utf8_unicode_ci NOT NULL, `up_votes` int(10) unsigned NOT NULL DEFAULT '0', `down_votes` int(10) unsigned NOT NULL DEFAULT '0', `date_created` datetime NOT NULL, `date_updated` datetime NOT NULL, PRIMARY KEY (`id`), KEY `company_id` (`company_id`,`access`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `support_kb_article_categories` ( `category_id` int(10) unsigned NOT NULL, `article_id` int(10) unsigned NOT NULL, PRIMARY KEY (`category_id`,`article_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `support_kb_article_content` ( `article_id` int(10) unsigned NOT NULL, `lang` char(5) COLLATE utf8_unicode_ci NOT NULL, `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `body` mediumtext COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`article_id`,`lang`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE IF NOT EXISTS `support_kb_cateogries` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, `company_id` int(10) unsigned NOT NULL, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `description` text COLLATE utf8_unicode_ci NOT NULL, `access` enum('public','private','hidden') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'public', `date_created` datetime NOT NULL, `date_updated` datetime NOT NULL, PRIMARY KEY (`id`), KEY `company_id` (`company_id`,`parent_id`,`access`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
          Hide
          tyson Tyson Phillips (Inactive) added a comment - - edited

          FYI, I updated this to change:
          1. Misspelling of the "support_kb_categories" table
          2. Made support_kb_cateogries.description optional (default null)
          3. Made support_kb_articles.access default to 'public'
          4. Added field: support_kb_article_content.content_type (enum, 'text' or 'html', default 'text')

          Show
          tyson Tyson Phillips (Inactive) added a comment - - edited FYI, I updated this to change: 1. Misspelling of the "support_kb_categories" table 2. Made support_kb_cateogries.description optional (default null) 3. Made support_kb_articles.access default to 'public' 4. Added field: support_kb_article_content.content_type (enum, 'text' or 'html', default 'text')

            People

            • Assignee:
              tyson Tyson Phillips (Inactive)
              Reporter:
              admin Paul Phillips
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Fix Release Date:
                12/Dec/14

                Agile