Gravity Forms : activer l'anti-spam honeypot sur tous les formulaires photo

Gravity Forms : supprimer les entrées mais garder les fichiers uploadés sur le site

Gravity Forms garde en base de données toutes les entrées des formulaires. Sur un site qui génère énormément de demandes (formulaire de contact, demandes d’informations, formulaire de commande ou pré-commande…).

Cela signifie des milliers d’enregistrements dans la base de données, ce qui n’est pas toujours souhaitable, pour des raisons de stockage et de performance.

Supprimer les entrées des formulaires Gravity Forms

Si vous avez besoin de supprimer les entrées créées par Gravity Forms une fois que le message a été envoyé, vous pouvez utiliser cette fonction:

// Delete all entries from form ID  1.
add_action( 'gform_after_submission_1', 'sky_remove_form_entry' );
function sky_remove_form_entry( $entry ) {
    GFAPI::delete_entry( $entry['id'] );
}Code language: PHP (php)

Dans l’exemple ci-dessus, on ne supprime que les entrées du formulaire qui a l’ID 1. Si vous souhaitez supprimer toutes les entrées de tous les formulaires Gravity Forms d’un site, il suffit d’enlever le _1de la cible de l’action gform_after_submission:

// Delete all entries from all forms.
add_action( 'gform_after_submission', 'sky_remove_form_entry' );
function sky_remove_form_entry( $entry ) {
    GFAPI::delete_entry( $entry['id'] );
}Code language: PHP (php)

Garder les fichiers uploadés lors de la suppression des entrées

Attention: supprimer les entrées Gravity Forms revient également à supprimer les fichiers qui auront été uploadés via les formulaires. C’est tout à fait normal puisqu’ils font partie des champs du formulaire.

Pour garder les fichiers uploadés, même si les entrées associées sont supprimées, il faut utiliser le filtre gform_field_types_delete_files:

add_filter( 'gform_field_types_delete_files', '__return_empty_array' );Code language: JavaScript (javascript)

Supprimer les fichiers associés à un champ upload particulier

Si vous souhaitez supprimer tous les fichiers qui auront été uploadés via un champ upload particulier, il suffit de préciser ce champ dans le tableau $field_types avant de le passer à gform_field_types_delete_files:

add_filter( 'gform_field_types_delete_files', 'sky_delete_custom_upload_field' );
function sky_delete_custom_upload_field( $field_types ) {
    $field_types[] = 'my_custom_upload_field';
    return $field_types;
}Code language: PHP (php)

Dans cet exemple, notre champ upload s’appelle my_custom_upload_field.

Family in Death for a Salesman photo

Family in Death of a Salesman

  1. Death of a Salesman : an extended introduction
  2. Family in Death of a Salesman
  3. Death of a Salesman: Tragedy versus Social Drama
  4. Death of a Salesman: the play’s structure, a memory play

In an article entitled The Family in Modern Drama, Arthur Miller insisted that all “great plays” finally grapple with one central issue: “How may a man make of the outside world a home?”.

Making the outside world a home would imply being “well-liked”: managing to turn anonymous, business relations into close family ties – that is to say being able, like Dave Singleman, “to go… into twenty or thirty different cities, and pick up a phone, and be remembered and loved and helped by so many different people?” (p.63).

In Death of a Salesman, the dream of social success cannot be disentangled from the idyllic vision of society as a large, tightly-knit family.

Yet, there is every reason to believe that Dave Singleman, as his patronymic shows, is a bachelor, when the foundation of the much-vaunted American ideal remains the nuclear family: the nuclear family as an agent of socialization and as a stabilizing influence.

Precisely in Death of a Salesman spectators are given privileged access into the private sphere of a family and occasionally turned into voyeurs. It seems that far from offering a secure, reassuring nest the family also reverberates the tensions of society at large in the 1950s.

1. The Green World patriarchal clan

Willy, through his conversation with Ben (38-41) harks back to his infancy. The image of the father is mythologized by both sons – the elder Ben and the younger Willy – even if Father Loman deserted his wife and children to lead an adventurous life.

The mother is hardly ever referred to. She must nevertheless have had a hard life providing sustenance and comfort for her two sons. When Ben followed in his father’s footsteps by running off for adventure, Mother Loman still had Willy to look after.

Willy, who recalls sitting on “Mamma’s lap” (38), suffered from his father’s absence. The lack of paternal care resulted in his feeling “kind of temporary about (himself)” (40).

Mother Loman’s caring presence is trivialized: “fine specimen of a Lady, Mother” (35) and the “old girl” when reunion with the vanished father is Ben and Willy’s single purpose. Ben starts for Alaska hoping to find his father (37) and Willy elects a father figure through his total devotion to Dave Singleman, another salesman.

Willy has remained so obsessed with the myth of his Father that he entreats Ben to tell Biff and Happy about their grandfather, so they can learn “the kind of stock they spring from” (38). So, in a way, it is as if all the Loman men sprang directly from their father’s side and as if their mother had had no part to play in their birth.

An Edenic myth is implied which seems to preclude, or at least downplay woman’s role in the procreation process.

Lire la suite

Eddy B and Tim Gunter - Underdog photo

Eddy B and Tim Gunter – Underdog

A young nigga with a dollar and a dream
And these Nikes on my feet, tryna stay up out the streets
So I’m rhyming pulling 187s all on these beats
Stead of on the concrete
Cemeting my future while they were focused on what they chief
But shit, I’m like a chief, head honcho
Tell me that it’s impossible I’ll get it to you pronto
Been workin’ all these late nights and these early mornings like Alonzo
So one day they’ll be callin’ me great, just call me Gonzo
But, I’m never actin’ nor is anybody pulling strings
Everything I have came from sacrificing everything
I traded workin’ 9 to 5 for the minimum
For workin non-stop so my life be like a cinema screen
But in the end I wouldn’t have it any other way
Got on my knees and for this rap to work is what I prayed
And now it’s happening, crunchin’ numbers like captain
A serial (cereal) killer compelling listeners with this passion for words
Never actin, my verbs were truly fashioned to serve
Not only masses but curbs, not just the hood, but the burbs
Know you hear it everytime I grace the mic, then I give it to God
Feeling blinded by the lights, and it’s on!

Hook:

Let me see you put ’em up
Reach the sky, touch the stars up above
Cause it’s, one time for the underdog
One time for the underdog

You got the world on your team
Even if that ain’t what it seems
It’s one time for the underdog
One time for the underdog

A 20 year old dreamin’ of whippin’ Monte Carlo’s
And gold jewlery lookin’ like I cam from El Dorado
Pick up the pen and pad, stead of spittin gin and vag
I’m paintin’ pictures with my words, just call me young picasso
These haters only gas me up and then I mash the throttle
Binge drinkers think its safe to say should drop the bottle
Cause what I’m spittin’ is proof, and truth is hard to swallow
When rappers losin’ they heads, that’s word to sleepy hollow
Nowadays they tryna flex, Johnny Bravo
And I’ll be Rocky in the second fight against Apollo
Underdog, but you see, I won the war
Askin me if I can spit is askin’ me to raise the bar
I been in this place before, matter fact most of my life
They told me I would fail, die before I prove ’em right
Pennin’ verses on my lunch bag, now I’m doin shows
Lady luck blew me a kiss, now I’m a prince, never a toad
Bet your bottom, I’m the greatest, that’s on everything I own
And though it isn’t much, I want the world like Al Capone
I’m coming for the glory, this a sermon to the masses
The kid you shitted on is telling you to wipe his ass

Conseils pour bien réussir l'épreuve d'Expression Orale du bac photo

Conseils pour bien réussir l’épreuve d’Expression Orale du bac

  1. Bac : méthode pour l’étude d’un texte poétique
  2. 10 conseils pour bien réussir l’épreuve de Compréhension Orale du bac
  3. La compréhension écrite au bac : la méthode pour réussir
  4. Conseils pour bien réussir l’épreuve d’Expression Orale du bac
  5. Bac : le dossier en spécialité LLCER Anglais
  6. Bac : épreuve orale de spécialité LLCER Anglais
  7. Conseils pour bien réussir le Grand Oral du Bac
  8. La synthèse de documents en LLCER : méthode pour réussir

