Bon ca reste nébuleux.
Je suis donc repassé en $key au lieu de ++$key.
Voici les logs que j’ai généré : https://gist.github.com/mguyard/2703a8e4337a45206d5bd8c548669d0d
J’ai ajouté 2 logs dans ma fonction, une pour voir le $key et l’autre l’object $cmd avant le save :
private function createCmd() {
// Definition et chargement du fichier de configuration globale qui inclus notament les commandes
$filename = __ROOT__.'/core/config/config.json';
$config = $this->loadConfigFile($filename, 'commands');
foreach ($config['commands'] as $key => $command) {
$newCmd = false;
$cmd = $this->getCmd(null, $command['logicalId']);
// Si la commande n'existe pas deja
if (!is_object($cmd)) {
$newCmd = true;
$cmd = new Diagral_eOneCmd();
$cmd->setName(__($command['name'], __FILE__));
}
// Le parametre JSON masterCodeNeed n'existe pas ou est à false ou bien que le MasterCode est rempli
if (! isset($command['masterCodeNeed']) || $command['masterCodeNeed'] === false || ! empty($this->getConfiguration('mastercode'))) {
$cmd->setOrder($key);
log::add('Diagral_eOne', 'info', 'Debug souci order (cle dans setorder) ' . $key);
$cmd->setEqLogic_id($this->getId());
if( isset($command['configuration']['function'])) {
list($fieldType, $fieldFunction)= explode("::", $command['configuration']['function']);
log::add('Diagral_eOne', 'debug', 'postSave::UpdateContent::' . $command['logicalId'] . ' ' . $fieldType . ' with function ' . $fieldFunction);
if (is_callable(array(get_class($this), $fieldFunction))) {
log::add('Diagral_eOne', 'debug', 'postSave::UpdateContent::' . $command['logicalId'] . 'VerifyFunctionCallable ' . $fieldFunction . ' TRUE');
$contentField = call_user_func(array(get_class($this), $fieldFunction));
$parsedContent = "";
switch ($fieldType) {
case 'listValue':
$parsedContent = $this->generatePossibilitiesSelect($contentField);
break;
}
log::add('Diagral_eOne', 'debug', 'postSave::UpdateContent::GetReturnFunction ' . $parsedContent);
$command['configuration'][$fieldType] = $parsedContent;
unset($command['configuration']['function']);
log::add('Diagral_eOne', 'debug', 'postSave::UpdateContent::NewCommand ' . var_export($command, true));
} else {
log::add('Diagral_eOne', 'debug', 'postSave::UpdateContent::VerifyFunctionCallable ' . $fieldFunction . ' FALSE');
}
}
utils::a2o($cmd, $command);
log::add('Diagral_eOne', 'info', 'Debug souci order (cmd object avant save) ' . var_export($cmd, true));
$cmd->save();
if ($newCmd === true) {
log::add('Diagral_eOne', 'info', 'postSave::createCmd '.$command['logicalId'].' ('.$command['name'].')');
} else {
log::add('Diagral_eOne', 'info', 'postSave::updateCmd '.$command['logicalId'].' ('.$command['name'].')');
}
} else {
log::add('Diagral_eOne', 'info', 'postSave::bypassCmd '.$command['logicalId'].' ('.$command['name'].')');
}
}
}
A la premiere creation de commande, tout es ok. Le $key correspond à l’order que je retrouve dans l’object $cmd. Et quand je regarde les commandes dans l’interface elles ont bien le bon order.
Par contre a la creation de la seconde série de commande après la configuration dans l’équipement, j’ai le $key qui correspond à mon order. Donc tout semblais ok mais en regardant les commandes, je vois que les commandes force_groups_refresh_json et force_scenarios_refresh_json ont respectivement les order 5 et 6. Alors que dans le $cmd ces commandes avait le bon order.
Si je resave mes commandes encore, la j’ai tout les id à la suite 0 à 8 mais pas dans l’ordre indiqué dans mes logs (qui sont bons).
Donc il se passe quelque chose après le save qui motifiie set les order différemment de ce que l’on donne dans l’object $cmd.
@Loic une idée de ce qui peut se passer ? Un bug ou je fais mal une chose ?