Hallo Zusammen
Wir dürfen für einen Kunden eine Webseite updaten die aktuell auf dem Stand 3.1 ist. Bei der Webseite wurde vom Ersteller der Webseite einiges im Core selber angepasst wie auch eine eigene Erweiterung implementiert.
Das Problem mit den Anpassungen im Core konnte ich überall nachvollziehen und nun auch Updateischer anpassen, soweit so gut.
Mit der selber erstellten Erweiterung habe ich da allerdings weniger erfolg. Nach dem Update auf 3.2 Core & Erweiterungen erhalte ich zu Folgendem Select folgenden Error:
PHP-Code:
if(!isset($this->User->homeDir) || empty($this->User->homeDir)){
return;
}
$path = $this->Database->execute("SELECT id, path, type FROM tl_files WHERE id IN(".$this->User->homeDir.")");
$path = $path->row();
$files = \FilesModel::findMultipleByBasepath($path['path']);
$count = 0;
while($files->next()):
$file = $files->row();
if($file['type'] == 'file'):
$count++;
endif;
endwhile;
return $count;
}
Code:
[16-Nov-2016 15:16:51 Europe/Zurich] PHP Fatal error: Uncaught exception 'Exception' with message 'Query error: Invalid utf8 character string: '\xA1N\xFE\xD3\xAC' (SELECT id, path, type FROM tl_files WHERE id IN(¡NþÓ¬æŸ
Äzm”))' thrown in /home/httpd/vhosts/xx/xx/xx/system/modules/core/library/Contao/Database/Statement.php on line 295
#0 /home/httpd/vhosts/xx/xx/xx/system/modules/core/library/Contao/Database/Statement.php(264): Contao\Database\Statement->query()
#1 /home/httpd/vhosts/xx/xx/xx/system/modules/core/library/Contao/Database.php(194): Contao\Database\Statement->execute()
#2 /home/httpd/vhosts/xx/xx/xx/system/modules/event_tags/EventTagsClass.php(96): Contao\Database->execute('SELECT id, path...')
#3 /home/httpd/vhosts/xx/xx/xx/system/modules/event_tags/EventTagsClass.php(60): EventTagsClass->checkFiles()
#4 /home/httpd/vhosts/xx/xx/xx/system/modules/core/library/Contao/InsertTags.php(1129): EventTagsClass->myReplaceInsertTags('check_files::us...', false, '', Array, Array, Array, 42, 73)
#5 /home/httpd/vhosts/xx/xx/xx/system/modules/core/library/Contao/Controller.php(692): Contao\InsertTags->replace('<!DOCTYPE html>...', false)
#6 /home/httpd/vhosts/xx/xx/xx/system/modules/core/classes/FrontendTemplate.php(100): Contao\Controller::replaceInsertTags('<!DOCTYPE html>...', false)
#7 /home/httpd/vhosts/xx/xx/xx/system/modules/core/pages/PageRegular.php(190): Contao\FrontendTemplate->output(true)
#8 /home/httpd/vhosts/xx/xx/xx/system/modules/core/controllers/FrontendIndex.php(285): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#9 /home/httpd/vhosts/xx/xx/xx/index.php(20): Contao\FrontendIndex->run()
#10 {main}
Das Problem liegt ja darin das das Feld ".$this->User->homeDir." seit dem Update kein Varchar mehr ist sondern ein Binary und kann ja somit auch nicht mehr mit dem Feld Id verglichen werden, glaube ich zumindestens mal.
Ich habe vergeblich versucht die Abfrage anzupassen auch mit Hilfe von aktuellen Templates z.B. contentGallery.php aber leider ohne Erfolg. Im Grunde müsste ich eigentlich nur wissen ob sich im Benutzerverzeichnis des angemeldeten Benutzers Dateien befinden oder nicht.
In einem 2ten schritt müsste ich dann noch den Pfad inkl. Dateinamen ausgeben können wenn sich einen Datei im Benutzerverzeichnis befindet.
Hat hier jemand einen Rat?
Gruss Patrick
Nachtrag: So sieht das ganze File aus:
PHP-Code:
<?php
// Datei /system/modules/myinserttag/MyClass.php
class EventTagsClass extends \Frontend {
public function myReplaceInsertTags($strTag)
{
$arrSplit = explode('::', $strTag);
if ($arrSplit[0] == 'events_tags')
{
if(!\Input::get('events'))
return false;
$event = $this->getEvent();
$startTime = date("H:i", $event['startTime']);
$endTime = date("H:i", $event['endTime']);
$startDate = $this->parseDate("d. F Y", $event['startDate']);
$endDate = $this->parseDate("d. F Y", $event['endDate']);
$eventID = $event['id'];
// this case is if the dateEnd is same as dateStart
if($endDate == $this->parseDate("d. F Y", time())):
$endDate = $startDate;
endif;
if (isset($arrSplit[1]) && $arrSplit[1] == 'startTime'){
return $startTime;
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'endTime'){
return $endTime;
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'startDate'){
return $startDate;
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'endDate'){
return $endDate;
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'title'){
return $event['title'];
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'id'){
return $eventID;
}
}
if ($arrSplit[0] == 'file_embed'){
if (isset($arrSplit[1]) && $arrSplit[1] == 'agb'){
return '<a href="files/articles/downloads/pdf/AGB_ZAG_WB_NEU.pdf" target="new">AGB</a>';
}
}
if($arrSplit[0] == 'check_files'){
if (isset($arrSplit[1]) && $arrSplit[1] == 'user'){
$count = $this->checkFiles();
if($count < 1):
return '<img src="files/layout/spacer.gif" width="18" height="16" /><img class="zag_attention" src="files/layout/zag_attention.png" width="16" height="16" title="'.$GLOBALS['TL_LANG']['tl_module_kursverwaltung_kurse']['certificate'].'" />';
endif;
}
if (isset($arrSplit[1]) && $arrSplit[1] == 'anmeldung'){
$count = $this->checkFiles();
if($count < 1):
return '<div class="details">'.$GLOBALS['TL_LANG']['tl_module_kursverwaltung_kurse']['certificate_none'].'</div>';
endif;
}
}
if($arrSplit[0] == 'team_search'){
if (isset($arrSplit[1]) && $arrSplit[1] == 'abc'){
$span = '<span>%s</span>';
$abc = '';
foreach (range('A', 'Z') as $char) {
$abc .= sprintf($span, $char);
}
return $abc;
}
}
// nicht unser Insert-Tag
return false;
}
function checkFiles(){
$this->import('FrontendUser', 'User');
/**
* ESCAPE if user does not has any folder yet
*/
if(!isset($this->User->homeDir) || empty($this->User->homeDir)){
return;
}
$path = $this->Database->execute("SELECT id, path, type FROM tl_files WHERE id IN(".$this->User->homeDir.")");
$path = $path->row();
$files = \FilesModel::findMultipleByBasepath($path['path']);
$count = 0;
while($files->next()):
$file = $files->row();
if($file['type'] == 'file'):
$count++;
endif;
endwhile;
return $count;
}
function getEvent(){
$strTable = 'tl_calendar_events';
$arrColumns = array("($t.id=? OR $t.alias=?)");
$varId = \Input::get('events');
$eventObj = $this->Database->query('SELECT * from '.$strTable.' WHERE id='.(is_numeric($varId) ? $varId : 0).' OR alias="'.$varId.'"');
return $eventObj->row();
}
}
?>