summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doku.php2
-rw-r--r--inc/auth/ldap.class.php30
-rw-r--r--inc/lang/de-informal/lang.php2
-rw-r--r--inc/lang/de/lang.php3
-rw-r--r--inc/lang/en/lang.php2
-rw-r--r--inc/lang/it/lang.php2
-rw-r--r--lib/exe/ajax.php2
-rw-r--r--lib/scripts/edit.js59
-rw-r--r--lib/scripts/tw-sack.js5
9 files changed, 59 insertions, 48 deletions
diff --git a/doku.php b/doku.php
index 52e8e6b8e..052e18be9 100644
--- a/doku.php
+++ b/doku.php
@@ -61,7 +61,7 @@ if($conf['allowdebug'] && $ACT == 'debug'){
//send 404 for missing pages if configured or ID has special meaning to bots
if(!$INFO['exists'] &&
($conf['send404'] || preg_match('/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/',$ID)) &&
- ($ACT == 'show' || substr($ACT,0,7) == 'export_') ){
+ ($ACT == 'show' || (!is_array($ACT) && substr($ACT,0,7) == 'export_')) ){
header('HTTP/1.0 404 Not Found');
}
diff --git a/inc/auth/ldap.class.php b/inc/auth/ldap.class.php
index c51924135..fc1a7ddb6 100644
--- a/inc/auth/ldap.class.php
+++ b/inc/auth/ldap.class.php
@@ -27,7 +27,9 @@ class auth_ldap extends auth_basic {
return;
}
- if(empty($this->cnf['groupkey'])) $this->cnf['groupkey'] = 'cn';
+ if(empty($this->cnf['groupkey'])) $this->cnf['groupkey'] = 'cn';
+ if(empty($this->cnf['userscope'])) $this->cnf['userscope'] = 'sub';
+ if(empty($this->cnf['groupscope'])) $this->cnf['groupscope'] = 'sub';
// auth_ldap currently just handles authentication, so no
// capabilities are set
@@ -171,7 +173,7 @@ class auth_ldap extends auth_basic {
$filter = "(ObjectClass=*)";
}
- $sr = @ldap_search($this->con, $base, $filter);
+ $sr = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['userscope']);
$result = @ldap_get_entries($this->con, $sr);
if($this->cnf['debug']){
msg('LDAP user search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
@@ -219,7 +221,7 @@ class auth_ldap extends auth_basic {
if ($this->cnf['grouptree'] && $this->cnf['groupfilter']) {
$base = $this->_makeFilter($this->cnf['grouptree'], $user_result);
$filter = $this->_makeFilter($this->cnf['groupfilter'], $user_result);
- $sr = @ldap_search($this->con, $base, $filter, array($this->cnf['groupkey']));
+ $sr = $this->_ldapsearch($this->con, $base, $filter, $this->cnf['groupscope'], array($this->cnf['groupkey']));
if(!$sr){
msg("LDAP: Reading group memberships failed",-1);
if($this->cnf['debug']){
@@ -352,6 +354,28 @@ class auth_ldap extends auth_basic {
return true;
}
+
+ /**
+ * Wraps around ldap_search, ldap_list or ldap_read depending on $scope
+ *
+ * @param $scope string - can be 'base', 'one' or 'sub'
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _ldapsearch($link_identifier, $base_dn, $filter, $scope='sub', $attributes=null,
+ $attrsonly=0, $sizelimit=0, $timelimit=0, $deref=LDAP_DEREF_NEVER){
+ if(is_null($attributes)) $attributes = array();
+
+ if($scope == 'base'){
+ return @ldap_read($link_identifier, $base_dn, $filter, $attributes,
+ $attrsonly, $sizelimit, $timelimit, $deref);
+ }elseif($scope == 'one'){
+ return @ldap_list($link_identifier, $base_dn, $filter, $attributes,
+ $attrsonly, $sizelimit, $timelimit, $deref);
+ }else{
+ return @ldap_search($link_identifier, $base_dn, $filter, $attributes,
+ $attrsonly, $sizelimit, $timelimit, $deref);
+ }
+ }
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index 2060e1769..a42ecc0ab 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -105,7 +105,7 @@ $lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
-$lang['js']['notsavedyet'] = "Nicht gespeicherte Änderungen gehen verloren!\nWeitermachen?";
+$lang['js']['notsavedyet'] = "Nicht gespeicherte Änderungen gehen verloren!";
$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
$lang['nothingfound'] = 'Nichts gefunden.';
$lang['mediaselect'] = 'Dateiauswahl';
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index 91bdcab0a..290c069a4 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -103,8 +103,7 @@ $lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
-$lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!
-Weitermachen?';
+$lang['js']['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!';
$lang['js']['searchmedia'] = 'Suche Dateien';
$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
$lang['js']['hidedetails'] = 'Details ausblenden';
diff --git a/inc/lang/en/lang.php b/inc/lang/en/lang.php
index 0dd6fd548..1fddfe727 100644
--- a/inc/lang/en/lang.php
+++ b/inc/lang/en/lang.php
@@ -100,7 +100,7 @@ $lang['lockedby'] = 'Currently locked by';
$lang['lockexpire'] = 'Lock expires at';
$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
-$lang['js']['notsavedyet'] = "Unsaved changes will be lost.\nReally continue?";
+$lang['js']['notsavedyet'] = "Unsaved changes will be lost.";
$lang['rssfailed'] = 'An error occurred while fetching this feed: ';
$lang['nothingfound']= 'Nothing was found.';
diff --git a/inc/lang/it/lang.php b/inc/lang/it/lang.php
index 8e476816e..c8e51f3e9 100644
--- a/inc/lang/it/lang.php
+++ b/inc/lang/it/lang.php
@@ -99,7 +99,7 @@ $lang['txt_overwrt'] = 'Sovrascrivi file esistente';
$lang['lockedby'] = 'Attualmente bloccato da';
$lang['lockexpire'] = 'Il blocco scade alle';
$lang['willexpire'] = 'Il tuo blocco su questa pagina scadrà tra circa un minuto.\nPer evitare incongruenze usa il pulsante di anteprima per prolungare il periodo di blocco.';
-$lang['js']['notsavedyet'] = "Le modifiche non salvate andranno perse.\nContinuare?";
+$lang['js']['notsavedyet'] = "Le modifiche non salvate andranno perse.";
$lang['rssfailed'] = 'Si è verificato un errore cercando questo feed: ';
$lang['nothingfound'] = 'Nessun risultato trovato.';
$lang['mediaselect'] = 'Selezione dei file';
diff --git a/lib/exe/ajax.php b/lib/exe/ajax.php
index 8b03bb07c..582be90e5 100644
--- a/lib/exe/ajax.php
+++ b/lib/exe/ajax.php
@@ -156,7 +156,7 @@ function ajax_lock(){
* @author Andreas Gohr <andi@splitbrain.org>
*/
function ajax_draftdel(){
- $id = cleanID($_POST['id']);
+ $id = cleanID($_REQUEST['id']);
if(empty($id)) return;
$client = $_SERVER['REMOTE_USER'];
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js
index e66154f83..5178dba4c 100644
--- a/lib/scripts/edit.js
+++ b/lib/scripts/edit.js
@@ -258,35 +258,30 @@ function currentHeadlineLevel(textboxId){
var textChanged = false;
/**
- * Check for changes before leaving the page
+ * Delete the draft before leaving the page
*/
-function changeCheck(){
- if(textChanged){
- var ok = confirm(LANG.notsavedyet);
- if(ok){
- // remove a possibly saved draft using ajax
- var dwform = $('dw__editform');
- if(dwform){
- var params = 'call=draftdel';
- params += '&id='+encodeURIComponent(dwform.elements.id.value);
-
- var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
- sackobj.AjaxFailedAlert = '';
- sackobj.encodeURIString = false;
- sackobj.runAJAX(params);
- // we send this request blind without waiting for
- // and handling the returned data
- }
+function deleteDraft() {
+ if (is_opera) return;
+
+ // remove a possibly saved draft using ajax
+ var dwform = $('dw__editform');
+ if(dwform){
+ var params = 'call=draftdel';
+ params += '&id='+encodeURIComponent(dwform.elements.id.value);
+
+ var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ // this needs to be synchronous and GET to not be aborted upon page unload
+ sackobj.asynchronous = false;
+ sackobj.method = 'GET';
+ sackobj.AjaxFailedAlert = '';
+ sackobj.encodeURIString = false;
+ sackobj.runAJAX(params);
}
- return ok;
- }else{
- return true;
- }
}
/**
- * Add changeCheck to all Links and Forms (except those with a
- * JSnocheck class), add handlers to monitor changes
+ * Activate "not saved" dialog, add draft deletion to page unload,
+ * add handlers to monitor changes
*
* Sets focus to the editbox as well
*/
@@ -309,20 +304,12 @@ addInitEvent(function (){
addEvent(editform, 'change', checkfunc);
addEvent(editform, 'keydown', checkfunc);
- // add change check for links
- var links = document.getElementsByTagName('a');
- for(var i=0; i < links.length; i++){
- if(links[i].className.indexOf('JSnocheck') == -1){
- addEvent(links[i], 'click', changeCheck);
- }
- }
- // add change check for forms
- var forms = document.forms;
- for(i=0; i < forms.length; i++){
- if(forms[i].className.indexOf('JSnocheck') == -1){
- addEvent(forms[i], 'submit', changeCheck);
+ window.onbeforeunload = function(){
+ if(textChanged) {
+ return LANG.notsavedyet;
}
}
+ window.onunload = deleteDraft;
// reset change memory var on submit
addEvent($('edbtn__save'), 'click', function(){ textChanged = false; });
diff --git a/lib/scripts/tw-sack.js b/lib/scripts/tw-sack.js
index cfcbe0ea9..b5a5c8861 100644
--- a/lib/scripts/tw-sack.js
+++ b/lib/scripts/tw-sack.js
@@ -10,6 +10,7 @@ function sack(file){
this.URLString = "";
this.encodeURIString = true;
this.execute = false;
+ this.asynchronous = true;
this.onLoading = function() { };
this.onLoaded = function() { };
@@ -86,9 +87,9 @@ function sack(file){
var self = this;
if (this.method == "GET") {
var totalurlstring = this.requestFile + "?" + this.URLString;
- this.xmlhttp.open(this.method, totalurlstring, true);
+ this.xmlhttp.open(this.method, totalurlstring, this.asynchronous);
} else {
- this.xmlhttp.open(this.method, this.requestFile, true);
+ this.xmlhttp.open(this.method, this.requestFile, this.asynchronous);
}
if (this.method == "POST"){
try {