bug: xml exportieren und importieren

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

bug: xml exportieren und importieren

Beitrag von emergence » Do 8. Jun 2006, 10:36

problem macht sich bemerkbar ab php5.0.2 beim versuch ein modul zu exportieren, das umlaute beinhaltet... (translation vermutlich auch)

der export klappt in dem sinne ja noch,
der import zerlegt aber die umlaute

änderungen um das abzufangen:
classes/class.xmlparser.php

die function XmlParser ersetzen durch

Code: Alles auswählen

	function XmlParser($encoding = false)
	{
		if (!$encoding) {
			$encoding = "UTF-8";
		}

		$this->_init($encoding);
	}
und

die function _init ersetzen durch

Code: Alles auswählen

	function _init($encoding = false)
	{
		if (!$encoding) {
			$encoding = "UTF-8";
		}

		// Create parser instance
        $this->parser = xml_parser_create($encoding);

        // Set parser options
        xml_set_object($this->parser, $this);
    	xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
        xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $encoding);

        xml_set_element_handler($this->parser, '_startElement', '_endElement');
        xml_set_character_data_handler($this->parser, '_characterData');
        xml_set_processing_instruction_handler($this->parser, '_processingInstruction');

        // Misc stuff
		$this->events['paths'] = array(NULL);
	}
nächster teil

classes/contenido/class.module.php

zweimal

Code: Alles auswählen

$parser = new XmlParser();
ersetzen durch

Code: Alles auswählen

$parser = new XmlParser("ISO-8859-1");
die änderungen bewirken das die klasse XmlParser defaultmäßig auf UTF-8 gestellt ist... also so wie es ab php 5.0.2 default wert ist
das heisst vor dieser php version wird ebenso utf-8 verwendet

die zweite änderung bewirkt das sowohl der import und export dezitiert auf iso-8859-1 gestellt bleibt... in wie weit das bei den translations wirklich funktioniert ?? keine ahnung...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 8. Jun 2006, 10:54

Es gab eine Bug-Meldung in Bezug auf chinesisch:
http://www.contenido.org/forum/viewtopic.php?t=10239

Darin wird diese Information referenziert:
http://minutillo.com/steve/weblog/2004/ ... -data-loss

Das wird vermutlich noch lustig werden... :cry:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 8. Jun 2006, 10:59

ähm ähnliches problem hat aber mit dem hier beschriebenen nichts zu tun...

die klasse die dort das problem verursacht ist die class.xml.php (fehlermeldung in der menüführung)
das mit der anzeige bei den kategorien hängt mit keiner der xml klassen zusammen...
*** make your own tools (wishlist :: thx)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » So 11. Jun 2006, 13:12

und gleich noch was dazu... (das müsste jemand verifizieren...)

man erstellt ein modul mit inhalt
output:

Code: Alles auswählen

<?php

echo "TEST";
echo 'TEST';

?>
exportiert das modul

dann löscht man den outputbereich beim modul + speichern

importiert das modul

und klickt anschließend oben auf bearbeiten

dann sieht man zwar den code des moduls, der wird aber nicht in der db gesichert, solange man nicht auf speichern klickt...

eintrag im errorlog.txt

Code: Alles auswählen

[11-Jun-2006 11:20:40] /contenido/main.php MySQL error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use 
near 'TEST';

?>' WHERE idmod = '379'' at line 1
UPDATE con_mod SET name = 'test', description = '<Ihre Modulbeschreibung>

Autor:
Version', type = '', input = '', output = '<?php

echo "TEST";
echo 'TEST';

?>' WHERE idmod = '379'
contenido version 4.6.8
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 12. Jun 2006, 14:35

War ein funky Bug und ist ein "ugly compatibility problem".

a) Eingebaute Lösung: In class.module.php bei cApiModule bei function import ($file) die Zeile

Code: Alles auswählen

$this->set($key, $value);
durch

Code: Alles auswählen

$this->set($key, addslashes($value));
ersetzen.

In include.mod_edit_form.php diese Zeilen:

Code: Alles auswählen

if ($mode == "import")
    	{
    		if (file_exists($_FILES["upload"]["tmp_name"]))
    		{    		
    			if (!$module->import($_FILES["upload"]["tmp_name"]))
    			{
    				$noti .= sprintf(i18n("Error while importing XML file: %s"), $module->_error). "<br>";	
    			}
    		}
    	}
durch diese ersetzen:

Code: Alles auswählen

if ($mode == "import")
    	{
    		if (file_exists($_FILES["upload"]["tmp_name"]))
    		{    		
    			if (!$module->import($_FILES["upload"]["tmp_name"]))
    			{
    				$noti .= sprintf(i18n("Error while importing XML file: %s"), $module->_error). "<br>";	
    			} else {
    				// Load the item again (clearing slashes from import)
    				$module->loadByPrimaryKey($module->get($module->primaryKey));
    			}
    		}
    	}
