Skip to content

Commit

Permalink
added jobs and context id tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
kalebheitzman committed Jan 29, 2024
1 parent cc730ca commit 45996dc
Show file tree
Hide file tree
Showing 4 changed files with 150 additions and 32 deletions.
33 changes: 32 additions & 1 deletion db/install.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
<TABLES>
<TABLE NAME="filter_autotranslate" COMMENT="Autotranslate cache.">
<TABLE NAME="filter_autotranslate" COMMENT="Autotranslate stored translations">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="hash" TYPE="char" LENGTH="32" NOTNULL="true" SEQUENCE="false"/>
Expand All @@ -21,5 +21,36 @@
<INDEX NAME="hash_index" UNIQUE="false" FIELDS="hash" COMMENT="Translation hash index" />
</INDEXES>
</TABLE>
<TABLE NAME="filter_autotranslate_jobs" COMMENT="Autotranslate jobs">
<FIELDS>
<FIELD NAME="id" SEQUENCE="true" TYPE="int" NOTNULL="true" />
<FIELD NAME="hash" TYPE="char" LENGTH="32" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="lang" TYPE="char" LENGTH="30" NOTNULL="true" DEFAULT="en" SEQUENCE="false"/>
<FIELD NAME="fetched" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" />
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" />
</KEYS>
<INDEXES>
<INDEX NAME="lang_index" UNIQUE="false" FIELDS="lang" COMMENT="Translation language index"/>
<INDEX NAME="hash_index" UNIQUE="false" FIELDS="hash" COMMENT="Translation hash index" />
</INDEXES>
</TABLE>
<TABLE NAME="filter_autotranslate_ids" COMMENT="Autotranslate index by content ids">
<FIELDS>
<FIELD NAME="id" SEQUENCE="true" TYPE="int" NOTNULL="true" />
<FIELD NAME="hash" TYPE="char" LENGTH="32" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="lang" TYPE="char" LENGTH="30" NOTNULL="true" DEFAULT="en" SEQUENCE="false"/>
<FIELD NAME="context_id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" />
</KEYS>
<INDEXES>
<INDEX NAME="lang_index" UNIQUE="false" FIELDS="lang" COMMENT="Translation language index"/>
<INDEX NAME="hash_index" UNIQUE="false" FIELDS="hash" COMMENT="Translation hash index" />
<INDEX NAME="context_id_index" UNIQUE="false" FIELDS="context_id" COMMENT="Translation hash index" />
</INDEXES>
</TABLE>
</TABLES>
</XMLDB>
72 changes: 60 additions & 12 deletions db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,31 +38,79 @@ function xmldb_filter_autotranslate_upgrade($oldversion) {
if ($oldversion < 2024011900) {

// Define table filter_autotranslate to be created.
$table = new xmldb_table('filter_autotranslate');
$filter_autotranslate_table = new xmldb_table('filter_autotranslate');

// Define fields to be added to filter_autotranslate.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('hash', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null);
$table->add_field('lang', XMLDB_TYPE_CHAR, '2', null, XMLDB_NOTNULL, null, null);
$table->add_field('text', XMLDB_TYPE_TEXT, 'longtext', null, XMLDB_NOTNULL, null, null);
$table->add_field('created_at', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);
$table->add_field('modified_at', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$filter_autotranslate_table->add_field('hash', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_table->add_field('lang', XMLDB_TYPE_CHAR, '2', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_table->add_field('text', XMLDB_TYPE_TEXT, 'longtext', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_table->add_field('created_at', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_table->add_field('modified_at', XMLDB_TYPE_INTEGER, '11', null, XMLDB_NOTNULL, null, null);

// Add keys to filter_autotranslate.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
$filter_autotranslate_table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);

// Add indexes to filter_autotranslate.
$table->add_index('hash_index', XMLDB_INDEX_NOTUNIQUE, ['hash']);
$table->add_index('lang_index', XMLDB_INDEX_NOTUNIQUE, ['lang']);
$filter_autotranslate_table->add_index('hash_index', XMLDB_INDEX_NOTUNIQUE, ['hash']);
$filter_autotranslate_table->add_index('lang_index', XMLDB_INDEX_NOTUNIQUE, ['lang']);

// Conditionally launch create table for filter_autotranslate.
if (!$dbman->table_exists($table)) {
$dbman->create_table($table);
if (!$dbman->table_exists($filter_autotranslate_table)) {
$dbman->create_table($filter_autotranslate_table);
}

// Coursetranslator savepoint reached.
upgrade_plugin_savepoint(true, 2024011900, 'filter', 'autotranslate');
}

if ($oldversion < 2024012900) {
// Define table filter_autotranslate_jobs to be created.
$filter_autotranslate_jobs_table = new xmldb_table('filter_autotranslate_jobs');

// Define fields to be added to filter_autotranslate.
$filter_autotranslate_jobs_table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$filter_autotranslate_jobs_table->add_field('hash', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_jobs_table->add_field('lang', XMLDB_TYPE_CHAR, '2', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_jobs_table->add_field('fetched', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null);

// Add keys to filter_autotranslate.
$filter_autotranslate_jobs_table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);

// Add indexes to filter_autotranslate.
$filter_autotranslate_jobs_table->add_index('hash_index', XMLDB_INDEX_NOTUNIQUE, ['hash']);
$filter_autotranslate_jobs_table->add_index('lang_index', XMLDB_INDEX_NOTUNIQUE, ['lang']);

// Conditionally launch create table for filter_autotranslate.
if (!$dbman->table_exists($filter_autotranslate_jobs_table)) {
$dbman->create_table($filter_autotranslate_jobs_table);
}

// Define table filter_autotranslate_ids to be created.
$filter_autotranslate_ids_table = new xmldb_table('filter_autotranslate_ids');

// Define fields to be added to filter_autotranslate.
$filter_autotranslate_ids_table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$filter_autotranslate_ids_table->add_field('hash', XMLDB_TYPE_CHAR, '32', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_ids_table->add_field('lang', XMLDB_TYPE_CHAR, '2', null, XMLDB_NOTNULL, null, null);
$filter_autotranslate_ids_table->add_field('context_id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);

// Add keys to filter_autotranslate.
$filter_autotranslate_ids_table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);

// Add indexes to filter_autotranslate.
$filter_autotranslate_ids_table->add_index('hash_index', XMLDB_INDEX_NOTUNIQUE, ['hash']);
$filter_autotranslate_ids_table->add_index('lang_index', XMLDB_INDEX_NOTUNIQUE, ['lang']);
$filter_autotranslate_ids_table->add_index('context_id_index', XMLDB_INDEX_NOTUNIQUE, ['context_id']);

// Conditionally launch create table for filter_autotranslate.
if (!$dbman->table_exists($filter_autotranslate_ids_table)) {
$dbman->create_table($filter_autotranslate_ids_table);
}

// Coursetranslator savepoint reached.
upgrade_plugin_savepoint(true, 2024012900, 'filter', 'autotranslate');
}

return true;
}
71 changes: 55 additions & 16 deletions filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,17 @@ public function filter_stage_string(string $text, array $options): string {
public function filter($text, array $options = array()): string {
// access the db constant
global $DB;
// to get context via $PAGE
global $PAGE;

// get the api key from settings
$authKey = get_config('filter_autotranslate', 'deeplapikey');
if (!$authKey) {
return $text;
}

// language settings
$default_lang = "en";
$default_lang = get_config('core', 'lang');;
$current_lang = current_language();

// load deepl translator
Expand All @@ -116,13 +118,30 @@ public function filter($text, array $options = array()): string {
// generate the md5 hash of the current text
$hash = md5($text);

// get the contextid record
$context_record = $DB->get_record('filter_autotranslate_ids', array('hash' => $hash, 'lang' => $current_lang, 'context_id' => $PAGE->context->id));

// insert the context id record if it does not exist
if (!$context_record) {
$DB->insert_record(
'filter_autotranslate_ids',
array(
'hash' => $hash,
'lang' => $current_lang,
'context_id' => $PAGE->context->id
)
);
}

// see if the record exists
$record = $DB->get_record('filter_autotranslate', array('hash' => $hash, 'lang' => $current_lang), 'text');

// create a record for the default text
// @todo: this may not be needed and may just be causing extra database storage
// @note: this could also be used for replacing mlang text in the main entry
// and saving other detected translations into the right translation entries
if (!$record && $default_lang === $current_lang) {
$id = $DB->insert_record(
$DB->insert_record(
'filter_autotranslate',
array(
'hash' => $hash,
Expand All @@ -132,23 +151,43 @@ public function filter($text, array $options = array()): string {
'modified_at' => time()
)
);

}
// translation needs to happen
else if (!$record && $default_lang !== $current_lang) {
$translation = $translator->translateText($text, null, $current_lang);

$id = $DB->insert_record(
'filter_autotranslate',
array(
'hash' => $hash,
'lang' => $current_lang,
'text' => $translation->text,
'created_at' => time(),
'modified_at' => time()
)
);

return $translation->text;
// check if job exists
$job = $DB->get_record('filter_autotranslate_jobs', array('hash' => $hash, 'lang' => $current_lang), 'fetched');

// insert job
if (!$job) {
$DB->insert_record(
'filter_autotranslate_jobs',
array(
'hash' => $hash,
'lang' => $current_lang,
'fetched' => 0
)
);
}

// $translation = $translator->translateText($text, null, $current_lang);

// $id = $DB->insert_record(
// 'filter_autotranslate',
// array(
// 'hash' => $hash,
// 'lang' => $current_lang,
// 'text' => $translation->text,
// 'created_at' => time(),
// 'modified_at' => time()
// )
// );



// return $translation->text;
return $text;
}
// translation found, return the text
else if ($record && $default_lang !== $current_lang) {
Expand Down
6 changes: 3 additions & 3 deletions version.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2024012702; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2021051700; // Requires this Moodle version.
$plugin->component = 'filter_autotranslate'; // Full name of the plugin (used for diagnostics).
$plugin->version = 2024012900; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2021051700; // Requires this Moodle version.
$plugin->component = 'filter_autotranslate'; // Full name of the plugin (used for diagnostics).
$plugin->release = '1.0.0';
$plugin->maturity = MATURITY_STABLE;

0 comments on commit 45996dc

Please sign in to comment.