diff --git a/assets/css/common/network/networkError.css b/assets/css/common/network/networkError.css new file mode 100644 index 00000000..94436773 --- /dev/null +++ b/assets/css/common/network/networkError.css @@ -0,0 +1,14 @@ +/** + * Network error stylesheet + * + * @author Pierre HUBERT + */ + +#networkErrorMessage { + position: fixed; + bottom: 2px; + left: 1px; + width: 300px; + max-width: 100%; + text-align: justify; +} \ No newline at end of file diff --git a/assets/js/common/api.js b/assets/js/common/api.js index 413029c4..362ac96e 100644 --- a/assets/js/common/api.js +++ b/assets/js/common/api.js @@ -51,6 +51,17 @@ ComunicWeb.common.api.makeAPIrequest = function(apiURI, params, requireLoginToke apiXHR.onreadystatechange = function(){ //We continue only if request is terminated if(apiXHR.readyState == 4){ + + //Check if response code is 0 + if(apiXHR.status == 0){ + //An error occured + ComunicWeb.common.network.setStatus(false); + } + else{ + //It is a success + ComunicWeb.common.network.setStatus(true); + } + //Prepare result var result = JSON.parse(apiXHR.responseText); diff --git a/assets/js/common/functionsSchema.js b/assets/js/common/functionsSchema.js index f1f12976..498ecd55 100644 --- a/assets/js/common/functionsSchema.js +++ b/assets/js/common/functionsSchema.js @@ -202,6 +202,11 @@ var ComunicWeb = { * Make a get request */ getRequest: function(url, cache, GETnextAction){}, + + /** + * Update the status of the network + */ + setStatus: function(success){}, }, /** diff --git a/assets/js/common/network.js b/assets/js/common/network.js index 04a5ed73..89fc71ae 100644 --- a/assets/js/common/network.js +++ b/assets/js/common/network.js @@ -6,61 +6,101 @@ ComunicWeb.common.network = { - /** - * @var {object} Cache contener - */ - cache: {}, + /** + * @var {object} Cache contener + */ + cache: {}, - /** - * Make a GET request - * - * @param {String} url Destination URL - * @param {Boolean} cacheResponse Specify if data can be cached or not (optimize network) - * @param {function} GETnextAction What to do next - * @return {Boolean} False if it fails - */ - getRequest: function(url, cacheResponse, GETnextAction){ - //First, check if it is required to cache the request - if(cacheResponse){ - //Prepare cache entry name - var cacheEntryName = encodeURIComponent(url); + /** + * Make a GET request + * + * @param {String} url Destination URL + * @param {Boolean} cacheResponse Specify if data can be cached or not (optimize network) + * @param {function} GETnextAction What to do next + * @return {Boolean} False if it fails + */ + getRequest: function(url, cacheResponse, GETnextAction){ + //First, check if it is required to cache the request + if(cacheResponse){ + //Prepare cache entry name + var cacheEntryName = encodeURIComponent(url); - //Check if entry exists - if(this.cache[cacheEntryName]){ - //Call next action with the url contained into the cache - GETnextAction(this.cache[cacheEntryName]); + //Check if entry exists + if(this.cache[cacheEntryName]){ + //Call next action with the url contained into the cache + GETnextAction(this.cache[cacheEntryName]); - //Quit function - return true; - } - } + //Quit function + return true; + } + } - //No cache entry where found or cache is disabled, continue - var xhrRequest = new XMLHttpRequest(); - xhrRequest.open("GET", url); + //No cache entry where found or cache is disabled, continue + var xhrRequest = new XMLHttpRequest(); + xhrRequest.open("GET", url); - xhrRequest.onreadystatechange = function(){ - if(xhrRequest.readyState == 4){ - //We check if it is an error - if(xhrRequest.status != 200){ - //It's an error, we will quit soon, but debug message before - ComunicWeb.debug.logMessage("GET request failed on " + url + " Got response code " + xhrRequest.status); - return false; - } - - //Check if it is required to cache result - if(cacheResponse){ - ComunicWeb.common.network.cache[cacheEntryName] = xhrRequest.responseText; - } + xhrRequest.onreadystatechange = function(){ + if(xhrRequest.readyState == 4){ + //We check if it is an error + if(xhrRequest.status != 200){ + //It's an error, we will quit soon, but debug message before + ComunicWeb.debug.logMessage("GET request failed on " + url + " Got response code " + xhrRequest.status); + return false; + } + + //Check if it is required to cache result + if(cacheResponse){ + ComunicWeb.common.network.cache[cacheEntryName] = xhrRequest.responseText; + } - ComunicWeb.debug.logMessage("GET request: " + url + " Success (" + xhrRequest.status + ")"); + ComunicWeb.debug.logMessage("GET request: " + url + " Success (" + xhrRequest.status + ")"); - //Call next action - GETnextAction(xhrRequest.responseText); - } - } + //Call next action + GETnextAction(xhrRequest.responseText); + } + } - //Perform request - xhrRequest.send(null); - }, + //Perform request + xhrRequest.send(null); + }, + + /** + * Update the status of the network + * + * @param {Boolean} success True for a successful request, false else + * @return {Boolean} True for a success + */ + setStatus: function(success){ + + //If the request is the success, hide error message + if(success){ + //Check if an error message was present on the screen + if(byId("networkErrorMessage")){ + //Hide it + byId("networkErrorMessage").style.display = "none"; + } + } + + //If we encountered a network error, display an error message + if(!success){ + //Log state + ComunicWeb.debug.logMessage("NETWORK ERROR : It's seems a network request has just echoed... Please check the network !"); + + //Check if error message exists or not + if(!byId("networkErrorMessage")){ + //Create error message contener + var networkErrorMessage = createElem("div", document.body); + networkErrorMessage.id = "networkErrorMessage"; + + //Create a callout element within it + var errorName = " "+"Network error"; + var errorMessage = "It seems that there is a network error, and Comunic can't access to the Internet anymore... Please check your internet connexion..."; + var errorCallout = ComunicWeb.common.messages.createCalloutElem(errorName, errorMessage, "danger"); + networkErrorMessage.appendChild(errorCallout) + } + + //Make sure the error message is visible on the screen + byId("networkErrorMessage").style.display = "block"; + } + } }; \ No newline at end of file diff --git a/corePage/config/dev.config.php b/corePage/config/dev.config.php index 8c112772..f98552da 100644 --- a/corePage/config/dev.config.php +++ b/corePage/config/dev.config.php @@ -23,6 +23,7 @@ $config['CSSfiles'] = array( //App stylesheets "%PATH_ASSETS%css/common/global.css", "%PATH_ASSETS%css/common/page/waitSplashScreen.css", + "%PATH_ASSETS%css/common/network/networkError.css", //Components stylesheets "%PATH_ASSETS%css/components/menuBar.css",