diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1eeee56cefb802a3d77bdab5e9a75936dc251bcd..a5f4ad9b2bce37ef85e0ccba71daf6656aa98ac0 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,7 +34,6 @@ PHPunit:PHP7.3:MySQL: - find . -type "f" -iname "*.php" | xargs -L "1" php -l - phpcs -n - phpunit - allow_failure: true PluginSVN: stage: deploy diff --git a/eth-escape-headspace.php b/eth-escape-headspace.php index 0c236f674018e94db4072099fb3892cfcb778530..02dbe0cc66dc5d59ec6d7a445ed468babee8a4fe 100644 --- a/eth-escape-headspace.php +++ b/eth-escape-headspace.php @@ -1,30 +1,35 @@ -<?php -/* -Plugin Name: ETH Escape HeadSpace2 -Plugin URI: https://ethitter.com/plugins/ -Description: Output existing HeadSpace2 data without the original plugin. Allows HeadSpace2 (no longer maintained) to be deactivated without impactacting legacy content. -Author: Erick Hitter -Version: 0.2.1 -Author URI: https://ethitter.com/ - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - +<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName +/** + Plugin Name: ETH Escape HeadSpace2 + Plugin URI: https://ethitter.com/plugins/ + Description: Output existing HeadSpace2 data without the original plugin. Allows HeadSpace2 (no longer maintained) to be deactivated without impactacting legacy content. + Author: Erick Hitter + Version: 0.2.1 + Author URI: https://ethitter.com/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * Class ETH_Escape_HeadSpace2. + */ class ETH_Escape_HeadSpace2 { /** * Singleton + * + * @var self */ private static $instance = null; @@ -33,14 +38,16 @@ class ETH_Escape_HeadSpace2 { */ public static function get_instance() { if ( ! is_a( self::$instance, __CLASS__ ) ) { - self::$instance = new self; + self::$instance = new self(); } return self::$instance; } /** - * Class properties + * Headspace's string keys. + * + * @var array */ private $hs_string_keys = array( '_headspace_description', @@ -48,11 +55,21 @@ class ETH_Escape_HeadSpace2 { '_headspace_raw', ); + /** + * Headspace's array keys. + * + * @var array + */ private $hs_array_keys = array( '_headspace_scripts', '_headspace_stylesheets', ); + /** + * Headspace's robots.txt keys. + * + * @var array + */ private $hs_robots_keys = array( '_headspace_noindex', '_headspace_nofollow', @@ -61,6 +78,11 @@ class ETH_Escape_HeadSpace2 { '_headspace_noydir', ); + /** + * Map Headspace keys. + * + * @var array + */ private $hs_keys_to_meta_names = array( '_headspace_description' => 'description', '_headspace_metakey' => 'keywords', @@ -80,7 +102,7 @@ class ETH_Escape_HeadSpace2 { * Conditionally register plugin's hooks */ public function maybe_add_hooks() { - // Defer to HeadSpace2 when active + // Defer to HeadSpace2 when active. if ( class_exists( 'HeadSpace_Plugin' ) ) { return; } @@ -93,8 +115,10 @@ class ETH_Escape_HeadSpace2 { } /** - * Filter page titles in WP 4.1+ themes - * add_theme_support( 'title-tag' ) + * Filter page titles in WP 4.1+ themes add_theme_support( 'title-tag' ). + * + * @param string $title Page title. + * @return string */ public function filter_pre_get_document_title( $title ) { $_title = get_post_meta( get_the_ID(), '_headspace_page_title', true ); @@ -109,8 +133,12 @@ class ETH_Escape_HeadSpace2 { } /** - * Filter page titles in themes designed for < WP 4.1 - * wp_title() + * Filter page titles in themes designed for < WP 4.1 wp_title(). + * + * @param string $title Object title. + * @param string $sep Title separator. + * @param string $loc Separator location. + * @return string */ public function filter_wp_title( $title, $sep, $loc ) { $_title = get_post_meta( get_the_ID(), '_headspace_page_title', true ); @@ -118,7 +146,7 @@ class ETH_Escape_HeadSpace2 { if ( ! empty( $_title ) ) { $_title = esc_html( $_title ); - if ( 'right' == $loc ) { + if ( 'right' === $loc ) { $title = $_title . ' ' . $sep . ' '; } else { $title = ' ' . $sep . ' ' . $_title; @@ -134,15 +162,15 @@ class ETH_Escape_HeadSpace2 { * Add <head> meta tags */ public function action_wp_head() { - // Applies only to individual post objects + // Applies only to individual post objects. if ( ! is_singular() ) { return; } - // Check for HS data + // Check for HS data. $hs_data = array(); - // Keys that only exist once per post + // Keys that only exist once per post. foreach ( array_merge( $this->hs_string_keys, $this->hs_robots_keys ) as $hs_key ) { $value = get_post_meta( get_the_ID(), $hs_key, true ); @@ -151,7 +179,7 @@ class ETH_Escape_HeadSpace2 { } } - // Keys that can exist multiple times per post + // Keys that can exist multiple times per post. foreach ( $this->hs_array_keys as $hs_key ) { $values = get_post_meta( get_the_ID(), $hs_key, false ); @@ -160,44 +188,44 @@ class ETH_Escape_HeadSpace2 { } } - // Bail if no HS data exists for this post + // Bail if no HS data exists for this post. if ( empty( $hs_data ) ) { return; } - // Handle basic, string-containing keys + // Handle basic, string-containing keys. $output = array(); foreach ( $hs_data as $hs_key => $hs_value ) { - switch( $hs_key ) { - case '_headspace_description' : - case '_headspace_metakey' : + switch ( $hs_key ) { + case '_headspace_description': + case '_headspace_metakey': $output[] = '<meta name="' . esc_attr( $this->hs_keys_to_meta_names[ $hs_key ] ) . '" content="' . esc_attr( $hs_value ) . '" />'; break; - case '_headspace_scripts' : + case '_headspace_scripts': foreach ( $hs_value as $_source ) { $output[] = '<script type="text/javascript" src="' . esc_url( $_source ) . '"></script>'; } break; - case '_headspace_stylesheets' : + case '_headspace_stylesheets': foreach ( $hs_value as $_source ) { $output[] = '<link rel="stylesheet" href="' . esc_url( $_source ) . '" type="text/css" />'; } break; - default : + default: continue 2; break; } } - // Handle robots key, which is build from several meta keys + // Handle robots key, which is build from several meta keys. $robots = array(); foreach ( $this->hs_robots_keys as $hs_robot_key ) { - if ( isset( $hs_data[ $hs_robot_key] ) ) { + if ( isset( $hs_data[ $hs_robot_key ] ) ) { $robots[] = str_replace( '_headspace_', '', $hs_robot_key ); } } @@ -212,13 +240,14 @@ class ETH_Escape_HeadSpace2 { $output[] = '<meta name="robots" content="' . esc_attr( $robots ) . '" />' . "\n"; } - // Raw output should follow all other output - if ( isset( $hs_data[ '_headspace_raw' ] ) && ! empty( $hs_data[ '_headspace_raw' ] ) ) { - $output[] = $hs_data[ '_headspace_raw' ]; + // Raw output should follow all other output. + if ( ! empty( $hs_data['_headspace_raw'] ) ) { + $output[] = $hs_data['_headspace_raw']; } - // Output whatever we've built + // Output whatever we've built. if ( ! empty( $output ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo "\n<!-- Escape HeadSpace2 by Erick Hitter; https://ethitter.com/plugins/ -->\n" . implode( "\n", $output ) . "\n<!-- Escape HeadSpace2 -->\n"; } } @@ -230,6 +259,7 @@ class ETH_Escape_HeadSpace2 { $output = get_post_meta( get_the_ID(), '_headspace_raw_footer', true ); if ( ! empty( $output ) ) { + // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $output . "\n"; } }