Déroulé de l’épreuve d’expression orale

L’expression orale de LV1 ou LV2 se passe durant le troisième trimestre. L’épreuve compte pour le quart (25%) de la note finale de l’épreuve d’anglais.

Vous allez tirer au sort une des quatre notions au programme:

  • Mythes et héros
  • Espaces et échanges
  • Idées de progrès
  • Lieux et formes du pouvoir

L’épreuve d’expression orale du Bac se déroule en trois temps :

  • 10 minutes de préparation au brouillon,
  • 5 minutes de présentation de la notion (pour les L uniquement: 10 minutes de présentation)
  • 5 minutes de discussion avec l’examinateur (pour les L uniquement: 10 minutes de discussion)

Pour les sections ES et S, l’épreuve se déroulement habituellement avec le professeur de langue de l’année de terminale, dans votre lycée.

La section L est interrogée par un autre examinateur, dans un autre lycée, au moment des épreuves orales finales du baccalauréat, aux alentours du 20 juin et plus.

Préparation

Vous avez 10 minutes au brouillon pour préparer vos notes d’exposé. Je vous conseille de rédiger l’introduction et la conclusion, de manière à être à l’aise au début et à la fin de l’épreuve, pour la première impression et la dernière.

Faites un plan détaillé: grandes parties, arguments, exemples mais ne tentez pas de réécrire l’intégralité de la notion, vous n’en aurez clairement pas le temps.

Exposé

Introduction

Dans l’introduction, commencez par introduire la notion que vous allez exposer, en relation avec les documents et débats que vous avez abordés en cours.

Introduisez ensuite la problématique : elle va vous permettre de vous interroger sur une question qui structurera votre exposé et à laquelle vous donnerez une réponse en conclusion, après la mise en balance de vos arguments et exemples.

Annoncez votre plan clairement. Votre plan peut être en deux ou trois parties, pas plus. Je vous conseille de privilégier un plan thématique, qui aborde la problématique de votre notion sous différents angles.

Lire la suite

10 conseils pour bien réussir l'épreuve de Compréhension Orale du bac photo

10 conseils pour bien réussir l’épreuve de Compréhension Orale du bac

  1. Bac : méthode pour l’étude d’un texte poétique
  2. 10 conseils pour bien réussir l’épreuve de Compréhension Orale du bac
  3. La compréhension écrite au bac : la méthode pour réussir
  4. Conseils pour bien réussir l’épreuve d’Expression Orale du bac
  5. Bac : le dossier en spécialité LLCER Anglais
  6. Bac : épreuve orale de spécialité LLCER Anglais
  7. Conseils pour bien réussir le Grand Oral du Bac
  8. La synthèse de documents en LLCER : méthode pour réussir

Format de l’épreuve

Vous allez entendre un document audio trois fois: vous disposerez d’une minute de pause après la première et la seconde écoute. A l’issue de la troisième écoute, vous aurez dix minutes pour rédiger en français un compte-rendu de ce que vous aurez compris.

Le document audio fait une minute et trente secondes. En comptant les pauses et le temps de rédaction, la durée totale de l’épreuve est de 16 minutes et 30 secondes.

10 conseils pour bien réussir le compte-rendu de la Compréhension Orale du bac anglais

1. Le document audio que vous allez entendre comporte un titre. Ce titre va vous éclairer sur le thème qui va être abordé. Utilisez-le pour inférer ce que vous allez entendre.

2. Il est normal de ne pas tout comprendre, surtout à la première écoute. Restez concentré, ne paniquez pas. Au fil des différentes écoutes, vous allez comprendre de plus en plus de choses.

3. Utilisez une grande feuille de brouillon sur laquelle vous ne noterez que des mots-clés, et non des phrases entières. Laissez de l’espace entre vos notes de façon à pouvoir les compléter lors des trois écoutes.

4. Lors des pauses d’une minute entre les écoutes, vous pourrez rajouter ce que vous n’avez pas eu le temps d’écrire mais que vous avez mémorisé. Vous pourrez également commencer à organiser vos idées.

5. Prenez vos notes en anglais : c’est ce que vous entendez, c’est donc plus facile et vous n’aurez qu’à copier ce que vous avez compris sans avoir à le traduire.

Lire la suite

Continuité pédagogique : sites, ressources et outils pour les cours en ligne, pour les enseignants et les élèves photo

Continuité pédagogique : sites, ressources et outils pour les cours en ligne, pour les enseignants et les élèves

La continuité pédagogique

La continuité pédagogique est destinée à s’assurer que les élèves poursuivent des activités scolaires leur permettant de progresser dans leurs apprentissages.

Les activités proposées s’inscrivent naturellement dans le prolongement de ce qui s’est fait en classe auparavant et/ou dans une préparation possible de ce qui sera fait dès le retour dans l’établissement.

Le travail demandé doit être régulier. Il doit pouvoir être réalisé dans un temps raisonnable, indiqué explicitement. Le temps consacré à chaque discipline doit être corrélé aux horaires habituels.

Les travaux proposés sont adaptés au niveau d’enseignement et aux capacités des élèves. Ils pourront être l’occasion de s’appuyer plus spécifiquement sur des compétences variées adossées au travail autonome.

Supports de travail

La continuité pédagogique mobilise les supports usuels :

  • Les ressources de l’Espace Numérique de Travail ;
  • Des supports numériques, ressources créées par les enseignants et les ressources éditoriales disponibles (BRNE, Eduthèque…) ;
  • La plateforme du CNED « Ma classe à la maison » . Création d’un compte en tant qu’enseignant lors de la 1ère connexion.
  • Les manuels scolaires en possession des élèves.
  • Les ressources disciplinaires ou transversales du site académique et des autres sites institutionnels.

Les Banques de Ressources Numériques pour l’École (BRNE)

Les Banques de Ressources Numériques pour l’École (BRNE) s’adressent à tous les professeurs du premier et du second degré. Elles offrent gratuitement aux professeurs et aux élèves des ressources pour enseigner et apprendre.

Les professeurs bénéficient de l’ensemble des contenus et des services pédagogiques (boîte à outils pour composer des activités numériques interactives) soit en s’inscrivant à l’aide de leur adresse professionnelle académique pour bénéficier d’un accès, soit via l’ENT de leur établissement

Les 14 Banques pour enseigner et pour apprendre du CM1 à la 3e peuvent être utilisées dans les autres niveaux d’enseignement en amont et en aval.

Les contenus sont modifiables et les outils permettent aux enseignants de structurer les séquences et activités proposées aux élèves. Les enseignants peuvent également récupérer les travaux.

Lire la suite

Javascript : afficher le contenu d'un bloc HTML après un délai variable photo

JavaScript : tester si un paramètre existe dans une URL

J’ai eu besoin de tester l’existence d’un paramètre GET dans une URL en utilisant JavaScript. Il se trouve que cela ne prend que quelques lignes.

Pour ce tutoriel, nous allons considérer l’adresse de la page suivante, avec preview=yes passé comme paramètre:

https://example.com/?preview=yesCode language: JavaScript (javascript)

URLSearchParams() à la rescousse

Il est très simple de récupérer les variables $_GET avec PHP mais avec JavaScript, nous allons utiliser la classe URLSearchParams pour faire cela proprement.

1. On récupère les paramètres passés dans l’URL de la page:

let searchParams = new URLSearchParams(window.location.search);Code language: JavaScript (javascript)

2. On vérifie si l’un des paramètres recherchés est présent. Ici, on souhaite savoir si le paramètre preview existe:

searchParams.has('preview'); // returns trueCode language: JavaScript (javascript)

3. On vérifie maintenant si preview est égal à yes:

