146 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
// This file is part of the Studyplan plugin for Moodle
 | 
						|
//
 | 
						|
// Moodle 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 3 of the License, or
 | 
						|
// (at your option) any later version.
 | 
						|
//
 | 
						|
// Moodle 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 Moodle.  If not, see <https://www.gnu.org/licenses/>.
 | 
						|
/**
 | 
						|
 * Developer CLI tool. Primes grade generator with random student properties
 | 
						|
 * @package    local_treestudyplan
 | 
						|
 * @copyright  2023 P.M. Kuipers
 | 
						|
 * @license    https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
						|
 */
 | 
						|
 | 
						|
namespace local_treestudyplan;
 | 
						|
 | 
						|
define('CLI_SCRIPT', true);
 | 
						|
require(__DIR__ . '/../../../config.php');
 | 
						|
require_once($CFG->libdir . '/clilib.php');
 | 
						|
use \core_badges\badge;
 | 
						|
use local_treestudyplan\local\randomimage;
 | 
						|
require_once($CFG->libdir.'/badgeslib.php');
 | 
						|
 | 
						|
$usage = "Generate a number of random badges
 | 
						|
Usage:
 | 
						|
    # php generate_badges.php [--amount|-a=<amount>]
 | 
						|
    # php generate_badges.php --help|-h
 | 
						|
 | 
						|
Options:
 | 
						|
    -h --help            Print this help.
 | 
						|
    -a --amount=<amount> The amount of badges to generate.
 | 
						|
";
 | 
						|
 | 
						|
list($options, $unrecognised) = cli_get_params([
 | 
						|
    'help' => false,
 | 
						|
    'amount' => null
 | 
						|
], [
 | 
						|
    'h' => 'help',
 | 
						|
    'a' => 'amount',
 | 
						|
]);
 | 
						|
 | 
						|
if ($unrecognised) {
 | 
						|
    $unrecognised = implode(PHP_EOL . '  ', $unrecognised);
 | 
						|
    cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised));
 | 
						|
}
 | 
						|
 | 
						|
if ($options['help']) {
 | 
						|
    cli_writeln($usage);
 | 
						|
    exit(2);
 | 
						|
}
 | 
						|
print_r($options);
 | 
						|
if (empty($options['amount']) || !is_numeric($options['amount'])) {
 | 
						|
    cli_error('Missing mandatory integer argument "amount"', 2);
 | 
						|
}
 | 
						|
$amount = intval($options['amount']);
 | 
						|
cli_writeln("Creating {$amount}  new badges");
 | 
						|
 | 
						|
$fortunepath = "/usr/games/fortune";
 | 
						|
if (!is_executable($fortunepath)) {
 | 
						|
    // Get a fortune if it is available.
 | 
						|
    cli_error('/usr/bin/fortune not found, which is needed for this script. Please install fortune',2);
 | 
						|
} 
 | 
						|
 | 
						|
// Get administrator role and log in as.
 | 
						|
$user = get_admin();
 | 
						|
 | 
						|
if (!$user) {
 | 
						|
    cli_error("Unable to find admin user in DB.");
 | 
						|
}
 | 
						|
 | 
						|
$auth = empty($user->auth) ? 'manual' : $user->auth;
 | 
						|
if ($auth == 'nologin' || !is_enabled_auth($auth)) {
 | 
						|
    cli_error(sprintf("User authentication is either 'nologin' or disabled. Check Moodle authentication method for '%s'",
 | 
						|
            $user->username));
 | 
						|
}
 | 
						|
 | 
						|
$authplugin = get_auth_plugin($auth);
 | 
						|
$authplugin->sync_roles($user);
 | 
						|
login_attempt_valid($user);
 | 
						|
complete_user_login($user);
 | 
						|
 | 
						|
 | 
						|
for ($i=0; $i<$amount; $i++) {
 | 
						|
    $fortune =  shell_exec("{$fortunepath} -n 160 ");
 | 
						|
    $pieces = explode(" ", $fortune);
 | 
						|
    $name = implode(" ", array_splice($pieces, 0, 4));
 | 
						|
 | 
						|
    $fordb = new \stdClass();
 | 
						|
    $fordb->id = null;
 | 
						|
    
 | 
						|
    $now = time();
 | 
						|
 | 
						|
    $randomicon = new randomimage(10,256,256);
 | 
						|
 | 
						|
 | 
						|
    $fordb->name = $name;
 | 
						|
    $fordb->version = 1;
 | 
						|
    $fordb->language = "en";
 | 
						|
    $fordb->description = $fortune;
 | 
						|
    $fordb->imageauthorname = "Generator";
 | 
						|
    $fordb->imageauthoremail = "generator@null.null";
 | 
						|
    $fordb->imageauthorurl = "";
 | 
						|
    $fordb->imagecaption = $name;
 | 
						|
    $fordb->timecreated = $now;
 | 
						|
    $fordb->timemodified = $now;
 | 
						|
    $fordb->usercreated = $USER->id;
 | 
						|
    $fordb->usermodified = $USER->id;
 | 
						|
 | 
						|
    $url = parse_url($CFG->wwwroot);
 | 
						|
    $fordb->issuerurl = $url['scheme'] . '://' . $url['host'];
 | 
						|
    $fordb->issuername = $CFG->badges_defaultissuername;
 | 
						|
    $fordb->issuercontact = $CFG->badges_defaultissuercontact;
 | 
						|
 | 
						|
    $fordb->expiredate = null;
 | 
						|
    $fordb->expireperiod =  null;
 | 
						|
    $fordb->type = \BADGE_TYPE_SITE; // Site badge.
 | 
						|
    $fordb->courseid = null;
 | 
						|
    $fordb->messagesubject = get_string('messagesubject', 'badges');
 | 
						|
    $fordb->message = get_string('messagebody', 'badges',
 | 
						|
            \html_writer::link($CFG->wwwroot . '/badges/mybadges.php', get_string('managebadges', 'badges')));
 | 
						|
    $fordb->attachment = 1;
 | 
						|
    $fordb->notification = \BADGE_MESSAGE_NEVER;
 | 
						|
 | 
						|
    $fordb->status = \BADGE_STATUS_INACTIVE;
 | 
						|
 | 
						|
    $newid = $DB->insert_record('badge', $fordb, true);
 | 
						|
 | 
						|
    // Trigger event, badge created.
 | 
						|
    $eventparams = array('objectid' => $newid, 'context' => $PAGE->context);
 | 
						|
    $event = \core\event\badge_created::create($eventparams);
 | 
						|
    $event->trigger();
 | 
						|
 | 
						|
    $newbadge = new badge($newid);
 | 
						|
    badges_process_badge_image($newbadge, $randomicon->tempfile);
 | 
						|
    cli_writeln("Created new badge '{$name}'");
 | 
						|
}
 | 
						|
 | 
						|
 |