Seite 1 von 1

Userspezifisches Uploadverzeichnis

Verfasst: Do 3. Jul 2014, 23:29
von josh
Das funktioniert auch in Contenido 4.9.3 mit kleinen Änderungen.

Ursprünglicher Beitrag: Oldperl » Mo 22. Mai 2006
http://forum.contenido.org/viewtopic.php?f=52&t=12943

Bisher hat Contenido noch nicht die Möglichkeit im Uploadbereich für Benutzer nur bestimmte Verzeichnisse freizugeben.
Bis dieses von den Entwickler noch eingebaut wird hier ein kleiner Mod, der es zumindest erlaubt, einen User auf einen bestimmten Verzeichnisbaum zu begrenzen.
Dabei muß in den Core eingegriffen werden, das heißt die Änderung ist nach einem update erneut einzubauen.

In der Datei include.upl_dirs_overview.php im includes-Verzeichnis ab Zeile 132 folgendes ersetzen

Code: Alles auswählen

$rootTreeItem = new TreeItem();
$rootTreeItem->custom['level'] = 0;
$rootTreeItem->name = i18n("Upload directory");
$aInvalidDirectories = uplRecursiveDirectoryList($cfgClient[$client]["upl"]["path"], $rootTreeItem, 2);
durch dieses

Code: Alles auswählen

$user_upload_path = getEffectiveSetting("upload","userpath");  // mod by emergence

if (is_string($user_upload_path) AND !empty($user_upload_path)) {
   trim($user_upload_path);
   $file = $user_upload_path;
   if (substr($user_upload_path, -1) != "/") {
       $user_upload_path .= "/";
    }
   $pathstring = $user_upload_path;
   if (substr($cfgClient[$client]["upl"]["path"], -1) != "/" AND substr($user_upload_path, 0, 1) == "/") {
       $user_upload_path = substr($user_upload_path, 1);
    }
}

$rootTreeItem = new TreeItem;
$rootTreeItem->custom["level"] = 0;
$rootTreeItem->name = i18n("Upload directory");
$aInvalidDirectories = uplRecursiveDirectoryList($cfgClient[$client]["upl"]["path"].$user_upload_path, $rootTreeItem, 2);
Nun noch in den Dateien include.upl_files_overview.php (nach Zeile 25) und include.upl_left_top.php (Zeile 21) folgenden Code einfügen.

Code: Alles auswählen

$user_upload_path = getEffectiveSetting("upload","userpath");  // mod by emergence

if (is_string($user_upload_path) AND !empty($user_upload_path)) {
   trim($user_upload_path);
   if (substr($user_upload_path, -1) != "/") {
       $user_upload_path .= "/";
    }
   if (!isset($path) OR empty($path)) $path = $user_upload_path;
}
gibt man nun dem Benutzer eine benutzerdefinierte Variable
Area/Type: upload
Eigenschaft: userpath
Wert: [Unterverzeichnis in upload] (z.B. 'Bilder')

so wird dieses Verzeichnis mit seinen Unterverzeichnissen zum Hauptverzeichnis im Dateimanager.
Dabei wird die angegebene Pfadangabe auf den / am Anfang und Ende geprüft und gegebenenfalls korrigiert.
Ebenfalls wird die Dateiübersicht beim 1. Aufruf nur Dateien aus diesem Userverzeichnis anzeigen und Ordner werden auch nur in diesem Verzeichnis erstellt.

Somit ist es möglich jedem User ein eigenes Uploadverzeichnis in Uploads zuzuordnen.

Grüße

josh

Re: Userspezifisches Uploadverzeichnis

Verfasst: Fr 4. Jul 2014, 08:27
von Faar
Moin Josh,

das ist gut, das macht Contenido dann noch mehr zum Ersatz für Typo3, weil Typo3 kann bereits die Upload-Verzeichnisse nach Userrechten beschränken.
Im Prinzip sollte das Team von 4fb dieses was jetzt mit getEffectiveSetting() abgefragt wird, mit in die Userberechtigung mit aufnehmen.
Dort am besten eine Auswahl-Option aller Upload-Pfade mit Multiple Choice (es kann ja sein, ein User soll mehrere parallel liegende Verzeichnisse benützen können, z.B. ein Standardverzeichnis und ein Userverzeichnis).

Der dargestellte Code ist so noch nicht DAU-stabil, bei dem IF fehlt das ELSE.
Für getEffectiveSetting() sollte also folgendes gemacht werden:

Code: Alles auswählen

$user_upload_path = getEffectiveSetting("upload","userpath","/");
Das "/" wäre dann der Standardpfad, falls jemand keine Usereinstellungen dazu macht.
So wie ich den Code verstehe, wäre "/" dann das Upload-Hauptverzeichnis.

Was macht man nun, wenn wie oben angesprochen, mehrere Verzeichnisse parallel freigegeben werden sollen, aber nicht alle?

VG,
Frank

Edit:
Ich rudere etwas zurück, der Defaultwert ist bereits da aber steckt woanders.

Code: Alles auswählen

$aInvalidDirectories = uplRecursiveDirectoryList($cfgClient[$client]["upl"]["path"].$user_upload_path, $rootTreeItem, 2);
Wenn $user_upload_path = "" ist, dann ist der Standard-Uploadpfad = upload/
Nach der neueren Definition bei 4.9 wird aber ohne Usereinstellungen nicht "" zurück gegeben, sondern FALSE: http://api.contenido.org/con490/functio ... tting.html
Was passiert denn dann, wenn $user_upload_path = FALSE ist?
Bei...

Code: Alles auswählen

if (is_string($user_upload_path) AND !empty($user_upload_path)) { }
...wäre dann $user_upload_path kein String (sondern BOOLEAN) und im Zweifel empty.
Da würde dann vielleicht folgendes stehen:

Code: Alles auswählen

uplRecursiveDirectoryList($cfgClient[$client]["upl"]["path"].FALSE, $rootTreeItem, 2);

Re: Userspezifisches Uploadverzeichnis

Verfasst: Mi 9. Jul 2014, 10:56
von mischa.holz
Der boolean "false" wird, wenn er zu einem String umgewandelt wird, immer zum leeren String (""). Von daher wird der Code wahrscheinlich trotzdem funktionieren, aber man kann sich sicher streiten, ob das so schön ist ^.^;

Ansonsten ist das mit Sicherheit eine sehr gute Idee!

Re: Userspezifisches Uploadverzeichnis

Verfasst: Di 15. Jul 2014, 10:15
von Oldperl
mischa.holz_4fb hat geschrieben:Ansonsten ist das mit Sicherheit eine sehr gute Idee!
Danke schön! :D
Von Zeit zu Zeit hab ich die halt mal... :mrgreen:
Hat damals aber leider keinen Weg in den Core der 4.8er gefunden. Falls gewünscht kann ich das gerne für den Core der 4.9er optimieren.

Gruß aus Franken

Ortwin

Re: Userspezifisches Uploadverzeichnis

Verfasst: Mi 16. Jul 2014, 20:46
von dominik.ziegler
Darüber würde wir uns sehr freuen. ;-)

Re: Userspezifisches Uploadverzeichnis

Verfasst: Do 17. Jul 2014, 08:23
von Oldperl
Na dann, sobald mein Plugin-Manager für die ConLite läuft schau ich es mir mal an. Muss mich an der Stelle erstmal in den aktuellen 4.9er Core einlesen.

Gruß aus Franken

Ortwin