Das ist nicht auf meinen Mist gewachsen.
Es ist von @swelpot (mit einem Patch von @HerrB)
Der Ursprungsthread bei Contenido 4.4:
http://contenido.org/forum/viewtopic.php?t=6540
Aber diese schöne und sinnvolle Funktion findet dort kaum einer.
Diese Version läuft unter 4.6.x (getestet mit 4.6.23 mr)
Zuerst im Verzeichnis: contenido/plugins/chains/includes/
eine Datei anlegen mit dem Namen: include.chain.upload.upload_preprocess.php
Diesen Inhalt in die Datei einfügen:
Code: Alles auswählen
<?php
/**
* include.chain.upload.upload_preprocess.php
*
* Automatische Bildskalierung beim Upload von Bildern in der Dateiverwaltung
*
* maximale Bildbreite/-höhe über die Mandanteneigenschaften
* - upload, automaticImageScaleWidth, maximale Bildbreite
* - upload, automaticImageScaleHeight, maximale Bildhöhe
* Einschalten der Bildskalierung über die Benutzer- bzw. Gruppeneinstellungen
* - upload, automaticImageScale, true
*
* Einbinden der Chain in Datei "contenido/plugins/chains/includes/config.plugin.php":
* cInclude("plugins", "chains/includes/include.chain.upload.upload_preprocess.php");
* $_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadUploadPreprocess");
*
* @version 1.0
* @author Stefan Welpot
* 28.12.2005
* Original von hier
* http://contenido.org/forum/viewtopic.php?t=6540
* @version 1.0.1
* Patch von HerrB - nur Bilddateien resizen - ist eingearbeitet
*/
cInclude('classes', 'contenido/class.client.php');
function cecUploadUploadPreprocess ($tmp_name, $path)
{
global $auth, $cfgClient, $client;
$defaultBildbreite = 640;
$defaultBildhoehe = 480;
// nur wenn ImageScale für den Benutzer aktiviert ist
$currentuser = new User;
$currentuser->loadUserByUserID($auth->auth["uid"]);
if($currentuser->getUserProperty("upload", "automaticImageScale", true)) {
// maximale Bildgröße über Mandanteneinstellungen
/*
$properties = new PropertyCollection;
$maxBildbreite = $properties->getValue("clientsetting", $client, "upload", "automaticImageScaleWidth");
$maxBildhoehe = $properties->getValue("clientsetting", $client, "upload", "automaticImageScaleHeight");
*/
$cApiClient = new cApiClient($client);
$maxBildbreite = $cApiClient->getProperty("upload", "automaticImageScaleWidth");
$maxBildhoehe = $cApiClient->getProperty("upload", "automaticImageScaleHeight");
if(!is_numeric($maxBildbreite)) {
$maxBildbreite = $defaultBildbreite;
}
if(!is_numeric($maxBildhoehe)) {
$maxBildhoehe = $defaultBildhoehe;
}
$newFilename = "";
/*
// damit werden alle Dateien mit resize bearbeitet
// diese Funktion ist geloescht
// damit werden alle Datein mit resize bearbeitet
*/
// nur Bilddateien mit resize bearbeiten, keine anderen Dateien - Patch HerrB
$filetype = strtolower(substr($tmp_name, strlen($tmp_name) -4, 4));
if(strcmp(".gif", $filetype) == 0 ||
strcmp(".png", $filetype) == 0 ||
strcmp(".jpg", $filetype) == 0 ||
strcmp("jpeg", $filetype) == 0
) {
$newFilename = capiImgScale($tmp_name, $maxBildbreite, $maxBildhoehe, false, false, 1, true);
$newFilename = str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $newFilename);
} else {
$newFilename = $tmp_name;
}
return $newFilename;
}
// nur Bilddateien mit resize bearbeiten, keine anderen Dateien
return false;
}
?>
folgende 2 Zeilen einfügen:
Code: Alles auswählen
cInclude("plugins", "chains/includes/include.chain.upload.upload_preprocess.php");
$_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadUploadPreprocess");
Die Werte 600 bzw. 800 sind individuell von jedem selber festzulegen.
Und nun noch für jeden User festlegen ob ein resize erfolgen soll oder nicht:
Administration -> Benutzer -> Name auswählen -> Eigenschaften
true -> resize anwenden
false -> resize ignorieren
Diese Beschreibung steht auch in kurzform in der Chain-Datei.
PS: das wäre eine Funktion die ich mir "in the box", mit Beschreibung, wünschen würde.