https://www.mediawiki.org/wiki/Special:Code/MediaWiki/103335
Revision: 103335
Author: gregchiasson
Date: 2011-11-16 16:25:53 +0000 (Wed, 16 Nov 2011)
Log Message:
-----------
Update database schema for AFTv5. Rename tables and set sensible prefixes.
Pre-populate fields table. That enum probably still needs to go.
Modified Paths:
--------------
trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php
trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5.php
trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5Utils.php
trunk/extensions/ArticleFeedbackv5/api/ApiViewRatingsArticleFeedbackv5.php
trunk/extensions/ArticleFeedbackv5/sql/ArticleFeedbackv5.sql
Modified: trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php 2011-11-16
16:09:45 UTC (rev 103334)
+++ trunk/extensions/ArticleFeedbackv5/ArticleFeedbackv5.php 2011-11-16
16:25:53 UTC (rev 103335)
@@ -83,8 +83,12 @@
// this number to ensure the new odds are applied to everyone, not just
people who have yet to
// be placed in a bucket.
'buckets' => array(
- 'ignore' => 100,
- 'track' => 0,
+ 'one' => 16,
+ 'two' => 16,
+ 'three' => 16,
+ 'four' => 16,
+ 'five' => 16,
+ 'six' => 16,
),
// This version number is added to all tracking event names, so that
changes in the software
// don't corrupt the data being collected. Bump this when you want to
start a new "experiment".
Modified: trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5.php
2011-11-16 16:09:45 UTC (rev 103334)
+++ trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5.php
2011-11-16 16:25:53 UTC (rev 103335)
@@ -31,19 +31,28 @@
$revisionId = $params['revid'];
$answers = $dbr->select(
'aft_article_field',
- array('aaf_id', 'aaf_name', 'aaf_data_type'),
- array('aaf_name' => $keys),
+ array('afi_id', 'afi_name', 'afi_data_type'),
+ array('afi_name' => $keys),
__METHOD__
);
foreach($answers as $answer) {
- $type = $answer->aaf_data_type;
- $user_answers[] = array(
- 'aaaa_feedback_id' => $feedbackId,
- 'aaaa_field_id' => $answer->aaf_id,
- "aaaa_response_$type" =>
$params[$answer->aaf_name]
- );
+ $type = $answer->afi_data_type;
+ # TODO: validation
+ # rating: int between 1 and 5 (inclusive)
+ # boolean: 1 or 0
+ # option: option exists
+ # text: none (maybe xss encode)
+ if($params[$answer->afi_name]) {
+ $user_answers[] = array(
+ 'aa_feedback_id' => $feedbackId,
+ 'aa_field_id' => $answer->afi_id,
+ "aa_response_$type" =>
$params[$answer->afi_name]
+ );
+ }
}
+error_log('user answers are');
+error_log(print_r($user_answers,1));
$ctaId = $this->saveUserRatings($user_answers, $feedbackId,
$bucket);
$this->updateRollupTables($pageId, $revisionId);
@@ -93,7 +102,7 @@
if($scope != 'page' && $scope != 'revision') { return 0; }
# TODO
- $table = 'article_'.$rev.'_feedback_'.$type.'_rollup';
+ $table = 'aft_article_'.$rev.'_feedback_'.$type.'_rollup';
}
public function getFeedbackId($params) {
@@ -114,19 +123,18 @@
}
$dbw->insert('aft_article_feedback', array(
- 'aa_page_id' => $params['pageid'],
- 'aa_revision_id' => $revId,
- 'aa_created' => $timestamp,
- 'aa_user_id' => $wgUser->getId(),
- 'aa_user_text' => $wgUser->getName(),
- 'aa_user_anon_token' => $token,
- 'aa_bucket_id' => $bucket,
+ 'af_page_id' => $params['pageid'],
+ 'af_revision_id' => $revId,
+ 'af_created' => $timestamp,
+ 'af_user_id' => $wgUser->getId(),
+ 'af_user_text' => $wgUser->getName(),
+ 'af_user_anon_token' => $token,
+ 'af_bucket_id' => $bucket,
));
return $dbw->insertID();
}
-
/**
* Inserts the user's rating for a specific revision
*/
@@ -134,14 +142,12 @@
$dbw = wfGetDB(DB_MASTER);
$ctaId = $this->getCTAId($data, $bucket);
- # TODO: Move these deleted rows to an archive table or flag
- # them as archived or something.
$dbw->begin();
- $dbw->insert('aft_article_answer', $data, __METHOD__);
+ $dbw->insert( 'aft_article_answer', $data, __METHOD__ );
$dbw->update(
'aft_article_feedback',
- array( 'aa_cta_id' => $ctaId ),
- array( 'aa_id' => $feedbackId ),
+ array( 'af_cta_id' => $ctaId ),
+ array( 'af_id' => $feedbackId ),
__METHOD__
);
$dbw->commit();
@@ -156,31 +162,28 @@
public function getAllowedParams() {
$ret = array(
'pageid' => array(
- ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_REQUIRED => true,
- ApiBase::PARAM_ISMULTI => false,
+ ApiBase::PARAM_ISMULTI => false,
),
'revid' => array(
- ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_REQUIRED => true,
- ApiBase::PARAM_ISMULTI => false,
+ ApiBase::PARAM_ISMULTI => false,
),
'anontoken' => null,
'bucket' => array(
- ApiBase::PARAM_TYPE => 'integer',
+ ApiBase::PARAM_TYPE => 'integer',
ApiBase::PARAM_REQUIRED => true,
- ApiBase::PARAM_ISMULTI => false,
- ApiBase::PARAM_MIN => 0
+ ApiBase::PARAM_ISMULTI => false,
+ ApiBase::PARAM_MIN => 1
),
- 'expertise' => array(
- ApiBase::PARAM_TYPE => 'string',
- ),
);
$fields = ApiArticleFeedbackv5Utils::getFields();
foreach( $fields as $field ) {
- $ret[$field->aaf_name] = array(
- ApiBase::PARAM_TYPE => 'text',
+ $ret[$field->afi_name] = array(
+ ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => false,
ApiBase::PARAM_ISMULTI => false,
);
@@ -200,7 +203,7 @@
);
foreach( $fields as $f ) {
- $ret[$f->aaf_name] = 'Optional feedbackl field, only
appears in certain "buckets".';
+ $ret[$f->afi_name] = 'Optional feedback field, only appears
on certain "buckets".';
}
return $ret;
@@ -226,7 +229,7 @@
protected function getExamples() {
return array(
- 'api.php?action=articlefeedback'
+ 'api.php?action=articlefeedbackv5'
);
}
Modified: trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5Utils.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5Utils.php
2011-11-16 16:09:45 UTC (rev 103334)
+++ trunk/extensions/ArticleFeedbackv5/api/ApiArticleFeedbackv5Utils.php
2011-11-16 16:25:53 UTC (rev 103335)
@@ -6,64 +6,59 @@
public static function getAnonToken($params) {
global $wgUser;
$token = null;
- if ( $wgUser->isAnon() ) {
+ if ( $wgUser->isAnon() ) {
# TODO: error handling
- if ( !isset(
$params['anontoken'] ) ) {
+ if ( !isset( $params['anontoken'] ) ) {
# $this->dieUsageMsg( array( 'missingparam',
'anontoken' ) );
- } elseif ( strlen(
$params['anontoken'] ) != 32 ) {
+ } elseif ( strlen( $params['anontoken'] ) != 32 ) {
# $this->dieUsage( 'The anontoken is not 32
characters', 'invalidtoken' );
- }
+ }
+ $token = $params['anontoken'];
+ } else {
+ $token = '';
+ }
- $token = $params['anontoken'];
- } else {
- $token = '';
- }
-
return $token;
}
- public static function isFeedbackEnabled($params) {
-return 1;
- global $wgArticleFeedbackNamespaces;
- $title = Title::newFromID( $params['pageid'] );
-error_log("page $title is ".$title->getNamespace());
- # TODO check user permissions
- if (
- // not an existing page?
- is_null( $title )
- // Namespace not a valid
ArticleFeedback namespace?
- || !in_array(
$title->getNamespace(), $wgArticleFeedbackv5Namespaces )
- // Page a redirect?
- || $title->isRedirect()
- ) {
- // ...then feedback diabled
- return 0;
- }
-
- return 1;
+ public static function isFeedbackEnabled($params) {
+ global $wgArticleFeedbackNamespaces;
+ $title = Title::newFromID( $params['pageid'] );
+ if (
+ // not an existing page?
+ is_null( $title )
+ // Namespace not a valid ArticleFeedback namespace?
+ || !in_array( $title->getNamespace(),
$wgArticleFeedbackv5Namespaces )
+ // Page a redirect?
+ || $title->isRedirect()
+ ) {
+ // ...then feedback diabled
+ return 0;
}
+ return 1;
+ }
- public static function getRevisionId($pageId) {
- $dbr = wfGetDB( DB_SLAVE );
- $revId = $dbr->selectField(
- 'revision', 'rev_id',
- array( 'rev_page' => $pageId ),
- __METHOD__,
- array(
- 'ORDER BY' => 'rev_id DESC',
- 'LIMIT' => 1
- )
- );
+ public static function getRevisionId($pageId) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $revId = $dbr->selectField(
+ 'revision', 'rev_id',
+ array( 'rev_page' => $pageId ),
+ __METHOD__,
+ array(
+ 'ORDER BY' => 'rev_id DESC',
+ 'LIMIT' => 1
+ )
+ );
- return $revId;
- }
+ return $revId;
+ }
- # TODO: Find a way to cache this, instesd of hitting the DB every
pageload.
+ # TODO: use memcache
public static function getFields() {
$dbr = wfGetDB( DB_SLAVE );
$rv = $dbr->select(
'aft_article_field',
- array( 'aaf_name', 'aaf_id', 'aaf_data_type' )
+ array( 'afi_name', 'afi_id', 'afi_data_type' )
);
return $rv;
Modified:
trunk/extensions/ArticleFeedbackv5/api/ApiViewRatingsArticleFeedbackv5.php
===================================================================
--- trunk/extensions/ArticleFeedbackv5/api/ApiViewRatingsArticleFeedbackv5.php
2011-11-16 16:09:45 UTC (rev 103334)
+++ trunk/extensions/ArticleFeedbackv5/api/ApiViewRatingsArticleFeedbackv5.php
2011-11-16 16:25:53 UTC (rev 103335)
@@ -90,19 +90,19 @@
if ( $type == 'page' ) {
$table = 'article_feedback_ratings_rollup';
- $prefix = 'aap';
+ $prefix = 'arr';
} else {
$table = 'article_revision_feedback_ratings_rollup';
- $prefix = 'afr';
- $where[] = 'afr_revision_id >= ' . $revisionLimit;
+ $prefix = 'afrr';
+ $where[] = 'afrr_revision_id >= ' . $revisionLimit;
}
$where[$prefix . '_page_id'] = $pageId;
- $where[] = $prefix . '_rating_id = aaf_id';
+ $where[] = $prefix . '_rating_id = afi_id';
$rows = $dbr->select(
array( 'aft_' . $table, 'aft_article_field' ),
array(
- 'aaf_name AS field_name',
+ 'afi_name AS field_name',
$prefix . '_rating_id AS field_id',
'SUM(' . $prefix . '_total) AS points',
'SUM(' . $prefix . '_count) AS reviews',
@@ -110,7 +110,7 @@
$where,
__METHOD__,
array(
- 'GROUP BY' => $prefix . '_rating_id, aaf_name'
+ 'GROUP BY' => $prefix . '_rating_id, afi_name'
)
);
Modified: trunk/extensions/ArticleFeedbackv5/sql/ArticleFeedbackv5.sql
===================================================================
--- trunk/extensions/ArticleFeedbackv5/sql/ArticleFeedbackv5.sql
2011-11-16 16:09:45 UTC (rev 103334)
+++ trunk/extensions/ArticleFeedbackv5/sql/ArticleFeedbackv5.sql
2011-11-16 16:25:53 UTC (rev 103335)
@@ -1,232 +1,109 @@
--- TODO: Use af_ instead of aa_ on article_feedback table, both per Roan 11/11
-- TODO: Take the drops out before release, these are just for convenience
while we're developing.
---DROP TABLE IF EXISTS /*_*/aft_article_feedback;
---DROP TABLE IF EXISTS /*_*/aft_article_field_group;
---DROP TABLE IF EXISTS /*_*/aft_article_field;
---DROP TABLE IF EXISTS /*_*/aft_article_field_option;
---DROP TABLE IF EXISTS /*_*/aft_article_answer;
---DROP TABLE IF EXISTS /*_*/aft_article_feedback_ratings_rollup;
---DROP TABLE IF EXISTS /*_*/aft_article_revision_feedback_ratings_rollup;
---DROP TABLE IF EXISTS /*_*/aft_article_feedback_select_rollup;
---DROP TABLE IF EXISTS /*_*/aft_article_revision_feedback_select_rollup;
---DROP TABLE IF EXISTS /*_*/aft_article_hits;
---DROP TABLE IF EXISTS /*_*/aft_article_feedback_properties;
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback (
- -- Row ID (primary key)
- aa_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- -- Foreign key to page.page_id
- aa_page_id integer unsigned NOT NULL,
- -- User Id (0 if anon)
- aa_user_id integer NOT NULL,
- -- Username or IP address
- aa_user_text varbinary(255) NOT NULL,
- -- Unique token for anonymous users (to facilitate ratings from multiple
users on the same IP)
- aa_user_anon_token varbinary(32) NOT NULL DEFAULT '',
- -- Foreign key to revision.rev_id
- aa_revision_id integer unsigned NOT NULL,
- -- Which rating widget the user was given. Default of 0 is the "old" design
- aa_bucket_id int unsigned NOT NULL DEFAULT 0,
- -- Which CTA widget was displayed to the user. 0 is "none"
- -- Which would come up if they got the edit page CTA, and couldn't edit.
- aa_cta_id int unsigned NOT NULL DEFAULT 0,
- aa_created timestamp NULL DEFAULT CURRENT_TIMESTAMP,
- aa_modified timestamp NULL
-) /*$wgDBTableOptions*/;
-CREATE INDEX /*i*/aa_page_user_token_id ON /*_*/aft_article_feedback
(aa_page_id, aa_user_text, aa_user_anon_token, aa_id);
-CREATE INDEX /*i*/aa_revision_id ON /*_*/aft_article_feedback (aa_revision_id);
--- Create an index on the article_feedback.aa_timestamp field
-CREATE INDEX /*i*/article_feedback_timestamp ON /*_*/aft_article_feedback
(aa_created);
-CREATE INDEX /*i*/aa_page_id ON /*_*/aft_article_feedback (aa_page_id,
aa_created);
+DROP TABLE IF EXISTS /*_*/aft_article_feedback;
+DROP TABLE IF EXISTS /*_*/aft_article_field_group;
+DROP TABLE IF EXISTS /*_*/aft_article_field;
+DROP TABLE IF EXISTS /*_*/aft_article_field_option;
+DROP TABLE IF EXISTS /*_*/aft_article_answer;
+DROP TABLE IF EXISTS /*_*/aft_article_feedback_ratings_rollup;
+DROP TABLE IF EXISTS /*_*/aft_article_revision_feedback_ratings_rollup;
+DROP TABLE IF EXISTS /*_*/aft_article_feedback_select_rollup;
+DROP TABLE IF EXISTS /*_*/aft_article_revision_feedback_select_rollup;
+DROP TABLE IF EXISTS /*_*/aft_article_hits;
+DROP TABLE IF EXISTS /*_*/aft_article_feedback_properties;
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_field_group (
- aafg_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aafg_name varchar(255) NOT NULL UNIQUE
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_field (
- aaf_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aaf_name varchar(255) NOT NULL UNIQUE,
- aaf_data_type ENUM('text', 'boolean', 'rating', 'select'),
- -- FKey to article_field_groups.group_id
- aafg_group_id integer unsigned NULL
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_field_option (
- aafo_option_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aafo_name varchar(255) NOT NULL
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_answer (
- -- FKEY to article_feedback.aa_id)
- aaaa_feedback_id integer unsigned NOT NULL,
- -- FKEY to article_fields.article_field_id)
- aaaa_field_id integer unsigned NOT NULL,
- aaaa_response_rating integer NULL,
- aaaa_response_text text NULL,
- aaaa_response_boolean boolean NULL,
- -- FKey to article_field_options.option_id)
- aaaa_response_option_id integer unsigned NULL,
- PRIMARY KEY (aaaa_feedback_id, aaaa_field_id)
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_ratings_rollup (
- aap_page_id integer unsigned NOT NULL,
- aap_rating_id integer unsigned NOT NULL,
- aap_total integer unsigned NOT NULL,
- aap_count integer unsigned NOT NULL,
- PRIMARY KEY (aap_page_id, aap_rating_id)
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_revision_feedback_ratings_rollup (
- afr_page_id integer unsigned NOT NULL,
- afr_revision_id integer unsigned NOT NULL,
- afr_rating_id integer unsigned NOT NULL,
- afr_total integer unsigned NOT NULL,
- afr_count integer unsigned NOT NULL,
- PRIMARY KEY (afr_page_id, afr_rating_id, afr_revision_id)
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_select_rollup (
- aafsr_page_id integer unsigned NOT NULL,
- aafsr_option_id integer unsigned NOT NULL,
- aafsr_total integer unsigned NOT NULL,
- aafsr_count integer unsigned NOT NULL,
- PRIMARY KEY (aafsr_page_id, aafsr_option_id)
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_revision_feedback_select_rollup (
- aarfsr_page_id integer unsigned NOT NULL,
- aarfsr_revision_id integer unsigned NOT NULL,
- aarfsr_option_id integer unsigned NOT NULL,
- aarfsr_total integer unsigned NOT NULL,
- aarfsr_count integer unsigned NOT NULL,
- PRIMARY KEY (aarfsr_revision_id, aarfsr_option_id)
-) /*$wgDBTableOptions*/;
-
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_hits (
- -- FKey to pages
- aah_page_id integer unsigned NOT NULL,
- -- Per fabrice, count by day, not by revision
- aah_date date NOT NULL,
- aah_bucket_id integer unsigned NOT NULL,
- aah_hits integer unsigned DEFAULT 0,
- PRIMARY KEY (aah_page_id, aah_date)
-) /*$wgDBTableOptions*/;
-
--- Mostyl taken from avtV4
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_properties (
- -- Keys to article_feedback.aa_id
- afp_feedback_id integer unsigned NOT NULL,
- -- Key/value pair - allow text or numerical metadata
- afp_key varbinary(255) NOT NULL,
- afp_value_int integer signed NOT NULL,
- afp_value_text varbinary(255) DEFAULT '' NOT NULL,
- PRIMARY KEY (afp_feedback_id, afp_key)
-) /*$wgDBTableOptions*/;
-
--- TODO: Add indices
CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback (
-- Row ID (primary key)
- aa_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ af_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-- Foreign key to page.page_id
- aa_page_id integer unsigned NOT NULL,
+ af_page_id integer unsigned NOT NULL,
-- User Id (0 if anon)
- aa_user_id integer NOT NULL,
+ af_user_id integer NOT NULL,
-- Username or IP address
- aa_user_text varbinary(255) NOT NULL,
+ af_user_text varbinary(255) NOT NULL,
-- Unique token for anonymous users (to facilitate ratings from multiple
users on the same IP)
- aa_user_anon_token varbinary(32) NOT NULL DEFAULT '',
+ af_user_anon_token varbinary(32) NOT NULL DEFAULT '',
-- Foreign key to revision.rev_id
- aa_revision_id integer unsigned NOT NULL,
+ af_revision_id integer unsigned NOT NULL,
-- Which rating widget the user was given. Default of 0 is the "old" design
- aa_bucket_id int unsigned NOT NULL DEFAULT 0,
+ af_bucket_id int unsigned NOT NULL DEFAULT 0,
-- Which CTA widget was displayed to the user. 0 is "none"
-- Which would come up if they got the edit page CTA, and couldn't edit.
- aa_cta_id int unsigned NOT NULL DEFAULT 0,
- aa_created timestamp NULL DEFAULT CURRENT_TIMESTAMP,
- aa_modified timestamp NULL
+ af_cta_id int unsigned NOT NULL DEFAULT 0,
+ af_created timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ af_modified timestamp NULL
) /*$wgDBTableOptions*/;
-CREATE INDEX /*i*/aa_page_user_token_id ON /*_*/aft_article_feedback
(aa_page_id, aa_user_text, aa_user_anon_token, aa_id);
-CREATE INDEX /*i*/aa_revision_id ON /*_*/aft_article_feedback (aa_revision_id);
--- Create an index on the article_feedback.aa_timestamp field
-CREATE INDEX /*i*/article_feedback_timestamp ON /*_*/aft_article_feedback
(aa_created);
-CREATE INDEX /*i*/aa_page_id ON /*_*/aft_article_feedback (aa_page_id,
aa_created);
+CREATE INDEX /*i*/af_page_user_token_id ON /*_*/aft_article_feedback
(af_page_id, af_user_text, af_user_anon_token, af_id);
+CREATE INDEX /*i*/af_revision_id ON /*_*/aft_article_feedback (af_revision_id);
+-- Create an index on the article_feedback.af_timestamp field
+CREATE INDEX /*i*/article_feedback_timestamp ON /*_*/aft_article_feedback
(af_created);
+CREATE INDEX /*i*/af_page_id ON /*_*/aft_article_feedback (af_page_id,
af_created);
CREATE TABLE IF NOT EXISTS /*_*/aft_article_field_group (
- aafg_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aafg_name varchar(255) NOT NULL UNIQUE
+ afg_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ afg_name varchar(255) NOT NULL UNIQUE
) /*$wgDBTableOptions*/;
+-- We already used af_ above, so this is ArticleFIeld instead
CREATE TABLE IF NOT EXISTS /*_*/aft_article_field (
- aaf_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aaf_name varchar(255) NOT NULL UNIQUE,
- aaf_data_type ENUM('text', 'boolean', 'rating', 'select'),
- -- FKey to article_field_groups.group_id
- aafg_group_id integer unsigned NULL
+ afi_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ afi_name varchar(255) NOT NULL UNIQUE,
+ afi_data_type ENUM('text', 'boolean', 'rating', 'select'),
+ -- FKey to article_field_groups.group_id
+ afi_group_id integer unsigned NULL
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_field_option (
- aafo_option_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- aafo_name varchar(255) NOT NULL
+ afo_option_id integer unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ afo_name varchar(255) NOT NULL
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_answer (
- -- FKEY to article_feedback.aa_id)
- aaaa_feedback_id integer unsigned NOT NULL,
- -- FKEY to article_fields.article_field_id)
- aaaa_field_id integer unsigned NOT NULL,
- aaaa_response_rating integer NULL,
- aaaa_response_text text NULL,
- aaaa_response_boolean boolean NULL,
- -- FKey to article_field_options.option_id)
- aaaa_response_option_id integer unsigned NULL,
- PRIMARY KEY (aaaa_feedback_id, aaaa_field_id)
+ -- FKEY to article_feedback.aa_id)
+ aa_feedback_id integer unsigned NOT NULL,
+ -- FKEY to article_fields.article_field_id)
+ aa_field_id integer unsigned NOT NULL,
+ aa_response_rating integer NULL,
+ aa_response_text text NULL,
+ aa_response_boolean boolean NULL,
+ -- FKey to article_field_options.option_id)
+ aa_response_option_id integer unsigned NULL,
+ PRIMARY KEY (aa_feedback_id, aa_field_id)
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_ratings_rollup (
- aap_page_id integer unsigned NOT NULL,
- aap_rating_id integer unsigned NOT NULL,
- aap_total integer unsigned NOT NULL,
- aap_count integer unsigned NOT NULL,
- PRIMARY KEY (aap_page_id, aap_rating_id)
+ arr_page_id integer unsigned NOT NULL,
+ arr_rating_id integer unsigned NOT NULL,
+ arr_total integer unsigned NOT NULL,
+ arr_count integer unsigned NOT NULL,
+ PRIMARY KEY (arr_page_id, arr_rating_id)
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_revision_feedback_ratings_rollup (
- afr_page_id integer unsigned NOT NULL,
- afr_revision_id integer unsigned NOT NULL,
- afr_rating_id integer unsigned NOT NULL,
- afr_total integer unsigned NOT NULL,
- afr_count integer unsigned NOT NULL,
- PRIMARY KEY (afr_page_id, afr_rating_id, afr_revision_id)
+ afrr_page_id integer unsigned NOT NULL,
+ afrr_revision_id integer unsigned NOT NULL,
+ afrr_rating_id integer unsigned NOT NULL,
+ afrr_total integer unsigned NOT NULL,
+ afrr_count integer unsigned NOT NULL,
+ PRIMARY KEY (afrr_page_id, afrr_rating_id, afrr_revision_id)
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_select_rollup (
- aafsr_page_id integer unsigned NOT NULL,
- aafsr_option_id integer unsigned NOT NULL,
- aafsr_total integer unsigned NOT NULL,
- aafsr_count integer unsigned NOT NULL,
- PRIMARY KEY (aafsr_page_id, aafsr_option_id)
+ afsr_page_id integer unsigned NOT NULL,
+ afsr_option_id integer unsigned NOT NULL,
+ afsr_total integer unsigned NOT NULL,
+ afsr_count integer unsigned NOT NULL,
+ PRIMARY KEY (afsr_page_id, afsr_option_id)
) /*$wgDBTableOptions*/;
CREATE TABLE IF NOT EXISTS /*_*/aft_article_revision_feedback_select_rollup (
- aarfsr_page_id integer unsigned NOT NULL,
- aarfsr_revision_id integer unsigned NOT NULL,
- aarfsr_option_id integer unsigned NOT NULL,
- aarfsr_total integer unsigned NOT NULL,
- aarfsr_count integer unsigned NOT NULL,
- PRIMARY KEY (aarfsr_revision_id, aarfsr_option_id)
+ arfsr_page_id integer unsigned NOT NULL,
+ arfsr_revision_id integer unsigned NOT NULL,
+ arfsr_option_id integer unsigned NOT NULL,
+ arfsr_total integer unsigned NOT NULL,
+ arfsr_count integer unsigned NOT NULL,
+ PRIMARY KEY (arfsr_revision_id, arfsr_option_id)
) /*$wgDBTableOptions*/;
-CREATE TABLE IF NOT EXISTS /*_*/aft_article_hits (
- -- FKey to pages
- aah_page_id integer unsigned NOT NULL,
- -- Per fabrice, count by day, not by revision
- aah_date date NOT NULL,
- aah_bucket_id integer unsigned NOT NULL,
- aah_hits integer unsigned DEFAULT 0,
- PRIMARY KEY (aah_page_id, aah_date)
-) /*$wgDBTableOptions*/;
-
-- Mostyl taken from avtV4
CREATE TABLE IF NOT EXISTS /*_*/aft_article_feedback_properties (
-- Keys to article_feedback.aa_id
@@ -240,7 +117,9 @@
-- TODO: Add indices
-INSERT INTO aft_article_field(aaf_name, aaf_data_type) VALUES ('trustworthy',
'rating');
-INSERT INTO aft_article_field(aaf_name, aaf_data_type) VALUES ('objective',
'rating');
-INSERT INTO aft_article_field(aaf_name, aaf_data_type) VALUES ('complete',
'rating');
-INSERT INTO aft_article_field(aaf_name, aaf_data_type) VALUES ('wellwritten',
'rating');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('trustworthy',
'rating');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('objective',
'rating');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('complete',
'rating');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('wellwritten',
'rating');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('expertise',
'boolean');
+INSERT INTO aft_article_field(afi_name, afi_data_type) VALUES ('comment',
'text');
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs