diff --git a/automate.php b/automate.php index 1648671..5160961 100755 --- a/automate.php +++ b/automate.php @@ -81,7 +81,7 @@ // $request = new ModuleRequest('upload/local_data', array() ); // $response = $request->dispatch(); // var_dump( ManagerError::explicit($response->error) ); - // + // // } diff --git a/config/modules.json b/config/modules.json index 861f25c..741b1d8 100755 --- a/config/modules.json +++ b/config/modules.json @@ -207,7 +207,8 @@ "description": "Upload d'un journal d'appel au format .xml.", "permissions": ["admin"], "parameters": { - "file": { "description": "Fichier du journal d'appel.", "type": "FILE" } + "phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "number" }, + "file": { "description": "Fichier du journal d'appel.", "type": "FILE" } } }, diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index fc48207..3c93ceb 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -123,10 +123,10 @@ /* [4] Gestion de la reponse =========================================================*/ - $answer = new ModuleResponse($this->error); - $answer->appendAll($returned); + $response = new ModuleResponse($this->error); + $response->appendAll($returned); - return $answer; + return $response; } diff --git a/manager/module/call_log.php b/manager/module/call_log.php index a3a897d..2e3ed60 100644 --- a/manager/module/call_log.php +++ b/manager/module/call_log.php @@ -21,6 +21,7 @@ public static function unserialize($params){ extract($params); + // On formatte le numéro de téléphone $phone_number = Database::formatNumber($phone_number); diff --git a/manager/module/upload.php b/manager/module/upload.php index 8e02e66..d9a675d 100644 --- a/manager/module/upload.php +++ b/manager/module/upload.php @@ -4,6 +4,7 @@ use \manager\Database; use \manager\ResourceDispatcher; use \manager\sessionManager; + use \manager\ModuleRequest; use \manager\ManagerError; use \manager\Repo; @@ -110,41 +111,58 @@ public static function call_log($params){ extract($params); - return array( - 'ModuleError' => self::simpleFile( - 'call_log', // nom du dossier d'upload - 'xml', // format du fichier - $file, // Fichier lui-même - function($content){ // Vérification du format du fichier - /* (1) Vérification du format XML */ - $xml = simplexml_load_string($content); - if( $xml === false ) return false; // Si erreur de parsage, on retourne une erreur + /* [1] Gestion de l'upload du fichier et de la vžérification du format + =========================================================*/ + $uploadError = self::simpleFile( + 'call_log', // nom du dossier d'upload + 'xml', // format du fichier + $file, // Fichier lui-même + function($content){ // Vérification du format du fichier + /* (1) Vérification du format XML */ + $xml = simplexml_load_string($content); + if( $xml === false ) return false; // Si erreur de parsage, on retourne une erreur - /* (2) Vérification du contenu (balises) */ - // Doit avoir des Item(s) - if( !isset($xml->Item) ) + /* (2) Vérification du contenu (balises) */ + // Doit avoir des Item(s) + if( !isset($xml->Item) ) + return false; + + // Vérification de tous les champs + foreach($xml->Item as $log){ + $checkAttributes = isset($log['Id']); + $checkAttributes = $checkAttributes && isset($log['Number']); + $checkAttributes = $checkAttributes && isset($log['Name']); + $checkAttributes = $checkAttributes && isset($log['Date']); + $checkAttributes = $checkAttributes && isset($log['Duration']); + $checkAttributes = $checkAttributes && isset($log['Direction']); + $checkAttributes = $checkAttributes && isset($log['Type']); + + // Si on a pas tout les champs, on retourne une erreur + if( !$checkAttributes ) return false; - - // Vérification de tous les champs - foreach($xml->Item as $log){ - $checkAttributes = isset($log['Id']); - $checkAttributes = $checkAttributes && isset($log['Number']); - $checkAttributes = $checkAttributes && isset($log['Name']); - $checkAttributes = $checkAttributes && isset($log['Date']); - $checkAttributes = $checkAttributes && isset($log['Duration']); - $checkAttributes = $checkAttributes && isset($log['Direction']); - $checkAttributes = $checkAttributes && isset($log['Type']); - - // Si on a pas tout les champs, on retourne une erreur - if( !$checkAttributes ) - return false; - } - - /* (3) Si tout s'est bien passé, le format est bon */ - return true; } - ) - ); + + /* (3) Si tout s'est bien passé, le format est bon */ + return true; + } + ); + + + /* [2] Gestion du retour (unserialize) + =========================================================*/ + /* (1) Si erreur d'upload, on la renvoie */ + if( $uploadError != ManagerError::Success ) + return array( 'ModuleError' => $uploadError ); + + /* (2) Gestion du parsage (unserialize) du journal d'appel */ + $request = new ModuleRequest('call_log/unserialize', array( 'phone_number' => $phone_number ) ); + $response = $request->dispatch(); + + /* (3) Restitution du retour de `unserialize` */ + return array_merge( + array( 'ModuleError' => $response->error ), + $response->getAll() + ); } @@ -152,6 +170,16 @@ + + + + + + + + + + /* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL * * @file Pointeur vers $_FILES[''] @@ -160,106 +188,113 @@ public static function local_data($params){ extract($params); - return array( - 'ModuleError' => self::simpleFile( - 'local_data', // nom du dossier d'upload - 'json', // format du fichier - $file, // Fichier lui-même - function($content){ // Vérification du format du fichier - /* (1) Vérification du format JSON */ - $json = json_decode($content, true); - if( $json == null ) - return false; // Si erreur de parsage, on retourne une erreur + /* [1] Upload et vérifiaction du format du fichier + =========================================================*/ + $uploadError = self::simpleFile( + 'local_data', // nom du dossier d'upload + 'json', // format du fichier + $file, // Fichier lui-même + function($content){ // Vérification du format du fichier + /* (1) Vérification du format JSON */ + $json = json_decode($content, true); + if( $json == null ) + return false; // Si erreur de parsage, on retourne une erreur - /* (2) Vérification du contenu de premier niveau */ - $checkLevel0 = isset($json['subject']) && is_array($json['subject']); - $checkLevel0 = $checkLevel0 && isset($json['contacts']) && is_array($json['contacts']); - $checkLevel0 = $checkLevel0 && isset($json['mini']) && is_array($json['mini']); - $checkLevel0 = $checkLevel0 && isset($json['fiches']) && is_array($json['fiches']); + /* (2) Vérification du contenu de premier niveau */ + $checkLevel0 = isset($json['subject']) && is_array($json['subject']); + $checkLevel0 = $checkLevel0 && isset($json['contacts']) && is_array($json['contacts']); + $checkLevel0 = $checkLevel0 && isset($json['mini']) && is_array($json['mini']); + $checkLevel0 = $checkLevel0 && isset($json['fiches']) && is_array($json['fiches']); - // Erreur si level 0 incorrect - if( !$checkLevel0 ) + // Erreur si level 0 incorrect + if( !$checkLevel0 ) + return false; + + + /* (3) Vérification du sujet */ + $checkSubject = isset($json['subject']['username']) && is_string($json['subject']['username']); + $checkSubject = $checkSubject && isset($json['subject']['firstname']) && is_string($json['subject']['firstname']); + $checkSubject = $checkSubject && isset($json['subject']['lastname']) && is_string($json['subject']['lastname']); + $checkSubject = $checkSubject && isset($json['subject']['number']) && is_string($json['subject']['number']); + + // Erreur des attributs du sujet incorrects ou manquants + if( !$checkSubject ) + return false; + + + /* (4) Vérification des contacts */ + foreach($json['contacts'] as $contact){ + $checkContact = isset($contact['username']) && is_string($contact['username']); + $checkContact = $checkContact && isset($contact['firstname']) && is_string($contact['firstname']); + $checkContact = $checkContact && isset($contact['lastname']) && is_string($contact['lastname']); + $checkContact = $checkContact && isset($contact['number']) && ( is_numeric($contact['number']) || is_string($contact['number']) ); + + // Si erreur des attributs du contact incorrects ou manquants + if( !$checkContact ) return false; - - - /* (3) Vérification du sujet */ - $checkSubject = isset($json['subject']['username']) && is_string($json['subject']['username']); - $checkSubject = $checkSubject && isset($json['subject']['firstname']) && is_string($json['subject']['firstname']); - $checkSubject = $checkSubject && isset($json['subject']['lastname']) && is_string($json['subject']['lastname']); - $checkSubject = $checkSubject && isset($json['subject']['number']) && is_string($json['subject']['number']); - - // Erreur des attributs du sujet incorrects ou manquants - if( !$checkSubject ) - return false; - - - /* (4) Vérification des contacts */ - foreach($json['contacts'] as $contact){ - $checkContact = isset($contact['username']) && is_string($contact['username']); - $checkContact = $checkContact && isset($contact['firstname']) && is_string($contact['firstname']); - $checkContact = $checkContact && isset($contact['lastname']) && is_string($contact['lastname']); - $checkContact = $checkContact && isset($contact['number']) && ( is_numeric($contact['number']) || is_string($contact['number']) ); - - // Si erreur des attributs du contact incorrects ou manquants - if( !$checkContact ) - return false; - } - - - - /* (5) Vérification des mini-fiches */ - foreach($json['mini'] as $mini){ - $checkMini = isset($mini['uid']) && is_numeric($mini['uid']); - $checkMini = $checkMini && isset($mini['username']) && is_string($mini['username']); - $checkMini = $checkMini && isset($mini['firstname']) && is_string($mini['firstname']); - $checkMini = $checkMini && isset($mini['lastname']) && is_string($mini['lastname']); - $checkMini = $checkMini && isset($mini['sexe']) && is_array($mini['sexe']); - $checkMini = $checkMini && isset($mini['age']) && is_string($mini['age']); - $checkMini = $checkMini && isset($mini['job']) && is_string($mini['job']); - $checkMini = $checkMini && isset($mini['loc']) && is_array($mini['loc']); - - // Si erreur des attributs des mini-fiches incorrects ou manquants - if( !$checkMini ) - return false; - } - - - - /* (6) Vérification des fiches */ - foreach($json['fiches'] as $fiches){ - $checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']); - $checkFiche = $checkFiche && isset($fiches['username']) && is_string($fiches['username']); - $checkFiche = $checkFiche && isset($fiches['firstname']) && is_string($fiches['firstname']); - $checkFiche = $checkFiche && isset($fiches['lastname']) && is_string($fiches['lastname']); - $checkFiche = $checkFiche && isset($fiches['sexe']) && is_array($fiches['sexe']); - $checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']); - $checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']); - $checkFiche = $checkFiche && isset($fiches['loc']) && is_array($fiches['loc']); - $checkFiche = $checkFiche && isset($fiches['loc2']) && is_array($fiches['loc2']); - $checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']); - $checkFiche = $checkFiche && isset($fiches['famsit']) && is_array($fiches['famsit']); - $checkFiche = $checkFiche && isset($fiches['reltype']) && is_array($fiches['reltype']); - $checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']); - $checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']); - $checkFiche = $checkFiche && isset($fiches['duration']) && is_array($fiches['duration']); - $checkFiche = $checkFiche && isset($fiches['context']) && is_array($fiches['context']); - $checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']); - $checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']); - $checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']); - $checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']); - - // Si erreur des attributs des fiches incorrects ou manquants - if( !$checkFiche ) - return false; - } - - - - return true; } - ) - ); + + + + /* (5) Vérification des mini-fiches */ + foreach($json['mini'] as $mini){ + $checkMini = isset($mini['uid']) && is_numeric($mini['uid']); + $checkMini = $checkMini && isset($mini['username']) && is_string($mini['username']); + $checkMini = $checkMini && isset($mini['firstname']) && is_string($mini['firstname']); + $checkMini = $checkMini && isset($mini['lastname']) && is_string($mini['lastname']); + $checkMini = $checkMini && isset($mini['sexe']) && is_array($mini['sexe']); + $checkMini = $checkMini && isset($mini['age']) && is_string($mini['age']); + $checkMini = $checkMini && isset($mini['job']) && is_string($mini['job']); + $checkMini = $checkMini && isset($mini['loc']) && is_array($mini['loc']); + + // Si erreur des attributs des mini-fiches incorrects ou manquants + if( !$checkMini ) + return false; + } + + + + /* (6) Vérification des fiches */ + foreach($json['fiches'] as $fiches){ + $checkFiche = isset($fiches['uid']) && is_numeric($fiches['uid']); + $checkFiche = $checkFiche && isset($fiches['username']) && is_string($fiches['username']); + $checkFiche = $checkFiche && isset($fiches['firstname']) && is_string($fiches['firstname']); + $checkFiche = $checkFiche && isset($fiches['lastname']) && is_string($fiches['lastname']); + $checkFiche = $checkFiche && isset($fiches['sexe']) && is_array($fiches['sexe']); + $checkFiche = $checkFiche && isset($fiches['age']) && is_string($fiches['age']); + $checkFiche = $checkFiche && isset($fiches['job']) && is_string($fiches['job']); + $checkFiche = $checkFiche && isset($fiches['loc']) && is_array($fiches['loc']); + $checkFiche = $checkFiche && isset($fiches['loc2']) && is_array($fiches['loc2']); + $checkFiche = $checkFiche && isset($fiches['studies']) && is_string($fiches['studies']); + $checkFiche = $checkFiche && isset($fiches['famsit']) && is_array($fiches['famsit']); + $checkFiche = $checkFiche && isset($fiches['reltype']) && is_array($fiches['reltype']); + $checkFiche = $checkFiche && isset($fiches['reltypeSpecial']) && is_string($fiches['reltypeSpecial']); + $checkFiche = $checkFiche && isset($fiches['city']) && is_string($fiches['city']); + $checkFiche = $checkFiche && isset($fiches['duration']) && is_array($fiches['duration']); + $checkFiche = $checkFiche && isset($fiches['context']) && is_array($fiches['context']); + $checkFiche = $checkFiche && isset($fiches['contextSpecial']) && is_array($fiches['contextSpecial']); + $checkFiche = $checkFiche && isset($fiches['freq']) && is_array($fiches['freq']); + $checkFiche = $checkFiche && isset($fiches['connect']) && is_array($fiches['connect']); + $checkFiche = $checkFiche && isset($fiches['connectSpecial']) && is_array($fiches['connectSpecial']); + + // Si erreur des attributs des fiches incorrects ou manquants + if( !$checkFiche ) + return false; + } + + + + return true; + } + ); + + + /* [2] Renvoi du contenu du fichier + =========================================================*/ + return array( + + ); } diff --git a/src/upload/call_log/xdrm.xml b/src/upload/call_log/xdrm.xml new file mode 100755 index 0000000..8757312 --- /dev/null +++ b/src/upload/call_log/xdrm.xml @@ -0,0 +1,1001 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/view/js/input-min.js b/view/js/input-min.js index 2f22938..a5ce869 100644 --- a/view/js/input-min.js +++ b/view/js/input-min.js @@ -1,10 +1,9 @@ var clearAllButton=$("#clear-all"),submitAllButton=$("#submit-all"),importCallLog=$('input#call_log-import[type="file"]'),subjectManager,contactManager,miniManager,ficheManager; -function dynamicUpdate(a){var b=a instanceof Element,c=b&&"SPAN"==a.tagName&&"switch-left"==a.className,e=b&&"SPAN"==a.tagName&&"switch-both"==a.className,d=b&&"INPUT"==a.tagName&&"submit"==a.type,f=b&&"SPAN"==a.tagName&&("nav-mini"==a.parentNode.id||"nav-fiche"==a.parentNode.id),b=b&&"SPAN"==a.tagName&&"nav-contact"==a.parentNode.id;if(!(e||c||d||f||b)&&!0!==a)return!1;if(e)console.log("> switch firstname <-> lastname"),c=a.parentNode,a=c.children[3],c=c.children[5],e=a.value,a.value=c.value,c.value= -e;else if(c){console.log("> switch firstname+lastname -> username");c=a.parentNode;e=c.children[1];a=c.children[3];c=c.children[5];if(0 dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),(d||b)&&contactManager.storageToFields()} -function checkRadioValue(a){for(var b=0,c=0;c switch firstname <-> lastname"),b=a.parentNode,a=b.children[3],b=b.children[5],d=a.value,a.value=b.value,b.value= +d;else if(b){console.log("> switch firstname+lastname -> username");b=a.parentNode;d=b.children[1];a=b.children[3];b=b.children[5];if(0 dynamic update"),miniManager.fieldsToStorage(),ficheManager.fieldsToStorage(),contactManager.fieldsToStorage(),miniManager.sync(),ficheManager.sync(),miniManager.storageToFields(),ficheManager.storageToFields(),(e||c)&&contactManager.storageToFields()} +function checkRadioValue(a){for(var c=0,b=0;b GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"), -mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})}); +subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("#nav-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(a){a={path:"upload/call_log",phone_number:$("#subject_phone_number").value,file:importCallLog.files[0]}; +api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var b=0;b GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})}); diff --git a/view/js/input.js b/view/js/input.js index 1c4147d..5e85c86 100644 --- a/view/js/input.js +++ b/view/js/input.js @@ -214,59 +214,41 @@ include('/js/includes/input-phone-fiche.js', function(){ /* (5) Gestion de l'import du fichier ---------------------------------------------------------*/ importCallLog.addEventListener('change', function(e){ - console.log( importCallLog.files[0] ); /* (1) On rédige la requête */ - var uploadRequest = { - path: 'upload/call_log', - file: importCallLog.files[0] + var request = { + path: 'upload/call_log', + phone_number: $('#subject_phone_number').value, + file: importCallLog.files[0] }; /* (2) On effectue l'upload (import) */ - api.send(uploadRequest, function(uploadResponse){ - console.log(uploadResponse); + api.send(request, function(response){ + console.log(response); - // Si tout est bon, on met l'input en bleu - if( uploadResponse.ModuleError == 0 ){ - importCallLog.addClass('active'); + // Si erreur, on quitte + if( response.ModuleError != 0 ) + return; - /* (3) On rédige la requête pour récupérer les données du fichier */ - var callLogRequest = { - path: 'call_log/unserialize', - phone_number: $('#subject_phone_number').value - }; + /* (3) Pour chaque contact de l'annuaire, on ajoute un contact */ + for( var i = 0 ; i < response.directory.length ; i++ ){ - /* (4) On effectue la récupération d'informations */ - api.send(callLogRequest, function(dataResponse){ - console.log(dataResponse); + // On découpe le nom par espaces + var name = response.directory[i].name===null ? '' : response.directory[i].name; + var splitted = name.split(' '); - // Si erreur, on quitte - if( dataResponse.ModuleError != 0 ) - return; - - - - /* (5) Pour chaque contact de l'annuaire, on ajoute un contact */ - for( var i = 0 ; i < dataResponse.directory.length ; i++ ){ - - // On découpe le nom par espaces - var name = dataResponse.directory[i].name===null ? '' : dataResponse.directory[i].name; - var splitted = name.split(' '); - - lsi.set('contacts', i, { - uid: i, - number: dataResponse.directory[i].number, - username: splitted.length == 1 ? splitted[0] : '', // Si un seul mot -> pseudo - firstname: splitted.length > 1 ? splitted[0] : '', // Si plusieurs mots -> le 1er est le prénom - lastname: splitted.length > 1 ? splitted.splice(1).join(' ') : '' // et les autres sont le nom - }); - } - - /* (6) On met à jour l'affichage */ - contactManager.storageToFields(); - dynamicUpdate(true); + lsi.set('contacts', i, { + uid: i, + number: response.directory[i].number, + username: splitted.length == 1 ? splitted[0] : '', // Si un seul mot -> pseudo + firstname: splitted.length > 1 ? splitted[0] : '', // Si plusieurs mots -> le 1er est le prénom + lastname: splitted.length > 1 ? splitted.splice(1).join(' ') : '' // et les autres sont le nom }); } + /* (6) On met à jour l'affichage */ + contactManager.storageToFields(); + dynamicUpdate(true); + }); }, false);