public static function handle_resource_content(cc_i_manifest &$manifest, $packageroot, $contextid, $outdir, $allinone = true) { $result = array(); cc_helpers::add_files($manifest, $packageroot, $outdir, $allinone); $files = cc_helpers::embedded_mapping($packageroot, $contextid); //$rdir = $allinone ? new cc_resource_location($outdir) : null; $rootnode = null; $rootvals = null; $depfiles = array(); $depres = array(); $flocation = null; foreach ($files as $virtual => $values) { $clean_filename = $values[2]; $vals = pkg_static_resources::instance()->get_identifier($virtual); $resource = $vals[3]; $identifier = $resource->identifier; $flocation = $vals[1]; if ($values[1]) { $rootnode = $resource; $rootvals = $flocation; continue; } $depres[] = $identifier; $depfiles[] = $vals[1]; $result[$virtual] = array($identifier, $flocation, false); } if (!empty($rootnode)) { $rootnode->files = array_merge($rootnode->files, $depfiles); $result[$virtual] = array($rootnode->identifier, $rootvals, true); } return $result; }
public static function add_files(cc_i_manifest &$manifest, $packageroot, $outdir, $allinone = true) { global $CFG; if (pkg_static_resources::instance()->finished) { return; } $files = cc_helpers::embedded_mapping($packageroot); $rdir = $allinone ? new cc_resource_location($outdir) : null; foreach ($files as $virtual => $values) { $clean_filename = $values[2]; if (!$allinone) { $rdir = new cc_resource_location($outdir); } $rtp = $rdir->fullpath() . $values[7] . $clean_filename; //Are there any relative virtual directories? //let us try to recreate them $justdir = $rdir->fullpath(false) . $values[7]; if (!file_exists($justdir)) { if (!mkdir($justdir, $CFG->directorypermissions, true)) { throw new RuntimeException('Unable to create directories!'); } } $source = $packageroot . DIRECTORY_SEPARATOR . $values[0]; if (!copy($source, $rtp)) { throw new RuntimeException('Unable to copy files!'); } $resource = new cc_resource($rdir->rootdir(), $values[7] . $clean_filename, $rdir->dirname(false)); $res = $manifest->add_resource($resource, null, cc_version11::webcontent); pkg_static_resources::instance()->add($virtual, $res[0], $rdir->dirname(false) . $values[7] . $clean_filename, $values[1], $resource); } pkg_static_resources::instance()->finished = true; }