Benutzer-Werkzeuge

Webseiten-Werkzeuge


typo3:studip

Extension importstudip - Anpassungen an TYPO3-7.6

Zusammenfassung der bisherigen Änderungen

  • die Klassen werden nicht geladen, autoload ist bei TYPO3-v7 anders
  • die Grafiken werden nicht geladen, der Pfad zu gfx hat sich geändert
  • die Bezeichner in den Formularen (Klassen) haben sich geändert; javascript greift dadurch völlig daneben
  • die Struktur des Config-arrays der Formularseite hat sich geändert; die Funktion getConfig muß total neu geschrieben werden;
  • kleinere Änderungen

kein autoload der Klassen

TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunctionNo class named UniPassau\Importstudip\Utility\ConfigForm

zunächst werden die Klassen nicht geladen. unser TYPO3 läuft im sogenannten composer Mode. Es gibt eine zentrale composer.json im Root der TYPO3-Installation. Wenn die Studip-Extension im Verzeichnis typo3conf/ext/ installiert ist, müssen diese Zeilen der composer.json hinzugefügt werden:

"autoload": {
          "psr-4": {
            "UniPassau\\Importstudip\\": "typo3conf/ext/importstudip/Classes/"
          },
          "classmap": [
                      "typo3conf/ext/importstudip/Resources/Private/PHP/restclient/"
                      ]
        }

Ich habe dann noch folgendes gemacht:

