getColoredString("WordPress is up to date.\n","green"); } else { echo $color->getColoredString("A newer version of WordPress is available.\n","red"); } echo "\n"; echo "Doing verify-checksums.\n"; $coreCheckSums = shell_exec("wp core verify-checksums $extraargs 2>&1"); $coreCheckSums = explode("\n", $coreCheckSums); $failedChecksum = array(); $shouldNotExist = array(); foreach($coreCheckSums as $line) { if(empty($line)) { continue; } $line_arr = explode(":",$line); switch(strtolower($line_arr[0])) { case "success": echo "\n"; banner("All WordPress Core files pass checksum validation.","success"); break; case "warning": if(trim($line_arr[1])=="File doesn't verify against checksum") { echo $color->getColoredString("File failed checksum validation: {$line_arr[2]}\n","red"); $failedChecksum[] = trim($line_arr[2]); } elseif (trim($line_arr[1])=="File should not exist") { echo $color->getColoredString("File should not exist: {$line_arr[2]}\n","red"); $shouldNotExist[] = trim($line_arr[2]); } break; case "error": echo "\n"; banner("WordPress Core files did not pass validation.","error"); break; default: echo $color->getColoredString("Unknown return string:\n$line\n","red","light_gray"); break; } } echo "\n"; //Deal with checksum validation echo "Number of files that failed checksum validation: "; if(count($failedChecksum) > 0) { echo $color->getColoredString(count($failedChecksum)."\n","red"); $response = readline("Do you wish to replace the core files with fress versions from WordPress.org (y/N)? "); if(strtolower($response) == "y") { //Replace 'em! $replace = shell_exec("wp core download --version=$version --force $extraargs"); echo "\n"; print_r($replace); echo "\n"; if($isroot) { echo "\n"; banner("WordPress Core files have been updated. Please check ownership and permission after script is finished!","warning"); } } } else { echo $color->getColoredString("0\n","green"); } echo "\n"; //deal with files that should not exist. echo "Number of files that should not exist: "; if(count($shouldNotExist) > 0) { echo $color->getColoredString(count($shouldNotExist)."\n","red"); $response = readline("Do you wish to delete these files (y/N)? "); if(strtolower($response) == "y") { //Delete 'em foreach($shouldNotExist as $target) { if(unlink($target)) { echo $color->getColoredString("File $target deleted.","green"); } else { echo $color->getColoredString("Unable to delete $target.","red"); } } echo "\n"; } } else { echo $color->getColoredString("0\n","green"); } echo "\n"; //Plugins $checkPluginVersions = shell_exec("wp plugin list $extraargs"); $arr_checkPluginVersions = explode("\n",$checkPluginVersions); $plugins = array(); foreach($arr_checkPluginVersions as $p) { $arr_p = explode("\t",$p); if(!isset($arr_p[0]) || empty($arr_p[0]) || trim($arr_p[0]) == "name") { continue; //Ignore this line } $plugins[$arr_p[0]] = array("name"=>$arr_p[0],"active"=>$arr_p[1],"update"=>$arr_p[2],"version"=>$arr_p[3]); } //filter the plugins $active_plugins = array_filter($plugins,function($plugin) { return ($plugin['active']=="active"); }); $inactive_plugins = array_filter($plugins,function($plugin) { return ($plugin['active']=="inactive"); }); //Active plugins echo "Total number of active plugins: ".count($active_plugins)."\n"; if(count($active_plugins) > 0) { //Active plugins $result = readline("Do you wish to check active plugins (y/N)? "); if(strtolower($result) == "y") { //Parse 'em foreach($active_plugins as $p) { check_plugin($p); } } } echo ""; //Inactive plugins echo "Total number of inactive plugins: ".count($inactive_plugins)."\n"; if(count($inactive_plugins) > 0) { //Active plugins $result = readline("Do you wish to check inactive plugins (y/N)? "); if(strtolower($result) == "y") { //Parse 'em foreach($inactive_plugins as $p) { check_plugin($p); } } } echo ""; $time_elapsed_secs = microtime(true) - $start; banner("Script Complete. Total run time: $time_elapsed_secs sec"); function check_plugin($p) { global $color; global $extraargs; echo "\nPlugin: {$p['name']}\n"; if($p['update'] == "available") { echo $color->getColoredString("This plugin is out of date!","red")."\n"; $response = readline("Do you want to update this plugin (y/N)? "); if(strtolower($response) == "y") { echo "Updating {$p['name']}...\n"; $result = shell_exec("wp plugin update {$p['name']} $extraargs 2>&1"); print_r($result); echo "\n"; } } $cmd = "wp plugin verify-checksums {$p['name']} $extraargs 2>&1"; $result = explode("\n",shell_exec($cmd)); $state = null; foreach($result as $r) { if(!empty($r)) { if (strpos($r, 'Warning: Could not retrieve the checksums') !== false) { $state = "nocheck"; } if (strpos($r, 'Success:') !== false && $state != "nocheck") { $state = "success"; } if (strpos($r, 'Error:') !== false && $state != "nocheck") { $state = "fail"; } } } switch($state) { case "success": echo $color->getColoredString("Plugin passed checksum validation.","green")."\n"; break; case "nocheck": echo $color->getColoredString("Unable to retrieve checksum info for plugin.","yellow")."\n"; break; case "fail": echo $color->getColoredString("Plugin failed checksum validation!","red")."\n"; break; default: echo $color->getColoredString("Unknown result of checksum validation!","red")."\m".print_r($result,true)."\m"; break; } if($state == "fail") { $response = readline("Do you want to install a fresh copy of this plugin (y/N)? "); if(strtolower($response) == "y") { $result = shell_exec("wp plugin install {$p['name']} --force --version={$p['version']} $extraargs 2>&1"); print_r($result); echo "\n"; } } } function banner($msg,$type = "message") { global $color; switch($type) { case "error": $forecolor = "red"; break; case "warning": $forecolor = "yellow"; break; case "success": $forecolor = "green"; break; default: $forecolor = null; //Default color break; } echo $color->getColoredString(str_repeat("*", strlen($msg))."\n",$forecolor); echo $color->getColoredString($msg."\n",$forecolor); echo $color->getColoredString(str_repeat("*", strlen($msg))."\n",$forecolor); echo "\n"; //Extra spacing } class Colors { private $foreground_colors = array(); private $background_colors = array(); public function __construct() { // Set up shell colors $this->foreground_colors['black'] = '0;30'; $this->foreground_colors['dark_gray'] = '1;30'; $this->foreground_colors['blue'] = '0;34'; $this->foreground_colors['light_blue'] = '1;34'; $this->foreground_colors['green'] = '0;32'; $this->foreground_colors['light_green'] = '1;32'; $this->foreground_colors['cyan'] = '0;36'; $this->foreground_colors['light_cyan'] = '1;36'; $this->foreground_colors['red'] = '0;31'; $this->foreground_colors['light_red'] = '1;31'; $this->foreground_colors['purple'] = '0;35'; $this->foreground_colors['light_purple'] = '1;35'; $this->foreground_colors['brown'] = '0;33'; $this->foreground_colors['yellow'] = '1;33'; $this->foreground_colors['light_gray'] = '0;37'; $this->foreground_colors['white'] = '1;37'; $this->background_colors['black'] = '40'; $this->background_colors['red'] = '41'; $this->background_colors['green'] = '42'; $this->background_colors['yellow'] = '43'; $this->background_colors['blue'] = '44'; $this->background_colors['magenta'] = '45'; $this->background_colors['cyan'] = '46'; $this->background_colors['light_gray'] = '47'; } // Returns colored string public function getColoredString($string, $foreground_color = null, $background_color = null) { $colored_string = ""; // Check if given foreground color found if (isset($this->foreground_colors[$foreground_color])) { $colored_string .= "\033[" . $this->foreground_colors[$foreground_color] . "m"; } // Check if given background color found if (isset($this->background_colors[$background_color])) { $colored_string .= "\033[" . $this->background_colors[$background_color] . "m"; } // Add string and end coloring $colored_string .= $string . "\033[0m"; return $colored_string; } // Returns all foreground color names public function getForegroundColors() { return array_keys($this->foreground_colors); } // Returns all background color names public function getBackgroundColors() { return array_keys($this->background_colors); } } function strip_newline($input) { $output = str_replace(array("\n", "\r"), '', $input); return $output; }