/**
  *
  * @return waInstallerRequirements
  */
 private static function getInstance()
 {
     if (!self::$instance) {
         self::$instance = new self();
     }
     return self::$instance;
 }
 /**
  *
  * @param $requirements
  * @param $update_config
  * @return boolean
  */
 public static function checkRequirements(&$requirements, $update_config = false, $action = false)
 {
     if (is_null($requirements)) {
         $requirements = self::getRequirements('wa-installer/lib/config/requirements.php', 'installer');
     }
     $passed = true;
     $config = array();
     $actions = array(self::ACTION_CRITICAL_UPDATE, self::ACTION_UPDATE, self::ACTION_INSTALL);
     $update = $action && in_array($action, $actions);
     foreach ($requirements as $subject => &$requirement) {
         $requirement['passed'] = false;
         $requirement['note'] = null;
         $requirement['warning'] = false;
         $requirement['update'] = $update;
         waInstallerRequirements::test($subject, $requirement);
         $passed = $requirement['passed'] && $passed;
         if ($update_config && isset($requirement['config'])) {
             $config[$requirement['config']] = $requirement['value'];
         }
         if ($requirement['note'] && isset($requirement['allow_skip']) && $requirement['allow_skip']) {
             unset($requirement);
             unset($requirements[$subject]);
         } else {
             unset($requirement);
         }
     }
     if ($update_config) {
         try {
             self::updateGenericConfig($config);
         } catch (Exception $e) {
             $requirements[] = array('name' => '', 'passed' => false, 'warning' => $e->getMessage(), 'description' => '', 'note' => '');
             $passed = false;
         }
     }
     return $passed;
 }