IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

Fonction de filtrage sur liste d'objets Firebase


Sujet :

Angular

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Fonction de filtrage sur liste d'objets Firebase
    Bonjour à tous,

    Je suis entrain de créer une application avec Angular 8 et Firebase.
    J'affiche une liste d'item dans une boucle avec une pipe 'keyvalue'. Jusqu'ici ça fonctionne bien.
    J'ai crée une fonction de filtrage pour afficher les items correspondants à la valeur saisie dans un input.
    J'utilise 'Object.values() dans ma fonction mais ça supprime les 'key' de mes items filtrés et les remplace par des index.
    Les 'key' ne correspondent plus aux items
    Est-ce que vous auriez une autre méthode pour arriver à conserver les 'key' ?

    Sources: https://github.com/Mobize/BlocNote


    Le schéma de ma bdd Firebase :
    Nom : items.PNG
Affichages : 644
Taille : 24,5 Ko

    Le code du template :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <input #query (keyup)="filter(query.value)" type="text" class="form-control search" placeholder="Recherche...">
    <!-- items -->
        <mat-list-item id="item_list" *ngFor="let item of filteredItems | keyvalue ; let i = index" [class.changeColor]="item.key == selectedValue">
          <a (click)="openItem(item, item.key)" *ngIf="item.value.title" matLine><mat-icon [class.yellow]="item.key == selectedValue">code</mat-icon>{{item.value.title}}</a>
          <button mat-icon-button>
            <mat-icon id="edit_item_icon" (click)="onEditItem(item)">edit</mat-icon>
            <mat-icon (click)="openDialog(item.key, item.value.title)">delete_sweep</mat-icon>
         </button>
        </mat-list-item>

    La fonction filter() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      filter(query: string) {
          this.filteredItems = (query) ?
          Object.values(this.items).filter(p=>p.title.normalize("NFD").replace(/[\u0300-\u036f]/g, "")
          .toLowerCase().includes(query.toLowerCase())) :
          this.items;
      }
    L' item avant le filtrage :
    Nom : original_item.PNG
Affichages : 631
Taille : 5,8 Ko

    Après filtrage :
    Nom : filtered_item.PNG
Affichages : 623
Taille : 4,4 Ko

    Merci d'avance pour votre aide!

    PS: Pour info l'adresse de l'application (il faut créer un compte) : https://oliviercharpentier.fr/blocnote/

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    ça donne quoi ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    console.log( this.items );
    console.log( Object.values(this.items) );

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    console.log(this.items);
    Nom : itemsLog.PNG
Affichages : 621
Taille : 29,5 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    console.log(this.filteredItems);
    Nom : filteredItemsLog.PNG
