if ($gitstatus != 0) {
     fputs(STDERR, "FATAL ERROR {$gitstatus} EXECUTING {$gitcmd}\n");
     exit($gitstatus);
 }
 $tmp = make_upload_directory('amos/temp/fix-drift/' . $version->dir);
 $dumpfile = $tmp . '/' . $legacyname . '.php';
 file_put_contents($dumpfile, implode("\n", $gitout));
 $gitcomponent = mlang_component::from_phpfile($dumpfile, 'en', $version, time());
 foreach ($amoscomponent->get_iterator() as $amosstring) {
     $gitstring = $gitcomponent->get_string($amosstring->id);
     if (is_null($gitstring)) {
         fputs(STDOUT, "<< AMOS ONLY: {$version->dir} [{$amosstring->id},{$frankenstylename}]\n");
         $fixstring = clone $amosstring;
         $fixstring->deleted = true;
         $fixstring->clean_text();
         $fixcomponent->add_string($fixstring);
         continue;
     }
     if ($gitstring->text !== $amosstring->text) {
         fputs(STDOUT, "!= AMOS GIT DIFF: {$version->dir} [{$amosstring->id},{$frankenstylename}]\n");
         $gitstring->clean_text();
         $fixcomponent->add_string($gitstring);
         continue;
     }
 }
 foreach ($gitcomponent->get_iterator() as $gitstring) {
     $amosstring = $amoscomponent->get_string($gitstring->id);
     if (is_null($amosstring)) {
         fputs(STDOUT, ">> GIT ONLY: {$version->dir} [{$gitstring->id},{$frankenstylename}]\n");
         $gitstring->clean_text();
         $fixcomponent->add_string($gitstring);
Exemple #2
0
 if (is_null($strenglishb) or is_null($strtranslateda) or is_null($strtranslatedb)) {
     continue;
 }
 // in case we will need it, decide which of the translations is the more recent
 if ($strtranslateda->timemodified >= $strtranslatedb->timemodified) {
     $strtranslatedrecent = $strtranslateda;
 } else {
     $strtranslatedrecent = $strtranslatedb;
 }
 $englishchanged = mlang_string::differ($strenglisha, $strenglishb);
 $translatedchanged = mlang_string::differ($strtranslateda, $strtranslatedb);
 // English strings have changed but translated ones have not
 if ($data->mode == 1) {
     if ($englishchanged and !$translatedchanged) {
         $worka->add_string($strtranslateda);
         $workb->add_string($strtranslatedb);
         $num++;
     }
 }
 // English strings have not changed but translated ones have
 if ($data->mode == 2) {
     if (!$englishchanged and $translatedchanged) {
         if ($data->action == 1) {
             $worka->add_string($strtranslateda);
             $workb->add_string($strtranslatedb);
         } else {
             $worka->add_string($strtranslatedrecent);
             $workb->add_string($strtranslatedrecent);
         }
         $num++;
     }
Exemple #3
0
    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));
echo json_encode($response);
 public function test_stage_propagate()
 {
     $version20 = mlang_version::by_branch('MOODLE_20_STABLE');
     $version21 = mlang_version::by_branch('MOODLE_21_STABLE');
     $version22 = mlang_version::by_branch('MOODLE_22_STABLE');
     $component20en = new mlang_component('admin', 'en', $version20);
     $component20en->add_string(new mlang_string('foo1', 'Bar1'));
     $component20en->add_string(new mlang_string('foo2', 'Bar2'));
     $component20cs = new mlang_component('admin', 'cs', $version20);
     $component20cs->add_string(new mlang_string('foo1', 'TranslatedOldBar1'));
     $component21en = new mlang_component('admin', 'en', $version21);
     $component21en->add_string(new mlang_string('foo1', 'Bar1'));
     $component21en->add_string(new mlang_string('foo2', 'Bar2'));
     $component21en->add_string(new mlang_string('foo3', 'Bar3'));
     $component22en = new mlang_component('admin', 'en', $version22);
     $component22en->add_string(new mlang_string('foo1', 'Bar1'));
     $component22en->add_string(new mlang_string('foo2', 'Bar2'));
     $component22en->add_string(new mlang_string('foo3', 'NewBar3'));
     $stage = new mlang_stage();
     $stage->add($component20en);
     $stage->add($component20cs);
     $stage->add($component21en);
     $stage->add($component22en);
     $stage->commit('Initial strings', array('source' => 'unittest'), true);
     $component20en->clear();
     $component21en->clear();
     $component22en->clear();
     unset($stage);
     // simple usage - the user translated a string on 2.1 and want it being applied to 2.2, too
     $stage = new mlang_stage();
     $component21cs = new mlang_component('admin', 'cs', $version21);
     $component21cs->add_string(new mlang_string('foo1', 'TranslatedBar1'));
     $stage->add($component21cs);
     $component21cs->clear();
     $this->assertEqual($stage->propagate(array($version22)), 1);
     $propagatedcomponent = $stage->get_component('admin', 'cs', $version22);
     $this->assertNotNull($propagatedcomponent, 'The component "admin" must exist on ' . $version22->label);
     $this->assertTrue($propagatedcomponent->has_string('foo1'));
     $propagatedstring = $propagatedcomponent->get_string('foo1');
     $this->assertTrue($propagatedstring->text, 'TranslatedBar1');
     $stage->clear();
     // the change is not propagated if the changed string is staged several times and the values
     // are different
     $stage = new mlang_stage();
     $component20cs = new mlang_component('admin', 'cs', $version20);
     $component20cs->add_string(new mlang_string('foo2', 'TranslatedOldBar2'));
     $component21cs = new mlang_component('admin', 'cs', $version21);
     $component21cs->add_string(new mlang_string('foo2', 'TranslatedBar2'));
     $stage->add($component20cs);
     $stage->add($component21cs);
     $component20cs->clear();
     $component21cs->clear();
     $this->assertEqual($stage->propagate(array($version20, $version21, $version22)), 0);
     $this->assertEqual($stage->get_component('admin', 'cs', $version20)->get_string('foo2')->text, 'TranslatedOldBar2');
     $this->assertEqual($stage->get_component('admin', 'cs', $version21)->get_string('foo2')->text, 'TranslatedBar2');
     $this->assertNull($stage->get_component('admin', 'cs', $version22));
     $stage->clear();
     // but the change is propagated if the changed string is staged several times and the values
     // are the same
     $stage = new mlang_stage();
     $component20cs = new mlang_component('admin', 'cs', $version20);
     $component20cs->add_string(new mlang_string('foo2', 'TranslatedBar2'));
     $component21cs = new mlang_component('admin', 'cs', $version21);
     $component21cs->add_string(new mlang_string('foo2', 'TranslatedBar2'));
     $stage->add($component20cs);
     $stage->add($component21cs);
     $component20cs->clear();
     $component21cs->clear();
     $this->assertEqual($stage->propagate(array($version20, $version21, $version22)), 1);
     $this->assertEqual($stage->get_component('admin', 'cs', $version22)->get_string('foo2')->text, 'TranslatedBar2');
     $this->assertEqual($stage->get_component('admin', 'cs', $version21)->get_string('foo2')->text, 'TranslatedBar2');
     $this->assertEqual($stage->get_component('admin', 'cs', $version20)->get_string('foo2')->text, 'TranslatedBar2');
     $stage->clear();
     // the staged string is propagated to another branch only if the English originals match
     // in the following test, the 2.1 translation of foo3 should not propagate to neither 2.0
     // (because the string does not exist there) not 2.2 (because the English originals differ)
     $stage = new mlang_stage();
     $component21cs = new mlang_component('admin', 'cs', $version21);
     $component21cs->add_string(new mlang_string('foo3', 'TranslatedBar3'));
     $stage->add($component21cs);
     $component21cs->clear();
     $this->assertEqual($stage->propagate(array($version20, $version21, $version22)), 0);
     $this->assertNull($stage->get_component('admin', 'cs', $version20));
     $this->assertNull($stage->get_component('admin', 'cs', $version22));
     $stage->clear();
 }
Exemple #5
0
 /**
  * Merges all strings from one component to another and fixes syntax if needed
  *
  * If the string already exists in the target component, it is skipped (even
  * if it is set as deleted there). Does not modify the source component.
  *
  * @param mlang_component $source component to take strings from
  * @param mlang_component $target component to add strings to
  * @return void modifies $target component
  */
 public static function merge(mlang_component $source, mlang_component $target)
 {
     if ($source->version->code <= mlang_version::MOODLE_19) {
         $sourceformat = 1;
     } else {
         $sourceformat = 2;
     }
     if ($target->version->code <= mlang_version::MOODLE_19) {
         throw new mlang_exception('Can not merge into Moodle 1.x branches');
     } else {
         $targetformat = 2;
     }
     foreach ($source->get_iterator() as $string) {
         $stringid = clean_param($string->id, PARAM_STRINGID);
         if (empty($stringid)) {
             throw new mlang_exception('Invalid string identifier ' . s($string->id));
         }
         if (!$target->has_string($stringid)) {
             $text = mlang_string::fix_syntax($string->text, $targetformat, $sourceformat);
             $target->add_string(new mlang_string($stringid, $text));
         }
     }
 }
 * 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();
 /**
  * Parses the given data in Moodle PHP string format
  *
  * @param string $data definition of the associative array
  * @param mlang_component $component component to add strings to
  * @param int $format the data format on the input, defaults to the one used since 2.0
  * @return void
  */
 public function parse($data, mlang_component $component, $format = 2)
 {
     $strings = $this->extract_strings($data);
     foreach ($strings as $id => $text) {
         $text = mlang_string::fix_syntax($text, 2, $format);
         $component->add_string(new mlang_string($id, $text));
     }
 }