Willkommen Gast.
Um die volle Funktionalität des Forums nutzen zu können,
müssen Sie sich einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

 
Erweiterte Suche

31.110 Beiträge in 6.475 Themen- von 6.477 Mitglieder - Neuestes Mitglied: Frideborg

02-04-2020 06:08:22
JOOM::GALLERY::FORUMArchivJoomGallery 1.5 MVCJoomGallery MVC ALPHA/BETAGelöste Themen: JoomGallery MVCBuild 20091210: Anlegen neuer Kategorien im Backend
Seiten: [1]
Drucken
Autor Thema: Build 20091210: Anlegen neuer Kategorien im Backend  (Gelesen 5561 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« am: 13-12-2009 15:30:47 »

Hallo,

beim Testen der JoomGallery MVC Build 20091210 trat bei mir nach einer frischen Installation folgender merkwürdige Effekt auf:
Beim Anlegen von neuen Kategorien im Backend mit Hilfe des Kategoriemanagers wurde der Alias immer mit dem aktuellen Datum belegt (z.B. 2009-12-13-12-14-10).

Nach einigem Forschen habe ich dann auch festgestellt, das die Kategoriepfade im Verzeichnis ../images/joomgallery/ immer nur aus einem "_" mit angehängter Kategorie-ID bestanden, also z.B. _1, _2, _3_4 usw.. In der Datenbank sind sie auch entsprechend abgespeichert.
Es fehlten also die vorangestellten Kategorienamen. Ich meine, auch schon Mal im Forum von diesem Effekt gelesen zu haben.

Nach einigen Recherchen bin ich dann auf die Funktion fixFilename() der Klasse JoomFile in ../administrator/components/com_joomgallery/helpers/file.php gestoßen.

Der Ursprung des Effekts ist in der Backend Konfiguration zu suchen. Aus irgendeinem Grund war bei mir nach der frischen Installation der JoomGallery

General Settings >> Replacements >> Prevent special characters >> Yes
General Settings >> Replacements >> Special characters >> Special characters >> "" (kein Eintrag also leer)
General Settings >> Replacements >> Special characters >> New characters >> ae|oe|ue|ss

Der Effekt tritt aber immer auf, wenn die Anzahl der Einträge für Special characters kleiner ist als die Anzahl der Einträge für New characters.

Das liegt an folgendem Codeschnippsel in der Funktion fixFilename()
Code
    if($lengthsearch > $lengthreplace)
   {
     while($lengthsearch > $lengthreplace)
     {
       array_push($filenamereplace, '');
       $lengthreplace = $lengthreplace + 1;
     }
   }
   else
   {
     if($lengthreplace > $lengthsearch)
     {
       while($lengthreplace > $lengthsearch)
       {
         array_push($filenamesearch, '');
         $lengthsearch = $lengthsearch + 1;
       }
     }
   }
 

Hier werden bei ungleicher Anzahl "künstliche" Einträge für die Such- und Ersetzungsmuster erzeugt.
Dies führt bei den angegebenen Bedingungen zu einem regulären Ausdruck zum Filtern des Kategorienamens, der den gesamten Kategorienamen eliminiert (z.B.preg_replace('!+!i', '', $filename);

Ich habe ein paar kleinere Änderungen und Umbauten vorgenommen.
Code
  function fixFilename($orig, $replace_extension = false)
 {
   $config = & JoomConfig::getInstance();
 
   $orig = strtolower(basename($orig));
 
   // replace special chars
   $filenamesearch = $config->get('jg_filenamesearch');
   if(!empty($filenamesearch))
   {
     $filenamesearch  = explode("|", $config->get('jg_filenamesearch'));
   }
   else
   {
     $filenamesearch = array();
   }
 
   $filenamereplace = $config->get('jg_filenamereplace');
   if(!empty($filenamereplace) && count($filenamesearch) > 0)
   {
     $filenamereplace = explode("|", $config->get('jg_filenamereplace'));
   }
   else
   {
     $filenamereplace = array();
   }
 
   //checks for different array-length
   $lengthsearch  = count($filenamesearch);
   $lengthreplace = count($filenamereplace);
   if($lengthsearch > $lengthreplace)
   {
     //replace missing replace patterns with ''
     while($lengthsearch > $lengthreplace)
     {
       array_push($filenamereplace, '');
       $lengthreplace = $lengthreplace + 1;
     }
   }
   else
   {
     // replace missing search patterns with it's replace patterns (does not harm)
     if($lengthreplace > $lengthsearch)
     {
       for($i = ($lengthsearch) ; $i < $lengthreplace; $i++)
       {
         array_push($filenamesearch, $filenamereplace[ $i ]);
       }
     }
   }
 
   // replace whitespace with underscore
   array_push($filenamesearch, '\s');
   array_push($filenamereplace, '_');
   // replace other stuff
   array_push($filenamesearch, '[^a-z_0-9-]');
   array_push($filenamereplace, '');
 
   //checks for extension
   $extensions = array('.jpeg','.jpg','.jpe','.gif','.png');
   $extension  = false;
   for($i = 0; $i < count($extensions); $i++)
   {
     $extensiontrue = substr_count($orig, $extensions[$i]);
     if($extensiontrue !=0 )
     {
       $extension = true;
       //if extension found, break
       break;
     }
   }
   //replace extension if present
   if($extension)
   {
     $fileextension        = ereg_replace('.*\.([^\.]*)$', '\\1', $orig);
     $fileextensionlength  = strlen($fileextension);
     $filenamelength       = strlen($orig);
     $filename             = substr($orig, -$filenamelength, -$fileextensionlength - 1);
    //no extension found (Batchupload)
   }
   else
   {
     $filename = $orig;
   }
 
   for($i = 0; $i < count($filenamesearch); $i++)
   {
     $searchstring = '!'.$filenamesearch[$i].'+!i';
     $filename     = preg_replace($searchstring, $filenamereplace[$i], $filename);
   }
   if($extension && !$replace_extension)
   {
     //returns filename with extension for regular upload
     return $filename.'.'.$fileextension;
   }
   else
   {
     //returns filename without extension for batchupload
     return $filename;
   }
 }
 

Gruß
Erftralle
« Letzte Änderung: 18-12-2009 20:49:46 von Erftralle » Gespeichert
aHa
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 2.367


WWW
« Antworten #1 am: 14-12-2009 17:59:05 »

Hallo Erftralle,
die fehlenden Zeichen in 'Special characters' sollten richtig nach der Installation angezeigt werden, wenn die
Datei 'install.joomgallery.php' in UTF-8 (ohne BOM) abgespeichert wird. Zumindest hat es dann bei mir funktioniert.

Um dennoch Fehlersituationen zu vermeiden, würde ich an der Quelle ansetzen, dem Sichern der Konfiguration.

Vorschlag:
Datei 'administrator/components/com_joomgallery/helpers/config.php' im Bereich 327 erweitern:
Code
if(!$config->store())
{
 return false;
}
 

Datei 'administrator/components/com_joomgallery/tables/joomgalleryconfig.php',
zum Ende der Funktion check(), einfügen
Code
//check inbalanced count of special chars to be replaced
if ($this->jg_filenamewithjs)
{
 if(count($this->jg_filenamesearch) == 0 || count($this->jg_filenamereplace) == 0)
 {
   return false;
 }
 //count the separators
 if(substr_count($this->jg_filenamesearch,'|') != substr_count($this->jg_filenamereplace,'|'))
 {
   return false;
 }
}
return true;
 
Ein erster Ansatz für eine solche Überprüfung....

In dem Fall würde ein JGA_SETTINGS_ERROR ausgegegeben werden. Diese Meldung könnte man vielleicht
um einen Hinweis auf die 'Fehleingabe(n)' ergänzen....

Gruß
Andreas
« Letzte Änderung: 14-12-2009 18:04:10 von aHa » Gespeichert
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #2 am: 15-12-2009 20:57:41 »

Hallo Andreas,

die Datei install.joomgallery.php war bei mir in "latin1" codiert, deswegen wohl die fehlenden Zeichen in Special characters.

Guter Einwand, das Übel an der Quelle (dem Benutzer sm_wink ) zu eliminieren. Du meintest aber doch sicher
Code
    if(!$config->check())
   {
     return false;
   }
 
Den erwähnten Codeschnipsel in meinem vorangegangenen Beitrag kann man ja dann auch eleminieren sm_wink .

Gruß
Erftralle
Gespeichert
aHa
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 2.367


WWW
« Antworten #3 am: 15-12-2009 21:16:42 »

Hallo Erftralle,
danke für die Korrektur im Code, das meinte ich auch...
Na ja, ich meinte mit Übel auch mehr die Eingaben des Benutzers sm_wink

Wir sind der Meinung, dass wir beide Codes/Vorschläge ein wenig abgeändert verwenden.
Zum einen sollte das Speichern nicht verhindert werden, wenn von z.B. 20 vorgenommenen Änderungen eine einzige falsch sein sollte.
Weiterhin sollten keine invaliden Einstellungen vorgenommen werden und vor dem Speichern sinnvoll geändert werden.
Gleichzeitig wird dann aber nach dem Speichern der Konfiguration eine entsprechende Meldung angezeigt.

Gruß
Andreas
Gespeichert
daydreamer
Full Member
***
Offline Offline

Beiträge: 284


« Antworten #4 am: 15-12-2009 21:57:32 »

Hey,
ich hänge mich einfach mal an
mir ist soeben aufgefallen das bei mir bei sämtlichen Bildern der Original Dateiname fehlt und der Name z.B.
_20091215_1952359291.jpg ist.

ich wollt nur kurz Bescheid geben, gehe aber momentan davon aus das es der gleiche Fehler ist.
(lasse mich aber gerne was besserem belehren)

mfg
daydreamer
Gespeichert
aHa
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 2.367


WWW
« Antworten #5 am: 15-12-2009 22:24:40 »

Hi daydreamer,
schau mal bitte, ob das Feld neben 'Special characters' leer ist

Gruß
Andreas
Gespeichert
daydreamer
Full Member
***
Offline Offline

Beiträge: 284


« Antworten #6 am: 15-12-2009 22:44:46 »

Hey,
schau mal bitte, ob das Feld neben 'Special characters' leer ist

das bei General-Settings-> Replacements ?

das ist leer.

mfg dayderamer
Gespeichert
daydreamer
Full Member
***
Offline Offline

Beiträge: 284


« Antworten #7 am: 15-12-2009 22:47:30 »

Hey,
Nachtrag

habe es gerade mit

ä|ö|ü|ß

aus der aktuellen Version gefüllt und jetzt geht es.

mfg
daydreamer
Gespeichert
aHa
Entwickler-Team
Hero Member
*****
Offline Offline

Beiträge: 2.367


WWW
« Antworten #8 am: 18-12-2009 19:26:43 »

Hallo,
könntet Ihr beide bitte bestätigen, dass dieser Fehler nicht mehr in der aktuellen Alpha auftritt?

Danke
Gruß
Andreas
Gespeichert
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #9 am: 18-12-2009 19:51:18 »

Hallo Andreas,

ich werde es noch testen, nur nicht hetzen sm_smilewinkgrin.

Gruß
Erftralle
Gespeichert
Erftralle
Sr. Member
****
Offline Offline

Beiträge: 803


« Antworten #10 am: 18-12-2009 20:49:33 »

Hallo,
schöne Lösung. Funktioniert jetzt einwandfrei.
Den "gefährlichen Code" sm_wink (die zweite Schleife des Codeschnippsels von fixFilename(), s.o.) habt ihr aber noch drin gelassen.
Aber der wird ja jetzt nicht mehr wirksam.

Gruß
Erftralle
Gespeichert
Seiten: [1]
Drucken
Gehe zu:  

HOSTED BY SCHWARZKÜNSTLER ®

PROTECTED BY  ZB BLOCK  AND Project Honey Pot
Theme orange-lt created by panic

Bad Behavior has blocked 1841 access attempts in the last 7 days.

mouth