Affichages : 592
Taille : 24,8 Ko
    Images attachées Images attachées  

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    pour pouvoir tester sur mon poste, peux tu me retourner le json
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    console.log( JSON.stringify(this.items) );

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"-M8FxRn7X7-6JI0nRakQ":{"codes":[{"language":"php - Erreur","script":"<?php \r\nuse Symfony\\Component\\HttpFoundation\\Response;\r\n\r\nreturn new Response(\r\n    \"Username doesnt exists '$userSymfony'\",\r\n    Response::HTTP_UNAUTHORIZED,\r\n    array('Content-type' => 'application/json')\r\n);"},{"language":"php - OK","script":"<?php \r\nuse Symfony\\Component\\HttpFoundation\\Response;\r\n\r\n$response = new Response(\r\n    'Content',\r\n    Response::HTTP_OK,\r\n    ['content-type' => 'text/html']\r\n);"},{"language":"php - Autre méthodes","script":"<?php \r\n$response = new Response();\r\n$response->setContent('Hello World');\r\n\r\n// the headers public attribute is a ResponseHeaderBag\r\n$response->headers->set('Content-Type', 'text/plain');\r\n$response->headers->set('Content-Type','application/json');\r\n\r\n$response->setStatusCode(Response::HTTP_NOT_FOUND);\r\n\r\nreturn $response;"}],"title":"Reponse dans controlleur"},"-M8K1qBW9sKr0U0IkgHb":{"codes":[{"language":"php","script":"<?php \r\nif ($request->isMethod('post')) {\r\n    // your code\r\n}\r\n\r\n// Récupère le type de méthode\r\n$request->getMethod()"}],"title":"Détecter le type de méthode"},"-M8KiI24sDS-Ui8pKjxi":{"codes":[{"language":"php - Helper Class","script":"<?php\r\nnamespace AppBundle\\Services;\r\n\r\nclass Helpers{\r\n\r\n\tpublic $manager;\r\n\r\n\tpublic function __construct($manager){\r\n\t\t$this->manager = $manager;\r\n\t}\r\n\r\n\tpublic function json($data){\r\n\t\t$normalizers = array(new \\Symfony\\Component\\Serializer\\Normalizer\\GetSetMethodNormalizer());\r\n\t\t$encoders = array(\"json\" => new \\Symfony\\Component\\Serializer\\Encoder\\JsonEncoder());\r\n\r\n\t\t$serializer = new \\Symfony\\Component\\Serializer\\Serializer($normalizers, $encoders);\r\n\t\t$json = $serializer->serialize($data, 'json');\r\n\r\n\t\t$response = new \\Symfony\\Component\\HttpFoundation\\Response();\r\n\t\t$response->setContent($json);\r\n\t\t$response->headers->set('Content-Type','application/json');\r\n\r\n\t\treturn $response;\r\n\r\n\t}\r\n\r\n}\r\n\r\n"},{"language":"php - dans services.yaml","script":"<?php \r\n  AppBundle\\Services\\Helpers:\r\n      public: true\r\n      arguments: \r\n          $manager: '@doctrine.orm.entity_manager'"},{"language":"php - Recupération du service","script":"<?php \nuse AppBundle\\Services\\Helpers;\r\n\r\n$helpers = $this->get(Helpers::class);\r\nreturn $helpers->json($listGroupsArray);"}],"title":"Helpers (JSON)"},"-M8pbf42v6MiEDzZWqdT":{"codes":[{"language":"yaml","script":"# Page liste de groupe via requête AngularDart\r\nassistance_list_groups_api:\r\n    path:     /_api/{application}/_groups\r\n    defaults: { _controller: AssistanceBundle:Api:groups }"},{"language":"php -Controller","script":"<?php \r\npublic function groupsAction(Request $request, $application) {\r\n    // $application = paramètre de l'url\r\n    // fichier yaml = /_api/{application}/_groups\r\n}"},{"language":"référence web","script":"https://symfony.com/doc/current/routing.html#parameters-validation"}],"title":"Paramètres dans l'url"},"-M8td-QW1eFe2IiuMKL6":{"codes":[{"language":"php ","script":"<?php \r\n\r\n//$listUsersArray =\r\narray:622 [\r\n  0 => array:5 [\r\n    \"group_name\" => \"demonstration lexing\"\r\n    \"first_name\" => \"Alexandre\"\r\n    \"last_name\" => \"Del Bigio\"\r\n    \"email\" => \"alexandre-del-bigio@alain-bensoussan.com\"\r\n    \"role\" => 0\r\n  ]\r\n  1 => array:5 [\r\n    \"group_name\" => \"demonstration lexing\"\r\n    \"first_name\" => \"Jocelyne\"\r\n    \"last_name\" => \"Cuccia-Fontanel\"\r\n    \"email\" => \"jocelyne-cuccia-fontanel@lexing.eu\"\r\n    \"role\" => 0\r\n  ]\r\n \r\n$list = [];\r\nforeach(array_keys($listUsersArray) as $k) {\r\n$list[] = $listUsersArray[$k];\r\n}\r\n\r\n// $list =\r\n[\r\n    {\r\n        \"group_name\": \"demonstration lexing\",\r\n        \"first_name\": \"Alexandre\",\r\n        \"last_name\": \"Del Bigio\",\r\n        \"email\": \"alexandre-del-bigio@alain-bensoussan.com\",\r\n        \"role\": 0\r\n    },\r\n    {\r\n        \"group_name\": \"demonstration lexing\",\r\n        \"first_name\": \"Jocelyne\",\r\n        \"last_name\": \"Cuccia-Fontanel\",\r\n        \"email\": \"jocelyne-cuccia-fontanel@lexing.eu\",\r\n        \"role\": 0\r\n    },\r\n]    "}],"title":"Index tableau"},"-M8zuESiwIC0Bl7IBfJH":{"codes":[{"language":"php ","script":"<?php \r\nuse Symfony\\Component\\HttpClient\\HttpClient;\r\n\r\n$httpClient = HttpClient::create(['headers' => [ \r\n    'Content-Type' => 'application/json', \r\n]]); \r\n\r\n$apiRequest = $httpClient->request('POST', 'http://sources.alain-bensoussan.fr:8097/api/changeemail', [ \r\n    'json' => [ \r\n        'token' => $token, \r\n        'applicationID' => 2, // Registre RT \r\n        'newEmail' => $newEmail, \r\n        'oldEmail' => $oldEmail \r\n    ] \r\n]); \r\n\r\n$statusCode = $apiRequest->getStatusCode(); \r\n\r\n// Récupèration du contenu de la réponse pour affichage de l'erreur \r\n$response = $apiRequest->getContent(); \r\n$decodeJson = json_decode($response);   \r\n$emailUser =  $decodeJson->email;\r\n\r\nif ($statusCode !== 200) { \r\n    $form->get('email')->addError(new FormError('Erreur de modification d\\'adresse email')); \r\n    return $this->render('@FOSUser/Registration/register.html.twig',array( \r\n        'form' => $form->createView(), \r\n        'user' => $userToEdit \r\n    )); \r\n\r\n} "}],"title":"POST dans controller vers une API"},"-M9-5FTIaqz5_a6_n5N1":{"codes":[{"language":"php - Formtype","script":"<?php \r\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\DateTimeType;\r\n\r\n->add('dateBreach',DateTimeType::class,[ \r\n    'widget' => 'single_text', \r\n    'label' => 'Date approximative de la violation', \r\n    'required' => false, \r\n    'format' => 'dd-MM-yyyy HH:mm', \r\n    'html5' => false, \r\n    'attr' => [ \r\n        'placeholder' => 'Sélectionnez une date', \r\n        'class' => 'datetimepicker' \r\n    ], \r\n    'constraints' => [new DateTime()], \r\n]) "},{"language":"Javascript","script":"\r\n//Initialisation \r\n$('#registerbundle_register_dateBreach').datetimepicker({ \r\n        format: 'DD-MM-YYYY HH:mm', \r\n        locale: 'fr', \r\n        useCurrent: false, \r\n        maxDate: moment() \r\n    }) \r\n\r\n//Verifier entre 2 dates\r\n$(document).ready(function() { \r\n  $(function() { \r\n    $('#datetimepicker6').datetimepicker(); \r\n    $('#datetimepicker7').datetimepicker({ \r\n      useCurrent: false //Important! See issue #1075 \r\n    }); \r\n\r\n    $(\"#datetimepicker6\").on(\"dp.change\", function(e) { \r\n      $('#datetimepicker7').data(\"DateTimePicker\").minDate(e.date); \r\n    }); \r\n\r\n    $(\"#datetimepicker7\").on(\"dp.change\", function(e) { \r\n      $('#datetimepicker6').data(\"DateTimePicker\").maxDate(e.date); \r\n    }); \r\n  }); \r\n});     "},{"language":"Html","script":"<script type=\"text/javascript\" src=\"{{ asset('assets/datepicker/js/bootstrap-datepicker.js') }}\"></script>"}],"title":"Intégrer DateTimePicker dans Symfony "},"-M9-9n6mJTaIJoXvDuZo":{"codes":[{"language":"html","script":"\r\n<script type=\"text/javascript\" src=\"{{ asset('public/js/Register/FormFunction/collection.js') }}\"></script> "}],"title":"Insertion fichier javascript dans twig"},"-M9-C3Afsj8zNbEj_U0x":{"codes":[{"language":"php + explications","script":"<?php \r\n\r\n->remove('plainPassword') //dans le formType souhaité \r\n\r\n// copier le contenu du fichier vendor\\friendsofsymfony\\user-bundle\\Resources\\config\\validation.xml \r\n// Créer un fichier dans le bundle de registration (UserBundle\\Resources\\config\\validation.xml) et coller puis modifier les valeurs souhaitées. \r\n"},{"language":"yaml","script":"\r\n# Dans app\\config\\config.yml, ajouter: \r\nfos_user: \r\n    db_driver:     orm \r\n    firewall_name: main                    \r\n    user_class:    UserBundle\\Entity\\User \r\n    registration: \r\n      form: \r\n        type: UserBundle\\Form\\RegistrationType \r\n        #Partie importante :\r\n        validation_groups: [UserBundle, Default] "}],"title":"Modification des contraintes par défaut de FosUserBundle"},"-M9-EF3Vq4L4tEW-2_mU":{"codes":[{"language":"php","script":"<?php \n\r\n$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBaseUrl(); "}],"title":"Récuperation adresse HomePage"},"-M9-EV7W7ECI7zu5yeMe":{"codes":[{"language":"php","script":"<?php \n\n$request->server->get('HTTP_REFERER') == 'https://lexing.law/saas/home' "}],"title":"Vérification de l'URL précédente"},"-M9-Es2WW_7wcCr092Hm":{"codes":[{"language":"php","script":"<?php \n\r\n$url=strtok($_SERVER[\"REQUEST_URI\"],'?'); "}],"title":"Récupérer l'url avant les paramètres"},"-M9-FE7t-WmgavO4-m0i":{"codes":[{"language":"php - controlleur","script":"<?php \r\n<? php \r\n\r\n        $registersForDomains  =  array();\r\n\r\n        foreach($domains  as  $domain) {\r\n            $domainId  =  $domain -> getId();\r\n            $getRegisterdomain  =  $em -> createQueryBuilder();\r\n            $getRegisterdomain -> select('r')\r\n            -> from(Register:: class,  'r')\r\n            -> where('r.domainNew= :id') -> setParameter('id', $domainId);\r\n            $registers  =  $getRegisterdomain -> getQuery() -> getResult();\r\n            $nbDomainRegisters  =  count($registers);\r\n            array_push($registersForDomains,  $nbDomainRegisters);\r\n        } "},{"language":"twig","script":"{% for key, domain in domains %}   \r\n    {{dump(registersForDomains[key])}}  \r\n{% endfor %} "}],"title":"Récuperer un nombre de registre qui utilise un \"domaine\""},"-M9-GIHsim9_d3Iri0l_":{"codes":[{"language":"twig","script":"\r\n{{ form_widget (form.plainPassword.second, { 'attr': { 'placeholder': texte} }) }} "}],"title":"Placeholder dans formulaire - Twig"},"-M9-GqGWbu9X5fiPTu6J":{"codes":[{"language":"php - entité","script":"<?php \r\n\r\n    public function removeRole($role) \r\n    { \r\n        if (false !== $key = array_search(strtoupper($role), $this->roles, true)) { \r\n            unset($this->roles[$key]); \r\n            $this->roles = array_values($this->roles); \r\n        } \r\n        return $this; \r\n    } "},{"language":"php - controlleur","script":"<?php \n\r\nforeach($roles as $role) { \r\n    $findUser->removeRole($role); \r\n} "}],"title":"Supprimer un index dans un tableau "},"-M9-HRSAT9U7dxmDl81I":{"codes":[{"language":"php - fonction","script":"<?php \n\r\n    public function array_doublon($array) { \r\n\r\n        if (!is_array($array)) \r\n            return false; \r\n        $r_valeur = array(); \r\n        $array_unique = array_unique($array); \r\n        if (count($array) - count($array_unique)) \r\n            for ($i=0; $i<count($array); $i++) { \r\n                if (!array_key_exists($i, $array_unique)) \r\n                    $r_valeur[] = $array[$i]; \r\n            } \r\n        } \r\n        return $r_valeur; \r\n    } "}],"title":"Compter les doublons dans un tableau PHP"},"-M9-JqvFBZ_eNxBVywii":{"codes":[{"language":"php - entité","script":"<?php \n\r\n    public function setFile(UploadedFile $file = null){ \r\n\r\n        // Verification de l'extension \r\n        $fileName = $file->getClientOriginalName(); \r\n        // $dotPposition = strrpos($fileName, \".\"); \r\n        $fileExtension = $file->getClientOriginalExtension(); \r\n\r\n        $autorizedFileExtension = array( \r\n            \"jpg\",\"jpeg\",\"png\",\"gif\",\"bmp\",\"svg\", \r\n            \"tiff\",\"pdf\",\"doc\",\"docx\",\"txt\", \r\n            \"xls\",\"docm\",\"dotx\",\"dotm\",\"xlsx\", \r\n            \"xlsm\",\"xltx\",\"xltm\",\"xlsb\",\"xlam\", \r\n            \"pptx\",\"pptm\",\"potx\",\"potm\",\"ppam\", \r\n            \"ppsx\",\"pps\",\"ppsm\",\"sldx\",\"sldm\", \r\n            \"thmx\",\"ico\",\"ppsm\",\"sldx\", \r\n            \"thmx\",\"odt\",\"odp\",\"ods\",\"odg\" \r\n        ); \r\n\r\n        if ( strstr(strtolower($fileName), \".php\") || strstr(strtolower($fileName), \".dll\") ) { \r\n            return; \r\n        } \r\n\r\n        if (in_array(strtolower($fileExtension), $autorizedFileExtension)) { \r\n            $this->file = $file; \r\n        } else { \r\n            return; \r\n        } \r\n\r\n        if(null !== $this->url){ \r\n            $this->tempFilename = $this->url; \r\n            $this->url = null; \r\n        } \r\n        return; \r\n    } "}],"title":"Vérification d'extension de fichier"},"-M92W7RRIHuQy1vbFGaw":{"codes":[{"language":"php - sauvegarde","script":"<?php\r\nnamespace AppBundle\\Controller;\r\n\r\nuse Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\Route;\r\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller;\r\nuse Symfony\\Component\\HttpFoundation\\Request;\r\nuse AppBundle\\Services\\Helpers;\r\nuse Kreait\\Firebase\\Factory;\r\nuse Kreait\\Firebase\\ServiceAccount;\r\nuse Firebase\\Auth\\Token\\Exception\\InvalidToken;\r\nuse UserBundle\\EntityManager\\UserManager;\r\nuse FOS\\UserBundle\\Model\\UserInterface;\r\nuse RegisterBundle\\Entity\\ListData\\Status;\r\n\r\nclass LoginSsoController extends Controller{\r\n\r\n    /**\r\n     * @Route(\"/login-sso\")\r\n     */\r\n    public function loginAction(Request $request) {\r\n\r\n        // header(\"Access-Control-Allow-Origin: *\");\r\n        // header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');\r\n        // header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS');\r\n        // header('Access-Control-Expose-Headers: Form Data');\r\n\r\n        $helpers = $this->get(Helpers::class);\r\n\r\n        // Récupère le POST json\r\n        $json = file_get_contents('php://input');\r\n\r\n        if ($json != null){\r\n\r\n            $decodeJson = json_decode($json);\r\n\r\n            // // recupère le token envoyé depuis Firebase\r\n            $firebaseTokenId = $decodeJson->tokenId;\r\n\r\n            $serviceAccount = ServiceAccount::fromJsonFile(__DIR__.'/cle03-04-bdd-firebase.json');\r\n\r\n            $firebase = (new Factory)\r\n                ->withServiceAccount($serviceAccount)\r\n                ->create();\r\n\r\n                $idTokenString = $firebaseTokenId;\r\n\r\n            try {\r\n                // Verification du token reçu\r\n                $verifiedIdToken = $firebase->getAuth()->verifyIdToken($idTokenString);\r\n\r\n            } catch (InvalidToken $e) {\r\n                die($e->getMessage());\r\n            }\r\n\r\n            $uid = $verifiedIdToken->getClaim('sub');\r\n            $user = $firebase->getAuth()->getUser($uid);\r\n            $emailFirebase = $user->email;\r\n\r\n            // Récuperation de l'email Symfony pour correspondance avec l'email Firebase\r\n            $userSymfony = $this->getDoctrine()\r\n            ->getRepository('UserBundle:User')\r\n            ->findOneByEmail($emailFirebase);\r\n\r\n            // Données renvoyées si l'utilisateur n'a pas accès au registre \r\n            if ($userSymfony == null) {\r\n                $data = array(\r\n                    'access'=>'false',\r\n                );\r\n\r\n                return $helpers->json($data);\r\n            }\r\n\r\n            // Récuperation des statuts des registres de l'utilisateur\r\n            $statusProject = Status::PROJECT;\r\n            $statusWaiting = Status::WAITING;\r\n            $statusValidate = Status::VALIDATE;\r\n\r\n            $nbStatusProject = $this->getCountStatus($statusProject,$userSymfony);\r\n            $nbStatusWaiting = $this->getCountStatus($statusWaiting,$userSymfony);\r\n            $nbStatusValidate = $this->getCountStatus($statusValidate,$userSymfony);\r\n\r\n            // Envoie de les données utilisateur au front\r\n            $data = array(\r\n                'Registre:' => 'DPO',\r\n                'Acces_registre_rt' => $userSymfony->getCaccess(),\r\n                'Acces_registre_st' => $userSymfony->getSaccess(),\r\n                'Acces_registre_fa' => $userSymfony->getFaccess(),\r\n                'uid' => $uid,\r\n                'emailFirebase' => $emailFirebase,\r\n                'emailSymfony' => $userSymfony->getEmail(),\r\n                'idSymfony' => $userSymfony->getId(),\r\n                'role' => $userSymfony->getRoles(),\r\n                'group' => $userSymfony->getGroup(),\r\n                'society' => $userSymfony->getSociety(),\r\n                'passwordChangeDelay' => $userSymfony->getUpdatePasswordAt(),\r\n                'archived' => $userSymfony->getArchived(),\r\n                'enabled' => $userSymfony->isEnabled(),\r\n                'statusProject' => $nbStatusProject,\r\n                'statusWaiting' => $nbStatusWaiting,\r\n                'statusValidate' => $nbStatusValidate\r\n            );\r\n\r\n        }else{\r\n\r\n            $data = array(\r\n                'status'=>'error',\r\n                'data'=>'Email or password Incorrect.',\r\n            );\r\n        }\r\n\r\n        return $helpers->json($data);\r\n    }\r\n\r\n    public function getCountStatus($status, $user) {\r\n\r\n        $repository = $this->getDoctrine()\r\n        ->getRepository('RegisterBundle:Register');\r\n\r\n        $qb = $repository->createQueryBuilder('r');\r\n        $repository->whereActiveIs($qb,true);\r\n        $repository->whereGroup($qb,$user->getGroup());\r\n        $repository->whereStatus($qb,$status);\r\n        $qb->select('COUNT(r)');\r\n        \r\n        return $qb->getQuery()->getSingleScalarResult();\r\n    }\r\n}"}],"title":"LoginSsoController"},"-M92o-h1qJ7lUqGWzj7p":{"codes":[{"language":"php","script":"<?php \r\n        $curlConnection = curl_init();\r\n        $encodedToken = json_encode( array( \"token\"=> $idToken ) );\r\n        \r\n        curl_setopt($curlConnection, CURLOPT_URL, \"url de l'api\");\r\n        curl_setopt($curlConnection, CURLOPT_RETURNTRANSFER, true);\r\n        curl_setopt($curlConnection, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));\r\n        curl_setopt($curlConnection, CURLOPT_POSTFIELDS, $encodedToken);\r\n        curl_setopt($curlConnection, CURLOPT_POST, 1); \r\n        \r\n        // Réponse\r\n        $response = curl_exec($curlConnection);\r\n\r\n        // Code réponse\r\n        $httpcode = curl_getinfo($curlConnection, CURLINFO_HTTP_CODE);\r\n\r\n        curl_close($curlConnection);\r\n\r\n        $jsonResponse = json_decode($response);\r\n\r\n        if($httpcode !== 200) {\r\n            return $this->redirect('url en cas d erreur');\r\n        }"}],"title":"Requête curl - JSON"},"-M93KyDnscWylyTV6Uee":{"codes":[{"language":"php","script":"<?php \r\nuse GuzzleHttp\\Client;\r\n\r\n$client = new Client();\r\n$response = $client->request('POST', 'https://www.lexing.law/loginsso/login', [\r\n    'json' => [ \r\n        'token' => $idToken \r\n    ] \r\n]);\r\n\r\n$resp = $response->getBody();\r\n\r\n$jsonResponse = json_decode($resp);\r\n\r\n$emailUser =  $jsonResponse->email; \r\n"}],"title":"Guzzle Http Client"},"-MABXaxiX_5z3r6NZBIH":{"codes":[{"language":"javascript","script":"let route = \"{{ path('register_edit', {'id': 'register.id'})|escape('js') }}\";\r\nvar url = route.replace(\"register.id\",registers[i].id )"}],"title":"URL twig dans JS"},"-MAkfcE6vhAgZXjJjKZ0":{"codes":[{"language":"php","script":"<?php \n    /**\r\n     * Nombre d'utilisateur rattachés à une société\r\n     * @param int $id id d'une société\r\n     * @return mixed\r\n     */\r\n    public function countUsersForSociety($id){\r\n        $qb = $this->em->getRepository('UserBundle:User')->createQueryBuilder('r');\r\n        $qb\r\n            ->where('r.society = :id')\r\n            ->setParameter('id',$id)\r\n            ->select('COUNT(r)');\r\n        ;\r\n        return $qb->getQuery()->getSingleScalarResult();\r\n    }"}],"title":"Compter nombre utilisateur"},"-MB9DQtLHVEG7U7IaL0w":{"codes":[{"language":"yaml","script":"services:\r\n  AppBundle\\Services\\Helpers:\r\n        public: true\r\n              arguments: \r\n                        $manager: '@doctrine.orm.entity_manager'"}],"title":"Déclarer un service"},"-MB9LgGeImNUaldmF7E5":{"codes":[{"language":"url","script":"https://symfony.com/doc/3.4/logging/monolog_email.html"}],"title":"Monolog - Erreurs envoyées par email"},"-MBY3uazml3b7GR6wbL8":{"codes":[{"language":"php","script":"<?php \n$this->container->getParameter('kernel.environment');"}],"title":"Détection de l'environnment"},"-MC7C5MH9OX8QK3Zc9AJ":{"codes":[{"language":"php","script":"<?php \n$em = $this->getDoctrine()->getManager();"}],"title":"EntityManager dans controller"},"-MCGqmvHafP7TcbRBrZy":{"codes":[{"language":"yaml","script":"  userbundle.society.curentuser:\r\n    class: UserBundle\\Form\\SocietyType\r\n    arguments:\r\n        - \"@security.token_storage\"\r\n    tags: [{ name: form.type }] "},{"language":"php - formType","script":"<?php \nuse Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorage;\r\n\r\n     /**\r\n     * @var TokenStorage\r\n     */\r\n    protected $tokenStorage;\r\n \r\n    /**\r\n     * @param \\Symfony\\Component\\Security\\Core\\Authentication\\Token\\Storage\\TokenStorage    $tokenStorage\r\n     */\r\n    public function __construct(TokenStorage $tokenStorage)\r\n    {\r\n        $this->tokenStorage = $tokenStorage;\r\n    }\r\n\r\n    // dans la fonction buildForm\r\n    $entityType = $this->tokenStorage->getToken()->getUser()->getGroup()->getEntityType();"}],"title":"Ajout service => user"},"-MCHn6RtfASQtyEKlbWF":{"codes":[{"language":"html","script":"https://symfony.com/doc/3.4/form/form_dependencies.html"}],"title":"Doc service dans FormType "},"-MCN6DI9LBr5mPs4Hjs8":{"codes":[{"language":"php","script":"<?php \r\nuse Symfony\\Component\\Form\\FormEvent;\r\nuse Symfony\\Component\\Form\\FormEvents;\r\n\r\npublic function buildForm(FormBuilderInterface $builder, array $options)\r\n{\r\n    $builder->addEventListener(FormEvents::PRE_SET_DATA,function(FormEvent $event) use($user){\r\n        $event->getForm()->add('role', ChoiceType::class, array(\r\n            'choices' => array(\r\n                'Administrateur du groupe' => 'ROLE_COMPANY_ADMIN',\r\n                'Administrateur d\\'entité' => 'ROLE_SOCIETY_ADMIN',\r\n                'Consultations' => 'ROLE_EDITOR_VIEW',\r\n                'Super Administrateur' => 'ROLE_SUPER_ADMIN',\r\n                'Utilisateur' => 'ROLE_USER',\r\n            ),\r\n            'multiple' => false,\r\n            'mapped' => true,\r\n            'label' => 'Rôle'\r\n        ));\r\n    }\r\n}"}],"title":"addEventListener formulaire"}}
    Si tu veux tester voici les sources: https://github.com/Mobize/BlocNote

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    ModizDev ou Mobize, entre les deux il te faut choisir !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    😁 Ça s'appelle un dédoublement de personnalité...
    Effectivement erreur de compte!

  8. #8
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    bizarre ton json, pleins d'erreurs PHP

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Oui c'est normal, l'application est basée sur un un principe de sauvegarde de "snippets" de plusieurs langages de programmation.

    Personne n'a d'idée du coup?

  10. #10
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    peut être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     filter(query: string) {
          this.filteredItems = (query) ?
          Object.values(this.items).filter((p: any) => p.title.normalize("NFD").replace(/[\u0300-\u036f]/g, "")
          .toLowerCase().includes(query.toLowerCase())) :
          this.items;
      }

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Pareil...

  12. #12
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    apparemment c'est: Object.values(....)
    qui t’enlèves toutes les clés


    faut plutot utiliser : Object.entries(...)

  13. #13
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
     filter(query: string) {
          this.filteredItems = (query) ?
          Object.entries(this.items).filter((p: any) => p[1].title.normalize("NFD").replace(/[\u0300-\u036f]/g, "")
          .toLowerCase().includes(query.toLowerCase())) :
          this.items;
      }

    et donc revoir la structure du html car elle doit être differente avec Object.entries



    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        const list = Object.entries(dd1obj);
        const x = list.filter((p: any) => p[1].title === 'Reponse dans controlleur');
        console.log(x);
    j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    [Array(2)]
    0: Array(2)
    0: "-M8FxRn7X7-6JI0nRakQ"
    1:
      codes: Array(3)
      0: {language: "php - Erreur", script: "<?php use SymfonyComponentHttpFoundationResponse;r…    array('Content-type' => 'application/json'));"}
      1: {language: "php - OK", script: "<?php use SymfonyComponentHttpFoundationResponse;$…se::HTTP_OK,    ['content-type' => 'text/html']);"}
      2: {language: "php - Autre méthodes", script: "<?php $response = new Response();$response->setCon…sCode(Response::HTTP_NOT_FOUND);return $response;"}
      length: 3
    __proto__: Array(0)
    title: "Reponse dans controlleur"
    __proto__: Object
    length: 2
    __proto__: Array(0)
    length: 1
    __proto__: Array(0)

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Résolu
    Merci pour ton aide. Finalement on m'a proposé une solution sans modifier le template:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    filter(query: string) {
        const result: object = {};
     
        for (let key in this.items) {
          const data = this.items[key];
     
          if (this.items.hasOwnProperty(key) && data.title &&
            data.title.normalize("NFD").replace(/[\u0300-\u036f]/g, "").indexOf(query) !== -1) {
            result[key] = data;
          }
        }
     
        this.filteredItems = Object.keys(result).length ? result : this.items;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/04/2014, 13h05
  2. [Délégué] Traitement sur liste d'objets génériques
    Par Chen norris dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 26/03/2013, 11h44
  3. Filtrage sur listes déroulantes successives
    Par aandre2937 dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2009, 15h18
  4. Tri sur liste d'objet
    Par topolino dans le forum ASP.NET
    Réponses: 5
    Dernier message: 23/01/2009, 10h59
  5. Problème Iterateur sur liste d'objets
    Par kornterstrike dans le forum SL & STL
    Réponses: 1
    Dernier message: 23/11/2007, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo