[ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['?'], ] ], ], ]; } /** * Initialise la base de données de démo avec les données de l'environnement * de production (en modifiant les données privées). * * @param string $key */ public function actionInitDatabaseDemo($key = '') { if ($key == '45432df6e842ac71aa0b5bb6b9f25d44' && YII_ENV == 'demo') { $arrayLastnames = [ 'Martin', 'Bernard', 'Thomas', 'Petit', 'Robert', 'Richard', 'Durand', 'Dubois', 'Moreau', 'Laurent', 'Simon', 'Michel', 'Lefebvre', 'Leroy', 'Roux', 'David', 'Bertrand', 'Morel', 'Fournier', 'Girard', 'Bonnet', 'Dupont', 'Lambert', 'Fontaine', 'Rousseau', 'Vincent', 'Muller', 'Lefevre', 'Faure', 'Andre', 'Mercier', 'Blanc', 'Guerin', 'Boyer', 'Garnier', 'Chevalier', 'François', 'Legrand', 'Gauthier', 'Garcia', 'Perrin', 'Robin', 'Clement', 'Morin', 'Nicolas', 'Henry', 'Roussel', 'Mathieu', 'Gautier', 'Masson', 'Marchand', 'Duval', 'Denis', 'Dumont', 'Marie', 'Lemaire', 'Noël', 'Meyer', 'Dufour', 'Meunier', 'Brun', 'Blanchard', 'Giraud', 'Joly', 'Rivière', 'Lucas', 'Brunet', 'Gaillard', 'Barbier', 'Arnaud', 'Martinez', 'Gerard', 'Roche', 'Renard', 'Schmitt', 'Roy', 'Leroux', 'Colin', 'Vidal', 'Caron', 'Picard', 'Roger', 'Fabre', 'Aubert', 'Lemoine', 'Renaud', 'Dumas', 'Lacroix', 'Olivier', 'Philippe', 'Bourgeois', 'Pierre', 'Benoit', 'Rey', 'Leclerc', 'Payet', 'Rolland', 'Lecomte', 'Lopez', 'Jean', 'Dupuis', 'Guillot', 'Hubert', 'Berger', 'Carpentier', 'Sanchez', 'Dupuis', 'Moulin', 'Louis', 'Deschamps', 'Huet', 'Vasseur', 'Perez', 'Trouillot', 'Fusillier', 'Massenot', 'Boucher', 'Fleury', 'Royer', 'Klein', 'Jacquet', 'Jaquin', 'Adam', 'Paris', 'Poirier', 'Aubry', 'Guyot', 'Carré', 'Charles', 'Charpentier', 'Menard', 'Bailly', 'Bertin', 'Le Gall', 'Collet', 'Leger', 'Bouvier', 'Millet', 'Daniel', 'Langlois', 'Pelletier', 'Perrier', 'Leblanc', 'Lebrun', 'Monnier', 'Michaud', 'Laporte', 'Carlier', 'Pasquier', 'Delaunay', 'Lamy', 'Gilbert', 'Lejeune', 'Pichon', 'Cordier', 'Barthelemy', 'Perret', 'Reynaud', 'Humbert', 'Marechal', 'Bernard', 'Lemaitre', 'Gay', 'Bouchet', 'Da Silva', 'Chauvin', 'Chevalier', 'Tessier', 'Poulain', 'Girondin', 'Gillet', 'Guichard' ]; $arrayNames = [ 'Adel', 'Antonin', 'Armand', 'Arnaud', 'Aymeric', 'Baptiste', 'Barnabé', 'Bernard', 'Brice', 'Baudouin', 'Camille', 'Cassandre', 'Célestin', 'Christian', 'Clément', 'Cyril', 'Claude', 'Damien', 'Daniel', 'David', 'Delphin', 'Denis', 'Didier', 'Dimitri', 'Dorothée', 'Désiré', 'Edgard', 'Etienne', 'Eugène', 'Eudes', 'Eric', 'Fabien', 'Fabrice', 'Flavien', 'Florent', 'Francois', 'Frédéric', 'Gabin', 'Gabriel', 'Gautier', 'Gilles', 'Guy', 'Hervé', 'Huvert', 'Hugues', 'Hector', 'Jacques', 'Jason', 'Jean', 'Jeannot', 'Johan', 'Julien', 'Léon', 'Lionel', 'Loïc', 'Lucas', 'Luc', 'Lucien', 'Maurice', 'Maxence', 'Maxime', 'Michel', 'Morgan', 'Nicolas', 'Normand', 'Norbert', 'Olivier,', 'Pascal', 'Patrice', 'Pierrick', 'Raphael', 'Roland', 'Stéphane', 'Sylvain', 'Sylvestre', 'Timothée', 'Thomas', 'Tristan', 'Ulysse', 'Vincent', 'Victor', 'Vivien', 'Adeline', 'Albane', 'Alix', 'Amélie', 'Arielle', 'Aurelle', 'Blandine', 'Blanche', 'Brigitte', 'Berthe', 'Camille', 'Capucine', 'Catherine', 'Cécile', 'Charlotte', 'Chloé', 'Claudine', 'Clémenence', 'Constance', 'Cyrielle', 'Corinne', 'Danielle', 'Delphine', 'Denise', 'Dominique', 'Diane', 'Édith', 'Éliane', 'Éléonore', 'Émilie', 'Emmanuelle', 'Ève', 'Évelyne', 'Fanny', 'Flavie', 'Flore', 'Françoise', 'Gabrielle', 'Gaëlle', 'Geneviève', 'Georgette', 'Germaine', 'Gertrude', 'Gisèle', 'Gwenaëlle', 'Hélène', 'Héloïse', 'Henriette', 'Huguette', 'Inès', 'Isabelle', 'Jacqueline', 'Jeanne', 'Joëlle', 'Joséphine', 'Juliette', 'Justine', 'Julie', 'Laura', 'Laure', 'Léa', 'Léonie', 'Lucie', 'Lucienne', 'Lorraine', 'Lucille', 'Ludivine', 'Lydie', 'Margot', 'Marion', 'Marlène', 'Marthe', 'Mélodie', 'Monique', 'Noémie', 'Nadine', 'Nadège', 'Océane', 'Odette', 'Odile', 'Paulette', 'Rose', 'Roseline', 'Renée', 'Sabine', 'Sophie', 'Suzanne', 'Sylvie', 'Thérèse', ]; $arrayNamesChecked = []; $arrayLastnameschecked = []; $users = User::searchAll([ 'user_producer.id_producer' => 1 ]) ; foreach ($users as $u) { if ($u->email != 'producer@opendistrib.net') { do { $indexLastname = rand(0, count($arrayLastnames) - 1); $indexName = rand(0, count($arrayNames) - 1); } while (isset($arrayLastnameschecked[$i_nom]) || isset($arrayNamesChecked[$i_prenom])); $arrayLastnameschecked[$i_nom] = true; $arrayNamesChecked[$i_prenom] = true; $lastname = $arrayLastnameschecked[$indexLastname]; $name = $arrayNamesChecked[$indexName]; $u->name = $name; $u->lastname = $lastname; $email = strtolower($name) . '.' . strtolower($lastname) . '@yopmail.com'; $email = htmlentities($email, ENT_NOQUOTES, 'utf-8'); $email = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $email); $email = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $email); // pour les ligatures e.g. 'œ' $email = preg_replace('#&[^;]+;#', '', $email); // supprime les autres caractères $email = str_replace(' ', '', $email); $u->email = $email; $u->telephone = '0600000000'; } else { /* * Le hash du mot de passe en production est volontairement corrompu * pour empêcher la connexion des utilisateurs via ce compte en prod. * Lors de l'initialisation des utilisateurs sur l'espace de démo, * on remet le bon hash pour que ce compte soit disponible. */ $u->password_hash = '$2y$13$2D5T3Eo0pySmtlAuEGcfmOdTR5mleog8Y6YPGhop/ych6pbj6aN2y'; } $u->save(); } $arrayOrders = Order::find() ->where('username IS NOT NULL') ->all(); foreach ($arrayOrders as $order) { $lastname = $arrayLastnames[rand(0, count($arrayLastnames) - 1)]; $name = $arrayNames[rand(0, count($arrayNames) - 1)]; $c->username = $name . ' ' . $lastname; $c->save(); } $arraySubscription = Subscription::find() ->where('username IS NOT NULL') ->all(); foreach ($arraySubscription as $subscription) { $lastname = $arrayLastnames[rand(0, count($arrayLastnames) - 1)]; $name = $arrayNames[rand(0, count($arrayNames) - 1)]; $c->username = $name . ' ' . $lastname; $c->save(); } } } /** * Routine quotidienne concernant les commandes : paiement et envoi d'un * récap aux producteurs. * * @param string $key * @param string $forceDate */ public function actionProcessOrders($key = '', $forceDate = '') { if ($key == '64ac0bdab7e9f5e48c4d991ec5201d57') { $hour = 20 ; if(strlen($forceDate)) { $date = $forceDate ; } else { $hour = date('H'); if ($hour == '00') { $date = date('Y-m-d'); } else { $date = date('Y-m-d', time() + 24 * 60 * 60); } } $arrayProducers = Producer::searchAll() ; foreach ($arrayProducers as $producer) { $distribution = Distribution::findOne([ 'date' => $date, 'active' => 1, 'id_producer' => $producer->id, ]); if ($distribution && ($hour == $producer->order_deadline || strlen($forceDate))) { /* * Paiement des commandes (paiement automatique) */ $arrayOrders = Order::searchAll([ 'distribution.date' => $date, 'distribution.id_producer' => $producer->id ], [ 'conditions' => 'date_delete IS NULL' ]) ; $configCredit = Producer::getConfig('credit', $producer->id) ; if($arrayOrders && is_array($arrayOrders)) { foreach($arrayOrders as $order) { if($order->auto_payment && $configCredit) { if ($order->getAmount(Order::AMOUNT_REMAINING) > 0) { $order->saveCreditHistory( CreditHistory::TYPE_PAYMENT, $order->getAmount(Order::AMOUNT_REMAINING), $order->distribution->id_producer, $order->id_user, User::ID_USER_SYSTEM ); } } } } /* * Envoi des commandes par email au producteur */ if(!strlen($forceDate)) { $arrayOrders = Order::searchAll([ 'distribution.date' => $date, 'distribution.id_producer' => $producer->id ], [ 'conditions' => 'date_delete IS NULL' ]) ; $user = User::searchOne([ 'id_producer' => $producer->id, 'status' => User::STATUS_PRODUCER ]); $mail = Yii::$app->mailer->compose( [ 'html' => 'cronOrdersSummary-html', 'text' => 'cronOrdersSummary-text', ], [ 'date' => $date, 'orders' => $arrayOrders ] ) ->setTo($user->email) ->setFrom([Yii::$app->params['adminEmail'] => 'distrib']); if (count($arrayOrders)) { $subject = '[distrib] Commandes du ' . date('d/m', strtotime($date)); // génération du pdf de commande Yii::$app->runAction('distribution/report-cron', [ 'date' => $date, 'save' => true, 'idProducer' => $producer->id, 'key' => '64ac0bdab7e9f5e48c4d991ec5201d57' ]); $mail->attach(Yii::getAlias('@app/web/pdf/Orders-' . $date . '-' . $producer->id . '.pdf')); } else { $subject = '[distrib] Aucune commande'; } $mail->setSubject($subject) ->send(); } } } } } }