let param = searchParams.get('sent');
param; // echoes 'yes'Code language: JavaScript (javascript)

Il ne nous reste plus qu’à utiliser la variable param pour l’utiliser ou la comparer.

Gravity Forms : activer l'anti-spam honeypot sur tous les formulaires photo

Gravity Forms : activer l’anti-spam honeypot sur tous les formulaires

Gravity Forms permet de créer rapidement des formulaires avec des logiques conditionnelles sous WordPress.

Dans les options de Gravity Forms, il existe une option qui ajoute un champ caché au formulaire, “honeypot”, qui permet d’éviter le spam mais qui doit être activé manuellement pour chaque formulaire, ce qui peut être rapidement fastidieux selon le nombre de formulaires que vous avez sur le site.

Voici comment activer et ajouter le champ honeypot à tous vos formulaires, automatiquement:

<?php
/**
 * Enforce anti-spam honeypot on all Gravity forms.
 *
 * @param array $form The current form to be filtered.
 * 
 * @return array
 */
add_filter( 'gform_form_post_get_meta', __NAMESPACE__ . '\\sky_enforce_gravity_forms_anti_spam_honeypot' );
function sky_enforce_gravity_forms_anti_spam_honeypot( $form ): array {
	$form['enableHoneypot'] = true;
	return $form;
}Code language: HTML, XML (xml)

Et voilà, une protection supplémentaire et automatique pour tous vos formulaires !

PHP : solution pour l'erreur

PHP : solution pour l’erreur “preg_match(): Compilation failed: invalid range in character class”

Lors de la mise à jour d’un site vers PHP 7.4, je suis tombé sur cette erreur :

preg_match(): Compilation failed: invalid range in character class at offset 20 session.php on line 278Code language: JavaScript (javascript)

Depuis PHP 7.3, le moteur PCRE – qui est responsable de la gestion des expressions régulières – a été migré vers PCRE2.

Or, il s’avère que PCRE2 est plus strict dans la validation des pattern et c’est la raison pour laquelle, après la mise à jour de PHP, certaines expressions régulières ne peuvent plus être compilées correctement.

Voici un exemple d’expression régulière qui fonctionnait avant PHP7.3:

preg_match('/[\w-.]+/', ''); // this will not work in PHP7.3Code language: JavaScript (javascript)

Voici maintenant le même exemple mais qui sera désormais valide sous PHP 7.3 et les versions ultérieures :

preg_match('/[\w\-.]+/', ''); // the hyphen needs to be escapedCode language: JavaScript (javascript)

Comme vous pouvez le constater dans le deuxième exemple, il faut maintenant échapper le tiret (hyphen) avec un backslash.

Une fois la modification faite, plus d’erreur à ce niveau.

Redémarrer la machine virtuelle de Local by Flywheel photo

Local by Flywheel ne démarre plus à cause du renouvellement du certificat TLS de la machine virtuelle (docker) : une solution

J’utilise quotidiennement Local by Flywheel pour développer ou debugger des problèmes sur certains sites.

C’est une bonne alternative lorsque les hébergeurs ne proposent pas de site staging à leurs clients (les meilleurs hébergeurs proposent évidemment un staging, c’est la base).

L’autre jour, tournée de mises à jour suivie d’un reboot, je lance Local et patatras: il ne veut plus démarrer et visiblement reste bloqué sur une tentative de renouvellement de certificat TLS pour la machine virtuelle qui tourne sous Docker.

Si cela vous arrive, voici la marche à suivre. Il suffit de copier ces lignes d’instructions dans votre terminal. Concrètement, nous allons télécharger une nouvelle version du fichier ISO Boot2Docker et laisser le système se ré-provisionner.

Le processus implique de créer un alias (local-docker-machine) pour la machine virtuelle docker “Local by Flywheel”, et ensuite de lancer la série de commandes suivantes sur cet alias.

Voici les commandes à lancer dans le terminal:

