Skip to content

Commit

Permalink
Merge pull request #50 from utahta/fix-workon-php53
Browse files Browse the repository at this point in the history
Work with PHP 5.3
  • Loading branch information
utahta authored Jul 17, 2017
2 parents a7d80ba + db97ecd commit 426c6c1
Show file tree
Hide file tree
Showing 10 changed files with 309 additions and 15 deletions.
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ docker/up-wp46-php56: build

docker/stop-wp46-php56:
@make -s -C ./dockerfiles stop-wp46-php56

docker/up-wp48-php53:
@make -s -C ./dockerfiles/php53 up

docker/stop-wp48-php53:
@make -s -C ./dockerfiles/php53 stop

25 changes: 25 additions & 0 deletions dockerfiles/php53/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM centos:6

RUN set -ex; \
yum -y update; \
yum -y install httpd php php-mbstring php-mysql php-gd php-xml

ENV WORDPRESS_VERSION 4.8
ENV WORDPRESS_SHA1 3738189a1f37a03fb9cb087160b457d7a641ccb4

RUN set -ex; \
curl -o wordpress.tar.gz -fSL "https://wordpress.org/wordpress-${WORDPRESS_VERSION}.tar.gz"; \
echo "$WORDPRESS_SHA1 *wordpress.tar.gz" | sha1sum -c -; \
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress
tar -xzf wordpress.tar.gz -C /usr/src/; \
rm -f wordpress.tar.gz

WORKDIR /var/www/html
VOLUME /var/www/html

COPY docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT ["docker-entrypoint.sh"]

CMD ["/usr/sbin/apachectl", "-DFOREGROUND"]

6 changes: 6 additions & 0 deletions dockerfiles/php53/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
up:
docker-compose up -d

stop:
docker-compose stop

28 changes: 28 additions & 0 deletions dockerfiles/php53/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: '2'

services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data_php53:/var/lib/mysql

wordpress:
depends_on:
- db
build: .
ports:
- 8005:80
volumes:
- ~/repos/WP-Social-Bookmarking-Light/build/wp-social-bookmarking-light:/var/www/html/wp-content/plugins/wp-social-bookmarking-light
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DEBUG: 1

volumes:
db_data_php53:
221 changes: 221 additions & 0 deletions dockerfiles/php53/docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
#!/bin/bash
# see https://github.com/docker-library/wordpress/blob/master/docker-entrypoint.sh

set -euo pipefail

# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}

if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ] || [ "$1" == "/usr/sbin/apachectl" ]; then
if ! [ -e index.php -a -e wp-includes/version.php ]; then
echo >&2 "WordPress not found in $PWD - copying now..."
if [ "$(ls -A)" ]; then
echo >&2 "WARNING: $PWD is not empty - press Ctrl+C now if this is an error!"
( set -x; ls -A; sleep 10 )
fi
tar cf - --one-file-system -C /usr/src/wordpress . | tar xf -
echo >&2 "Complete! WordPress has been successfully copied to $PWD"
if [ ! -e .htaccess ]; then
# NOTE: The "Indexes" option is disabled in the php:apache base image
cat > .htaccess <<-'EOF'
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EOF
#chown www-data:www-data .htaccess
fi
fi

# TODO handle WordPress upgrades magically in the same way, but only if wp-includes/version.php's $wp_version is less than /usr/src/wordpress/wp-includes/version.php's $wp_version

# allow any of these "Authentication Unique Keys and Salts." to be specified via
# environment variables with a "WORDPRESS_" prefix (ie, "WORDPRESS_AUTH_KEY")
uniqueEnvs=(
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
NONCE_KEY
AUTH_SALT
SECURE_AUTH_SALT
LOGGED_IN_SALT
NONCE_SALT
)
envs=(
WORDPRESS_DB_HOST
WORDPRESS_DB_USER
WORDPRESS_DB_PASSWORD
WORDPRESS_DB_NAME
"${uniqueEnvs[@]/#/WORDPRESS_}"
WORDPRESS_TABLE_PREFIX
WORDPRESS_DEBUG
)
haveConfig=
for e in "${envs[@]}"; do
file_env "$e"
if [ -z "$haveConfig" ] && [ -n "${!e}" ]; then
haveConfig=1
fi
done

