CEC im Upload-Root probleme
CEC im Upload-Root probleme
Hallo Leute,
Vorab ich habe heute uber 8 Stunden an dem Problem gearbeitet bevor ich mir jetzt diese schmacht antue.
in der 4.8.8 wurde jetzt von mir für die Datei-Details div. CECs ergänzt.
Jetzt wollte ich heute ein kleines Paket machen das div. neue Funktionen anhand von Beispielen erklärt.
Dabei ist mir heute aufgefallen das ich (Asche über mein Haupt) das Upload-Root-Dir-Files (die Files die in keinem Unterordner liegen) nicht mit der con...upl...save-CEC kombiniert mit der Properti-Collection nicht funktioniert.
Zur Erklärung:
Breche ich den Code mit exit; nach der CEC ab steht der geseicherte Wert in der properti-Tabelle.
Daher gehe ich davon aus das in der File-Liste (in der die SpeicherungsCEC steht) irgendwo später die Propertie Table aufgeraümt wird.
Bei mir wird genauso wie bei der Option Protect für DBFS gespeichert.
Nur anstelle des Pfad+filename wird die FileID eingesetzt.
Hat irgend jemand von euch einen TIPP?
thx OliverL
Vorab ich habe heute uber 8 Stunden an dem Problem gearbeitet bevor ich mir jetzt diese schmacht antue.
in der 4.8.8 wurde jetzt von mir für die Datei-Details div. CECs ergänzt.
Jetzt wollte ich heute ein kleines Paket machen das div. neue Funktionen anhand von Beispielen erklärt.
Dabei ist mir heute aufgefallen das ich (Asche über mein Haupt) das Upload-Root-Dir-Files (die Files die in keinem Unterordner liegen) nicht mit der con...upl...save-CEC kombiniert mit der Properti-Collection nicht funktioniert.
Zur Erklärung:
Breche ich den Code mit exit; nach der CEC ab steht der geseicherte Wert in der properti-Tabelle.
Daher gehe ich davon aus das in der File-Liste (in der die SpeicherungsCEC steht) irgendwo später die Propertie Table aufgeraümt wird.
Bei mir wird genauso wie bei der Option Protect für DBFS gespeichert.
Nur anstelle des Pfad+filename wird die FileID eingesetzt.
Hat irgend jemand von euch einen TIPP?
thx OliverL
ähm das ist so leider nicht nachvollziehbar ohne das man jetzt selbst stundenlang den code durchwühlt... logisch oder ?
gib ein beispiel..
gib ein beispiel..
*** make your own tools (wishlist :: thx)
Ein Beispiel Datensatz:
Workflow:
einmal mit ClientID 1 und einmal mit ClientID 2 wird nur der mit ID 1 gelöscht.
Bei weiteren Test kam für mich folgendes Resultat raus:
Ich würde ja in den Files versuchen zu suche aber ich hab keine Ahnung wonach ('properties', 'upload' und 'file' versuche ich erst gar nicht)
Ich denke das diese Funktion irgendwie in die 4.8 rein gekommen ist um die Daten für medianame, description, keywords, internal_notice in die DB upl_meta zu portieren.
Die Properties fürs DBFS (protected & timemgmt) bleiben erhalten, egal was ich mache.
Hier mal die CEC für Contenido ab 4.8.8
(../contenido/plugins/cec_upl_edit_bdb/includes/config.plugin.php)
Code: Alles auswählen
INSERT INTO con_properties (idproperty, idclient, itemtype, itemid, type, name, value, author, created, modified, modifiedby) VALUES
(186, 1, 'upload', '51', 'file', 'cec_bdbid', 'asd4sdfdf', '48a365b4ce1e322a55ae9017f3daf0c0', '2008-09-12 12:13:44', '2008-09-12 12:13:44', '48a365b4ce1e322a55ae9017f3daf0c0');
- Contenido48: Mandant ID-1 wählen
- Contenido48: In Dateiverwaltung eine Unterordner auswählen
- Contenido48: Ausloggen
- phpMyAdmin: Datensatz von oben einspielen
- Contenido48: in Contenido einloggen
- Contenido48: Dateiverwaltung öffnen (es öffnet sich das Unterverzeichnis von Punkt 2)
- phpMyAdmin: In DB gucken (eingepflegter Datensatz ist noch drin)
- Contenido48: Upload-Verzeichnis auswählen (upload/)
- phpMyAdmin: In DB gucken (eingepflegter Datensatz ist nicht mehr drin)
einmal mit ClientID 1 und einmal mit ClientID 2 wird nur der mit ID 1 gelöscht.
Bei weiteren Test kam für mich folgendes Resultat raus:
- Das ganze passiert nur im Upload-Root (root:/cms/upload/)
- Nur Daten des gerade aktiven Client
- itemtype = 'upload' und/oder type='file' sein
Ich würde ja in den Files versuchen zu suche aber ich hab keine Ahnung wonach ('properties', 'upload' und 'file' versuche ich erst gar nicht)
Ich denke das diese Funktion irgendwie in die 4.8 rein gekommen ist um die Daten für medianame, description, keywords, internal_notice in die DB upl_meta zu portieren.
Die Properties fürs DBFS (protected & timemgmt) bleiben erhalten, egal was ich mache.
Hier mal die CEC für Contenido ab 4.8.8
(../contenido/plugins/cec_upl_edit_bdb/includes/config.plugin.php)
Code: Alles auswählen
<?php
if(!defined('CON_FRAMEWORK')) {
die('Illegal call');
}
global $_cecRegistry, $cfg;
function cecUplEdit_AddRowsBdbId($aRows) {
$aNewRows = array();
if( array_key_exists( "description", $aRows ) ) {
$aNewRows = array();
foreach( $aRows as $key => $value ) {
$aNewRows[$key] = $value;
if( $key == "description" ) {
$aNewRows['bdbid'] = 'Image-DB-ID';
} } }
else {
$aNewRows = array();
$aNewRows = $aRows;
$aNewRows['bdbid'] = 'Image-DB-ID';
}
return $aNewRows;
}
function cecUplEdit_DisplayBdbId( $iIdupl, $sPath, $sFile, $sListRow) {
global $properties;
if( $sListRow == "bdbid") {
$sBdbId = $properties->getValue("upload", $iIdupl, "file", "cec_bdbid", FALSE);
$oBdbId = new cHTMLTextbox("cec_bdbid", $sBdbId, 60 );
$sBdbId = $oBdbId->render();
return $sBdbId;
}
}
function cecUplEdit_SaveBdbId( $iIdupl, $sPath, $sFile ) {
global $properties;
$properties->setValue("upload", $iIdupl, "file", "cec_bdbid", stripslashes($_POST['cec_bdbid']) );
}
function cecUplEdit_DeleteBdbId( $iIdupl, $sPath, $sFile ) {
global $properties;
$properties->deleteValue("upload", $iIdupl, "file", "cec_bdbid" );
}
$_cecRegistry->addChainFunction("Contenido.Upl_edit.Rows", "cecUplEdit_AddRowsBdbId");
$_cecRegistry->addChainFunction("Contenido.Upl_edit.RenderRows", "cecUplEdit_DisplayBdbId");
$_cecRegistry->addChainFunction("Contenido.Upl_edit.SaveRows", "cecUplEdit_SaveBdbId");
$_cecRegistry->addChainFunction("Contenido.Upl_edit.Delete", "cecUplEdit_DeleteBdbId");
?>
vielleicht passiert das in der functions.upl.php -> function uplSyncDirectory
*** make your own tools (wishlist :: thx)
Irgendwie nicht ganz meine Woche.
Das hääte ich auch finden können
THX emergence
Lösung ist dann das ich aus type=file einfach file_cec mache.
Andernfalls müsste ich
- das Select auf bestimmte Typen beschränken was in Zukunft die Core-Erweiterung einschränkt.
oder
- als itemid den Pfad übergeben. das wiederum bei einem verschieben (was momentan noch nicht möglich ist) nicht mehr konsistent ist und eine weitere CEC erfordern würde.
PLUS:
habe jetzt die neue CEC:Contenido.Upl_edit.Delete etwas oberhalb eingepflegt. Da ich für das ausführen die "idupl"... benötige und ich bei löschen der überflüssigen Propertys nur den Path noch habe.
Irgendwelche Kommentare? Um 17:30 Uhr check ich die neue function.upl.php ein und ergänze das Ticket.
mfg OliverL
Das hääte ich auch finden können
THX emergence
Code: Alles auswählen
// A click on "Upload" (root) would result in path = "" and this will result in LIKE '%' = everything
// So, we have to exclude dbfs-files, as they "don't exist" (-> file_exists)
$properties->selfunction:uplSyncDirectoryect("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%' AND itemid NOT LIKE 'dbfs%'");
while ($property = $properties->next()) {
if (!file_exists($cfgClient[$client]["upl"]["path"].$property->get("itemid"))) {
$properties->delete($property->get("idproperty"));
} }
Andernfalls müsste ich
- das Select auf bestimmte Typen beschränken was in Zukunft die Core-Erweiterung einschränkt.
oder
- als itemid den Pfad übergeben. das wiederum bei einem verschieben (was momentan noch nicht möglich ist) nicht mehr konsistent ist und eine weitere CEC erfordern würde.
PLUS:
habe jetzt die neue CEC:Contenido.Upl_edit.Delete etwas oberhalb eingepflegt. Da ich für das ausführen die "idupl"... benötige und ich bei löschen der überflüssigen Propertys nur den Path noch habe.
Irgendwelche Kommentare? Um 17:30 Uhr check ich die neue function.upl.php ein und ergänze das Ticket.
mfg OliverL
kommentare ?
ähm, ich hab wieder mal keine ahnung wovon du jetzt schon wieder redest... du läßt einfach sachen aus die dein gegenüber erraten müsste um dich zu verstehen...
was checkst du jetzt in die function.upl.php ein ?
und welches ticket ?
ähm, ich hab wieder mal keine ahnung wovon du jetzt schon wieder redest... du läßt einfach sachen aus die dein gegenüber erraten müsste um dich zu verstehen...
was checkst du jetzt in die function.upl.php ein ?
und welches ticket ?
*** make your own tools (wishlist :: thx)
Lösung ist dann das ich in meinem Plugin aus type=file einfach type=file_cec mache.
PLUS:
habe jetzt die neue CEC:Contenido.Upl_edit.Delete eingepflegt.
ticket <- kenne nur ein Ticket was man bei Contenido machen kann und hab leider keien Ahnung wie ich das erklären soll.
PLUS:
habe jetzt die neue CEC:Contenido.Upl_edit.Delete eingepflegt.
Code: Alles auswählen
/**
* uplSyncDirectory ($path)
* Sync database contents with directory
*
* @param string $path Specifies the path to scan
*/
function uplSyncDirectory ($path)
{
global $cfgClient, $client, $cfg, $db;
if (substr($path,0,5) == "dbfs:")
{
return uplSyncDirectoryDBFS($path);
}
$uploads = new UploadCollection;
$properties = new PropertyCollection;
/* Read all files in a specific directory */
$dir = $cfgClient[$client]['upl']['path'].$path;
$olddir = getcwd();
@chdir($dir);
$dirhandle = @opendir($dir);
/* Whoops, probably failed to open. Return to the caller, but clean up stuff first. */
if (!$dirhandle)
{
$uploads->select("dirname = '$path' AND idclient = '$client'");
while ($upload = $uploads->next())
{
if (!file_exists($cfgClient[$client]["upl"]["path"].$upload->get("dirname").$upload->get("filename")))
{
/*
* Call chain
*/
$_cecIterator = $_cecRegistry->getIterator("Contenido.Upl_edit.Delete");
if ($_cecIterator->count() > 0) {
while ($chainEntry = $_cecIterator->next()) {
$chainEntry->execute( $upload->get('idupl'), $upload->get("dirname"), $upload->get("filename") );
} }
$uploads->delete($upload->get("idupl"));
}
}
// A click on "Upload" (root) would result in path = "" and this will result in LIKE '%' = everything
// So, we have to exclude dbfs-files, as they "don't exist" (-> file_exists)
$properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%' AND itemid NOT LIKE 'dbfs%'");
while ($property = $properties->next())
{
if (!file_exists($cfgClient[$client]["upl"]["path"].$property->get("itemid")))
{
$properties->delete($property->get("idproperty"));
}
}
chdir($olddir);
return;
}
/* Put all the files into the $files array */
while ($file = readdir ($dirhandle))
{
if ($file != "." && $file != "..")
{
if (is_file($file))
{
$uploads->sync($path, $file);
}
}
}
$uploads->select("dirname = '$path' AND idclient = '$client'");
while ($upload = $uploads->next())
{
if (!file_exists($cfgClient[$client]["upl"]["path"].$upload->get("dirname").$upload->get("filename")))
{
$uploads->delete($upload->get("idupl"));
}
}
// A click on "Upload" (root) would result in path = "" and this will result in LIKE '%' = everything
// So, we have to exclude dbfs-files, as they "don't exist" (-> file_exists)
$properties->select("idclient = '$client' AND itemtype='upload' AND type='file' AND itemid LIKE '".$path."%' AND itemid NOT LIKE 'dbfs%'");
while ($property = $properties->next())
{
if (!file_exists($cfgClient[$client]["upl"]["path"].$property->get("itemid")))
{
$properties->delete($property->get("idproperty"));
}
}
chdir($olddir);
}