Metadaten Dateiverwaltung - Copyrightfeld ignoriert - gelöst

Gesperrt
tmj-digital
Beiträge: 9
Registriert: Di 23. Sep 2008, 14:26
Kontaktdaten:

Metadaten Dateiverwaltung - Copyrightfeld ignoriert - gelöst

Beitrag von tmj-digital » Do 16. Okt 2008, 10:24

Hallo,

habe versucht, zum Thema was zu finden, aber leider nichts entdeckt! Ich wollte gerade das Copyright-Feld in den Upload-Metadaten nutzen, mußte aber feststellen, dass die dort eingegeben Werte verloren gehen. Da ich auch im Forum nicht fündig geworden bin, habe ich ein wenig im Sourcecode und in der Datenbank gesucht. (Ich hoffe, ich hab da nicht nur die falschen Suchworte verwendet..)

Das Problem hat sich dann wie folgt lösen lassen:

Habe in die Tabelle "upl_meta" ein weiteres Feld "copyright" eingefügt (Einstellungen identisch zu internal_notice).

Anschließend mußte ich noch in der Datei "include.upl_edit.php" folgende Zeilen

Code: Alles auswählen

         case "copyright":
           $copyright = $properties->getValue("upload", $qpath.$_REQUEST["file"], "file", "copyright");
            $copyrightEdit = new cHTMLTextarea("copyright", $copyright);
            $sCell = $copyrightEdit->render();
           break;

durch

Code: Alles auswählen

         case "copyright":
            if( $db->f('copyright') )   $copyright = Contenido_Security::unFilter($db->f('copyright'));
	        else    				$copyright = $properties->getValue("upload", $qpath.$_REQUEST["file"], "file", "copyright");
            $copyrightEdit = new cHTMLTextarea("copyright", $copyright);
            $sCell = $copyrightEdit->render();
           break;

ersetzen, sowie in der Datei "include.upl_files_overview.php" im folgenden Block in den SQL-Statements jeweils die Zeile für "copyright" ergänzen:

Code: Alles auswählen

		if ($db->num_rows() == 0) {	// new entry
			$iNextId = $db->nextid($cfg['tab']['upl_meta']);
			$sSql = "INSERT INTO " . $cfg['tab']['upl_meta'] . " " .
					"SET id_uplmeta = $iNextId, idupl = $iIdupl, idlang = $lang, " .
					"medianame = '" . Contenido_Security::filter($medianame, $db) . "', " . 
					"description = '" . Contenido_Security::filter($description, $db) . "', " . 
					"keywords = '" . Contenido_Security::filter($keywords, $db) . "', " . 
					"internal_notice = '" . Contenido_Security::filter($medianotes, $db) . "', " .
					"copyright = '" . Contenido_Security::filter($copyright, $db) . "', " .
					"author = '" . $auth->auth['uid'] . "', " .
					"created = NOW(), modified = NOW(), modifiedby = '" . $auth->auth['uid'] . "'";
		} else {	// update entry
			$db->next_record();
			$iIduplmeta = $db->f('id_uplmeta');
			$sSql = "UPDATE " . $cfg['tab']['upl_meta'] . " " . 
					"SET " . 
					"medianame = '" . Contenido_Security::filter($medianame, $db) . "', " . 
					"description = '" . Contenido_Security::filter($description, $db) . "', " . 
					"keywords = '" . Contenido_Security::filter($keywords, $db) . "', " . 
					"internal_notice = '" . Contenido_Security::filter($medianotes, $db) . "', " . 
					"copyright = '" . Contenido_Security::filter($copyright, $db) . "', " .                 
					"modified = NOW(), modifiedby = '" . $auth->auth['uid'] . "' " . 
					"WHERE id_uplmeta = " . $iIduplmeta;
		}
	
Ich denke, das Copyright-Feld ist für viele User interessant und die Änderungen sind leider in zentralen Contenido-Dateien: Deshalb hoffe ich, dass die Korrekturen in die nächste Version von Contenido einfliesen, damit Updates des Systems problemlos möglich sind.

Viele Grüße
tmj

P.S. Hätte das ganze gerne unter Bugs angelegt, was mir aber verwehrt war...

MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag von MichFress » Do 16. Okt 2008, 10:50

Ich glaube nicht, dass das ein Bug ist.. ;)

Zumindest ein Fehler ist mir in deinem Code gerade aufgefallen:

Du speicherst den Wert in der upl_meta-Tabelle, versuchst im Formular aber, über $properties auf sie zuzugreifen.

------
Allerdings sind die Änderungen am Kern offenbar nicht nötig, schau dir mal die Chains näher an: $_cecRegistry
Damit kannst du "von außen" auf diese Funktionalität zugreifen und diese erweitern.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)

tmj-digital
Beiträge: 9
Registriert: Di 23. Sep 2008, 14:26
Kontaktdaten:

Beitrag von tmj-digital » Do 16. Okt 2008, 11:16

Ich hatte mich für den Block in der Datei "include.upl_edit.php" am entsprechenden Gegenstück für den Eintrag "internal_notice" orientiert und diesem komplett übernommen, lediglich die Variablen geändert. I.d.R. sollte der Rückgriff auf die Variable $properties ja auch nicht erfolgen, da ja die If-Bedingung erfüllt sein sollte...

Das mit der "Änderung von außen" schau ich mir mal an! Danke!

OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL » Do 16. Okt 2008, 14:30

moin,

1. Das ist ein Bug ausschließlich in der 4.8.8.
2. Das holen der Werte aus den Properties ist für 4.8.7 auch richtig
3. Das lösen des Bugs über die neuen Chains ist möglich

Das die Integration der Upl-Chains der Auslöser des Problems ist und jetzt als Lösung benutzt wird ist irgendwie paradox. :D
Durch die Integration der Chains wurden alle $properties->setValue() für allgemeinen Werte entfernt so das nur noch die speziellen DBFS-Felder per $properties->setValue() gespeichert werden.

Lösung:
Man kann die Lösung ( inkl. Properties -> für Versionen kleiner als 4.8.8 ) übernehmen.
+ SQL-Query für upl_meta

Code: Alles auswählen

ALTER TABLE `con_upl_meta` ADD `copyright` TEXT NOT NULL ;
Bitte ggf. den Prefix ändern
(Eventuel diese Abfrage im ersten Post ergänzen. Damit es Übersichtlich ist THX)

Wichtig ist die neue Zelle am ende der Tabelle ergänzen, so das es mit dem nächsten Update gleich ist.

Änderungen wurden für 4.8.9. übernommen in:
[ CON-212 ]
setup/data/tables.txt
contenido/includes/include.upl_edit.php
contenido/includes/include.upl_files_overview.php


Danke tmj-digital und MichFress


mfg OliverL


- Infos zur Upl-Chains

Gesperrt