diff --git a/admin/tool/httpsreplace/classes/url_finder.php b/admin/tool/httpsreplace/classes/url_finder.php index bd45ce1bcae..2ccfeb28b43 100644 --- a/admin/tool/httpsreplace/classes/url_finder.php +++ b/admin/tool/httpsreplace/classes/url_finder.php @@ -67,7 +67,7 @@ class url_finder { private function domain_swap($table, $column, $domain) { global $DB; - $renames = (array)json_decode(get_config('tool_httpsreplace', 'renames')); + $renames = json_decode(get_config('tool_httpsreplace', 'renames'), true); $search = "http://$domain"; $replace = "https://$domain"; diff --git a/admin/tool/httpsreplace/cli/url_finder.php b/admin/tool/httpsreplace/cli/url_finder.php deleted file mode 100644 index 58831b1755c..00000000000 --- a/admin/tool/httpsreplace/cli/url_finder.php +++ /dev/null @@ -1,60 +0,0 @@ -. - -/** - * url_finder cli script. Examines DB for non-https src or data links, and lists them. - * - * @package tool_httpsreplace - * @copyright Copyright (c) 2016 Blackboard Inc. (http://www.blackboard.com) - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -define('CLI_SCRIPT', true); -require(__DIR__ . '/../../../../config.php'); -require_once($CFG->libdir.'/clilib.php'); - -list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help')); -if ($unrecognized) { - $unrecognized = implode("\n ", $unrecognized); - cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2); -} -if ($options['help']) { - $help = "List of http (not https) urls on a site in the DB -Options: --h, --help Print out this help -Example: -\$sudo -u www-data /usr/bin/php admin/tool/httpsreplace/cli/url_finder.php \n"; - echo $help; - exit(0); -} - -if (!$DB->replace_all_text_supported()) { - echo $OUTPUT->notification(get_string('notimplemented', 'tool_httpsreplace')); - exit(1); -} - -if (!is_https()) { - echo $OUTPUT->notification(get_string('httpwarning', 'tool_httpsreplace'), 'warning'); -} - -$urlfinder = new \tool_httpsreplace\url_finder(); -$results = $urlfinder->http_link_stats(); -$fp = fopen('php://stdout', 'w'); -fputcsv($fp, ['clientsite', 'httpdomain', 'urlcount']); -foreach ($results as $domain => $count) { - fputcsv($fp, [$SITE->shortname, $domain, $count]); -} -fclose($fp); diff --git a/admin/tool/httpsreplace/cli/url_replace.php b/admin/tool/httpsreplace/cli/url_replace.php index 597eb6659c6..7945a772af0 100644 --- a/admin/tool/httpsreplace/cli/url_replace.php +++ b/admin/tool/httpsreplace/cli/url_replace.php @@ -15,7 +15,7 @@ // along with Moodle. If not, see . /** - * url_finder cli script. Examines DB for non-https src or data links, and replaces them. + * url_replace cli script. Examines DB for non-https src or data links, and lists broken ones or replaces all links. * * @package tool_httpsreplace * @copyright Copyright (c) 2016 Blackboard Inc. (http://www.blackboard.com) @@ -26,17 +26,32 @@ define('CLI_SCRIPT', true); require(__DIR__ . '/../../../../config.php'); require_once($CFG->libdir.'/clilib.php'); -list($options, $unrecognized) = cli_get_params(array('help' => false), array('h' => 'help')); +list($options, $unrecognized) = cli_get_params( + array( + 'help' => false, + 'list' => false, + 'replace' => false, + 'confirm' => false, + ), + array( + 'h' => 'help', + 'l' => 'list', + 'r' => 'replace', + ) +); if ($unrecognized) { $unrecognized = implode("\n ", $unrecognized); cli_error(get_string('cliunknowoption', 'admin', $unrecognized), 2); } -if ($options['help']) { - $help = "Replaces http urls with https across a site's content +if ($options['help'] || (!$options['list'] && !$options['replace'])) { + $help = "Examines DB for non-https src or data links, and lists broken links or replaces all links. Options: -h, --help Print out this help +-l, --list List of http (not https) urls on a site in the DB that would become broken. +-r, --replace List of http (not https) urls on a site in the DB that would become broken. +--confirm Replaces http urls with https across a site's content. Example: -\$sudo -u www-data /usr/bin/php admin/tool/httpsreplace/cli/url_replace.php \n"; +\$ sudo -u www-data /usr/bin/php admin/tool/httpsreplace/cli/url_replace.php --list \n"; echo $help; exit(0); } @@ -48,7 +63,31 @@ if (!$DB->replace_all_text_supported()) { if (!is_https()) { echo $OUTPUT->notification(get_string('httpwarning', 'tool_httpsreplace'), 'warning'); + echo "\n"; } -$urlfinder = new \tool_httpsreplace\url_finder(); -$urlfinder->upgrade_http_links(); +if ($options['replace']) { + + if ($options['confirm']) { + + $urlfinder = new \tool_httpsreplace\url_finder(); + $urlfinder->upgrade_http_links(); + } else { + echo "Once this is tool run, changes made can't be reverted. \n" . + "A complete backup should be made before running this script. \n\n" . + "There is a low risk that the wrong content will be replaced, introducing problems. \n" . + "If you are sure you want to continue, add --confirm\n\n"; + } + +} else { + + $urlfinder = new \tool_httpsreplace\url_finder(); + $results = $urlfinder->http_link_stats(); + asort($urlfinder); + $fp = fopen('php://stdout', 'w'); + fputcsv($fp, ['clientsite', 'httpdomain', 'urlcount']); + foreach ($results as $domain => $count) { + fputcsv($fp, [$SITE->shortname, $domain, $count]); + } + fclose($fp); +}