summaryrefslogtreecommitdiff
path: root/inc/common.php
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2005-10-02 13:32:55 +0200
committerAndreas Gohr <andi@splitbrain.org>2005-10-02 13:32:55 +0200
commitb6912aeac771ef294377b8af071d28f6acfa7050 (patch)
tree7c93c9124d89ef748213b421cd582dace7d7442a /inc/common.php
parent075f000f1c8f0899f80f94e63a11071fcc506c55 (diff)
downloadrpg-b6912aeac771ef294377b8af071d28f6acfa7050.tar.gz
rpg-b6912aeac771ef294377b8af071d28f6acfa7050.tar.bz2
minor edit checkbox
This patch adds a minor edit checkbox to the edit form for logged in users. Minor edits are displayed different in recent changes and the page revision history. The RSS feed excludes minor edits by default - this can be changed by adding a minor darcs-hash:20051002113255-7ad00-2bc9e1aaa76d9616428e760529ecc14ef119cf71.gz
Diffstat (limited to 'inc/common.php')
-rw-r--r--inc/common.php76
1 files changed, 61 insertions, 15 deletions
diff --git a/inc/common.php b/inc/common.php
index d6a367566..3589eae14 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -14,6 +14,13 @@
require_once(DOKU_INC.'inc/parserutils.php');
/**
+ * These constants are used with the recents function
+ */
+define('RECENTS_SKIP_DELETED',2);
+define('RECENTS_SKIP_MINORS',4);
+define('RECENTS_SKIP_SUBSPACES',8);
+
+/**
* Return info about the current document as associative
* array.
*
@@ -66,6 +73,7 @@ function pageinfo(){
$info['ip'] = $revinfo['ip'];
$info['user'] = $revinfo['user'];
$info['sum'] = $revinfo['sum'];
+ $info['minor'] = $revinfo['minor'];
if($revinfo['user']){
$info['editor'] = $revinfo['user'];
@@ -578,7 +586,7 @@ function dbg($msg,$hidden=false){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function addLogEntry($date,$id,$summary=""){
+function addLogEntry($date,$id,$summary='',$minor=false){
global $conf;
if(!@is_writable($conf['changelog'])){
@@ -590,11 +598,33 @@ function addLogEntry($date,$id,$summary=""){
$remote = $_SERVER['REMOTE_ADDR'];
$user = $_SERVER['REMOTE_USER'];
+ if($conf['useacl'] && $user && $minor){
+ $summary = '*'.$summary;
+ }else{
+ $summary = ' '.$summary;
+ }
+
$logline = join("\t",array($date,$remote,$id,$user,$summary))."\n";
io_saveFile($conf['changelog'],$logline,true);
}
/**
+ * Checks an summary entry if it was a minor edit
+ *
+ * The summary is cleaned of the marker char
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function isMinor(&$summary){
+ if(substr($summary,0,1) == '*'){
+ $summary = substr($summary,1);
+ return true;
+ }
+ $summary = trim($summary);
+ return false;
+}
+
+/**
* Internal function used by getRecents
*
* don't call directly
@@ -602,7 +632,7 @@ function addLogEntry($date,$id,$summary=""){
* @see getRecents()
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function _handleRecent($line,$incdel,$ns,$subNS){
+function _handleRecent($line,$ns,$flags){
static $seen = array(); //caches seen pages and skip them
if(empty($line)) return false; //skip empty lines
@@ -611,6 +641,16 @@ function _handleRecent($line,$incdel,$ns,$subNS){
// skip seen ones
if($seen[$id]) return false;
+ $recent = array();
+
+ // check minors
+ if(isMinor($sum)){
+ // skip minors
+ if($flags & RECENTS_SKIP_MINORS) return false;
+ $recent['minor'] = true;
+ }else{
+ $recent['minor'] = false;
+ }
// remember in seen to skip additional sights
$seen[$id] = 1;
@@ -619,21 +659,19 @@ function _handleRecent($line,$incdel,$ns,$subNS){
if (($ns) && (strpos($id,$ns.':') !== 0)) return false;
// exclude subnamespaces
- if ((!$subNS) && (getNS($id) != $ns)) return false;
+ if (($flags & RECENTS_SKIP_SUBSPACES) && (getNS($id) != $ns)) return false;
// check ACL
if (auth_quickaclcheck($id) < AUTH_READ) return false;
// check existance
if(!@file_exists(wikiFN($id))){
- if(!$incdel){
+ if($flags & RECENTS_SKIP_DELETED){
return false;
}else{
- $recent = array();
$recent['del'] = true;
}
}else{
- $recent = array();
$recent['del'] = false;
}
@@ -646,19 +684,26 @@ function _handleRecent($line,$incdel,$ns,$subNS){
return $recent;
}
+
/**
* returns an array of recently changed files using the
* changelog
*
+ * The following constants can be used to control which changes are
+ * included. Add them together as needed.
+ *
+ * RECENTS_SKIP_DELETED - don't include deleted pages
+ * RECENTS_SKIP_MINORS - don't include minor changes
+ * RECENTS_SKIP_SUBSPACES - don't include subspaces
+ *
* @param int $first number of first entry returned (for paginating
* @param int $num return $num entries
- * @param bool $incdel include deleted pages?
* @param string $ns restrict to given namespace
- * @param bool $subNS include subnamespaces
+ * @param bool $flags see above
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function getRecents($first,$num,$incdel=false,$ns='',$subNS=true){
+function getRecents($first,$num,$ns='',$flags=0){
global $conf;
$recent = array();
$count = 0;
@@ -696,7 +741,7 @@ function getRecents($first,$num,$incdel=false,$ns='',$subNS=true){
// handle lines
for($i = $cnt-1; $i >= 0; $i--){
- $rec = _handleRecent($lines[$i],$incdel,$ns,$subNS);
+ $rec = _handleRecent($lines[$i],$ns,$flags);
if($rec !== false){
if(--$first >= 0) continue; // skip first entries
$recent[] = $rec;
@@ -735,10 +780,11 @@ function getRevisionInfo($id,$rev){
$loglines = preg_grep("/$rev\t\d+\.\d+\.\d+\.\d+\t$id\t/",$loglines);
$loglines = array_reverse($loglines); //reverse sort on timestamp (shouldn't be needed)
$line = split("\t",$loglines[0]);
- $info['date'] = $line[0];
- $info['ip'] = $line[1];
- $info['user'] = $line[3];
+ $info['date'] = $line[0];
+ $info['ip'] = $line[1];
+ $info['user'] = $line[3];
$info['sum'] = $line[4];
+ $info['minor'] = isMinor($info['sum']);
return $info;
}
@@ -747,7 +793,7 @@ function getRevisionInfo($id,$rev){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function saveWikiText($id,$text,$summary){
+function saveWikiText($id,$text,$summary,$minor=false){
global $conf;
global $lang;
umask($conf['umask']);
@@ -778,7 +824,7 @@ function saveWikiText($id,$text,$summary){
$del = false;
}
- addLogEntry(@filemtime($file),$id,$summary);
+ addLogEntry(@filemtime($file),$id,$summary,$minor);
// send notify mails
notify($id,'admin',$old,$summary);
notify($id,'subscribers',$old,$summary);