You are here

function cdn_requirements in CDN 6

Same name and namespace in other branches
  1. 5 cdn.module \cdn_requirements()
  2. 6.2 cdn.install \cdn_requirements()
  3. 7.2 cdn.install \cdn_requirements()

Implementation of hook_requirements().

File

./cdn.module, line 204
Implementation of the core hooks, defines, public and private functions.

Code

function cdn_requirements($phase) {
  $requirements = array();
  $t = get_t();
  switch ($phase) {
    case 'install':
    case 'runtime':
      $status = variable_get(CDN_STATUS_VARIABLE, CDN_DISABLED);
      $mode = variable_get(CDN_MODE_VARIABLE, CDN_MODE_BASIC);
      $requirements['cdn']['title'] = $t('CDN integration');

      // Set the basic info: disabled/debug/enabled.
      if ($status == CDN_DISABLED) {
        $requirements['cdn'] += array(
          'description' => $t('CDN integration is disabled for all users.'),
          'severity' => REQUIREMENT_WARNING,
          'value' => $t('Disabled'),
        );
      }
      elseif ($status == CDN_DEBUG) {
        $requirements['cdn'] += array(
          'description' => $t('CDN integration is only enabled for users with
                               the %cdn-debug-mode-permission permission', array(
            '%cdn-debug-mode-permission' => CDN_PERM_ACCESS_DEBUG,
          )),
          'severity' => REQUIREMENT_WARNING,
          'value' => $t('In debug mode'),
        );
      }
      else {
        $requirements['cdn'] += array(
          'description' => $t('CDN integration is enabled for all users.'),
          'severity' => REQUIREMENT_OK,
          'value' => $t('Enabled'),
        );
      }

      // When CDN integration is enabled, add on more information.
      if ($status != CDN_DISABLED) {
        if ($mode == CDN_MODE_BASIC) {
          $requirements['cdn']['value'] .= ' – ' . t('basic mode');
        }
        else {
          $requirements['cdn']['value'] .= ' – ' . t('advanced mode');
          $items = array();
          $synced_files_db = variable_get(CDN_ADVANCED_SYNCED_FILES_DB_VARIABLE, FALSE);
          if ($synced_files_db !== FALSE) {
            $daemon_pid_file = str_replace(CDN_DAEMON_SYNCED_FILES_DB, CDN_DAEMON_PID_FILE, $synced_files_db);
            $persistent_data_db = str_replace(CDN_DAEMON_SYNCED_FILES_DB, CDN_DAEMON_PERSISTENT_DATA_DB, $synced_files_db);
            $drupal_root_path = variable_get(CDN_DRUPAL_ROOT_VARIABLE, realpath('.'));
            $synced_files_db_exists = file_exists($synced_files_db);
            $synced_files_db_readable = @fopen($synced_files_db, 'r');
            $persistent_data_db_exists = file_exists($persistent_data_db);
            $persistent_data_db_readable = @fopen($persistent_data_db, 'r');
            $daemon_pid_file_exists = file_exists($daemon_pid_file);
            $db = _cdn_advanced_get_db_connection();
            if ($db !== FALSE) {
              $input_file_mask = $drupal_root_path . '%';
              $sql = "SELECT COUNT(*) AS count, server FROM synced_files WHERE input_file LIKE :input_file GROUP BY server";
              $stmt = $db
                ->prepare($sql);
              $stmt
                ->bindParam(':input_file', $input_file_mask, PDO::PARAM_STR);
              $stmt
                ->execute();
              $result = $stmt
                ->fetchAll();
              $synced_file_stats = $result;
            }
            if ($persistent_data_db_exists && $persistent_data_db_readable) {
              try {
                $db = new PDO('sqlite:' . $persistent_data_db);
              } catch (PDOException $e) {
                $items[] = t("Could not connect to persistent data database.");
              }
              if ($db !== FALSE) {
                $sql = "SELECT COUNT(*) FROM pipeline_queue";
                $stmt = $db
                  ->prepare($sql);
                $stmt
                  ->execute();
                $result = $stmt
                  ->fetchAll();
                $pipeline_queue_count = $result[0][0];
                $sql = "SELECT COUNT(*) FROM pipeline_list";
                $stmt = $db
                  ->prepare($sql);
                $stmt
                  ->execute();
                $result = $stmt
                  ->fetchAll();
                $pipeline_list_count = $result[0][0];
              }
            }
            $items[] = $synced_files_db_exists ? t('The synced files database exists.') : t("The synced files database doesn't exist.");
            $items[] = $synced_files_db_readable ? t('The synced files database is readable.') : t("The synced files database isn't readable.");
            if ($synced_files_db_readable) {
              foreach ($synced_file_stats as $row) {
                $items[] = t('!synced-file-count files have been synced to the %server server.', array(
                  '!synced-file-count' => $row['count'],
                  '%server' => $row['server'],
                ));
              }
            }
            else {
              $items[] = t("Number of synced files is unknown.");
            }
            $items[] = $daemon_pid_file_exists ? t('The daemon is currently running.') : '<strong>' . t('The daemon is currently not running.') . '</strong>';
            if (isset($pipeline_queue_count)) {
              $items[] = t("!pipeline-queue-count files are waiting to be synced.", array(
                '!pipeline-queue-count' => $pipeline_queue_count,
              ));
              $items[] = t("!pipeline-list-count files are currently being synced.", array(
                '!pipeline-list-count' => $pipeline_list_count,
              ));
            }

            // If either of these 3 checks failed, mark this requirement's
            // severity as being an error.
            if (!($synced_files_db_exists && $synced_files_db_readable && $daemon_pid_file_exists)) {
              $requirements['cdn']['severity'] = REQUIREMENT_ERROR;
            }
          }
          else {
            $items[] = t('The synced files database setting has not yet been configured.');
            $requirements['cdn']['severity'] = REQUIREMENT_ERROR;
          }
          $requirements['cdn']['description'] .= '<br />' . theme('item_list', $items);
        }
      }
  }
  return $requirements;
}