b) Warum "ugly compatibility problem": Viele Module sind "ohne Slashes" in der DB gespeichert worden, da ein stripslashes bei diesen den Code zerstören würde (das geht sehr schön einfach...) wurde für die Klasse cAPIModule die In- und Outfilter deaktiviert. Kommen die Daten zum Speichern aus einem Formular, sind sie "geslashed" - werden sie direkt gespeichert (oder stammen wie hier aus einer Datei), müssen die Daten mit addslashes behandelt werden.

Mit der ersten Änderung ist der Import erfolgreich - jedoch werden " und ' in den Feldern mit \ angezeigt (obwohl sie korrekt in der DB gespeichert werden). Dies "behebt" die zweite Änderung.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 13. Jun 2006, 11:22

hmm... ad. addslashes (bin mir nicht sicher ob das wirklich richtig ist)

ich hätte da eine andere lösung...

änderung nur in class.modul.php -> class cApiModule -> function import

Code: Alles auswählen

			foreach ($_mImport as $key => $value)
			{
				$this->set($key, $value);
			}
			$this->store();
ersetzen durch

Code: Alles auswählen

// UGLY HACK START
			foreach ($_mImport as $key => $value)
			{
				$this->set($key, str_replace("'", "\'", $value));
			}
			$this->store();

			foreach ($_mImport as $key => $value)
			{
				$this->set($key, $value);
			}
// UGLY HACK END
sieht nicht nur seltsam aus und gefällt mir an sich auch nicht wirklich...
im unterschied zu deiner methode maskiere ich nur die single quotes...
nach dem store mache ich die zuweisung einfach nochmals ohne die maskierung...
*** make your own tools (wishlist :: thx)

baumpaul
Beiträge: 346
Registriert: Mo 1. Mär 2004, 12:59
Kontaktdaten:

Beitrag von baumpaul » Di 12. Dez 2006, 11:04

welche von den änderungen ist hier nun zu machen?

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 12. Dez 2006, 11:08

Mir ist so, als wäre meine schon drin (aber dann hätte ich das hier schließen müssen) - einfach mal in den Code gucken.

Wenn nicht, dann sind emergence' Lösungen besser bzw. eleganter...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

baumpaul
Beiträge: 346
Registriert: Mo 1. Mär 2004, 12:59
Kontaktdaten:

Beitrag von baumpaul » Di 12. Dez 2006, 11:19

HerrB hat geschrieben:Mir ist so, als wäre meine schon drin (aber dann hätte ich das hier schließen müssen)
Naja, wenn sich dieser Trad auf dieses Thema bezieht, dann ich es wohl noch nicht drin http://contenido.org/forum/viewtopic.php?t=14839

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 12. Dez 2006, 11:24

einfach mal in den Code gucken
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Fr 23. Feb 2007, 19:16

hi,

habe beim Import der advanced artikelliste gleiches Problem, sprich die Fehlermeldung

Code: Alles auswählen

Invalid argument supplied for foreach() in .../contenido/classes/contenido/class.module.php on line 290
habe daraufhin gleich die erste Lösung umgesetzt, erhalte aber immer noch diese Fehlermeldung.

Server Betriebssystem Apache/2
MySQL Serverversion 4.1.9-log
Installierte PHP-Version 5.1.6
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Mi 28. Feb 2007, 17:25

kann mir keiner helfen bei dieser Problematik?
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 28. Feb 2007, 23:42

bin nicht der meinung, dass es das selbe problem ist...
da gibts vielleicht einen anderen bug report der sich damit befasst, dieser hier ist es definitiv nicht...

ähm und ansatz hab ich jetzt auch keinen..
*** make your own tools (wishlist :: thx)

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Do 1. Mär 2007, 09:40

hm. das ist schlecht. Gesucht habe ich schon, vielleicht sollte ich die Suche aber nochmals bemühen. Ist nur eigenartig, weil das System sauber funktioniert und nur beim Import des Moduls zickt.

Naja, ich begebe mich mal erneut auf die Suche, wie gesagt.
Danke für's Feedback.
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

nicnac
Beiträge: 326
Registriert: Do 6. Jan 2005, 15:21
Wohnort: Bln
Kontaktdaten:

Beitrag von nicnac » Do 1. Mär 2007, 10:35

also,

ich bin beim suchen wieder über diesen Post gestolpert...
http://contenido.org/forum/viewtopic.ph ... or+foreach
und der führt mich hierhin... :(
Gruß nicnac
---------------
arbeite seit Contenido Version 4.4.5 mit dem System, ca. 30 Websites mit Contenido umgesetzt auf domainfactory, Strato und 1und1.

Gesperrt