développeur wordpress et woocommerce

SkyMinds ~ by Matt - développeur WordPress, formateur

Aujourd’hui, j’ai installé LineageOS (Android 11) sur mon OnePlus One, histoire de lui redonner un second souffle et de bénéficier des dernières mises à jour de sécurité Android.

Le OnePlus One (OPO) est sorti en mai 2014, il a donc quelques années derrière lui et tourne sous CyanogenMod 13, c’est-à-dire Android 6.0.1 (Marshmallow). Autant dire qu’il n’a pas vu de correctifs de sécurité depuis quelques années!

Si votre téléphone possède déjà LineageOS, vous pouvez vous rendre directement à l’étape 5.

Étape 1: activer le mode développeur

Sur le téléphone, on commence par activer le mode développeur:

  1. Ouvrez Paramètres > A propos du téléphone.
  2. Tapez 7 fois sur le numéro de build.
  3. Vous venez d’activer le mode développeur!

Grâce au mode développeur, vous avez maintenant accès à des options qui n’étaient pas visibles auparavant et qui vont nous être nécessaires.

Étape 2 : activer le mode déboggage USB

Pour activer le débogage USB:

  1. Ouvrez Paramètres > Système > Options pour les développeurs
  2. Activez l’option Débogage Android

Étape 3 : installation d’ADB

Android Debug Bridge (adb) est un outil de développement qui facilite la communication entre un appareil Android et un ordinateur. Cette communication s’effectue soit par câble USB, soit en WiFi.

Branchez votre OnePlus One en USB.

Téléchargez les derniers pilotes ADB issus du SDK Android puis décompressez l’archive.

Ouvrez le terminal, rendez-vous dans le répertoire platform-tools et listez ensuite votre téléphone avec cette commande:

./adb devices

Résultat:
List of devices attached
b4be4c53	device

Notre OnePlus One est bien détecté. On reboot en mode fastboot:

./adb reboot bootloader

On liste les appareils détectés par fastboot:

./fastboot devices

Résultat:
b4be4c53    fastboot

Attention, la commande suivante va effacer vos données donc pensez à sauvegarder les données importantes de votre téléphone avant!

On déverrouille le bootloader avec:

./fastboot oem unlock
                                                    OKAY [  0.168s]
 Finished. Total time: 0.168s

Il nous arrive souvent d’avoir toutes les cases (checkboxes) d’un formulaire ou d’un tableau à cocher.

Parfois, la fonctionnalité Sélectionnez tout / Désélectionner tout n’est pas implémentée donc voici comment faire, à l’aide de JavaScript.

Cocher toutes les cases

Supposons que toutes les cases à cocher de notre tableau se nomment post[], voici comment cocher toutes les cases, en utilisant vanilla JS :

var ele=document.getElementsByName('post[]');  
for(var i=0; i<ele.length; i++){  
  if(ele[i].type=='checkbox')  
    ele[i].checked=true;  
}  

Décocher toutes les cases

Inversement, on peut modifier le code précédent avec checked=false si l’on souhaite décocher toutes les cases:

var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
    if(ele[i].type=='checkbox')  
      ele[i].checked=false;  
  }

Fonction et bouton : Sélectionner tout

Maintenant, voyons comment nous pouvons intégrer notre code dans une fonction, que nous pourrons associer à un bouton “Sélectionner tout”:

function SelectAll(){  
  var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
  if(ele[i].type=='checkbox')  
    ele[i].checked=true;  
  }  
}  

Et notre bouton pourra être intégré comme ceci:

<input type="button" onclick='SelectAll()' value="Select All"/>  

Fonction et bouton : Désélectionner tout

Et le pendant: la fonction et le bouton qui permettent de désélectionner toutes les cases à cocher:

function deSelectAll(){  
  var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
    if(ele[i].type=='checkbox')  
      ele[i].checked=false;  
  }  
}      

Et voici le code HTML du bouton:

<input type="button" onclick='deSelectAll()' value="Deselect All"/>  

J’utilise souvent le premier bout de code sans les fonctions, ni le HTML (sauf si je développe une page d’options particulière), directement dans la console JavaScript du navigateur. C’est un gain de temps considérable sur certaines pages.

Bonnes sélections!

Depuis la mise à jour MacOS Monterey (v12+) et pour toutes les versions à venir, Apple ne fournit plus de binaire PHP installé par défaut.