# linking backwards-compatibility
if [ -n "${!MYSQL_ENV_MYSQL_*}" ]; then
haveConfig=1
# host defaults to "mysql" below if unspecified
: "${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}"
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
: "${WORDPRESS_DB_PASSWORD:=${MYSQL_ENV_MYSQL_ROOT_PASSWORD:-}}"
else
: "${WORDPRESS_DB_PASSWORD:=${MYSQL_ENV_MYSQL_PASSWORD:-}}"
fi
: "${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-}}"
fi

# only touch "wp-config.php" if we have environment-supplied configuration values
if [ "$haveConfig" ]; then
: "${WORDPRESS_DB_HOST:=mysql}"
: "${WORDPRESS_DB_USER:=root}"
: "${WORDPRESS_DB_PASSWORD:=}"
: "${WORDPRESS_DB_NAME:=wordpress}"

# version 4.4.1 decided to switch to windows line endings, that breaks our seds and awks
# https://github.com/docker-library/wordpress/issues/116
# https://github.com/WordPress/WordPress/commit/1acedc542fba2482bab88ec70d4bea4b997a92e4
sed -ri -e 's/\r$//' wp-config*

if [ ! -e wp-config.php ]; then
awk '/^\/\*.*stop editing.*\*\/$/ && c == 0 { c = 1; system("cat") } { print }' wp-config-sample.php > wp-config.php <<'EOPHP'
// If we're behind a proxy server and using HTTPS, we need to alert Wordpress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
EOPHP
#chown www-data:www-data wp-config.php
fi

# see http://stackoverflow.com/a/2705678/433558
sed_escape_lhs() {
echo "$@" | sed -e 's/[]\/$*.^|[]/\\&/g'
}
sed_escape_rhs() {
echo "$@" | sed -e 's/[\/&]/\\&/g'
}
php_escape() {
php -r 'var_export(('$2') $argv[1]);' -- "$1"
}
set_config() {
key="$1"
value="$2"
var_type="${3:-string}"
start="(['\"])$(sed_escape_lhs "$key")\2\s*,"
end="\);"
if [ "${key:0:1}" = '$' ]; then
start="^(\s*)$(sed_escape_lhs "$key")\s*="
end=";"
fi
sed -ri -e "s/($start\s*).*($end)$/\1$(sed_escape_rhs "$(php_escape "$value" "$var_type")")\3/" wp-config.php
}

set_config 'DB_HOST' "$WORDPRESS_DB_HOST"
set_config 'DB_USER' "$WORDPRESS_DB_USER"
set_config 'DB_PASSWORD' "$WORDPRESS_DB_PASSWORD"
set_config 'DB_NAME' "$WORDPRESS_DB_NAME"

for unique in "${uniqueEnvs[@]}"; do
uniqVar="WORDPRESS_$unique"
if [ -n "${!uniqVar}" ]; then
set_config "$unique" "${!uniqVar}"
else
# if not specified, let's generate a random value
currentVal="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
if [ "$currentVal" = 'put your unique phrase here' ]; then
set_config "$unique" "$(head -c1m /dev/urandom | sha1sum | cut -d' ' -f1)"
fi
fi
done

if [ "$WORDPRESS_TABLE_PREFIX" ]; then
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
fi

if [ "$WORDPRESS_DEBUG" ]; then
set_config 'WP_DEBUG' 1 boolean
fi

TERM=dumb php -- <<'EOPHP'
<?php
// database might not exist, so let's try creating it (just to be safe)
$stderr = fopen('php://stderr', 'w');
// https://codex.wordpress.org/Editing_wp-config.php#MySQL_Alternate_Port
// "hostname:port"
// https://codex.wordpress.org/Editing_wp-config.php#MySQL_Sockets_or_Pipes
// "hostname:unix-socket-path"
list($host, $socket) = explode(':', getenv('WORDPRESS_DB_HOST'), 2);
$port = 0;
if (is_numeric($socket)) {
$port = (int) $socket;
$socket = null;
}
$user = getenv('WORDPRESS_DB_USER');
$pass = getenv('WORDPRESS_DB_PASSWORD');
$dbName = getenv('WORDPRESS_DB_NAME');
$maxTries = 10;
do {
$mysql = new mysqli($host, $user, $pass, '', $port, $socket);
if ($mysql->connect_error) {
fwrite($stderr, "\n" . 'MySQL Connection Error: (' . $mysql->connect_errno . ') ' . $mysql->connect_error . "\n");
--$maxTries;
if ($maxTries <= 0) {
exit(1);
}
sleep(3);
}
} while ($mysql->connect_error);
if (!$mysql->query('CREATE DATABASE IF NOT EXISTS `' . $mysql->real_escape_string($dbName) . '`')) {
fwrite($stderr, "\n" . 'MySQL "CREATE DATABASE" Error: ' . $mysql->error . "\n");
$mysql->close();
exit(1);
}
$mysql->close();
EOPHP
fi

