/** * Checks the decsep and thousandssep config strings are set correctly * * @link http://tracker.moodle.org/browse/MDL-31332 * @return bool check success flag */ protected function check_decsep_thousandssep() { $details = array(); $langnames = array(); $tree = mlang_tools::components_tree(array('component' => 'langconfig')); foreach ($tree as $branch => $languages) { $version = mlang_version::by_code($branch); foreach (array_keys($languages) as $language) { $langconfig = mlang_component::from_snapshot('langconfig', $language, $version); if ($langname = $langconfig->get_string('thislanguageint')) { $langnames[$language] = $langname->text; } else { $langnames[$language] = $language; } if ($decsep = $langconfig->get_string('decsep')) { $decsep = $decsep->text; } if ($thousandssep = $langconfig->get_string('thousandssep')) { $thousandssep = $thousandssep->text; } if (empty($decsep) and empty($thousandssep)) { $details[$language][$version->label] = 1; } else { if (empty($decsep) or empty($thousandssep)) { $details[$language][$version->label] = 2; } else { if ($decsep === $thousandssep) { $details[$language][$version->label] = 3; } } } } } ksort($details); foreach ($details as $language => $branches) { $msg = sprintf('Invalid decsep and/or thousandssep in %s {%s} at', $langnames[$language], $language); foreach ($branches as $branch => $severity) { $msg .= ' ' . $branch . str_repeat('!', $severity); } $this->output($msg, true); } if (empty($details)) { return 0; } return 1; }
define('CLI_SCRIPT', true); require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.php'; require_once $CFG->dirroot . '/local/amos/cli/config.php'; require_once $CFG->dirroot . '/local/amos/mlanglib.php'; // Let us get an information about existing components $sql = "SELECT branch,lang,component,COUNT(stringid) AS numofstrings\n FROM {amos_repository}\n WHERE deleted=0\n GROUP BY branch,lang,component\n ORDER BY branch,lang,component"; $rs = $DB->get_recordset_sql($sql); $tree = array(); // [branch][language][component] => numofstrings foreach ($rs as $record) { $tree[$record->branch][$record->lang][$record->component] = $record->numofstrings; } $rs->close(); remove_dir(AMOS_EXPORT_DIR, true); foreach ($tree as $vercode => $languages) { $version = mlang_version::by_code($vercode); foreach ($languages as $langcode => $components) { if ($langcode == 'en') { continue; } foreach ($components as $componentname => $unused) { $component = mlang_component::from_snapshot($componentname, $langcode, $version); if ($component->has_string()) { $file = AMOS_EXPORT_DIR . '/' . $version->dir . '/' . $langcode . '/' . $component->get_phpfile_location(false); if (!file_exists(dirname($file))) { mkdir(dirname($file), 0755, true); } echo "{$file}\n"; $component->export_phpfile($file); } $component->clear();
*/ require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once dirname(__FILE__) . '/locallib.php'; require_once dirname(__FILE__) . '/mlanglib.php'; require_once dirname(__FILE__) . '/execute_form.php'; require_login(SITEID, false); require_capability('local/amos:execute', get_system_context()); require_capability('local/amos:stage', get_system_context()); $PAGE->set_pagelayout('standard'); $PAGE->set_url('/local/amos/execute.php'); navigation_node::override_active_url(new moodle_url('/local/amos/stage.php')); $PAGE->set_title('AMOS ' . get_string('scriptexecute', 'local_amos')); $PAGE->set_heading('AMOS ' . get_string('scriptexecute', 'local_amos')); $executeform = new local_amos_execute_form(null, local_amos_execute_options()); if ($data = $executeform->get_data()) { $version = mlang_version::by_code($data->version); $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $instructions = mlang_tools::extract_script_from_text($data->script); if (!empty($instructions)) { foreach ($instructions as $instruction) { $changes = mlang_tools::execute($instruction, $version); if ($changes instanceof mlang_stage) { foreach ($changes->get_iterator() as $component) { $stage->add($component, true); } $changes->clear(); } elseif ($changes < 0) { throw new moodle_exception('error_during_amoscript_execution', 'local_amos', '', null, $changes); } unset($changes); }
require_once dirname(__FILE__) . '/locallib.php'; require_once dirname(__FILE__) . '/mlanglib.php'; require_once dirname(__FILE__) . '/merge_form.php'; require_login(SITEID, false); require_capability('local/amos:commit', get_system_context()); // for langpack maintainers only $PAGE->set_pagelayout('standard'); $PAGE->set_url('/local/amos/merge.php'); navigation_node::override_active_url(new moodle_url('/local/amos/stage.php')); $PAGE->set_title('AMOS ' . get_string('merge', 'local_amos')); $PAGE->set_heading('AMOS ' . get_string('merge', 'local_amos')); $mergeform = new local_amos_merge_form(null, local_amos_merge_options()); if ($data = $mergeform->get_data()) { $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $sourceversion = mlang_version::by_code($data->sourceversion); $targetversion = mlang_version::by_code($data->targetversion); if (is_null($sourceversion) or is_null($targetversion)) { notice('Invalid version selected', new moodle_url('/local/amos/stage.php')); } $tree = mlang_tools::components_tree(array('branch' => $sourceversion->code, 'lang' => $data->language)); $sourcecomponentnames = array_keys(reset(reset($tree))); unset($tree); foreach ($sourcecomponentnames as $sourcecomponentname) { // get a snapshot of both components and merge source into target $sourcecomponent = mlang_component::from_snapshot($sourcecomponentname, $data->language, $sourceversion); $targetcomponent = mlang_component::from_snapshot($sourcecomponent->name, $sourcecomponent->lang, $targetversion); mlang_tools::merge($sourcecomponent, $targetcomponent); $sourcecomponent->clear(); // keep just strings that are defined in english $englishcomponent = mlang_component::from_snapshot($sourcecomponent->name, 'en', $targetversion); $targetcomponent->intersect($englishcomponent);
require_once dirname(__FILE__) . '/diff_form.php'; require_login(SITEID, false); require_capability('local/amos:stage', get_system_context()); $PAGE->set_pagelayout('standard'); $PAGE->set_url('/local/amos/diff.php'); navigation_node::override_active_url(new moodle_url('/local/amos/stage.php')); $PAGE->set_title('AMOS ' . get_string('diff', 'local_amos')); $PAGE->set_heading('AMOS ' . get_string('diff', 'local_amos')); $diffform = new local_amos_diff_form(null, local_amos_diff_options()); if ($data = $diffform->get_data()) { if ($data->versiona == $data->versionb) { notice(get_string('nodiffs', 'local_amos'), new moodle_url('/local/amos/stage.php')); } $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $versiona = mlang_version::by_code($data->versiona); $versionb = mlang_version::by_code($data->versionb); $tree = mlang_tools::components_tree(array('branch' => $versiona->code, 'lang' => 'en')); $componentnames = array_keys($tree[$versiona->code]['en']); $total = count($componentnames); unset($tree); echo $OUTPUT->header(); $progressbar = new progress_bar(); $progressbar->create(); // prints the HTML code of the progress bar // we may need a bit of extra execution time and memory here @set_time_limit(HOURSECS); raise_memory_limit(MEMORY_EXTRA); // number of differences $num = 0; foreach ($componentnames as $i => $componentname) { $progressbar->update($i, $total, get_string('diffprogress', 'local_amos'));
header('HTTP/1.1 403 Forbidden'); die; } if (!confirm_sesskey()) { header('HTTP/1.1 403 Forbidden'); die; } $stringid = optional_param('stringid', null, PARAM_ALPHANUMEXT); $text = optional_param('text', null, PARAM_RAW); if (is_null($stringid) or is_null($text)) { header('HTTP/1.1 400 Bad Request'); die; } list($lang, $originalid, $translationid) = local_amos_translator::decode_identifier($stringid); $record = $DB->get_record('amos_repository', array('id' => $originalid), 'id,stringid,component,branch', MUST_EXIST); $version = mlang_version::by_code($record->branch); $component = new mlang_component($record->component, $lang, $version); if ($version->code < mlang_version::MOODLE_20) { header('HTTP/1.1 400 Bad Request'); die; } $string = new mlang_string($record->stringid, $text); $string->clean_text(); $component->add_string($string); $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $stage->add($component, true); $stage->store(); mlang_stash::autosave($stage); header('Content-Type: application/json; charset: utf-8'); $response = new stdclass(); $response->text = local_amos_renderer::add_breaks(s($string->text));
define('AJAX_SCRIPT', true); require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; //require_once(dirname(__FILE__).'/locallib.php'); require_once dirname(__FILE__) . '/mlanglib.php'; require_login(SITEID, false); if (!has_capability('local/amos:stage', get_system_context())) { header('HTTP/1.1 403 Forbidden'); die; } if (!confirm_sesskey()) { header('HTTP/1.1 403 Forbidden'); die; } $name = required_param('component', PARAM_ALPHANUMEXT); $branch = required_param('branch', PARAM_INT); $lang = required_param('lang', PARAM_ALPHANUMEXT); $unstage = required_param('unstage', PARAM_STRINGID); $response = new stdClass(); $response->success = true; $response->error = ''; $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $component = $stage->get_component($name, $lang, mlang_version::by_code($branch)); if ($component) { $component->unlink_string($unstage); $stage->store(); } else { $response->success = false; $response->error = 'Unable to get load component'; } header('Content-Type: application/json; charset: utf-8'); echo json_encode($response);
/** * Fetches the required commits from the repository * * @param array $filter allows to filter commits */ public function __construct(array $filter = array()) { global $DB; // we can not use limits inside subquery so firstly let us get commits we are interested in $params = array(); $where = array(); $getsql = "SELECT id"; $countsql = "SELECT COUNT(*)"; $sql = " FROM {amos_commits}"; if (!empty($filter['userid'])) { $where['userid'] = "userid = ?"; $params[] = $filter['userid']; } if (!empty($filter['userinfo'])) { $where['userinfo'] = $DB->sql_like('userinfo', '?', false, false); $params[] = '%' . $filter['userinfo'] . '%'; } if (!empty($where['userinfo']) and !empty($where['userid'])) { $where['user'] = '******' . $where['userid'] . ') OR (' . $where['userinfo'] . ')'; unset($where['userinfo']); unset($where['userid']); } if (!empty($filter['committedafter'])) { $where['committedafter'] = 'timecommitted >= ?'; $params[] = $filter['committedafter']; } if (!empty($filter['committedbefore'])) { $where['committedbefore'] = 'timecommitted < ?'; $params[] = $filter['committedbefore']; } if (!empty($filter['source'])) { $where['source'] = 'source = ?'; $params[] = $filter['source']; } if (!empty($filter['commitmsg'])) { $where['commitmsg'] = $DB->sql_like('commitmsg', '?', false, false); $params[] = '%' . $filter['commitmsg'] . '%'; } if (!empty($filter['commithash'])) { $where['commithash'] = $DB->sql_like('commithash', '?', false, false); $params[] = $filter['commithash'] . '%'; } if ($where) { $where = '(' . implode(') AND (', $where) . ')'; $sql .= " WHERE {$where}"; } $ordersql = " ORDER BY timecommitted DESC, id DESC"; $this->numofcommits = $DB->count_records_sql($countsql . $sql, $params); $commitids = $DB->get_records_sql($getsql . $sql . $ordersql, $params, 0, self::LIMITCOMMITS); if (empty($commitids)) { // nothing to load return; } // now get all repository records modified by these commits // and optionally filter them if requested $params = array(); list($csql, $params) = $DB->get_in_or_equal(array_keys($commitids)); if (!empty($filter['branch'])) { list($branchsql, $branchparams) = $DB->get_in_or_equal(array_keys($filter['branch'])); } else { $branchsql = ''; } if (!empty($filter['lang'])) { list($langsql, $langparams) = $DB->get_in_or_equal($filter['lang']); } else { $langsql = ''; } if (!empty($filter['component'])) { list($componentsql, $componentparams) = $DB->get_in_or_equal($filter['component']); } else { $componentsql = ''; } $countsql = "SELECT COUNT(r.id)"; $getsql = "SELECT r.id, c.source, c.timecommitted, c.commitmsg, c.commithash, c.userid, c.userinfo,\n r.commitid, r.branch, r.lang, r.component, r.stringid, r.text, r.timemodified, r.deleted"; $sql = " FROM {amos_commits} c\n JOIN {amos_repository} r ON (c.id = r.commitid)\n WHERE c.id {$csql}"; if ($branchsql) { $sql .= " AND r.branch {$branchsql}"; $params = array_merge($params, $branchparams); } if ($langsql) { $sql .= " AND r.lang {$langsql}"; $params = array_merge($params, $langparams); } if ($componentsql) { $sql .= " AND r.component {$componentsql}"; $params = array_merge($params, $componentparams); } if (!empty($filter['stringid'])) { $sql .= " AND r.stringid = ?"; $params[] = $filter['stringid']; } $ordersql = " ORDER BY c.timecommitted DESC, c.id DESC, r.branch DESC, r.lang, r.component, r.stringid"; $this->numofstrings = $DB->count_records_sql($countsql . $sql, $params); $rs = $DB->get_recordset_sql($getsql . $sql . $ordersql, $params); $numofcommits = 0; foreach ($rs as $r) { if (!isset($this->commits[$r->commitid])) { if ($numofcommits == self::LIMITCOMMITS) { // we already have enough break; } $commit = new stdclass(); $commit->id = $r->commitid; $commit->source = $r->source; $commit->timecommitted = $r->timecommitted; $commit->commitmsg = $r->commitmsg; $commit->commithash = $r->commithash; $commit->userid = $r->userid; $commit->userinfo = $r->userinfo; $commit->strings = array(); $this->commits[$r->commitid] = $commit; $numofcommits++; } $string = new stdclass(); $string->branch = mlang_version::by_code($r->branch)->label; $string->component = $r->component; $string->lang = $r->lang; $string->stringid = $r->stringid; $string->deleted = $r->deleted; $this->commits[$r->commitid]->strings[] = $string; } $rs->close(); }
* Register new language * * @package local-amos * @copyright 2010 David Mudrak <*****@*****.**> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.php'; require_once dirname(dirname(__FILE__)) . '/mlanglib.php'; require_once dirname(__FILE__) . '/newlanguage_form.php'; require_login(SITEID, false); require_capability('local/amos:manage', get_system_context()); $PAGE->set_pagelayout('standard'); $PAGE->set_url('/local/amos/admin/newlanguage.php'); $PAGE->set_title('AMOS ' . get_string('newlanguage', 'local_amos')); $PAGE->set_heading('AMOS ' . get_string('newlanguage', 'local_amos')); $form = new local_amos_newlanguage_form(); if ($data = $form->get_data()) { $component = new mlang_component('langconfig', $data->langcode, mlang_version::by_code(mlang_version::MOODLE_22)); $data->langname = mlang_string::fix_syntax($data->langname); $data->langnameint = mlang_string::fix_syntax($data->langnameint); $component->add_string(new mlang_string('thislanguage', $data->langname)); $component->add_string(new mlang_string('thislanguageint', $data->langnameint)); $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $stage->add($component); $stage->store(); redirect(new moodle_url('/local/amos/stage.php')); } /// Output starts here echo $OUTPUT->header(); $form->display(); echo $OUTPUT->footer();
if (!empty($submit)) { require_sesskey(); $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $stash = mlang_stash::instance_from_stage($stage, $stage->userid); $stash->push(); redirect(new moodle_url('/local/amos/stash.php', array('sesskey' => sesskey(), 'submit' => $stash->id))); } if (!empty($propagate)) { require_sesskey(); $stage = mlang_persistent_stage::instance_for_user($USER->id, sesskey()); $ver = optional_param('ver', array(), PARAM_INT); $num = null; if (!empty($ver) and is_array($ver)) { $versions = array(); foreach ($ver as $versioncode) { $versions[] = mlang_version::by_code($versioncode); } if ($versions) { $num = $stage->propagate($versions); $stage->store(); } } if (is_null($num)) { redirect($PAGE->url); } else { redirect(new moodle_url($PAGE->url, array('justpropagated' => $num))); } } $output = $PAGE->get_renderer('local_amos'); // make sure that USER contains sesskey property $sesskey = sesskey();