mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
Wiki enhancement: edit locking (uses AJAX)
This commit is contained in:
parent
f775a510d6
commit
22e846cde2
10 changed files with 291 additions and 11 deletions
|
@ -36,5 +36,21 @@ $mod_wiki_capabilities = array(
|
|||
'coursecreator' => CAP_PREVENT,
|
||||
'admin' => CAP_ALLOW
|
||||
)
|
||||
),
|
||||
|
||||
'mod/wiki:overridelock' => array(
|
||||
|
||||
'riskbitmask' => 0,
|
||||
|
||||
'captype' => 'write',
|
||||
'contextlevel' => CONTEXT_MODULE,
|
||||
'legacy' => array(
|
||||
'guest' => CAP_PREVENT,
|
||||
'student' => CAP_PREVENT,
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'coursecreator' => CAP_ALLOW,
|
||||
'admin' => CAP_ALLOW
|
||||
)
|
||||
)
|
||||
);
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<INDEX NAME="pagename" UNIQUE="false" FIELDS="pagename" PREVIOUS="userid"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
<TABLE NAME="wiki_pages" COMMENT="Holds the Wiki-Pages" PREVIOUS="wiki_entries">
|
||||
<TABLE NAME="wiki_pages" COMMENT="Holds the Wiki-Pages" PREVIOUS="wiki_entries" NEXT="wiki_locks">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="pagename"/>
|
||||
<FIELD NAME="pagename" TYPE="char" LENGTH="160" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="version"/>
|
||||
|
@ -66,11 +66,37 @@
|
|||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for wiki_pages" NEXT="wiki"/>
|
||||
<!-- sam notes: if implemented, this foreign key will break, since the
|
||||
field defaults to 0 not null and will therefore fail to find its
|
||||
referent. -->
|
||||
<KEY NAME="wiki" TYPE="foreign" FIELDS="wiki" REFTABLE="wiki" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
</KEYS>
|
||||
<INDEXES>
|
||||
<INDEX NAME="pagename-version-wiki" UNIQUE="true" FIELDS="pagename, version, wiki"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
<TABLE NAME="wiki_locks" COMMENT="Stores editing locks on Wiki pages" PREVIOUS="wiki_pages">
|
||||
<FIELDS>
|
||||
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="wikiid"/>
|
||||
<FIELD NAME="wikiid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="pagename"/>
|
||||
<FIELD NAME="pagename" TYPE="char" LENGTH="160" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="wikiid" NEXT="lockedby"/>
|
||||
<!-- If the page is or was locked, this field holds the userid of the locker -->
|
||||
<FIELD NAME="lockedby" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="pagename" NEXT='lockedsince'/>
|
||||
<!-- Time (seconds since epoch) at which lock began -->
|
||||
<FIELD NAME="lockedsince" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="lockedby" NEXT='lockedseen'/>
|
||||
<!-- Time (seconds since epoch) at which lock was last reconfirmed (we ignore lock if this is >2 mins ago) -->
|
||||
<FIELD NAME="lockedseen" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="lockedsince"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for wiki_locks" NEXT="wikiid"/>
|
||||
<KEY NAME="wikiid" TYPE="foreign" FIELDS="wikiid" REFTABLE="wiki" REFFIELDS="id" PREVIOUS="primary"/>
|
||||
</KEYS>
|
||||
<INDEXES>
|
||||
<!-- Main index used for retrieving locks -->
|
||||
<INDEX NAME="wikiid-pagename" UNIQUE="false" FIELDS="wikiid,pagename" NEXT="lockedseen"/>
|
||||
<!-- Secondary index used only during cron for deleting expired locks -->
|
||||
<INDEX NAME="lockedseen" UNIQUE="false" FIELDS="lockedseen" PREVIOUS="wikiid-pagename"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
</TABLES>
|
||||
</XMLDB>
|
|
@ -160,7 +160,21 @@ function wiki_upgrade($oldversion) {
|
|||
execute_sql("UPDATE {$CFG->prefix}wiki SET initialcontent='' WHERE initialcontent IS NULL");
|
||||
table_column('wiki','initialcontent','initialcontent','varchar','255','','','not null');
|
||||
}
|
||||
|
||||
if ($oldversion < 2006092502) {
|
||||
modify_database("","
|
||||
CREATE TABLE prefix_wiki_locks
|
||||
(
|
||||
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
wikiid INT(10) UNSIGNED NOT NULL,
|
||||
pagename VARCHAR(160) NOT NULL DEFAULT '',
|
||||
lockedby INT(10) NOT NULL DEFAULT 0,
|
||||
lockedsince INT(10) NOT NULL DEFAULT 0,
|
||||
lockedseen INT(10) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY(id),
|
||||
UNIQUE KEY wiki_locks_uk(wikiid,pagename),
|
||||
INDEX wiki_locks_ix(lockedseen)
|
||||
);");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -155,6 +155,21 @@ function wiki_upgrade($oldversion) {
|
|||
modify_database('', 'ALTER TABLE prefix_wiki_pages
|
||||
ALTER COLUMN refs DROP NOT NULL');
|
||||
}
|
||||
|
||||
if ($oldversion < 2006092502) {
|
||||
modify_database("","
|
||||
CREATE TABLE prefix_wiki_locks
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
wikiid INTEGER NOT NULL,
|
||||
pagename VARCHAR(160) NOT NULL DEFAULT '',
|
||||
lockedby INTEGER NOT NULL DEFAULT 0,
|
||||
lockedsince INTEGER NOT NULL DEFAULT 0,
|
||||
lockedseen INTEGER NOT NULL DEFAULT 0
|
||||
);");
|
||||
modify_database("","CREATE INDEX prefix_wikilock_loc_ix ON prefix_wiki_locks (lockedseen);");
|
||||
modify_database("","CREATE UNIQUE INDEX prefix_wikilock_wikpag_uix ON prefix_wiki_locks (wikiid, pagename);");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue