/**
   @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();
 }
Пример #3
0
 /**
   @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";
Пример #5
0
  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.'));
    }
}