/** * Initialises the cache lock instance. * * @param string $name The name of the cache lock * @param array $configuration */ public function __construct($name, array $configuration = array()) { $this->name = $name; if (!array_key_exists('dir', $configuration)) { $this->cachedir = make_cache_directory(md5($name)); } else { $dir = $configuration['dir']; if (strpos($dir, '/') !== false && strpos($dir, '.') !== 0) { // This looks like an absolute path. if (file_exists($dir) && is_dir($dir) && is_writable($dir)) { $this->cachedir = $dir; } } if (empty($this->cachedir)) { $dir = preg_replace('#[^a-zA-Z0-9_]#', '_', $dir); $this->cachedir = make_cache_directory($dir); } } if (array_key_exists('maxlife', $configuration) && is_number($configuration['maxlife'])) { $maxlife = (int) $configuration['maxlife']; // Minimum lock time is 60 seconds. $this->maxlife = max($maxlife, 60); } if (array_key_exists('blockattempts', $configuration) && is_number($configuration['blockattempts'])) { $this->blockattempts = (int) $configuration['blockattempts']; } }
/** * Testing cachestore_file::get with prescan enabled and with * deleting the cache between the prescan and the call to get. * * The deleting of cache simulates some other process purging * the cache. */ public function test_cache_get_with_prescan_and_purge() { global $CFG; $definition = cache_definition::load_adhoc(cache_store::MODE_REQUEST, 'cachestore_file', 'phpunit_test'); $name = 'File test'; $path = make_cache_directory('cachestore_file_test'); $cache = new cachestore_file($name, array('path' => $path, 'prescan' => true)); $cache->initialise($definition); $cache->set('testing', 'value'); $path = make_cache_directory('cachestore_file_test'); $cache = new cachestore_file($name, array('path' => $path, 'prescan' => true)); $cache->initialise($definition); // Let's pretend that some other process purged caches. remove_dir($CFG->cachedir . '/cachestore_file_test', true); make_cache_directory('cachestore_file_test'); $cache->get('testing'); }
/** * This function saves to file the rss feed specified in the parameters * * @param string $type The source of the RSS feed (site/course/group/user) * @param int $id The id of the item defined by $type * @param int $tagid The id of the row in the tag table that identifies the RSS Feed * @param string $contents The contents of the RSS Feed file * @return bool whether the save was successful or not */ function blog_rss_save_file($type, $id, $tagid = 0, $contents = '') { global $CFG; $status = true; //blog creates some additional dirs within the rss cache so make sure they all exist make_cache_directory('rss/blog'); make_cache_directory('rss/blog/' . $type); $filename = blog_rss_file_name($type, $id, $tagid); $expandfilename = false; //we're supplying a full file path $status = rss_save_file('blog', $filename, $contents, $expandfilename); return $status; }
/** * Purge dataroot directory * @static * @return void */ public static function reset_dataroot() { global $CFG; $childclassname = self::get_framework() . '_util'; $handle = opendir($CFG->dataroot); while (false !== ($item = readdir($handle))) { if (in_array($item, $childclassname::$datarootskiponreset)) { continue; } if (is_dir("$CFG->dataroot/$item")) { remove_dir("$CFG->dataroot/$item", false); } else { unlink("$CFG->dataroot/$item"); } } closedir($handle); make_temp_directory(''); make_cache_directory(''); make_cache_directory('htmlpurifier'); // Reset the cache API so that it recreates it's required directories as well. cache_factory::reset(); // Purge all data from the caches. This is required for consistency. // Any file caches that happened to be within the data root will have already been clearer (because we just deleted cache) // and now we will purge any other caches as well. cache_helper::purge_all(); }
/** * Invalidates browser caches and cached data in temp. * * IMPORTANT - If you are adding anything here to do with the cache directory you should also have a look at * {@link phpunit_util::reset_dataroot()} * * @return void */ function purge_all_caches() { global $CFG, $DB; reset_text_filters_cache(); js_reset_all_caches(); theme_reset_all_caches(); get_string_manager()->reset_caches(); core_text::reset_caches(); if (class_exists('core_plugin_manager')) { core_plugin_manager::reset_caches(); } // Bump up cacherev field for all courses. try { increment_revision_number('course', 'cacherev', ''); } catch (moodle_exception $e) { // Ignore exception since this function is also called before upgrade script when field course.cacherev does not exist yet. } $DB->reset_caches(); cache_helper::purge_all(); // Purge all other caches: rss, simplepie, etc. clearstatcache(); remove_dir($CFG->cachedir . '', true); // Make sure cache dir is writable, throws exception if not. make_cache_directory(''); // This is the only place where we purge local caches, we are only adding files there. // The $CFG->localcachedirpurged flag forces local directories to be purged on cluster nodes. remove_dir($CFG->localcachedir, true); set_config('localcachedirpurged', time()); make_localcache_directory('', true); \core\task\manager::clear_static_caches(); }
/** * This function saves to file the rss feed specified in the parameters * * @param string $componentname the module name ie forum. Used to create a cache directory. * @param string $filename the name of the file to be created ie "rss.xml" * @param string $contents the data to be written to the file * @param bool $expandfilename whether or not the fullname of the RSS file should be used * @return bool whether the save was successful or not */ function rss_save_file($componentname, $filename, $contents, $expandfilename = true) { global $CFG; $status = true; if (!($basedir = make_cache_directory('rss/' . $componentname))) { //Cannot be created, so error $status = false; } if ($status) { $fullfilename = $filename; if ($expandfilename) { $fullfilename = rss_get_file_full_name($componentname, $filename); } $rss_file = fopen($fullfilename, "w"); if ($rss_file) { $status = fwrite($rss_file, $contents); fclose($rss_file); } else { $status = false; } } return $status; }
/** * Install core moodle tables and initialize * @param float $version target version * @param bool $verbose * @return void, may throw exception */ function install_core($version, $verbose) { global $CFG, $DB; // We can not call purge_all_caches() yet, make sure the temp and cache dirs exist and are empty. remove_dir($CFG->cachedir.'', true); make_cache_directory('', true); remove_dir($CFG->localcachedir.'', true); make_localcache_directory('', true); remove_dir($CFG->tempdir.'', true); make_temp_directory('', true); remove_dir($CFG->dataroot.'/muc', true); make_writable_directory($CFG->dataroot.'/muc', true); try { core_php_time_limit::raise(600); print_upgrade_part_start('moodle', true, $verbose); // does not store upgrade running flag $DB->get_manager()->install_from_xmldb_file("$CFG->libdir/db/install.xml"); upgrade_started(); // we want the flag to be stored in config table ;-) // set all core default records and default settings require_once("$CFG->libdir/db/install.php"); xmldb_main_install(); // installs the capabilities too // store version upgrade_main_savepoint(true, $version, false); // Continue with the installation log_update_descriptions('moodle'); external_update_descriptions('moodle'); events_update_definition('moodle'); \core\task\manager::reset_scheduled_tasks_for_component('moodle'); message_update_providers('moodle'); \core\message\inbound\manager::update_handlers_for_component('moodle'); // Write default settings unconditionally admin_apply_default_settings(NULL, true); print_upgrade_part_end(null, true, $verbose); // Purge all caches. They're disabled but this ensures that we don't have any persistent data just in case something // during installation didn't use APIs. cache_helper::purge_all(); } catch (exception $ex) { upgrade_handle_exception($ex); } }
/** * Purge dataroot directory * @static * @return void */ public static function reset_dataroot() { global $CFG; $childclassname = self::get_framework() . '_util'; // Do not delete automatically installed files. self::skip_original_data_files($childclassname); // Clear file status cache, before checking file_exists. clearstatcache(); // Clean up the dataroot folder. $handle = opendir(self::get_dataroot()); while (false !== ($item = readdir($handle))) { if (in_array($item, $childclassname::$datarootskiponreset)) { continue; } if (is_dir(self::get_dataroot() . "/{$item}")) { remove_dir(self::get_dataroot() . "/{$item}", false); } else { unlink(self::get_dataroot() . "/{$item}"); } } closedir($handle); // Clean up the dataroot/filedir folder. if (file_exists(self::get_dataroot() . '/filedir')) { $handle = opendir(self::get_dataroot() . '/filedir'); while (false !== ($item = readdir($handle))) { if (in_array('filedir/' . $item, $childclassname::$datarootskiponreset)) { continue; } if (is_dir(self::get_dataroot() . "/filedir/{$item}")) { remove_dir(self::get_dataroot() . "/filedir/{$item}", false); } else { unlink(self::get_dataroot() . "/filedir/{$item}"); } } closedir($handle); } make_temp_directory(''); make_cache_directory(''); make_localcache_directory(''); // Reset the cache API so that it recreates it's required directories as well. cache_factory::reset(); // Purge all data from the caches. This is required for consistency. // Any file caches that happened to be within the data root will have already been clearer (because we just deleted cache) // and now we will purge any other caches as well. cache_helper::purge_all(); }
/** * Invalidates browser caches and cached data in temp * @return void */ function purge_all_caches() { global $CFG; reset_text_filters_cache(); js_reset_all_caches(); theme_reset_all_caches(); get_string_manager()->reset_caches(); textlib::reset_caches(); // purge all other caches: rss, simplepie, etc. remove_dir($CFG->cachedir . '', true); // make sure cache dir is writable, throws exception if not make_cache_directory(''); // hack: this script may get called after the purifier was initialised, // but we do not want to verify repeatedly this exists in each call make_cache_directory('htmlpurifier'); }
$strsubmit = $PAGE->user_is_editing() ? get_string('blockseditoff') : get_string('blocksediton'); $url = new moodle_url($CFG->wwwroot . '/mod/certificate/view.php', array('id' => $cm->id, 'edit' => $editvalue)); $PAGE->set_button($OUTPUT->single_button($url, $strsubmit)); } // Check if the user can view the certificate if ($certificate->requiredtime && !has_capability('mod/certificate:manage', $context)) { if (certificate_get_course_time($course->id) < $certificate->requiredtime * 60) { $a = new stdClass(); $a->requiredtime = $certificate->requiredtime; notice(get_string('requiredtimenotmet', 'certificate', $a), "{$CFG->wwwroot}/course/view.php?id={$course->id}"); die; } } // Create new certificate record, or return existing record $certrecord = certificate_get_issue($course, $USER, $certificate, $cm); make_cache_directory('tcpdf'); // Load the specific certificate type. require "{$CFG->dirroot}/mod/certificate/type/{$certificate->certificatetype}/certificate.php"; if (empty($action)) { // Not displaying PDF echo $OUTPUT->header(); /// find out current groups mode groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/certificate/view.php?id=' . $cm->id); $currentgroup = groups_get_activity_group($cm); $groupmode = groups_get_activity_groupmode($cm); if (has_capability('mod/certificate:manage', $context)) { $numusers = count(certificate_get_issues($certificate->id, 'ci.timecreated ASC', $groupmode, $cm)); $url = html_writer::tag('a', get_string('viewcertificateviews', 'certificate', $numusers), array('href' => $CFG->wwwroot . '/mod/certificate/report.php?id=' . $cm->id)); echo html_writer::tag('div', $url, array('class' => 'reportlink')); } if (!empty($certificate->intro)) {
/** * Class constructor * * See the parent class documentation for the parameters info. */ public function __construct($orientation = 'P', $unit = 'mm', $format = 'A4', $unicode = true, $encoding = 'UTF-8') { make_cache_directory('tcpdf'); parent::__construct($orientation, $unit, $format, $unicode, $encoding); if (is_dir(PDF_CUSTOM_FONT_PATH)) { $fontfiles = $this->_getfontfiles(PDF_CUSTOM_FONT_PATH); if (count($fontfiles) == 1) { $autofontname = substr($fontfiles[0], 0, -4); $this->AddFont($autofontname, '', $autofontname . '.php'); $this->SetFont($autofontname); } else { if (count($fontfiles == 0)) { $this->SetFont(PDF_DEFAULT_FONT); } } } else { $this->SetFont(PDF_DEFAULT_FONT); } // theses replace the tcpdf's config/lang/ definitions $this->l['w_page'] = get_string('page'); $this->l['a_meta_language'] = current_language(); $this->l['a_meta_charset'] = 'UTF-8'; $this->l['a_meta_dir'] = get_string('thisdirection', 'langconfig'); }
private function downloadfile($url, $filename, $forcedownload = false, $cachefolder = 'skillsoft', $cachetime = 86400) { global $CFG; $basefolder = str_replace('\\', '/', $CFG->cachedir); $folder = $cachefolder; /// Create cache directory if necesary if (!make_cache_directory($folder, false)) { //Couldn't create temp folder throw new Exception('Could not create WSDL Cache Folder (skillsoft): ' . $basefolder . $folder); } $fullpath = $basefolder . '/' . $folder . '/' . $filename; //Check if we have a cached copy if (!file_exists($fullpath) || filemtime($fullpath) < time() - $cachetime || $forcedownload == true) { //No copy so download if (!extension_loaded('curl') or ($ch = curl_init($url)) === false) { //No curl so error } else { $fp = fopen($fullpath, 'wb'); $ch = curl_init($url); //Ignore SSL errors curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch, CURLOPT_FILE, $fp); //Force SSLv3 to workaround Openssl 1.0.1 issue //See https://bugs.launchpad.net/ubuntu/+source/curl/+bug/595415 //curl_setopt($ch, CURLOPT_SSLVERSION, 3); //Setup Proxy Connection if (!empty($CFG->proxyhost)) { // SOCKS supported in PHP5 only if (!empty($CFG->proxytype) and $CFG->proxytype == 'SOCKS5') { if (defined('CURLPROXY_SOCKS5')) { curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); } else { curl_close($ch); return false; } } curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false); if (empty($CFG->proxyport)) { curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost); } else { curl_setopt($ch, CURLOPT_PROXY, $CFG->proxyhost . ':' . $CFG->proxyport); } if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) { curl_setopt($ch, CURLOPT_PROXYUSERPWD, $CFG->proxyuser . ':' . $CFG->proxypassword); if (defined('CURLOPT_PROXYAUTH')) { // any proxy authentication if PHP 5.1 curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC | CURLAUTH_NTLM); } } } $data = curl_exec($ch); // Check if any error occured if (!curl_errno($ch)) { $downloadresult = new object(); $downloadresult->status = curl_getinfo($ch, CURLINFO_HTTP_CODE); $downloadresult->filename = $filename; $downloadresult->filepath = $basefolder . '/' . $folder . '/' . $filename; $downloadresult->error = ''; fclose($fp); } else { fclose($fp); $error = curl_error($ch); $downloadresult = new object(); $downloadresult->status = curl_getinfo($ch, CURLINFO_HTTP_CODE); $downloadresult->filename = ''; $downloadresult->filepath = ''; $downloadresult->error = $error; } } } else { //We do so use it $downloadresult = new object(); $downloadresult->status = '200'; $downloadresult->filename = $filename; $downloadresult->filepath = $fullpath; $downloadresult->error = ''; } return $downloadresult; }
/** * Generates an instance of the cache store that can be used for testing. * * Returns an instance of the cache store, or false if one cannot be created. * * @param cache_definition $definition * @return cachestore_file */ public static function initialise_test_instance(cache_definition $definition) { $name = 'File test'; $path = make_cache_directory('cachestore_file_test'); $cache = new cachestore_file($name, array('path' => $path)); $cache->initialise($definition); return $cache; }
/** * Purge dataroot directory * @static * @return void */ public static function reset_dataroot() { global $CFG; $handle = opendir($CFG->dataroot); $skip = array('.', '..', 'phpunittestdir.txt', 'phpunit', '.htaccess'); while (false !== ($item = readdir($handle))) { if (in_array($item, $skip)) { continue; } if (is_dir("{$CFG->dataroot}/{$item}")) { remove_dir("{$CFG->dataroot}/{$item}", false); } else { unlink("{$CFG->dataroot}/{$item}"); } } closedir($handle); make_temp_directory(''); make_cache_directory(''); make_cache_directory('htmlpurifier'); }
/** * Class constructor * * See the parent class documentation for the parameters info. */ public function __construct($orientation = 'P', $unit = 'mm', $format = 'A4', $unicode = true, $encoding = 'UTF-8') { make_cache_directory('tcpdf'); parent::__construct($orientation, $unit, $format, $unicode, $encoding); // theses replace the tcpdf's config/lang/ definitions $this->l['w_page'] = get_string('page'); $this->l['a_meta_language'] = current_language(); $this->l['a_meta_charset'] = 'UTF-8'; $this->l['a_meta_dir'] = get_string('thisdirection', 'langconfig'); }
/** * Purge dataroot directory * @static * @return void */ public static function reset_dataroot() { global $CFG; $handle = opendir($CFG->dataroot); $skip = array('.', '..', 'phpunittestdir.txt', 'phpunit', '.htaccess'); while (false !== ($item = readdir($handle))) { if (in_array($item, $skip)) { continue; } if (is_dir("{$CFG->dataroot}/{$item}")) { remove_dir("{$CFG->dataroot}/{$item}", false); } else { unlink("{$CFG->dataroot}/{$item}"); } } closedir($handle); make_temp_directory(''); make_cache_directory(''); make_cache_directory('htmlpurifier'); // Reset the cache API so that it recreates it's required directories as well. cache_factory::reset(); // Purge all data from the caches. This is required for consistency. // Any file caches that happened to be within the data root will have already been clearer (because we just deleted cache) // and now we will purge any other caches as well. cache_helper::purge_all(); }