Si vous utilisez composer par exemple pour l’un de vos scripts ou plugin, voici le message d’erreur que vous pouvez obtenir:

composer update --no-plugins --no-scripts
env: php: No such file or directory

J’ai tenté pas mal de solutions, comme installer PHP avec brew mais cela n’a pas résolu le problème.

Error: Permission denied @ apply2files

C’est l’une des erreurs obtenues lors de l’installation de paquets avec brew, directement après la mise à jour vers Monterey:

Error: Permission denied @ apply2files - /usr/local/lib/node_modules/npm/node_modules/.bin/node-gyp

Si cela vous arrive, c’est un problème de permissions sur le répertoire /user/local, la solution est simple, il faut redonner les bonnes permissions à votre utilisateur avec cette commande:

sudo chown -R $(whoami):admin /usr/local/* \
&& sudo chmod -R g+rwx /usr/local/*

Voilà déjà un problème réglé.

Installer composer sous MacOS Monterey

La véritable solution, toute simple finalement, est de réinstaller composer, qui se charge alors d’installer la version idoine de PHP.

On installe composer avec brew:

brew install composer

Résultat:


==> Downloading https://ghcr.io/v2/homebrew/core/php/manifests/8.1.0
Already downloaded: /Users/matt/Library/Caches/Homebrew/downloads/6dba7b955c116a258cc340994e9e9ed7dfdfe3ab7668f0f9adb5dfcdaaf303a2--php-8.1.0.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/php/blobs/sha256:dbbf3f0e595af9a72f6dcf7fef1890c6152bf9fb1be83f166b467393176c4aa5
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:dbbf3f0e595af9a72f6dcf7fef1890c6152bf9fb1be83f166b4
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/composer/manifests/2.1.14
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/composer/blobs/sha256:02f5fed3d67b82fb827078ffcd486a4a455d1f94e94d0701d779238d4e10903e
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:02f5fed3d67b82fb827078ffcd486a4a455d1f94e94d0701d77
######################################################################## 100.0%
==> Installing dependencies for composer: php
==> Installing composer dependency: php
==> Pouring php--8.1.0.monterey.bottle.tar.gz
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_ini /usr/local/etc/php/8.1/php.ini system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_dir /usr/local/share/pear system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set doc_dir /usr/local/share/pear/doc system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set ext_dir /usr/local/lib/php/pecl/20210902 system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set bin_dir /usr/local/opt/php/bin system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set data_dir /usr/local/share/pear/data system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set cfg_dir /usr/local/share/pear/cfg system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set www_dir /usr/local/share/pear/htdocs system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set man_dir /usr/local/share/man system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set test_dir /usr/local/share/pear/test system
==> /usr/local/Cellar/php/8.1.0/bin/pear config-set php_bin /usr/local/opt/php/bin/php system
==> /usr/local/Cellar/php/8.1.0/bin/pear update-channels
🍺  /usr/local/Cellar/php/8.1.0: 512 files, 79.9MB
==> Installing composer
==> Pouring composer--2.1.14.monterey.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/composer
Target /usr/local/bin/composer
already exists. You may want to remove it:
  rm '/usr/local/bin/composer'

To force the link and overwrite all conflicting files:
  brew link --overwrite composer

To list all files that would be deleted:
  brew link --overwrite --dry-run composer

Possible conflicting files are:
/usr/local/bin/composer
==> Summary
🍺  /usr/local/Cellar/composer/2.1.14: 3 files, 2.2MB
==> Running `brew cleanup composer`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

Comme vous pouvez le constater dans les résultats précédents, le lien symbolique n’a pas été créé correctement donc nous allons le corriger à la main.

On teste notre commande avec --dr-run d’abord:

brew link --overwrite --dry-run composer
Would remove:
/usr/local/bin/composer

Tout semble bon, on crée le lien symbolique:

brew link --overwrite composer
Linking /usr/local/Cellar/composer/2.1.14... 1 symlinks created.

On reteste maintenant notre mise à jour de plugin via composer:

composer update --no-plugins --no-scripts

Loading composer repositories with package information
Updating dependencies
Nothing to modify in lock file
Writing lock file
Installing dependencies from lock file (including require-dev)
Nothing to install, update or remove
Generating autoload files

Impeccable, composer et php sont de nouveau opérationnels sous Monterey.

close