/** * Parses the snippet short code * @example [snippet id=123] * @example [snippet id=123 version=456] */ public static function parse($arguments, $content = null, $parser = null) { //Ensure ID is pressent in the arguments if (!array_key_exists('id', $arguments)) { return '<p><b><i>' . _t('CodeBankShortCode.MISSING_ID_ATTRIBUTE', '_Short Code missing the id attribute') . '</i></b></p>'; } //Fetch Snippet $snippet = Snippet::get()->byID(intval($arguments['id'])); if (empty($snippet) || $snippet === false || $snippet->ID == 0) { return '<p><b><i>' . _t('CodeBankShortCode.SNIPPET_NOT_FOUND', '_Snippet not found') . '</i></b></p>'; } //Fetch Text $snippetText = $snippet->SnippetText; //If the version exists fetch it, and replace the text with that of the version if (array_key_exists('version', $arguments)) { $version = $snippet->Version(intval($arguments['version'])); if (empty($version) || $version === false || $version->ID == 0) { $snippetText = $version->Text; } } //Load CSS Requirements Requirements::css(CB_DIR . '/javascript/external/syntaxhighlighter/themes/shCore.css'); Requirements::css(CB_DIR . '/javascript/external/syntaxhighlighter/themes/shCoreDefault.css'); Requirements::css(CB_DIR . '/javascript/external/syntaxhighlighter/themes/shThemeDefault.css'); //Load JS Requirements Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js'); Requirements::javascript(CB_DIR . '/javascript/external/syntaxhighlighter/brushes/shCore.js'); Requirements::javascript(CB_DIR . '/javascript/external/syntaxhighlighter/brushes/' . self::getBrushName($snippet->Language()->HighlightCode) . '.js'); Requirements::javascriptTemplate(CB_DIR . '/javascript/CodeBankShortCode.template.js', array('ID' => $snippet->ID), 'snippet-highlightinit-' . $snippet->ID); //Render the snippet $obj = new ViewableData(); return $obj->renderWith('CodeBankShortCode', array('ID' => $snippet->ID, 'Title' => $snippet->getField('Title'), 'Description' => $snippet->getField('Description'), 'SnippetText' => DBField::create_field('Text', $snippetText), 'HighlightCode' => strtolower($snippet->Language()->HighlightCode))); }
/** * * @param string $snippet_name * @param array $vars * @param integer $cache_lifetime * @param boolean $cache_by_uri * @param array $tags * @param boolean $i18n * @return void */ public static function render($snippet_name, $vars = NULL, $cache_lifetime = NULL, $cache_by_uri = FALSE, array $tags = array(), $i18n = NULL) { $view = Snippet::get($snippet_name, $vars); if ($view === NULL) { return NULL; } $cache_key = self::_cache_key($snippet_name, $cache_by_uri); if (!in_array($snippet_name, $tags)) { $tags[] = $snippet_name; } if (Kohana::$caching === TRUE and $cache_lifetime !== NULL and !Fragment::load($cache_key, (int) $cache_lifetime, $i18n)) { echo $view; Fragment::save_with_tags((int) $cache_lifetime, $tags); } else { if ($cache_lifetime === NULL) { echo $view; } } }
/** * Performs the search against the snippets in the system * * @param {string} $keywords Keywords to search for * @param {int} $languageID Language to filter to * @param {int} $folderID Folder to filter to * @return {DataList} Data list pointing to the snippets in the results */ public function doSnippetSearch($keywords, $languageID = false, $folderID = false) { $list = Snippet::get(); if (isset($languageID) && !empty($languageID)) { $list = $list->filter('LanguageID', intval($languageID)); } if (isset($folderID) && !empty($folderID)) { $list = $list->filter('FolderID', intval($folderID)); } if (isset($keywords) && !empty($keywords)) { $SQL_val = Convert::raw2sql($keywords); if (DB::getConn() instanceof MySQLDatabase) { $list = $list->where("MATCH(\"Title\", \"Description\", \"Tags\") AGAINST('" . $SQL_val . "' IN BOOLEAN MODE)"); } else { $list = $list->filterAny(array('Title:PartialMatch' => $SQL_val, 'Description:PartialMatch' => $SQL_val, 'Tags:PartialMatch' => $SQL_val)); } } return $list; }
/** * Deletes a folder * @param {stdClass} $data Data passed from ActionScript * @return {array} Standard response base */ public function moveSnippet($data) { $response = CodeBank_ClientAPI::responseBase(); //Ensure logged in if (!Permission::check('CODE_BANK_ACCESS')) { $response['status'] = 'EROR'; $response['message'] = _t('CodeBankAPI.PERMISSION_DENINED', '_Permission Denied'); return $response; } $snippet = Snippet::get()->byID(intval($data->id)); if (empty($snippet) || $snippet === false || $snippet->ID == 0) { $response['status'] = "EROR"; $response['message'] = _t('CodeBankAPI.SNIPPET_NOT_FOUND', '_Snippet not found'); return $response; } if ($data->folderID != 0) { $snippetFolder = SnippetFolder::get()->byID(intval($data->folderID)); if (empty($snippetFolder) || $snippetFolder === false || $snippetFolder->ID == 0) { $response['status'] = "EROR"; $response['message'] = _t('CodeBankAPI.FOLDER_DOES_NOT_EXIST', '_Folder does not exist'); return $response; } if ($snippetFolder->LanguageID != $snippet->LanguageID) { $response['status'] = "EROR"; $response['message'] = _t('CodeBankAPI.LANGUAGE_NOT_SAME', '_Folder is not in the same language as the snippet'); return $response; } } try { $snippet->FolderID = $data->folderID; $snippet->write(); $response['status'] = "HELO"; } catch (Exception $e) { $response['status'] = "EROR"; $response['message'] = "Internal Server error occured"; } return $response; }
/** * Handles moving of a snippet when the tree is reordered * @param {SS_HTTPRequest} $request HTTP Request */ public function moveSnippet(SS_HTTPRequest $request) { $snippet = Snippet::get()->byID(intval($request->getVar('ID'))); if (empty($snippet) || $snippet === false || $snippet->ID == 0) { $this->response->setStatusCode(403, _t('CodeBank.SNIPPIT_NOT_EXIST', '_Snippit does not exist')); return; } $parentID = $request->getVar('ParentID'); if (strpos($parentID, 'language-') !== false) { $lang = SnippetLanguage::get()->byID(intval(str_replace('language-', '', $parentID))); if (empty($lang) || $lang === false || $lang->ID == 0) { $this->response->setStatusCode(403, _t('CodeBank.LANGUAGE_NOT_EXIST', '_Language does not exist')); return; } if ($lang->ID != $snippet->LanguageID) { $this->response->setStatusCode(403, _t('CodeBank.CANNOT_MOVE_TO_LANGUAGE', '_You cannot move a snippet to another language')); return; } //Move out of folder DB::query('UPDATE "Snippet" SET "FolderID"=0 WHERE "ID"=' . $snippet->ID); $this->response->addHeader('X-Status', rawurlencode(_t('CodeBank.SNIPPET_MOVED', '_Snippet moved successfully'))); return; } else { if (strpos($parentID, 'folder-') !== false) { $folder = SnippetFolder::get()->byID(intval(str_replace('folder-', '', $parentID))); if (empty($folder) || $folder === false || $folder->ID == 0) { $this->response->setStatusCode(403, _t('CodeBank.FOLDER_NOT_EXIST', '_Folder does not exist')); return; } if ($folder->LanguageID != $snippet->LanguageID) { $this->response->setStatusCode(403, _t('CodeBank.CANNOT_MOVE_TO_FOLDER', '_You cannot move a snippet to a folder in another language')); return; } //Move to folder DB::query('UPDATE "Snippet" SET "FolderID"=' . $folder->ID . ' WHERE "ID"=' . $snippet->ID); $this->response->addHeader('X-Status', rawurlencode(_t('CodeBank.SNIPPET_MOVED', '_Snippet moved successfully'))); return; } } $this->response->setStatusCode(403, _t('CodeBank.UNKNOWN_PARENT', '_Unknown Parent')); }
</div> <div class="row"> <div class="col-md-6"> <p class="description"></p> </div> <div class="col-md-6"> <a href="" target="_blank" class="btn green_btn preview_btn">Go to Site</a> </div> </div> </div> </div> </div> </div> </div> <?php echo Snippet::get('google-analytics'); Javascript::add('public/assets/js/vendor.js', 'frontend', 1); Javascript::add('public/assets/js/app.js', 'frontend', 2); Javascript::load(); /* <div class="loading"></div> <style rel="stylesheet"> .loading{ background: url('https://dl.dropbox.com/u/23834858/fotos/loading.gif') no-repeat center center rgba(51, 51, 51, 0.82); position: fixed; top: 0; left: 0; width: 100%; height: 100%; margin: 0 auto; display: block;
<?php Route::get('documents/create', function () { if (!($user = Auth::user())) { return array('error' => 'You must be logged in to create a document.'); } $input = Input::all(); $rules = array('snippet_id' => 'required|exists:snippets,id', 'title' => 'required|max:255', 'syntax' => 'alpha', 'data' => 'required'); $validated = Validator::make($input, $rules); if ($validated->fails()) { return array('error' => $validated->errors); } $snippet = Snippet::get($input['snippet_id']); if (isset($snippet->documents[$input['title']])) { return array('error' => array('title' => 'This snippet already has a document of that name')); } if (!isset($input['syntax'])) { $input['syntax'] = substr($input['title'], strpos($input['title'], '.') + 1); } if ($id = Document::create($input['snippet_id'], $input)) { return Redirect::to('documents/' . $id); } });
/** * Performs the migration */ public function run($request) { //Check for tables $tables = DB::tableList(); if (!array_key_exists('languages', $tables) || !array_key_exists('snippits', $tables) || !array_key_exists('snippit_history', $tables) || !array_key_exists('preferences', $tables) || !array_key_exists('settings', $tables) || !array_key_exists('snippit_search', $tables) || !array_key_exists('users', $tables)) { echo '<b>' . _t('CodeBankLegacyMigrate.TABLES_NOT_FOUND', '_Could not find Code Bank 2.2 database tables, cannot migrate') . '</b>'; exit; } //Ensure Empty if (Snippet::get()->Count() > 0) { echo '<b>' . _t('CodeBankLegacyMigrate.SNIPPETS_PRESENT', '_Already appears to be snippets present in the database, please start with a clean database, cannot migrate.') . '</b>'; exit; } //Increase Timeout, since 30s probably won't be enough in huge databases increase_time_limit_to(600); //Find Other language $plainTextID = SnippetLanguage::get()->filter('Name', 'Other')->first(); if (empty($plainTextID) || $plainTextID == false || $plainTextID->ID == 0) { echo _t('CodeBankLegacyMigrate.OTHER_NOT_FOUND', '_Could not find the Other Language, cannot migrate, please run dev/build first'); exit; } else { $plainTextID = $plainTextID->ID; } //Check for users group $usersGroup = Group::get()->filter('Code', 'code-bank-api')->first(); if (empty($usersGroup) || $usersGroup == false || $usersGroup->ID == 0) { //Rollback Transaction if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionRollback(); } echo _t('CodeBankLegacyMigrate.GROUP_NOT_FOUND', '_Could not find users group, cannot migrate, please run dev/build first'); exit; } //Start Transaction if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionStart(); } //Migrate Languages echo '<b>' . _t('CodeBankLegacyMigrate.MIGRATE_USER_LANGUAGES', '_Migrating User Languages') . '</b>... '; $results = DB::query('SELECT * FROM "languages" WHERE "user_language"=1'); if ($results->numRecords() > 0) { foreach ($results as $row) { DB::query('INSERT INTO "SnippetLanguage" ("ClassName","Created", "LastEdited", "Name", "FileExtension", "HighlightCode", "UserLanguage") ' . "VALUES('SnippetLanguage','" . date('Y-m-d H:i:s') . "','" . date('Y-m-d H:i:s') . "','" . Convert::raw2sql($row['language']) . "','" . Convert::raw2sql($row['file_extension']) . "','" . Convert::raw2sql($row['sjhs_code']) . "',1)"); } echo _t('CodeBankLegacyMigrate.DONE', '_Done') . '<br/>'; } else { echo _t('CodeBankLegacyMigrate.NOT_FOUND', '_None Found') . '<br/>'; } //Migrate Users echo '<b>' . _t('CodeBankLegacyMigrate.MIGRATE_USERS', '_Migrating Users') . '</b>...'; $results = DB::query('SELECT * FROM "users"'); if ($results->numRecords() > 0) { foreach ($results as $row) { if ($row['deleted'] == true) { echo '<br/><i>' . _t('CodeBankLegacyMigrate.DELETED_MEMBER_SKIP', '_WARNING: Skipping deleted member {username}, deleted members in Code Bank 3 are not supported', array('username' => $row['username'])) . '</i><br/>'; continue; } //Get user heartbeat preference $useHeartbeat = DB::query('SELECT "value" FROM "preferences" WHERE "code"=\'heartbeat\' AND "fkUser"=' . $row['id'])->value(); //Insert User $member = Member::get()->filter('Email', Convert::raw2sql($row['username']))->first(); if (empty($member) || $member === false || $member->ID == 0) { $member = new Member(); $member->FirstName = $row['username']; $member->Email = $row['username']; $member->Password = $row['password']; $member->PasswordEncryption = 'sha1'; $member->Locale = 'en_US'; $member->DateFormat = 'MMM d, yyyy'; $member->TimeFormat = 'h:mm:ss a'; $member->UseHeartbeat = intval($useHeartbeat); $member->write(); DB::query('UPDATE "Member" ' . 'SET "Password"=\'' . substr(base_convert($row['password'], 16, 36), 0, 64) . '\', ' . '"Salt"=NULL ' . 'WHERE "ID"=' . $member->ID); //Add to security group if ($row['username'] == 'admin') { //For admin add to administrators group $member->addToGroupByCode('administrators'); } else { //For all others add to code-bank-api $member->addToGroupByCode('code-bank-api'); } } else { //Add to code-bank-api if not admin if ($row['username'] != 'admin') { $member->addToGroupByCode('code-bank-api'); } $member->UseHeartbeat = intval($useHeartbeat); $member->write(); echo '<br/><i>' . _t('CodeBankLegacyMigrate.MEMBER_EXISTS', '_WARNING: Member {username} already exists in the database, no changes have been made to this member. If you are unsure of the password please ask an administrator to have it reset or use the forgot password link', array('username' => $row['username'])) . '</i><br/>'; } } echo _t('CodeBankLegacyMigrate.DONE', '_Done') . '<br/>'; } else { //Rollback Transaction if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionRollback(); } echo _t('CodeBankLegacyMigrate.NO_USERS_FOUND', '_No users found, Code Bank 2.2 appears to have not been properly setup cannot continue with migration'); exit; } //Migrate IP Message echo '<b>Migrating IP Message</b>...'; $ipMessage = DB::query('SELECT "value" FROM "settings" WHERE "code"=\'ipMessage\'')->value(); $config = CodeBankConfig::CurrentConfig(); $config->IPMessage = $ipMessage; $config->write(); echo _t('CodeBankLegacyMigrate.DONE', '_Done') . '<br/>'; //Migrate Snippets echo '<b>' . _t('CodeBankLegacyMigrate.MIGRATE_SNIPPETS', '_Migrating Snippets') . '</b>...'; $results = DB::query('SELECT "snippits".*, "languages"."language", "creator"."username" AS "creatorUsername", "lastEditor"."username" AS "lastEditorUsername" ' . 'FROM "snippits" ' . 'INNER JOIN "languages" ON "snippits"."fkLanguage"="languages"."id" ' . 'LEFT JOIN "users" "creator" ON "snippits"."fkCreatorUser"="creator"."id" ' . 'LEFT JOIN "users" "lastEditor" ON "snippits"."fkLastEditUser"="lastEditor"."id"'); if ($results->numRecords() > 0) { foreach ($results as $row) { //Get Creator ID $creator = Member::get()->filter('Email', Convert::raw2sql($row['creatorUsername']))->first(); if (!empty($creator) && $creator !== false && $creator->ID != 0) { $creatorID = $creator->ID; } else { $creatorID = 0; } //Get Last Editor ID $lastEditor = Member::get()->filter('Email', Convert::raw2sql($row['lastEditorUsername']))->first(); if (!empty($lastEditor) && $lastEditor !== false && $lastEditor->ID != 0) { $lastEditorID = $lastEditor->ID; } else { $lastEditorID = 0; } //Get Language ID $language = SnippetLanguage::get()->filter('Name', Convert::raw2sql($row['language']))->first(); if (!empty($language) && $language !== false && $language->ID != 0) { $languageID = $language->ID; } else { $languageID = $plainTextID; } //Insert Snippet Info DB::query('INSERT INTO "Snippet" ("ID", "ClassName", "Created", "LastEdited", "Title", "Description", "Tags", "LanguageID", "CreatorID", "LastEditorID") ' . "VALUES(" . $row['id'] . ",'Snippet','" . date('Y-m-d H:i:s') . "','" . date('Y-m-d H:i:s') . "','" . Convert::raw2sql($row['title']) . "','" . Convert::raw2sql($row['description']) . "','" . Convert::raw2sql($row['tags']) . "'," . $languageID . "," . $creatorID . "," . $lastEditorID . ")"); //Get History $versions = DB::query('SELECT * FROM "snippit_history" WHERE "fkSnippit"=' . $row['id']); foreach ($versions as $version) { DB::query('INSERT INTO "SnippetVersion" ("ClassName", "Created", "LastEdited", "Text", "ParentID") ' . "VALUES('SnippetVersion','" . date('Y-m-d H:i:s', strtotime($version['date'])) . "','" . date('Y-m-d H:i:s', strtotime($version['date'])) . "','" . Convert::raw2sql($version['text']) . "'," . $row['id'] . ")"); } } echo _t('CodeBankLegacyMigrate.DONE', '_Done') . '<br/>'; } else { echo _t('CodeBankLegacyMigrate.NO_SNIPPETS_FOUND', '_No snippets found') . '<br/>'; } //Rename tables DB::getConn()->renameTable('snippits', '_obsolete_snippits'); DB::getConn()->renameTable('snippit_search', '_obsolete_snippit_search'); DB::getConn()->renameTable('snippit_history', '_obsolete_snippit_history'); DB::getConn()->renameTable('languages', '_obsolete_languages'); DB::getConn()->renameTable('settings', '_obsolete_settings'); DB::getConn()->renameTable('preferences', '_obsolete_preferences'); DB::getConn()->renameTable('users', '_obsolete_users'); //Complete Transaction if (DB::getConn()->supportsTransactions()) { DB::getConn()->transactionEnd(); } //Mark Migrated touch(ASSETS_PATH . '/.codeBankMigrated'); echo '<br/><h4>' . _t('CodeBankLegacyMigrate.MIGRATION_COMPLETE', '_Migration Completed') . '</h4>'; exit; }
<?php // delegate to snippets, so that designers can easily change how things look AND it makes changes more theme agnostic (although this may not be a great thing anyway) echo Snippet::get('slider', array('items' => $items));
<?php Route::get('snippets', function () { $path = URL::current(); return array('GET ' . $path . '/list' => 'List the latest snippets', 'GET ' . $path . '/:id' => 'Get information about a specific snippet', 'POST ' . $path . '/vote/:id/up,down' => 'Vote for a snippet', 'POST ' . $path . '/create' => 'Create a new snippet', 'POST ' . $path . '/:id' => 'Update a snippet', 'DELETE ' . $path . '/:id' => 'Delete a snippet'); }); Route::get('snippets/(:any)', array('before' => 'cache', 'after' => 'cache', function ($id) { if ($snip = Snippet::get($id)) { return $snip; } return Redirect::error('404'); }));
<?php Route::get('snippets/vote/(:num)/(:any)', function ($snippet_id, $direction) { if (!($user = Auth::user())) { return array('error' => 'You must be logged in to vote'); } if ($direction != 'up' && $direction != 'down') { return array('error' => 'Direction must be either "up" or "down"'); } $direction = $direction == 'up' ? 1 : -1; # check for an existing vote. if ($vote = DB::table('votes')->where('user_id', '=', $user->id)->where('snippet_id', '=', $snippet_id)->first()) { if ($vote->direction == $direction) { return array('warning' => 'You have already voted for this snippet'); } DB::table('votes')->where('user_id', '=', $user->id)->where('snippet_id', '=', $snippet_id)->update(array('direction' => $direction)); } else { DB::table('votes')->insert(array('user_id' => $user->id, 'snippet_id' => $snippet_id, 'direction' => $direction, 'created' => time())); } return Snippet::get($snippet_id); });