/** @param $prefix String to help locate the $target Removes all entries from the CacheProvider. */ public static function cleanCache($prefix = '') { foreach (DataProvider::getStudies() as $s) { $f = self::getPath($s, $prefix); if (file_exists($f)) { unlink($f); } } }
/** @return [String] of all Names in the Studies table */ public static function studies() { return DataProvider::getStudies(); }
/** @param $table TableName @param $target TableName | TablePrefix @return $tNames [TableName] 1: If $target doesn't depend on study, its the TableName 2: If $table depends on study, $target should get the same 3: If $table doesn't depend, $target should be done for all studies. */ public static function getTableNamesFor($table, $target) { $tNames = self::getTableNames($target, self::$constraints[$target]); if (count($tNames) === 1) { return $tNames; } //https://stackoverflow.com/questions/834303/startswith-and-endswith-functions-in-php $endsWith = function ($haystack, $needle) { if ($needle === '') { return true; } $t = strlen($haystack) - strlen($needle); if ($t < 0) { return false; } return strpos($haystack, $needle, $t) !== false; }; //Searching possible study suffix: foreach (DataProvider::getStudies() as $s) { if ($endsWith($table, $s)) { //Searching the only one: foreach ($tNames as $t) { if ($endsWith($t, $s)) { return array($t); } } } } return $tNames; }
<?php /** It became apparent, that generating the JSON files export/download/$study.json can be quite expansive, and may fail on our server iff memory or time consumption grow too high. This is also documented in #237. To combat this problem this script (re-)generates all the JSON files as necessary. */ chdir(__DIR__); require_once '../config.php'; require_once '../query/cacheProvider.php'; chdir('..'); echo "Regenerating Study Cache:\n"; foreach (DataProvider::getStudies() as $study) { if (CacheProvider::hasCache($study)) { continue; } echo "{$study}..\n"; $chunk = DataProvider::getStudyChunk($study); CacheProvider::setCache($study, json_encode($chunk)); } echo "Done.\n";
1.: We offer a list of studies, and also global data applying to each study. 2.: Each study can be fetched separately. 3.: JavaScript will tack a timestamp on each study, so that we can drop older studies from localStorage, in case that we're running out of space. 4.: The data for each study thus consists of the following things: - Name and basic data for the study itself - A list of Families in the Study - A list of Regions per Family - A list of Languages per Region - A list of Words per Study - A list of Transcriptions per pair of Word and Language - Defaults for the Study */ if (array_key_exists('global', $_GET)) { echo Config::toJSON(array('studies' => DataProvider::getStudies(), 'global' => DataProvider::getGlobal())); } else { if (array_key_exists('study', $_GET)) { if (CacheProvider::hasCache($_GET['study'])) { echo CacheProvider::getCache($_GET['study']); } else { $ret = DataProvider::getStudyChunk($_GET['study']); //Done: $data = json_encode($ret); echo $data; CacheProvider::setCache($_GET['study'], $data); } } else { echo json_encode(array('lastUpdate' => DataProvider::getLastImport(), 'Description' => 'Add a global parameter to fetch global data, ' . 'and add a study parameter to fetch a study.')); } }