alias local-docker-machine="/Applications/Local\ by\ Flywheel.app/Contents/Resources/extraResources/virtual-machine/vendor/docker/osx/docker-machine"
local-docker-machine stop local-by-flywheel
rm -rf ~/.docker/machine/certs
local-docker-machine create local-cert-gen
local-docker-machine start local-by-flywheel
local-docker-machine regenerate-certs -f local-by-flywheel
local-docker-machine rm -f local-cert-genCode language: JavaScript (javascript)

Voici le résultat de ces commandes:

Creating CA: /Users/matt/.docker/machine/certs/ca.pem
Creating client certificate: /Users/matt/.docker/machine/certs/cert.pem
Running pre-create checks...
(local-cert-gen) No default Boot2Docker ISO found locally, downloading the latest release...
(local-cert-gen) Latest release for github.com/boot2docker/boot2docker is v19.03.5
(local-cert-gen) Downloading /Users/matt/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v19.03.5/boot2docker.iso...
(local-cert-gen) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(local-cert-gen) Copying /Users/matt/.docker/machine/cache/boot2docker.iso to /Users/matt/.docker/machine/machines/local-cert-gen/boot2docker.iso...
(local-cert-gen) Creating VirtualBox VM...
(local-cert-gen) Creating SSH key...
(local-cert-gen) Starting the VM...
(local-cert-gen) Check network to re-create if needed...
(local-cert-gen) Found a new host-only adapter: "vboxnet1"
(local-cert-gen) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: /Applications/Local by Flywheel.app/Contents/Resources/extraResources/virtual-machine/vendor/docker/osx/docker-machine env local-cert-gen
Docker machine "local-by-flywheel" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
Regenerating TLS certificates
Docker machine "local-by-flywheel" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
About to remove local-cert-gen
WARNING: This action will delete both local reference and remote instance.
Successfully removed local-cert-genCode language: JavaScript (javascript)

Vous n’avez plus qu’à lancer Local by Flywheel: lancement maintenant impeccable et toutes les machines virtuelles sont bien là.

jQuery : sélectionner un élément dont l'ID ou la classe commence ou finit par une chaîne photo 1

jQuery : comment ajouter !important à une propriété CSS

jQuery possède une limitation qui peut s’avérer très gênante : on ne peut ajouter !important à une propriété CSS en utilisant un script jQuery.

Par exemple, ceci ne fonctionnera pas:

jQuery('.foo').css('border', '4px #000 solid !important');Code language: JavaScript (javascript)

alors que cette déclaration sera bien appliquée:

jQuery('.foo').css('border', '4px #000 solid');Code language: JavaScript (javascript)

Pour contourner cette limitation, je vous propose plusieurs solutions.

Première solution : utiliser la fonction addClass()

C’est probablement la solution la plus simple : il suffit d’ajouter une classe votre élément avec addClass(), puis de définir le code CSS relatif à cette classe.

Exemple:

jQuery('.foo').addClass('border-black');Code language: JavaScript (javascript)

et on ajoute le code CSS suivant:

.border-black{
    border: 4px #000 solid !important;
}Code language: CSS (css)

Deuxième solution : utiliser la fonction attr()

Une autre solution est d’utiliser la fonction attr(), avec une concaténation pour garder le style CSS inline s’il est déjà présent:

jQuery('.foo').attr('style', function(i,s) { return (s || '') + 'border:4px #000 solid !important;' });Code language: JavaScript (javascript)

Troisième solution : utiliser la propriété cssText

Toujours en utilisant la concaténation pour garder les styles inline existants, nous utilisons la propriété cssText de la fonction css() :

jQuery('.foo').css('cssText', jQuery('.foo').css('cssText')+'border: 4px #000 solid !important');Code language: JavaScript (javascript)

Quatrième solution : utiliser style.setProperty()

Ce n’est pas parce que l’on utilise jQuery que nous devons oublier le vanilla JavaScript.

En l’occurrence, JS offre nativement la fonction style.setProperty() qui nous permet d’appliquer notre style aisément:

jQuery('.foo').each(function(){
   this.style.setProperty( 'border', '4px #000 solid', 'important' );
});Code language: JavaScript (javascript)

Have fun!