php composer.phar dumpautoload
rm -rf /var/www/htdocs/typo3temp/Cache/*

dieses „dumpautoload“ soll den compoeser veranlassen, alle Klassen neu zu laden. Ob das wirklich nötig ist weiß ich nicht. Zusätzlich habe ich den TYPO3-Cache gelöscht. Auch dieser Schritt ist vielleicht nicht nötig.

Es werden jetzt alle Klassen aus dem „Classes“-Verzeichnis geladen und zusätzlich eine Klasse RestClient.

FlashMessage Fehler

PHP Fatal error: Call to undefined method UniPassau\\Importstudip\\Utility\\StudipRESTHelper::enqueue()

Nach dem Studium des allwissenden Internet bin ich auf diese Lösung gestoßen:

You are calling your code statically, which is not the case with this function and that is the reason your call fails!

Please try this:

$flashMessageService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Messaging\FlashMessageService::class);
$messageQueue = $flashMessageService->getMessageQueueByIdentifier();
$messageQueue->addMessage($message);

Ich habe also in der Datei „StudipRESTHelper.php“ diese Zeile

\TYPO3\CMS\Core\Messaging\FlashMessageQueue::addMessage($message);

durch diese Zeilen ersetzt:

$flashMessageService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Messaging\FlashMessageService::class);
$messageQueue = $flashMessageService->getMessageQueueByIdentifier();
$messageQueue->addMessage($message);

fehlende Konfiguration beim StudIP-Gegner, kein auth und keine routen

PHP Warning: Invalid argument supplied for foreach() in /var/www/hss.dmknet.de/htdocs/typo3conf/ext/importstudip/Classes/Utility/StudipConnector.php line 39

dieser Fehler ist eine Folge dieses Datenbankfehlers oder umgekehrt:

ERROR => "Column 'data' cannot be null" (28 chars)
   lastBuiltQuery => "INSERT INTO tx_importstudip_config (route,data,mkdate,chdate) VALUES ('exter
      n/externalpagetypes',NULL,'1468565423','1468565423')" (128 chars)

hier wird „NULL“ als Daten übergeben, und das ist scheinbar nicht erlaubt.

Beim Gegner finde ich in der access.log:

GET /api.php/extern/externalpagetypes HTTP/1.1" 401 39 "-" "PHP RestClient/0.1.2"

die Anmeldedaten stimmen also nicht!

Nutzer in Stud.IP eingerichtet, Routen konfiguriert in der api bei Stud.IP

SQL-Fehler bei UpdateQuery

es gibt erstmal einen anderen Fehler:

array(4 items)
   caller => "TYPO3\CMS\Core\Database\DatabaseConnection::exec_UPDATEquery" (60 chars)
   ERROR => "Unknown column 'extern' in 'where clause'" (41 chars)
   lastBuiltQuery => "UPDATE tx_importstudip_config SET data='[\"0\",\"1\",\"5\",\"9\"]',chdate='1
      468823674' WHERE route=extern/externalpagetypes" (123 chars)

Hier wird kein String an den SQL-Updater übergeben. Ich habe folgendes geändert:

diff StudipConnector.php.org StudipConnector.php
337c337
<                         'route=' . $route,
---
>                         'route=' . "'" . $route . "'",

Dieser Fehler taucht vermutlich immer dann auf, wenn der Cache abgelaufen ist und die DB-Tabellen aktualisiert werden müssen.

Fehler Übergabe an simplexml_load_string in getConfig - kein String

hier hängt er fest:

00211:     public function chooseUserInstitute($parameters, $config) {
00212:         print_r($parameters['row']['pi_flexform']); 

00213:         $config = self::getConfig($parameters);

00214:         $html = '<div id="tx-importstudip-choose-user-institute" data-input-name="'.
00215:             $parameters['itemFormElName'].'" data-input-value="'.

und als Folgefehler

00598:         // Extract already configured flexform values.

00599:         $xml = simplexml_load_string($data['row']['pi_flexform']);

00600:         if ($xml) {
00601:             $json = json_encode($xml);

es wird ein String erwartet für simplexml_load_string, aber ein array übergeben

die Datenstruktur der Konfiguration einer Seite hat sich mit TYPO3-V7 völlig geändert.

Ich habe mir die Struktur der Konfigurationsdaten angeschaut und die Funktion getConfig völlig neu entwickelt auf die Schnelle:

public static function getConfig($data) {
        $result = array();
        // Extract already configured flexform values.
        $config = $data['row']['pi_flexform']['data']['dataSheet']['lDEF'];
        if (is_array($config)) {
            foreach ($config as $key => $value) {
                $result[$key] = $value['vDEF'];
            }
        }
        return $result;   
    }

Baumansicht Einrichtungen, keine Icons, CSS verwurschtelt

grafiken werden nicht geladen, Ansicht Einrichtungsbaum verwurschtelt

css-file angepasst, eventuell browserabhängig, Grafiken liegen bei TYPO3-7 unter sysext/t3skin/icons/gfx/ol, Pfade angepasst in ConfigForm.php

sieht jetzt so aus:

AJAX-Fehler, statisch - dynamisch

PHP Runtime Deprecation Notice: Non-static method UniPassau\Importstudip\Utility\ConfigForm::getStatusgroupForm() should not be called statically, assuming $this from incompatible context in /var/www/hss.dmknet.de/htdocs/typo3conf/ext/importstudip/Classes/Utility/AjaxHandler.php

ich mußte die Klasse AjaxHandler vollständig ändern und alle Aufrufe dynamisch machen, hier ein Beispiel:

<         return ConfigForm::getSmallNewsForm($inputname, $value);
---
>         $configform = new ConfigForm();
>         return $configform->getSmallNewsForm($inputname, $value);

OK

alle Input-Felder sind aufgeklappt und sichtbar

eigentlich sollen die nach und nach je nach Anforderung aufgeklappt werden

verfluchte Schweinerei, in TYPO3-7 wurden scheinbar die Bezeichner geändert in den Templates für die Forms. Das Javascript greifr jetzt nicht mehr, weil es die Bezeichner nicht mehr findet. Ich mußte die js-datei anpassen nach folgendem Muster:

26c26
<             closest('.t3-form-field-container');
---
>             closest('.form-section');
der Bezeichner t3-form-field-container ist nicht mehr vorhanden im Backend von TYPO3-v7.6

jetzt sieht es so aus:

Fehler in JS, Statusgroups

es erfolgt eine Abfrage von Statusgruppen für ein Institute, obwohl beim Konfigurieren noch kein Institute ausgewählt wurde. Dies erzeugt einen internen AJAX-Fehler.

Ich habe die JS-Datei geändert:

136c136,137
<                     Tx_ImportStudip.enableInput('tx-importstudip-statusgroups',
---
>                     if (TYPO3.jQuery('#tx-importstudip-institutes').find('input[type="radio"]:checked').length != 0) {
>                       Tx_ImportStudip.enableInput('tx-importstudip-statusgroups',
143c144,145
<                     );
---
>                       );
>                     }  

also eine if-abfrage ergänzt. Das Statusgruppenform wird erst aufgerufen, wenn ein radio-Button checked ist.

bis hierhin, es gibt erstmal keinen Fehler mehr bei der Konfiguration

Fehler bei Ansicht der Seite

Fatal error: Class 'TYPO3\CMS\Extbase\MVC\Controller\ActionController' not found in /var/www/htdocs/typo3conf/ext/importstudip/Classes/Controller/ImportStudipController.php on line 26

aus MVC wurde Mvc, der neue Aufruf ist also

class ImportStudipController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController

OK

HURRA

BINGO !!!! es funktioniert!! Das war ja was.

weitere Fehler

weitere Einstellungen nicht aufgeklappt

es können keine weiteren Einstellungen vorgenommen werden zur Hauptauswahl, weil die entsprechenden Formulare nicht sichtbar sind:

es müssen weitere Änderungen an der javascript-Datei vorgenommen werden!
diff tx_importstudip.js~ tx_importstudip.js
691c691
<         var container = element.closest('.form-section');
---
>         var container = element.closest('.form-group');

jetzt sieht es so aus:

und nach dem aufklappen

fataler Fehler json-decode beim Bearbeiten des Forms Person-details

PHP Warning: json_decode() expects parameter 1 to be string, array given in /var/www/hss.dmknet.de/htdocs/typo3conf/ext/importstudip/Classes/Utility/ConfigForm.php line 121

der Fehler tritt nur auf, wenn man bei einer neuen Seite sofort „Mitarbeiter“ konfiguriert. Wenn man zunächst „Liste von Mitarbeitern“ anwählt und anschließend zu „Person“ wechselt, tritt der Fehler nicht auf. Vermutlich wird hier ein Parameter nicht gespeichert, zB Institute.

Anzeige Veranstaltungen kann nicht konfiguriert werden, es gibt diesen Ajax-Fehler:

PHP Warning: implode(): Invalid arguments passed in /var/www/htdocs/typo3conf/ext/importstudip/Classes/Utility/StudipConnector.php line 143
typo3/studip.txt · Zuletzt geändert: 2016/08/17 16:26 von 2007