Console: Sessionuser wird nicht gesetzt
Beim Ausführen von des quiqqer:contentgenerator konsolentools ist mir aufgefallen, dass der Sessionbenutzer nicht richtig gesetzt wird, trotz Anmeldung.
Sichtbare Fehlermeldungen:
Bei Erstellung der Bundesland-Seite für das Bundesland "Saarland" ist ein Fehler aufgetreten:
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'e_user' at row 1
Array
(
[query] => UPDATE `Mainproject_de_sites` SET `name` = :setv0, `title` = :setv1, `short` = :setv2, `content` = :setv3, `type` = :setv4, `layout` = :setv5, `nav_hide` = :setv6, `e_user` = :setv7, `order_type` = :setv8, `order_field` = :setv9, `image_emotion` = :setv10, `image_site` = :setv11, `release_from` = :setv12, `release_to` = :setv13, `extra` = :setv14 WHERE `id` = :wherev0
[prepare] => Array
(
[setv0] => Saarland
[setv1] => Saarland
[setv2] =>
[setv3] => <gekürzt>
[setv4] => quiqqer/contentgenerator:types/bundesland
[setv5] =>
[setv6] => 1
[setv7] =>
[setv8] => manuell
[setv9] => 13
[setv10] =>
[setv11] =>
[setv12] => 2017-07-18 14:04:32
[setv13] =>
[setv14] => <gekürzt>
[wherev0] => 120196
)
)
Schritte zur Reproduktion:
-
quiqqer/contentgenerator
installieren Repository - MySql strict mode aktivieren
- Konsolentool welches versucht das Feld 'e_user' zu setzen speichern
- SQL Fehler sollte passieren, da keine UserID ausgelesen werden kann.
Relevante Codestellen
QUI\Projects\Site\Edit.php:575
// save main data
$update = QUI::getDataBase()->update(
$this->TABLE,
array(
'name' => trim($this->getAttribute('name')),
'title' => trim($this->getAttribute('title')),
'short' => $this->getAttribute('short'),
'content' => $this->getAttribute('content'),
'type' => $this->getAttribute('type'),
'layout' => $this->getAttribute('layout'),
'nav_hide' => $this->getAttribute('nav_hide') ? 1 : 0,
'e_user' => QUI::getUserBySession()->getId(),
// ORDER
'order_type' => $order_type,
'order_field' => $order_field,
// images
'image_emotion' => $this->getAttribute('image_emotion'),
'image_site' => $this->getAttribute('image_site'),
// release
'release_from' => $release_from,
'release_to' => $release_to,
// Extra-Feld
'extra' => json_encode($siteExtra)
),
array(
'id' => $this->getId()
)
);
QUI\Users\Manager.php:1095
/**
* Get the Session user
*
* @return QUI\Interfaces\Users\User
*/
public function getUserBySession()
{
if (defined('SYSTEM_INTERN')) {
return $this->getSystemUser();
}
if (!is_null($this->Session)) {
return $this->Session;
}
if ($this->multipleCallPrevention) {
return $this->getNobody();
}
$this->multipleCallPrevention = true;
// max_life_time check
try {
$this->checkUserSession();
$this->Session = $this->get(QUI::getSession()->get('uid'));
} catch (QUI\Exception $Exception) {
$this->Session = $this->getNobody();
}
return $this->Session;
}
Bemerkung
Bei unseren letzten Tests für ein Script außerhalb der Konsole konnten wir das Problem fixen indem wir "SYSTEM_INTERN" definieren.
Allerdings gingen wir davon aus, dass durch den Login bei den "richtigen" Konsolentools, das Problem nicht auftreten sollte.
Allerdings scheint dort auch ein Problem vorzuliegen.
Des Weiteren ist anzumerken, dass dadurch der neu eingeführte Parameter $SaveUser
in der Methode public function save($SaveUser = false)
nicht beachtet.
Wenn man konsitent mit z.B. der public function createChild($params = array(),$childPermissions = array(),$User = false)
Methode sein will, sollte die ID des Saveusers in dem e_user
Feld stehen.