Subversion Repositories web.creative

Rev

Blame | Last modification | View Log | Download

<?php namespace ProcessWire;

/**
 * Class InputfieldURL
 * 
 * An Inputfield for handling input of URLs
 * 
 * @property int|bool $noRelative Whether relative URLs are disabled
 * @property int|bool $addRoot Whether to prepend root path
 * @property int|bool $allowIDN Whether to allow IDNs
 * @property int|bool $allowQuotes Whether to allow quote characters in URLs
 *
 */
class InputfieldURL extends InputfieldText {

  public static function getModuleInfo() {
    return array(
      'title' => __('URL', __FILE__), // Module Title
      'summary' => __('URL in valid format', __FILE__), // Module Summary
      'version' => 102,
      );
  }

  public function __construct() {
    parent::__construct();
    $this->setAttribute('type', 'text'); 
    $this->setAttribute('maxlength', 1024); 
    $this->setAttribute('size', 0); 
    $this->setAttribute('name', 'href'); 
    $this->label = 'URL';
    $this->set('noRelative', 0); // whether relative URLs are disabled
    $this->set('addRoot', 0); // whether to prepend root path
    $this->set('allowIDN', 0); // whether to allow IDNs
    $this->set('allowQuotes', 0); // whether to allow quote characters in URLs
  }

  public function ___render() {
    $rootUrl = $this->config->urls->root;
    if($this->addRoot && !$this->noRelative && !$this->notes && strlen($rootUrl) > 1) {
      $this->notes = sprintf($this->_("Start local URLs with \"/\" and leave off the \"%s\" part."), $rootUrl); // Instruction for local URLs displayed when site is running from a subdirectory
    }
    return parent::___render();
  }

  protected function setAttributeValue($value) {

    if(strlen($value)) {
      $value = trim($value); 
      $unsanitized = $value; 
      $value = $this->wire('sanitizer')->url($value, array(
        'allowRelative' => $this->noRelative ? false : true,
        'allowIDN' => $this->allowIDN ? true : false,
        'stripQuotes' => $this->allowQuotes ? false : true,
      ));

      if(!$value || $unsanitized != $value && "http://$unsanitized" != $value) {
        $error = true;
        if($value && strpos($unsanitized, '%') !== false) {
          $test = rawurldecode($unsanitized);
          if($value == $test || $value == "http://$test") $error = false;
        }
        if($error) {
          $this->error($this->name . ': ' . $this->_("Error found - please check that it is a valid URL")); // Error message when invalid URL found
        }

      } else if($value != $unsanitized && $value == "http://$unsanitized") {
        $this->message($this->name . ': ' . $this->_("Note that \"http://\" was added")); // Message displayed when http scheme was automatically added to the URL
      }

    } else $value = '';

    return $value; 
  }

  public function ___getConfigInputfields() {
    $inputfields = parent::___getConfigInputfields();
    $f = $inputfields->get('stripTags');
    if($f) $inputfields->remove($f);
    return $inputfields;
  }
}