Ergebnis 1 bis 6 von 6

Thema: Problem beim Update 3.1 zu 3.2 mit selber erstellter Erweiterung id, homeDir

  1. #1
    Contao-Nutzer Avatar von pgrob
    Registriert seit
    10.07.2009.
    Ort
    Schweiz
    Beiträge
    205
    Partner-ID
    10267

    Standard Problem beim Update 3.1 zu 3.2 mit selber erstellter Erweiterung id, homeDir

    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();
        }
    }

     
    ?>
    Geändert von pgrob (16.11.2016 um 15:59 Uhr)

  2. #2
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von pgrob Beitrag anzeigen
    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;

    Probier mal
    PHP-Code:
    $path = \FilesModel::findById($this->User->homeDir); 
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  3. #3
    Contao-Nutzer Avatar von pgrob
    Registriert seit
    10.07.2009.
    Ort
    Schweiz
    Beiträge
    205
    Partner-ID
    10267

    Standard

    Hallo xtra

    Perfekt, vielen Danke, das funktioniert.

    im Backend habe ich auch noch ein Modul mit der gleichen Fehlermeldung. Ich habe gestern Versucht deine Lösung hier ebenfalls einzubinden geht aber irgenwie nicht so ganz. Siehst du hier auf die schnelle warum das nicht geht

    PHP-Code:
        $checkLLB $this->checkFiles($user->homeDir);
            
              
    $llbstring '<br />LLB Check: ' . (($checkLLB) ? 'LLB Hochgeladen' 'Kein LLB');
              
    $string '<strong>'.$user->firstname " " $user->lastname "</strong> (" $user->email ") <br/ >" $validation .  $llbstring '<br />Validierungstatus: ' .$complete_validation;
              return 
    $string
        
    ///print_r($user);
      
    }
         function 
    checkFiles($home_dir){
             if(empty(
    $home_dir)){
                 return 
    0;
             }
              
    $path $this->Database->execute("SELECT id, path, type FROM tl_files WHERE id IN(".$home_dir.")");
            
    $path $path->row();
        
          
    //  $files = \FilesModel::findMultipleByBasepath($path['path']);
            
            
    $files = \FilesModel::findMultipleFilesByFolder($path['path']);
           
            if(!empty(
    $files->path) && $files->path !=''):
                
    $count++;
            endif;
            
            if(
    $count>0):
                
    // no waitlist
                
    return 1;
            else:
                return 
    0;
            endif;
      } 
    Danke dir nochmals für deine Hilfe, das hat mich nun doch ein großes Stück vorwärts gebracht.

  4. #4
    Contao-Nutzer Avatar von pgrob
    Registriert seit
    10.07.2009.
    Ort
    Schweiz
    Beiträge
    205
    Partner-ID
    10267

    Standard

    Oder vielleicht bessere Frage, wie komm ich an das Benutzerverzeichnis des Benutzers? Hier scheint das anders zu funktionieren ich kriege es aber nicht hin. Gib es da einen grundlegenden Aufbau wie ich vorgehen kann?

  5. #5
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    In deinem konkreten Fall musst du doch nur das verwenden?
    PHP-Code:
    $path = \FilesModel::findById($home_dir); 
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

  6. #6
    Contao-Nutzer Avatar von pgrob
    Registriert seit
    10.07.2009.
    Ort
    Schweiz
    Beiträge
    205
    Partner-ID
    10267

    Standard

    Hallo xtra, soeben eingesetzt und es funktioniert. Nochmals vielen Dank für deine Hilfe.

    Gruss Patrick

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •