--- /dev/null
+-- Ecran_Connexion.lua
+
+-- Chargement des modules
+
+local composer = require( "composer" )
+
+-- Instanciation de la scène
+
+local scene = composer.newScene()
+
+-- ----------------------------------------- --
+-- Définition des gestionnaires d'événements --
+-- ----------------------------------------- --
+
+-- Création de la scène
+
+function scene:create( event )
+
+ local sceneGroup = self.view
+
+ -- initialisation de la scène
+ local Connexion = require "lib.Connexion"
+ local objetConnexion = Connexion:new()
+
+ sceneGroup:insert( objetConnexion )
+
+ -- le contenu objet de la scène
+ self.objet = objetConnexion
+
+end
+
+-- Apparition de la scène
+
+function scene:show( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+
+ elseif ( phase == "did" ) then
+ -- on active les écouteurs quand
+ -- la scène est affichée
+ self.objet:enableListeners()
+
+ end
+
+end
+
+-- Disparition de la scène
+
+function scene:hide( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+ -- on désactive les écouteurs quand
+ -- la scène est sn train d'être changée
+ self.objet:disableListeners()
+
+ elseif ( phase == "did" ) then
+
+ -- destruction de la scène (sans recyclage)
+ composer.removeScene( "Ecran_Connexion", false )
+
+ end
+
+end
+
+-- Desctruction de la scène
+
+function scene:destroy( event )
+
+ local sceneGroup = self.view
+
+ -- destruction de la scène (sans recyclage)
+ -- composer.removeScene( "Ecran_Connexion", false )
+
+end
+
+-- -------------------------------- --
+-- Ajout des écouteurs d'événements --
+-- -------------------------------- --
+
+scene:addEventListener( "create", scene )
+scene:addEventListener( "show", scene )
+scene:addEventListener( "hide", scene )
+scene:addEventListener( "destroy", scene )
+
+--
+
+return scene
\ No newline at end of file
--- /dev/null
+-- Ecran_ListeTickets.lua
+
+-- Chargement des modules
+
+local composer = require( "composer" )
+
+-- Instanciation de la scène
+
+local scene = composer.newScene()
+
+-- ----------------------------------------- --
+-- Définition des gestionnaires d'événements --
+-- ----------------------------------------- --
+
+-- Création de la scène
+
+function scene:create( event )
+
+ local sceneGroup = self.view
+
+ local aParams = event.params
+
+ if aParams then
+ -- initialisation de la scène
+ local Details = require "lib.Details"
+ local objetDetails = Details:new(aParams.id)
+
+ sceneGroup:insert( objetDetails )
+
+ -- le contenu objet de la scène
+ self.objet = objetDetails
+ -- print (aParams.id)
+ end
+
+
+
+end
+
+-- Apparition de la scène
+
+function scene:show( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+
+ elseif ( phase == "did" ) then
+ -- on active les écouteurs quand
+ -- la scène est affichée
+ self.objet:enableListeners()
+
+ end
+
+end
+
+-- Disparition de la scène
+
+function scene:hide( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+ -- on désactive les écouteurs quand
+ -- la scène est sn train d'être changée
+ self.objet:disableListeners()
+
+ -- destruction de la scène (avec recyclage)
+ composer.removeScene( "Ecran_Details", true )
+
+ elseif ( phase == "did" ) then
+
+ end
+
+end
+
+-- Desctruction de la scène
+
+function scene:destroy( event )
+
+ local sceneGroup = self.view
+
+
+end
+
+-- -------------------------------- --
+-- Ajout des écouteurs d'événements --
+-- -------------------------------- --
+
+scene:addEventListener( "create", scene )
+scene:addEventListener( "show", scene )
+scene:addEventListener( "hide", scene )
+scene:addEventListener( "destroy", scene )
+
+--
+
+return scene
\ No newline at end of file
--- /dev/null
+-- Ecran_ListeTickets.lua
+
+-- Chargement des modules
+
+local composer = require( "composer" )
+
+-- Instanciation de la scène
+
+local scene = composer.newScene()
+
+-- ----------------------------------------- --
+-- Définition des gestionnaires d'événements --
+-- ----------------------------------------- --
+
+-- Création de la scène
+
+function scene:create( event )
+
+ local sceneGroup = self.view
+
+ -- initialisation de la scène
+ local Favoris = require "lib.Favoris"
+ local objetFavoris = Favoris:new()
+
+ sceneGroup:insert( objetFavoris )
+
+ -- le contenu objet de la scène
+ self.objet = objetFavoris
+
+end
+
+-- Apparition de la scène
+
+function scene:show( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+
+ elseif ( phase == "did" ) then
+ -- on active les écouteurs quand
+ -- la scène est affichée
+ self.objet:enableListeners()
+
+ end
+
+end
+
+-- Disparition de la scène
+
+function scene:hide( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+ -- on désactive les écouteurs quand
+ -- la scène est sn train d'être changée
+ self.objet:disableListeners()
+
+ -- destruction de la scène (avec recyclage)
+ composer.removeScene( "Ecran_Favoris", true )
+
+ elseif ( phase == "did" ) then
+
+ end
+
+end
+
+-- Desctruction de la scène
+
+function scene:destroy( event )
+
+ local sceneGroup = self.view
+
+ -- destruction de la scène (sans recyclage)
+ -- composer.removeScene( "Ecran_Favoris", false )
+
+end
+
+-- -------------------------------- --
+-- Ajout des écouteurs d'événements --
+-- -------------------------------- --
+
+scene:addEventListener( "create", scene )
+scene:addEventListener( "show", scene )
+scene:addEventListener( "hide", scene )
+scene:addEventListener( "destroy", scene )
+
+--
+
+return scene
\ No newline at end of file
--- /dev/null
+-- Ecran_ListeTickets.lua
+
+-- Chargement des modules
+
+local composer = require( "composer" )
+
+-- Instanciation de la scène
+
+local scene = composer.newScene()
+
+-- ----------------------------------------- --
+-- Définition des gestionnaires d'événements --
+-- ----------------------------------------- --
+
+-- Création de la scène
+
+function scene:create( event )
+
+ local sceneGroup = self.view
+
+ -- initialisation de la scène
+ local ListeTickets = require "lib.ListeTickets"
+ local objetListeTickets = ListeTickets:new()
+
+ sceneGroup:insert( objetListeTickets )
+
+ -- le contenu objet de la scène
+ self.objet = objetListeTickets
+
+end
+
+-- Apparition de la scène
+
+function scene:show( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+
+ elseif ( phase == "did" ) then
+ -- on active les écouteurs quand
+ -- la scène est affichée
+ self.objet:enableListeners()
+
+ end
+
+end
+
+-- Disparition de la scène
+
+function scene:hide( event )
+
+ local sceneGroup = self.view
+ local phase = event.phase
+
+ if ( phase == "will" ) then
+ -- on désactive les écouteurs quand
+ -- la scène est sn train d'être changée
+ self.objet:disableListeners()
+
+ -- destruction de la scène (avec recyclage)
+ composer.removeScene( "Ecran_ListeTickets", true )
+
+ elseif ( phase == "did" ) then
+
+ -- destruction de la scène (avec recyclage)
+ -- composer.removeScene( "Ecran_ListeTickets", true )
+
+ end
+
+end
+
+-- Desctruction de la scène
+
+function scene:destroy( event )
+
+ local sceneGroup = self.view
+
+ -- destruction de la scène (sans recyclage)
+ -- composer.removeScene( "Ecran_ListeTickets", false )
+
+end
+
+-- -------------------------------- --
+-- Ajout des écouteurs d'événements --
+-- -------------------------------- --
+
+scene:addEventListener( "create", scene )
+scene:addEventListener( "show", scene )
+scene:addEventListener( "hide", scene )
+scene:addEventListener( "destroy", scene )
+
+--
+
+return scene
\ No newline at end of file
--- /dev/null
+-- Supported values for orientation:
+-- portrait, portraitUpsideDown, landscapeLeft, landscapeRight
+
+settings = {
+
+ orientation = {
+ default = "portrait",
+ supported = { "portrait" },
+ },
+
+ iphone = {
+ plist = {
+ UIStatusBarHidden = false,
+ UIPrerenderedIcon = true, -- set to false for "shine" overlay
+ --UIApplicationExitsOnSuspend = true, -- uncomment to quit app on suspend
+
+ --[[
+ -- iOS app URL schemes:
+ CFBundleURLTypes =
+ {
+ {
+ CFBundleURLSchemes =
+ {
+ "fbXXXXXXXXXXXXXX", -- example scheme for facebook
+ "coronasdkapp", -- example second scheme
+ }
+ }
+ }
+ --]]
+ }
+ },
+
+ -- Android permissions
+
+ android =
+ {
+ usesPermissions =
+ {
+ "android.permission.INTERNET",
+
+ -- Persmission to access camera
+ "android.permission.CAMERA",
+ "android.permission.WRITE_EXTERNAL_STORAGE",
+
+ -- Permission to retrieve current location from the GPS.
+ "android.permission.ACCESS_FINE_LOCATION",
+
+ -- Permission to retrieve current location from WiFi or cellular service.
+ "android.permission.ACCESS_COARSE_LOCATION",
+ },
+ usesFeatures =
+ {
+ -- If you set permissions "ACCESS_FINE_LOCATION" and "ACCESS_COARSE_LOCATION" above,
+ -- then you may want to set up your app to not require location services as follows.
+ -- Otherwise, devices that do not have location sevices (such as a GPS) will be unable
+ -- to purchase this app in the app store.
+ { name = "android.hardware.location", required = false },
+ { name = "android.hardware.location.gps", required = false },
+ { name = "android.hardware.location.network", required = false },
+ },
+ },
+}
--- /dev/null
+if string.sub(system.getInfo("model"),1,4) == "iPad" then
+ application =
+ {
+ content =
+ {
+ width = 360,
+ height = 480,
+ scale = "letterBox",
+ xAlign = "center",
+ yAlign = "center",
+ imageSuffix =
+ {
+ ["@2x"] = 1.5,
+ ["@4x"] = 3.0,
+ },
+ },
+ notification =
+ {
+ iphone = {
+ types = {
+ "badge", "sound", "alert"
+ }
+ }
+ }
+ }
+
+elseif string.sub(system.getInfo("model"),1,2) == "iP" and display.pixelHeight > 960 then
+ application =
+ {
+ content =
+ {
+ width = 320,
+ height = 568,
+ scale = "letterBox",
+ xAlign = "center",
+ yAlign = "center",
+ imageSuffix =
+ {
+ ["@2x"] = 1.5,
+ ["@4x"] = 3.0,
+ },
+ },
+ notification =
+ {
+ iphone = {
+ types = {
+ "badge", "sound", "alert"
+ }
+ }
+ }
+ }
+
+elseif string.sub(system.getInfo("model"),1,2) == "iP" then
+ application =
+ {
+ content =
+ {
+ width = 320,
+ height = 480,
+ scale = "letterBox",
+ xAlign = "center",
+ yAlign = "center",
+ imageSuffix =
+ {
+ ["@2x"] = 1.5,
+ ["@4x"] = 3.0,
+ },
+ },
+ notification =
+ {
+ iphone = {
+ types = {
+ "badge", "sound", "alert"
+ }
+ }
+ }
+ }
+elseif display.pixelHeight / display.pixelWidth > 1.72 then
+ application =
+ {
+ content =
+ {
+ width = 320,
+ height = 570,
+ scale = "letterBox",
+ xAlign = "center",
+ yAlign = "center",
+ imageSuffix =
+ {
+ ["@2x"] = 1.5,
+ ["@4x"] = 3.0,
+ },
+ },
+ }
+else
+ application =
+ {
+ content =
+ {
+ width = 320,
+ height = 512,
+ scale = "letterBox",
+ xAlign = "center",
+ yAlign = "center",
+ imageSuffix =
+ {
+ ["@2x"] = 1.5,
+ ["@4x"] = 3.0,
+ },
+ },
+ notification =
+ {
+ iphone = {
+ types = {
+ "badge", "sound", "alert"
+ }
+ }
+ }
+ }
+end
--- /dev/null
+-- Connexion.lua
+
+-- Constantes métriques
+
+local SX = display.screenOriginX -- Origine X
+local SY = display.screenOriginY -- Origine Y
+local CX = display.contentCenterX -- Centre X
+local CY = display.contentCenterY -- Centre Y
+local VW = display.viewableContentWidth -- Largeur visuelle
+local VH = display.viewableContentHeight -- Hauteur visuelle
+
+-- Chargement des modules
+
+--system.setIdleTimer( false )
+local widget = require( "widget" )
+local json = require("json")
+local sqlite3 = require ("sqlite3")
+local mime = require("mime")
+
+-- Instanciation de l'objet
+
+Connexion = {}
+
+-- Constructeur
+
+function Connexion:new()
+
+connexion = display.newGroup()
+local mail = ""
+
+local function initBackground()
+
+ local bg = display.newImageRect( "img/bg.jpg", 380, 570)
+
+ bg.x = CX
+ bg.y = CY
+
+ connexion:insert( bg )
+
+ local logo = display.newImageRect( "img/logo.png", 219, 153)
+
+ logo.x = CX
+ logo.y = CY - 1/8 * VH
+
+ connexion:insert( logo )
+ connexion.logo = logo
+
+end
+
+local function initTextFields()
+ local mailField = native.newTextField( 0, 0, 200, 30 )
+ mailField.x=CX
+ mailField.y=connexion.logo.y + 1/2 * connexion.logo.height + 40
+ mailField.inputType = "email"
+ connexion:insert(mailField)
+ connexion.mailField = mailField
+ --mailField.text = mail
+ mailField.placeholder = "E-Mail"
+
+ local mdpField = native.newTextField( 0, 0, 200, 30 )
+ mdpField.anchorY = 0
+ mdpField.x = CX
+ mdpField.y = mailField.y + 1/2 * mailField.height + 10
+ mdpField.placeholder = "Password"
+ mdpField.isSecure = true
+ connexion:insert(mdpField)
+ connexion.mdpField = mdpField
+end
+
+
+local function loginCallback(event)
+ if ( event.isError ) then
+ print("Network error!")
+ else
+ print("RESPONSE:" .. event.response)
+ local data = json.decode(event.response)
+ if (data.result == 200) then
+ -- admin connecté
+
+ -- rediriger l'admin vers la scène accueil
+ Runtime:dispatchEvent{ name = "MenuEvent", type = "listeTickets" }
+ elseif (data.result == 403) then
+ print ("Mot de passe incorrect ou Mail incorrect")
+ elseif (data.result == 400) then
+ print ("Une erreur est survenue, veuillez réessayer")
+ end
+ end
+end
+
+local function onConnect(event)
+
+local mail = "service@tup.url.ph"
+local pwd = "s3rvertup123"
+
+ --local mail = connexion.mailField.text
+ --local pwd = connexion.mdpField.text
+
+ if ( mail ~= "" and pwd ~= "" ) then
+
+ local url = "http://tup.url.ph/gestion/login.php?loginid="..mime.b64(mail).."&pwd="..mime.b64(pwd)
+ -- on envoit les données du formulaire de connexion en GET
+ network.request(url, "GET", loginCallback)
+
+ end
+
+end
+
+local function initButtonConnect()
+ local valider = widget.newButton
+ {
+ width = connexion.mailField.width,
+ height = 1/11 * VH,
+ sheet = buttonSheet,
+ label = "Se Connecter",
+ labelColor = { default={ 0, 0, 0 } },
+ defaultFile = "green_texture.png",
+ onPress = onConnect
+ }
+ valider.anchorY = 0
+ valider.x = CX
+ valider.y = connexion.mdpField.y + connexion.mdpField.height + 10
+
+ valider.font = "Dosis-Book"
+
+ connexion:insert(valider)
+ connexion.valider = valider
+
+end
+
+
+local function init()
+ initBackground()
+ initTextFields()
+ initButtonConnect()
+
+end
+
+init()
+
+function connexion:enableListeners()
+
+
+end
+
+function connexion:disableListeners()
+
+
+end
+
+return connexion
+end
+
+return Connexion
\ No newline at end of file
--- /dev/null
+-- Connexion.lua
+
+-- Constantes métriques
+
+local SX = display.screenOriginX -- Origine X
+local SY = display.screenOriginY -- Origine Y
+local CX = display.contentCenterX -- Centre X
+local CY = display.contentCenterY -- Centre Y
+local VW = display.viewableContentWidth -- Largeur visuelle
+local VH = display.viewableContentHeight -- Hauteur visuelle
+
+-- Chargement des modules
+
+--system.setIdleTimer( false )
+local widget = require( "widget" )
+local json = require("json")
+local mime = require("mime")
+
+-- Instanciation de l'objet
+
+Details = {}
+
+-- Constructeur
+
+function Details:new(id)
+
+details = display.newGroup()
+local data
+local statut = "en cours"
+local isFavoris
+
+local function initBackground()
+
+ local bg = display.newRect(SX, SY, VW, VH)
+ bg.anchorX, bg.anchorY = 0,0
+ bg:setFillColor(0,0.706,0.314,.8)
+ details:insert( bg )
+
+end
+
+local function onRetour(event)
+
+ Runtime:dispatchEvent{ name = "MenuEvent", type = "listeTickets" }
+
+end
+
+-- Affichage de la carte
+
+local function initMap()
+
+ local lat = 0
+ local lng = 0
+
+ function string:split( inSplitPattern, outResults )
+
+ if not outResults then
+ outResults = { }
+ end
+ local theStart = 1
+ local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
+ while theSplitStart do
+ table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
+ theStart = theSplitEnd + 1
+ theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
+ end
+ table.insert( outResults, string.sub( self, theStart ) )
+ return outResults
+ end
+
+ local latlong = string.split( ""..data[""..1][11], "," )
+ lat = latlong[1]
+ print(lat)
+ lng = latlong[2]
+ print(lng)
+
+ local map = native.newWebView( CX, CY, VW - 30, 200 )
+ map:request( "http://tup.url.ph/gestion/map.php?lat="..lat.."&lng="..lng.."&adresse=".."blabla" )
+ details:insert( map )
+ details.map = map
+
+end
+
+local function updateCallback(event)
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ if ( data.result == 200 ) then
+ print("Ticket modifié.")
+ -- on redirige vers la liste de tickets
+ onRetour()
+
+
+ elseif ( data.result == 400 ) then
+ print("Une erreur est survenue.")
+
+ end
+
+ end
+end
+
+local function update()
+ local id = data[""..1][1]
+ local url = "http://tup.url.ph/gestion/update_statut.php?statut="..statut.."&id="..id
+ network.request(url, "GET", updateCallback)
+end
+
+local function onTraite(e)
+ statut = "traite"
+ update()
+end
+
+local function onRejet(e)
+ statut = "refuse"
+ update()
+end
+
+local function onFavoris(e)
+ if (isFavoris) then
+ statut = "en cours"
+ else
+ statut = "a faire"
+ end
+ update()
+end
+
+local function createDetails()
+ -- On fait l'affichage des détails du ticket sélectionné
+ -- Objet du ticket
+ local oTicket = display.newText( data[""..1][2], 0, 0, "Dosis-Book", 20 )
+ oTicket.anchorY = 0
+ oTicket.anchorX = 0
+ oTicket.x = SX + 10
+ oTicket.y = SY + 5
+
+ -- Type du ticket
+ local tTicket = display.newText( data[""..1][3], SX + 10, oTicket.y + oTicket.height + 5, "Dosis-Book", 16 )
+ tTicket.anchorY = 0
+ tTicket.anchorX = 0
+
+ -- Lieu
+ local lTicket = display.newText( data[""..1][5], SX + 10, tTicket.y + tTicket.height + 5, "Dosis-Book", 14)
+ lTicket.anchorY = 0
+ lTicket.anchorX = 0
+
+ -- choix de traitement du ticket
+ local btnTraite = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 50,
+ label = "Traité",
+ labelColor = { default={ 1, 1, 1 } },
+ onPress = onTraite,
+ font = "Dosis-Book"
+ }
+ btnTraite.anchorX = 0
+ btnTraite.x = SX
+ btnTraite.y = VH - CY/2
+
+ local btnRejet = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 50,
+ label = "Rejeté",
+ labelColor = { default={ 1, 1, 1 } },
+ onPress = onRejet,
+ font = "Dosis-Book"
+ }
+ btnRejet.anchorX = 0
+ btnRejet.x = btnTraite.x + btnTraite.width
+ btnRejet.y = VH - CY/2
+
+ local btnFavoris = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 50,
+ label = "Favoris",
+ labelColor = { default={ 1, 1, 1 } },
+ onPress = onFavoris,
+ font = "Dosis-Book"
+ }
+ if (data[""..1][8] == "a faire") then -- si le ticket est déjà en favoris, on affiche le label Favoris - pour proposer de l'enlever des favoris
+ btnFavoris:setLabel( "Favoris -" )
+ isFavoris = true
+ else
+ btnFavoris:setLabel( "Favoris +" )
+ isFavoris = false
+ end
+
+ btnFavoris.anchorX = 0
+ btnFavoris.x = btnRejet.x + btnRejet.width
+ btnFavoris.y = VH - CY/2
+
+ details:insert( btnTraite )
+ details:insert( btnRejet )
+ details:insert( btnFavoris )
+ details.favoris = btnFavoris
+
+ details:insert(lTicket)
+ details:insert(oTicket)
+ details:insert(tTicket)
+
+ -- Priorité
+ -- data[""..1][4]
+
+ -- Lieu
+ --data[""..1][5]
+
+ -- etc.
+
+end
+
+-- Ecouteur d'événements réseau (gestion des requêtes)
+
+local function ticketsCallBack( event )
+
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ -- Requête réussie : envoi des informations relatives au ticket
+ if ( data.result == 200 ) then
+
+ -- data[""..1][n] avec :
+ -- n= 1 : id
+ -- n = 2 : objet
+ -- n = 3 : type
+ -- n = 4 : priorité
+ -- n = 5 : lieu
+ -- n = 6 : description
+ -- n = 7 : adresse de l'image sur le serveur
+ -- n = 8 : statut
+ -- n = 10 : date
+ -- n = 11 : coordonnées ( lat, lng )
+
+ -- print( data[""..1][2] )
+ -- print( data[""..1][10] )
+ createDetails()
+
+ elseif ( data.result == 400 ) then
+
+ print("Une erreur est survenue.")
+ native.showAlert( "Erreur.", "Une erreur est survenue." )
+
+ end
+
+ end
+
+end
+
+local function getTicketsInfos()
+
+ local url = "http://tup.url.ph/gestion/get_details.php?id="..id
+
+ -- envoi des données du formulaire de connextion en GET
+ network.request( url, "GET", ticketsCallBack )
+
+end
+
+local function initButtons()
+
+ local btnRetour = widget.newButton
+ {
+ width = 100,
+ height = 30,
+ label = "< Retour liste tickets",
+ labelColor = { default={ 1, 1, 1 } },
+ onPress = onRetour,
+ font = "Dosis-Book"
+ }
+
+ btnRetour.x, btnRetour.y = SX + 1/2 * btnRetour.width + 5, SY + VH - 1/2 * btnRetour.height - 5
+
+ details:insert( btnRetour )
+
+end
+
+
+local function init()
+
+ initBackground()
+ getTicketsInfos()
+ initButtons()
+ -- print("Ticket id:"..id)
+
+end
+
+init()
+
+function details:enableListeners()
+
+ initMap()
+
+end
+
+function details:disableListeners()
+
+ details.map:removeSelf()
+ details.map = nil
+
+end
+
+return details
+end
+
+return Details
\ No newline at end of file
--- /dev/null
+-- Favoris.lua
+
+-- Constantes métriques
+
+local SX = display.screenOriginX -- Origine X
+local SY = display.screenOriginY -- Origine Y
+local CX = display.contentCenterX -- Centre X
+local CY = display.contentCenterY -- Centre Y
+local VW = display.viewableContentWidth -- Largeur visuelle
+local VH = display.viewableContentHeight -- Hauteur visuelle
+
+-- Chargement des modules
+
+local widget = require( "widget" )
+local json = require( "json" )
+local mime = require( "mime" )
+local composer = require( "composer" )
+
+-- Instanciation de l'objet
+
+Favoris = {}
+
+-- Constructeur
+
+function Favoris:new()
+
+favoris = display.newGroup()
+
+local nbTickets = -2
+-- -2 pour pouvoir enlever du compteur les clés "result" et "message"
+local data
+local listenerPause = false -- on va instaurer une petite pause pour éviter de pouvoir spam les demandes d'ajout en favoris
+
+local function initBackground()
+
+ local bg = display.newRect(CX, CY, VW, VH)
+ bg:setFillColor(241/255,240/255,225/255)
+ favoris:insert(bg)
+
+end
+
+-- ScrollView listener
+local function scrollListener( event )
+
+ local phase = event.phase
+ if ( phase == "began" ) then
+ -- print( "Scroll view was touched" )
+ elseif ( phase == "moved" ) then
+ -- print( "Scroll view was moved" )
+ elseif ( phase == "ended" ) then
+ -- print( "Scroll view was released" )
+ end
+
+ -- In the event a scroll limit is reached...
+ if ( event.limitReached ) then
+ if ( event.direction == "up" ) then
+ -- print( "Reached top limit" )
+ elseif ( event.direction == "down" ) then
+ -- print( "Reached bottom limit" )
+ elseif ( event.direction == "left" ) then
+ -- print( "Reached left limit" )
+ elseif ( event.direction == "right" ) then
+ -- print( "Reached right limit" )
+ end
+ end
+
+ return true
+end
+
+local function initScrollView()
+
+ -- Create image sheet for custom scroll bar
+ local scrollBarOpt = {
+ width = 20,
+ height = 20,
+ numFrames = 3,
+ sheetContentWidth = 20,
+ sheetContentHeight = 60
+ }
+ local scrollBarSheet = graphics.newImageSheet( "widget-scrollbar.png", scrollBarOpt )
+
+ -- Create the widget
+ local scrollView = widget.newScrollView
+ {
+ top = SY + 55, --10 + 50 pour la tab Bar
+ left = SX + 10,
+ width = VW - 20,
+ height = VH - 40,
+ scrollHeight = VH,
+ backgroundColor = { 0,0,0,0 },
+ listener = scrollListener,
+ scrollBarOptions = {
+ sheet = scrollBarSheet,
+ topFrame = 1,
+ middleFrame = 2,
+ bottomFrame = 3
+ }
+ }
+
+ scrollView._view._isHorizontalScrollingDisabled = true
+
+ favoris:insert(scrollView)
+ favoris.s = scrollView
+end
+
+
+local function updateCallback(event)
+
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ if ( data.result == 200 ) then
+ print("Ticket modifié.")
+ listenerPause = false
+
+
+ elseif ( data.result == 400 ) then
+ print("Une erreur est survenue.")
+
+ end
+
+ end
+
+
+end
+
+local function onAddFavoris(event)
+ local statut
+ if (listenerPause == false) then
+ listenerPause = true
+ -- on test savoir si le ticket est pas déjà en favoris, s'il est en favoris on l'enlève, et vice et versa
+ if (event.target.isFavoris == false) then -- on ajoute aux favoris
+ event.target.isFavoris = true
+ event.target.plus.isVisible = false
+ event.target.etoile:setFillColor(252/255,228/255,90/255)
+ event.target.etoile.strokeWidth = 2
+ event.target.etoile:setStrokeColor( 0,0,0 )
+
+ statut = "a%20faire"
+ else -- on enlève le ticket des favoris
+ event.target.isFavoris = false
+ event.target.plus.isVisible = true
+ event.target.etoile:setFillColor( 0,0,0 )
+ event.target.etoile.strokeWidth = 0
+
+ statut = "en%20cours"
+ end
+ local url = "http://tup.url.ph/gestion/update_statut.php?statut="..statut.."&id="..event.target.id
+ network.request(url, "GET", updateCallback)
+ end
+end
+
+local function getDetails(event)
+ if (listenerPause == false)then
+ local options =
+ {
+ effect = "fade",
+ time = 300,
+ params = {
+ id= event.target.id
+ }
+ }
+ -- print(event.target.id)
+ Runtime:dispatchEvent{name="hideBar"}
+ composer.gotoScene( "Ecran_Details", options )
+ end
+end
+
+local function initView( n )
+
+ -- on réinitialise le compteur qui va servir à savoir rapidement combien il y a de tâche en tâches à faire
+ Runtime:dispatchEvent{name="countTickets", nb=n, e="f"}
+
+
+ if ( n == 0 ) then
+
+ -- print ( "pas de ticket" )
+ local noTicket = display.newText( "Pas de ticket en cours.", CX, CY, native.systemFont, 16 )
+ favoris:insert( noTicket )
+
+ else
+
+ -- print( n.." ticket" )
+ local pastelPriorite = {}
+ for i = 1,n do
+
+ -- instanciation d'un groupe PAR TICKET
+ local ticketView = display.newGroup()
+
+ --pastel de priorité du ticket
+ pastelPriorite[i] = display.newRect( 0, 0, 10, 40 )
+ pastelPriorite[i].anchorX = 0
+ pastelPriorite[i].anchorY = 0
+ if (data[""..i][3] == "0") then
+ pastelPriorite[i]:setFillColor(68/255,206/255,114/255)
+ elseif(data[""..i][3] == "1") then
+ pastelPriorite[i]:setFillColor(252/255,228/255,90/255)
+ elseif(data[""..i][3]== "2") then
+ pastelPriorite[i]:setFillColor(252/255,24/255,23/255)
+ end
+
+ -- objet du ticket
+ local oTicket = display.newText( data[""..i][1], pastelPriorite[i].x + pastelPriorite[i].width + 5, 0, native.systemFont, 16 )
+ oTicket:setFillColor( 0,0,0 )
+ oTicket.anchorX = 0
+ oTicket.anchorY = 0
+ oTicket.y = 2
+
+ -- type de problème
+ local tTicket = display.newText( data[""..i][2], pastelPriorite[i].x + pastelPriorite[i].width + 10, 20, native.systemFont, 12 )
+ tTicket:setFillColor( 0,0,0 )
+ tTicket.anchorX = 0
+ tTicket.anchorY = 0
+ tTicket.y = oTicket.y + oTicket.height
+
+ -- priorité du ticket
+ -- local pTicket = display.newText( "Priorité "..data[""..i][3], SX + 10, 40, native.systemFont, 14 )
+ -- pTicket.anchorX = 0
+
+ --Bouton pour ajouter la ticket aux tâches à faire
+ local addTicket = display.newRect( 0,0, 25, 25)
+ addTicket.x = favoris.s.width - 1/2 * addTicket.width - 5
+ addTicket.y = 20
+ addTicket.alpha= 0.01
+
+ local vertices = { 0,-11, 2.7,-3.5, 10.5,-3.5, 4.3,1.6, 6.5,9, 0,4.5, -6.5,9, -4.3,1.5, -10.5,-3.5, -2.7,-3.5, }
+
+ local etoile = display.newPolygon( addTicket.x, addTicket.y, vertices )
+ local addPlus = display.newText("+",etoile.x + 1/2 * addTicket.width,etoile.y + 1/2 * addTicket.height,native.systemFont, 15 )
+ addPlus:setFillColor( 0,0,0 )
+ addPlus.isVisible = false
+ etoile:setFillColor(252/255,228/255,90/255)
+ etoile.strokeWidth = 2
+ etoile:setStrokeColor( 0,0,0 )
+
+ addTicket.id = data[""..i][4] -- propriété permettant l'accès à l'id du ticket voulu
+ addTicket.plus = addPlus
+ addTicket.etoile = etoile
+ addTicket.isFavoris = true -- prioriété permettant de savoir si le ticket est déjà en favoris ou pas, par défaut il l'est
+ addTicket:addEventListener("tap", onAddFavoris)
+
+
+ --Bouton pour plus de détail sur un ticket
+ local details = display.newRect( 0, 0, VW - 60, 40 )
+ details.anchorX = 0
+ details.anchorY = 0
+ details.x = 0
+ details.y = 0
+ details:setFillColor( 247/255,246/255,239/255 )
+ details.id = data[""..i][4] -- propriété permettant l'accès à l'id du ticket voulu
+
+ local plus = display.newText("...",details.x,details.y,native.systemFont, 16 )
+ details:addEventListener( "tap", getDetails )
+ plus.x = details.x + details.width - 20
+ plus.y = details.y + details.height/3
+ -- print(data[""..i][4])
+ plus:setFillColor( 0,0,0 )
+
+
+ -- insertion des propriétés dans le groupe
+ ticketView:insert( details )
+ ticketView:insert( pastelPriorite[i] )
+ ticketView:insert( oTicket )
+ ticketView:insert( tTicket )
+ ticketView:insert( addTicket )
+ ticketView:insert( plus )
+ ticketView:insert( etoile )
+ ticketView:insert( addPlus )
+
+ -- insertion du ticket dans la liste
+ favoris.s:insert( ticketView )
+
+ -- position du ticket affiché dans la liste
+ ticketView.x = SX
+ ticketView.y = (SY - 30) + 50 * i
+
+
+ end
+ -- espace permettant de mettre un padding-bottom dans le scrollView
+ local espace = display.newRect( 0, SY + 50 * n + 50, favoris.s.width, 30 )
+ espace:setFillColor(0,0,0,0)
+ favoris.s:insert(espace)
+
+ end
+
+end
+
+-- Ecouteur d'événements réseau (gestion des requêtes)
+
+local function ticketsCallBack( event )
+
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ -- Requête réussie : envoi des tickets
+ if ( data.result == 200 ) then
+
+ -- data.[""..i][n] avec :
+ -- n = 1 : objet
+ -- n = 2 : type
+ -- n = 3 : priorité
+ -- n = 4 : statut
+
+ -- print( data[""..1][2] )
+
+ -- comptage des tickets récupérés pour l'affichage des textes
+ for k,v in pairs( data ) do nbTickets = nbTickets + 1 end
+
+ -- print( nbTickets )
+
+ -- création des champs pour l'affichage des tickets
+ initView( nbTickets )
+
+ -- Pas de ticket en cours
+ elseif ( data.result == 400 ) then
+
+ initView( 0 )
+
+ end
+
+ end
+
+end
+
+-- Récupération des tickets
+
+local function initTickets()
+ local statut = "a%20faire"
+
+ local url = "http://tup.url.ph/gestion/recup_tickets.php?statut="..statut
+
+ -- envoi des données du formulaire de connextion en GET
+ network.request( url, "GET", ticketsCallBack )
+
+end
+
+
+
+
+-- Définition de l'initialisation de l'objet
+
+local function init()
+ initBackground()
+ initScrollView()
+ initTickets()
+
+end
+
+-- Activation des écouteurs d'événements
+
+function favoris:enableListeners()
+
+end
+
+-- Suppression des écouteurs d'événements
+
+function favoris:disableListeners()
+
+ --bReturn:removeSelf()
+ --Favoris.bReturn = nil
+
+end
+
+-- L'objet est initialisé
+
+init()
+
+return favoris
+
+end
+
+return Favoris
\ No newline at end of file
--- /dev/null
+-- ListeTickets.lua
+
+-- Constantes métriques
+
+local SX = display.screenOriginX -- Origine X
+local SY = display.screenOriginY -- Origine Y
+local CX = display.contentCenterX -- Centre X
+local CY = display.contentCenterY -- Centre Y
+local VW = display.viewableContentWidth -- Largeur visuelle
+local VH = display.viewableContentHeight -- Hauteur visuelle
+
+-- Chargement des modules
+
+local widget = require( "widget" )
+local json = require( "json" )
+local mime = require( "mime" )
+local composer = require( "composer" )
+
+-- Instanciation de l'objet
+
+ListeTickets = {}
+
+-- Constructeur
+
+function ListeTickets:new()
+
+listeTickets = display.newGroup()
+
+local nbTickets = -2
+-- -2 pour pouvoir enlever du compteur les clés "result" et "message"
+local data
+local listenerPause = false -- on va instaurer une petite pause pour éviter de pouvoir spam les demandes d'ajout en favoris
+
+local function initBackground()
+
+ local bg = display.newRect(CX, CY, VW, 3/2*VH)
+ bg:setFillColor(241/255,240/255,225/255)
+ listeTickets:insert(bg)
+
+end
+
+-- ScrollView listener
+local function scrollListener( event )
+
+ local phase = event.phase
+ if ( phase == "began" ) then
+ -- print( "Scroll view was touched" )
+ elseif ( phase == "moved" ) then
+ -- print( "Scroll view was moved" )
+ elseif ( phase == "ended" ) then
+ -- print( "Scroll view was released" )
+ end
+
+ -- In the event a scroll limit is reached...
+ if ( event.limitReached ) then
+ if ( event.direction == "up" ) then
+ -- print( "Reached top limit" )
+ elseif ( event.direction == "down" ) then
+ -- print( "Reached bottom limit" )
+ elseif ( event.direction == "left" ) then
+ -- print( "Reached left limit" )
+ elseif ( event.direction == "right" ) then
+ -- print( "Reached right limit" )
+ end
+ end
+
+ return true
+end
+
+local function initScrollView()
+
+ -- Create image sheet for custom scroll bar
+ local scrollBarOpt = {
+ width = 20,
+ height = 20,
+ numFrames = 3,
+ sheetContentWidth = 20,
+ sheetContentHeight = 60
+ }
+ local scrollBarSheet = graphics.newImageSheet( "widget-scrollbar.png", scrollBarOpt )
+
+ -- Create the widget
+ local scrollView = widget.newScrollView
+ {
+ top = SY + 55, --10 + 50 pour la tab Bar
+ left = SX + 10,
+ width = VW - 20,
+ height = VH - 40,
+ scrollHeight = VH,
+ backgroundColor = { 0,0,0,0 },
+ listener = scrollListener,
+ scrollBarOptions = {
+ sheet = scrollBarSheet,
+ topFrame = 1,
+ middleFrame = 2,
+ bottomFrame = 3
+ }
+ }
+
+ scrollView._view._isHorizontalScrollingDisabled = true
+
+ listeTickets:insert(scrollView)
+ listeTickets.s = scrollView
+end
+
+local function updateCallback(event)
+
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ if ( data.result == 200 ) then
+ print("Ticket modifié.")
+ listenerPause = false
+
+
+ elseif ( data.result == 400 ) then
+ print("Une erreur est survenue.")
+
+ end
+
+ end
+
+
+end
+
+local function onAddFavoris(event)
+ local statut
+ if (listenerPause == false) then
+ listenerPause = true
+ -- on test savoir si le ticket est pas déjà en favoris, s'il est en favoris on l'enlève, et vice et versa
+ if (event.target.isFavoris == false) then -- on ajoute aux favoris
+ event.target.isFavoris = true
+ event.target.plus.isVisible = false
+ event.target.etoile:setFillColor(252/255,228/255,90/255)
+ event.target.etoile.strokeWidth = 2
+ event.target.etoile:setStrokeColor( 0,0,0 )
+
+ -- On ajoute au compteur de tickets à faire
+ Runtime:dispatchEvent{name="countTickets", type="add"}
+ statut = "a%20faire"
+ else -- on enlève le ticket des favoris
+ event.target.isFavoris = false
+ event.target.plus.isVisible = true
+ event.target.etoile:setFillColor( 0,0,0 )
+ event.target.etoile.strokeWidth = 0
+
+ -- On enlève 1 au compteur de tickets à faire
+ Runtime:dispatchEvent{name="countTickets", type="sub"}
+ statut = "en%20cours"
+ end
+ local url = "http://tup.url.ph/gestion/update_statut.php?statut="..statut.."&id="..event.target.id
+ network.request(url, "GET", updateCallback)
+ end
+end
+
+local function getDetails(event)
+ if (listenerPause == false)then
+ local options =
+ {
+ effect = "fade",
+ time = 300,
+ params = {
+ id= event.target.id
+ }
+ }
+ -- print(event.target.id)
+ Runtime:dispatchEvent{name="hideBar"}
+ composer.gotoScene( "Ecran_Details", options )
+ end
+end
+
+-- Affichage des tickets
+
+local function initView( n )
+
+ Runtime:dispatchEvent{name="countTickets", nb=n, e="e"}
+
+ if ( n == 0 ) then
+
+ -- print ( "pas de ticket" )
+ local noTicket = display.newText( "Pas de ticket en cours.", CX, CY, native.systemFont, 16 )
+ listeTickets:insert( noTicket )
+
+ else
+
+ -- print( n.." ticket" )
+ local pastelPriorite = {}
+ for i = 1,n do
+
+ -- instanciation d'un groupe PAR TICKET
+ local ticketView = display.newGroup()
+
+ --pastel de priorité du ticket
+ pastelPriorite[i] = display.newRect( 0, 0, 10, 40 )
+ pastelPriorite[i].anchorX = 0
+ pastelPriorite[i].anchorY = 0
+ if (data[""..i][3] == "0") then
+ pastelPriorite[i]:setFillColor(68/255,206/255,114/255)
+ elseif(data[""..i][3] == "1") then
+ pastelPriorite[i]:setFillColor(252/255,228/255,90/255)
+ elseif(data[""..i][3]== "2") then
+ pastelPriorite[i]:setFillColor(252/255,24/255,23/255)
+ end
+
+ -- objet du ticket
+ local oTicket = display.newText( data[""..i][1], pastelPriorite[i].x + pastelPriorite[i].width + 5, 0, native.systemFont, 16 )
+ oTicket:setFillColor( 0,0,0 )
+ oTicket.anchorX = 0
+ oTicket.anchorY = 0
+ oTicket.y = 2
+
+ -- type de problème
+ local tTicket = display.newText( data[""..i][2], pastelPriorite[i].x + pastelPriorite[i].width + 10, 20, native.systemFont, 12 )
+ tTicket:setFillColor( 0,0,0 )
+ tTicket.anchorX = 0
+ tTicket.anchorY = 0
+ tTicket.y = oTicket.y + oTicket.height
+
+ --Bouton pour ajouter la ticket aux tâches à faire
+ local addTicket = display.newRect( 0,0, 25, 25)
+ addTicket.x = listeTickets.s.width - 1/2 * addTicket.width - 5
+ addTicket.y = 20
+ addTicket.alpha= 0.01
+
+ local vertices = { 0,-11, 2.7,-3.5, 10.5,-3.5, 4.3,1.6, 6.5,9, 0,4.5, -6.5,9, -4.3,1.5, -10.5,-3.5, -2.7,-3.5, }
+
+ local etoile = display.newPolygon( addTicket.x, addTicket.y, vertices )
+ etoile:setFillColor( 0,0,0 )
+ local addPlus = display.newText("+",etoile.x + 1/2 * addTicket.width,etoile.y + 1/2 * addTicket.height,native.systemFont, 15 )
+ addPlus:setFillColor( 0,0,0 )
+
+ addTicket.id = data[""..i][4] -- propriété permettant l'accès à l'id du ticket voulu
+ addTicket.plus = addPlus
+ addTicket.etoile = etoile
+ addTicket.isFavoris = false -- prioriété permettant de savoir si le ticket est déjà en favoris ou pas, par défaut il ne l'est pas
+ addTicket:addEventListener("tap", onAddFavoris)
+
+ --Bouton pour plus de détail sur un ticket
+ local details = display.newRect( 0, 0, VW - 60, 40 )
+ details.anchorX = 0
+ details.anchorY = 0
+ details.x = 0
+ details.y = 0
+ details:setFillColor( 247/255,246/255,239/255 )
+ details.id = data[""..i][4] -- propriété permettant l'accès à l'id du ticket voulu
+
+ local plus = display.newText("...",details.x,details.y,native.systemFont, 16 )
+ details:addEventListener( "tap", getDetails )
+ plus.x = details.x + details.width - 20
+ plus.y = details.y + details.height/3
+ -- print(data[""..i][4])
+ plus:setFillColor( 0,0,0 )
+
+
+ -- insertion des propriétés dans le groupe
+ ticketView:insert( details )
+ ticketView:insert( pastelPriorite[i] )
+ ticketView:insert( oTicket )
+ ticketView:insert( tTicket )
+ ticketView:insert( addTicket )
+ ticketView:insert( plus )
+ ticketView:insert( etoile )
+ ticketView:insert( addPlus )
+
+ -- insertion du ticket dans la liste
+ listeTickets.s:insert( ticketView )
+
+ -- position du ticket affiché dans la liste
+ ticketView.x = SX
+ ticketView.y = (SY - 30) + 50 * i
+
+
+ end
+ -- espace permettant de mettre un padding-bottom dans le scrollView
+ local espace = display.newRect( 0, SY + 50 * n + 50, listeTickets.s.width, 30 )
+ espace:setFillColor(0,0,0,0)
+ listeTickets.s:insert(espace)
+
+ end
+
+end
+
+-- Ecouteur d'événements réseau (gestion des requêtes)
+
+local function ticketsCallBack( event )
+
+ if ( event.isError ) then print( "Erreur réseau" )
+
+ else
+
+ print( "RESPONSE : "..event.response )
+
+ data = json.decode( event.response )
+
+ -- Requête réussie : envoi des tickets
+ if ( data.result == 200 ) then
+
+ -- data.[""..i][n] avec :
+ -- n = 1 : objet
+ -- n = 2 : type
+ -- n = 3 : priorité
+ -- n = 4 : statut
+
+ -- print( data[""..1][2] )
+
+ -- comptage des tickets récupérés pour l'affichage des textes
+ for k,v in pairs( data ) do nbTickets = nbTickets + 1 end
+
+ -- print( nbTickets )
+
+ -- création des champs pour l'affichage des tickets
+ initView( nbTickets )
+
+ -- Pas de ticket en cours
+ elseif ( data.result == 400 ) then
+
+ initView( 0 )
+
+ end
+
+ end
+
+end
+
+-- Récupération des tickets
+
+local function initTickets()
+ local statut = "en%20cours"
+
+ local url = "http://tup.url.ph/gestion/recup_tickets.php?statut="..statut
+
+ -- envoi des données du formulaire de connextion en GET
+ network.request( url, "GET", ticketsCallBack )
+
+end
+
+-- local function initTabBar()
+
+-- local t = tab:new()
+-- t.y = SY
+-- listeTickets.tab = t
+
+-- end
+
+-- Définition de l'initialisation de l'objet
+
+local function init()
+ initBackground()
+ initScrollView()
+ initTickets()
+
+end
+
+-- Activation des écouteurs d'événements
+
+function listeTickets:enableListeners()
+ Runtime:dispatchEvent{name="popBar"}
+
+end
+
+-- Suppression des écouteurs d'événements
+
+function listeTickets:disableListeners()
+
+
+ --bReturn:removeSelf()
+ --listeTickets.bReturn = nil
+
+end
+
+-- L'objet est initialisé
+
+init()
+
+return listeTickets
+
+end
+
+return ListeTickets
\ No newline at end of file
--- /dev/null
+-- GestionProfil.lua
+
+-- Constantes métriques
+
+local SX = display.screenOriginX -- Origine X
+local SY = display.screenOriginY -- Origine Y
+local CX = display.contentCenterX -- Centre X
+local CY = display.contentCenterY -- Centre Y
+local VW = display.viewableContentWidth -- Largeur visuelle
+local VH = display.viewableContentHeight -- Hauteur visuelle
+
+-- Chargement des modules
+
+local widget = require( "widget" )
+
+-- Instanciation de l'objet
+
+Tab = {}
+
+-- Constructeur
+
+function Tab:new()
+
+tab = display.newGroup()
+local whichScene = 0 -- variable permettant de savoir on est sur quelle scène, 0=liste tickets en cours, 1=liste tickets à faire. Par défaut on est à la page de liste de tickets à faire lorsqu'on appel cette "classe"
+
+local function onHideBar(event) -- on ccache la tab bar
+
+ tab.y = SY - 2* tab.height
+end
+
+local function onPopBar(event) -- on affiche la tab bar
+
+ whichScene = 0
+ -- on change l'onglet actif nouveau à "accueil"
+ tab.e.isVisible = true
+ tab.f.isVisible = false
+
+ tab.y = SY
+
+end
+
+local function onLogout(event)
+
+ -- on redirige le client vers la page de connexion
+ onHideBar()
+
+ Runtime:dispatchEvent{name="MenuEvent", type="connexion"}
+
+end
+
+local function onListeEnCours(event)
+ if (whichScene == 1) then -- si on est sur la scène de gestion de profil, alors on permet le changement vers la scène d'accueil
+ Runtime:dispatchEvent{ name = "MenuEvent", type = "listeTickets" }
+ whichScene = 0
+ -- on change l'onglet actif nouveau à "accueil"
+ tab.e.isVisible = true
+ tab.f.isVisible = false
+ end
+end
+
+local function onListeFavoris(event)
+ if (whichScene == 0)then -- si on est sur la scène d'accueil alors on permet le changement vers la scène gestion de profil
+ Runtime:dispatchEvent{ name = "MenuEvent", type = "favoris" }
+ whichScene = 1
+ -- on change l'onglet actif nouveau à gestion de profil
+ tab.f.isVisible = true
+ tab.e.isVisible = false
+ end
+end
+
+local function initButtons()
+
+ local btnBg = display.newRect( 0, 0, VW, 55 )
+ btnBg.anchorX = 0
+ btnBg.anchorY = 0
+ btnBg.x = 0
+ btnBg.y = 0
+ btnBg:setFillColor( 147/255, 125/255, 91/255 )
+ tab:insert( btnBg )
+
+ local btnTicketsEnCours = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 55,
+ onPress = onListeEnCours
+ }
+
+ btnTicketsEnCours.anchorX = 0
+ btnTicketsEnCours.x, btnTicketsEnCours.y = SX,0 + 1/2 * btnTicketsEnCours.height
+
+ local btnTicketsFavoris = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 55,
+ onPress = onListeFavoris
+ }
+
+ btnTicketsFavoris.anchorX = 0
+ btnTicketsFavoris.x, btnTicketsFavoris.y = btnTicketsEnCours.x + btnTicketsEnCours.width,0 + 1/2 * btnTicketsFavoris.height
+
+
+ local btnLogout = widget.newButton
+ {
+ width = 1/3 * VW,
+ height = 55,
+ onPress = onLogout
+ }
+
+ btnLogout.anchorX = 0
+ btnLogout.x, btnLogout.y = SX + VW - btnLogout.width,0 + 1/2 * btnLogout.height
+
+ -- On ajoute les images manuellement
+
+ tab:insert(btnTicketsEnCours)
+ tab:insert(btnTicketsFavoris)
+ tab:insert(btnLogout)
+ tab.bE = btnTicketsEnCours
+ tab.bF = btnTicketsFavoris
+ tab.bL = btnLogout
+
+end
+
+local function initImages()
+ --Images qui vont plus tard servir aux Actives (bordures basse de 2 pixel de hauteur)
+ local enCoursActive = display.newRect(SX, 0 + tab.bE.height - 1, tab.bE.width, 2)
+ local favorisActive = display.newRect(SX + enCoursActive.width, 0 + tab.bF.height - 1, tab.bE.width, 2)
+ enCoursActive.anchorX = 0
+ favorisActive.anchorX = 0
+ --Par défaut on est sur la page d'accueil
+ enCoursActive.isVisible = true
+ favorisActive.isVisible = false
+
+ --Icones de la tabBar
+ local enCours = display.newImageRect("img/btn_encours.png", 24, 28 )
+ enCours.x, enCours.y = SX + 1/2 * tab.bE.width, 0 + 1/2 * tab.bE.height
+
+ local favoris = display.newImageRect("img/btn_favoris.png", 24, 28 )
+ favoris.x, favoris.y = tab.bF.x + 1/2 * tab.bF.width, 0 + 1/2 * tab.bF.height
+
+ local logout = display.newImageRect("img/btn_logout.png", 24, 28 )
+ logout.x, logout.y = tab.bL.x + 1/2 * tab.bL.width, 0 + 1/2 * tab.bL.height
+
+
+ tab:insert(enCours)
+ tab:insert(favoris)
+ tab:insert(logout)
+ tab:insert(enCoursActive)
+ tab:insert(favorisActive)
+ tab.e = enCoursActive
+ tab.f = favorisActive
+ tab.favoris = favoris
+ tab.enCours = enCours
+
+end
+
+local function initNbTickets()
+
+ local nbTickets = display.newText( "0", SX, SY, native.systemFont, 12 )
+ nbTickets.x = tab.favoris.x + 1/2 * tab.favoris.width + 2
+ nbTickets.y = tab.favoris.y + 1/2 * tab.favoris.height + 2
+ nbTickets:setFillColor(1,1,1)
+
+ tab:insert(nbTickets)
+ tab.nbPrint = nbTickets
+
+end
+
+local function onCount(event) -- fonction qui va permettre l'affichage en petit du nombre de tickets par section
+
+ if (event.e == "e") then -- on veut afficher le nombre de tickets en cours donc près de l'icone en cours
+ tab.nbPrint.x = tab.enCours.x + 1/2 * tab.enCours.width + 2
+ tab.nbPrint.y = tab.enCours.y + 1/2 * tab.enCours.height + 2
+ elseif (event.e == "f") then -- on veut afficher le nombre de tickets dans favoris, donc près de l'icone favoris
+ tab.nbPrint.x = tab.favoris.x + 1/2 * tab.favoris.width + 2
+ tab.nbPrint.y = tab.favoris.y + 1/2 * tab.favoris.height + 2
+ end
+ tab.nbPrint.text = event.nb
+end
+
+local function initListeners()
+
+ Runtime:addEventListener("countTickets", onCount)
+ Runtime:addEventListener( "hideBar", onHideBar )
+ Runtime:addEventListener( "popBar", onPopBar )
+
+end
+
+
+local function init()
+
+ initButtons()
+ initImages()
+ initNbTickets()
+ initListeners()
+
+end
+
+ init()
+
+return tab
+
+end
+
+return Tab
\ No newline at end of file
--- /dev/null
+-- main.lua
+
+-- Masquer barre de statut
+
+-- iOS & Android 2.X
+display.setStatusBar(display.HiddenStatusBar)
+-- Android 3.X
+UIStatusBarHidden = true
+
+-- Chargement des modules
+local composer = require( "composer" )
+local tab = require( "lib.Tab")
+
+-- on créé la tab bar dans le main pour la créer qu'une seule et unique fois
+
+local t = tab:new()
+Runtime:dispatchEvent{name="hideBar"}
+
+-- Changements de scènes
+
+local function onMenuEvent( event )
+
+ if (event.type == "connexion") then
+ composer.gotoScene( "Ecran_Connexion", "slideRight", 300 )
+ elseif (event.type == "listeTickets") then
+ composer.gotoScene( "Ecran_ListeTickets", "slideRight", 300)
+ elseif (event.type == "favoris") then
+ composer.gotoScene( "Ecran_Favoris", "slideLeft", 300 )
+ end
+
+end
+
+-- Ajout de l'écouteur d'événement sur le menu
+
+Runtime:addEventListener( "MenuEvent", onMenuEvent )
+
+composer.gotoScene( "Ecran_Connexion" )
+-- composer.gotoScene( "Ecran_ListeTickets" )
+-- composer.gotoScene( "Ecran_Favoris" )
\ No newline at end of file