# now that we're definitely done writing configuration, let's clear out the relevant envrionment variables (so that stray "phpinfo()" calls don't leak secrets from our code)
for e in "${envs[@]}"; do
unset "$e"
done
fi

exec "$@"
6 changes: 5 additions & 1 deletion readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Donate link: https://gumroad.com/l/rWLrL
Tags: social, bookmarks, bookmarking, Hatena, Twitter, Facebook, Tumblr, Google Bookmark, Delicious, Digg, reddit, LinkedIn, Instapaper, StumbleUpon, mixi, gree, atode, toread, line, pocket, Pinterest
Requires at least: 4.0.0
Tested up to: 4.7
Stable tag: 2.0.0
Stable tag: 2.0.1

This plugin inserts social share links at the top or bottom of each post.

Expand Down Expand Up @@ -49,6 +49,10 @@ This is the list of used social sites:

== Changelog ==

= 2.0.1 =
* Fixed: for PHP 5.3 [#50](https://github.com/utahta/WP-Social-Bookmarking-Light/pull/50)
* Note: We don't intend to actively support on PHP 5.5 or lower, but if you get some problems, please report it. We will fix it.

= 2.0.0 =
* Breaking Changes: Drop support for PHP 5.5 or lower, Require PHP 5.6 or higher [#46](https://github.com/utahta/WP-Social-Bookmarking-Light/pull/46)
* Breaking Changes: Remove terminated some services
Expand Down
2 changes: 0 additions & 2 deletions src/WpSocialBookmarkingLight/Option.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ public function save(array $data)
'button_type' => $data['gree_button_type'],
'button_size' => $data['gree_button_size']
),
'evernote' => array('button_type' => $data['evernote_button_type']),
'tumblr' => array('button_type' => $data['tumblr_button_type']),
'atode' => array('button_type' => $data['atode_button_type']),
'google_plus_one' => array(
Expand Down Expand Up @@ -228,7 +227,6 @@ private function defaultOption()
'button_type' => '4',
'button_size' => '16'
),
'evernote' => array('button_type' => 'article-clipper'),
'tumblr' => array('button_type' => '1'),
'atode' => array('button_type' => 'iconsja'),
'google_plus_one' => array(
Expand Down
20 changes: 11 additions & 9 deletions src/WpSocialBookmarkingLight/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,14 @@ public function getBuilder()
/**
* Initialize wp actions
*/
public function init()
public static function init()
{
add_action('init', function() {
add_action('wp_head', array($this, 'head'));
add_action('wp_footer', array($this, 'footer'));
add_filter('the_content', array($this, 'theContent'));
add_action('admin_menu', array($this, 'adminMenu'));
$plugin = new Plugin();
add_action('wp_head', array($plugin, 'head'));
add_action('wp_footer', array($plugin, 'footer'));
add_filter('the_content', array($plugin, 'theContent'));
add_action('admin_menu', array($plugin, 'adminMenu'));
});
}

Expand Down Expand Up @@ -100,17 +101,18 @@ public function theContent($content)
public function adminMenu()
{
if( function_exists('add_options_page') ){
$admin = $this->admin;
$page = add_options_page('WP Social Bookmarking Light',
'WP Social Bookmarking Light',
'manage_options',
__FILE__,
function () {
echo $this->admin->page();
function () use($admin) {
echo $admin->page();
});
add_action('admin_print_styles-' . $page, array($this->admin, 'enqueueStyles'));
add_action('admin_print_scripts-' . $page, array($this->admin, 'enqueueScripts'));
add_action('admin_head-' . $page, function () {
echo $this->admin->head();
add_action('admin_head-' . $page, function () use($admin) {
echo $admin->head();
});
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/WpSocialBookmarkingLight/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,10 @@ private function link($url, $alt, $icon, $width, $height, $blank = true)
*/
public function invokeService($service)
{
$method = str_replace('_', '', ucwords($service, '_')); // snake_case to camelCase
// snake_case to camelCase
$method = str_replace('_', "\t", $service);
$method = ucwords($method); // for php 5.3
$method = str_replace("\t", '', $method);
return $this->$method();
}

Expand Down
Loading

0 comments on commit 426c6c1

Please sign in to comment.