/** * Initialize the app metadata store, especially the APP_PATH and APP_URL * * @return AppMetadata **/ public static function createAppMetadata() { global $secrets; // FIXME grown-ups don't program like this global $sql; // FIXME grown-ups don't program like this global $metadata; // FIXME grown-ups don't program like this global $smarty; // FIXME grown-ups don't program like this if (AppMetadata::prepareDatabase($sql)) { $smarty->addMessage('App metadata database tables created', 'Database tables to store application metadata, which is used to build the <code>config.xml</code> file, have been created in your MySQL database.', NotificationMessage::GOOD); } else { $smarty->addMessage('App metadata database tables exist', 'Database tables to store application metadata already exist and have not been re-created.'); } $metadata = initAppMetadata(); $metadata['APP_PATH'] = preg_replace('/\\/classes$/', '', __DIR__); $metadata['APP_URL'] = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on' ? 'http://' : 'https://') . $_SERVER['SERVER_NAME'] . preg_replace("|^{$_SERVER['DOCUMENT_ROOT']}(.*)\$|", '$1', $metadata['APP_PATH']); $metadata['APP_NAME'] = (string) $secrets->app->name; $metadata['APP_ID'] = (string) $secrets->app->id; $metadata['CANVAS_INSTANCE_URL_PLACEHOLDER'] = 'https://canvas.instructure.com'; $smarty->assign('metadata', $metadata); $smarty->addMessage('App metadata initialized', 'Basic application metadata has been updated, including APP_PATH and APP_URL', NotificationMessage::GOOD); return $metadata; }
{ return preg_replace('/[^a-z0-9]+/i', '_', $id); } function canvasHackNamespace($id, $javascript) { return preg_replace('/^(\\s*var\\s+)?canvashack\\s*=\\s*{\\n*(.*)};/is', canonicalNamespaceId($id) . ": {\n\$2\n}", $javascript); } $canvashacks = array(); $enabledPages = $toolbox->mysql_query("\n SELECT p.*\n FROM `pages` AS p\n INNER JOIN `canvashacks` AS c\n ON c.`id` = p.`canvashack`\n WHERE\n c.`enabled` = TRUE\n ORDER BY\n p.`include` DESC\n"); while ($page = $enabledPages->fetch_assoc()) { if (!empty($page['url']) && $page['url'] == $location || !empty($page['pattern']) && preg_match($page['pattern'], $location)) { if ($page['include']) { $canvashacks[$page['canvashack']] = true; } else { unset($canvashacks[$page['canvashack']]); } } } $css = array(); if (($applicableCSS = $toolbox->mysql_query("\n SELECT *\n FROM `css`\n WHERE\n `canvashack` = '" . implode("' OR `canvashack` = '", array_keys($canvashacks)) . "'\n")) == false) { exit; } while ($entry = $applicableCSS->fetch_assoc()) { $css[$entry['canvashack']] = shell_exec("php \"{$entry['path']}\" \"{$location}\" 2>&1"); } foreach ($css as $id => $stylesheet) { $plugin = new AppMetadata($toolbox->getMySQL(), $id); echo "/* CanvasHack ID {$id} begin */\n"; echo $plugin->derivedValues($stylesheet); echo "\n/* CanvasHack ID {$id} end */\n\n"; }