public function Botcha::form_alter in BOTCHA Spam Prevention 7.3
Same name and namespace in other branches
- 6.3 controller/application/botcha.application.controller.inc \Botcha::form_alter()
Implements hook_form_alter().
This function adds BOTCHA protection to forms for untrusted users if needed and adds BOTCHA administration links for site administrators if this option is enabled.
Overrides IBotcha::form_alter
File
- controller/application/ botcha.application.controller.inc, line 69 
- Contains Botcha class.
Class
- Botcha
- Just a middleman for achieving purposes such as:
Code
public function form_alter(&$form, &$form_state, $form_id) {
  // Get an instance of BOTCHA form controller.
  $form_controller = $this
    ->getController(Botcha::CONTROLLER_TYPE_FORM);
  $botcha_form = $form_controller
    ->getForm($form_id, FALSE);
  // Check if it is allowed to protect.
  if ($botcha_form
    ->isEnabled()) {
    // Add admin links functionality.
    $botcha_form
      ->addAdminLinks($form);
    // Get a recipe book and apply all applicable recipes to the form.
    $rbid = $botcha_form
      ->getRecipebook();
    $recipebook = $this
      ->getController(Botcha::CONTROLLER_TYPE_RECIPEBOOK)
      ->getRecipebook($rbid, FALSE);
    if ($recipebook
      ->isApplicable($form, $form_state)) {
      // Apply each of recipebook's recipes ...
      $recipe_controller = $this
        ->getController(Botcha::CONTROLLER_TYPE_RECIPE);
      foreach ($recipebook
        ->getRecipes() as $recipe_id) {
        $recipe = $recipe_controller
          ->getRecipe($recipe_id, FALSE);
        $recipe
          ->apply($form, $form_state);
        // CSS.
        if ($css = $recipe
          ->getCss()) {
          $csss[] = $css;
        }
        // JS.
        if ($recipe instanceof BotchaRecipeUsingJsAbstract) {
          $jss[] = $recipe
            ->getJsValue();
        }
      }
      // ... and the recipe book itself.
      $recipebook
        ->apply($form, $form_state);
      // Logging.
      // @todo Refactor logging.
      if (BOTCHA_LOGLEVEL >= 4) {
        watchdog(BOTCHA_LOG, '%form_id form prepared by BOTCHA: added recipes - !botchas!more', array(
          '%form_id' => $form['form_id']['#value'],
          '!botchas' => implode(', ', $recipebook
            ->getRecipes()),
          '!more' => '' . (BOTCHA_LOGLEVEL >= 5 ? '<br /><br />' . 'POST=<pre>' . print_r(_botcha_filter_value($_POST), 1) . '</pre>' : '') . (BOTCHA_LOGLEVEL >= 5 ? '<br /><br />' . 'GET=<pre>' . print_r(_botcha_filter_value($_GET), 1) . '</pre>' : '') . (BOTCHA_LOGLEVEL >= 5 ? '<br /><br />' . 'SERVER=<pre>' . print_r($_SERVER, 1) . '</pre>' : '') . (BOTCHA_LOGLEVEL >= 5 ? '<br /><br />' . 'form=<pre>' . print_r(_botcha_filter_form_log($form), 1) . '</pre>' : '') . (BOTCHA_LOGLEVEL >= 5 && count($jss) ? '<br /><br />' . 'JS=<pre>' . join("\n", $jss) . '</pre>' : '') . (BOTCHA_LOGLEVEL >= 5 && count($csss) ? '<br /><br />' . 'CSS=<pre>' . join("\n", $csss) . '</pre>' : ''),
        ), WATCHDOG_NOTICE);
      }
    }
  }
}