Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

passwordchange-field.inc.php

Go to the documentation of this file.
00001 <?php
00042 class PasswordChangeField extends CollectionField
00043 {
00044     static protected $meterJsDrawn = false;
00045     static protected $suggestJsDrawn = false;
00046     static protected $cssDrawn = false;
00047     protected $meter;
00048     protected $suggest;
00049 
00056     public function __construct($name, Form &$parentForm, array $attribs = array())
00057     {
00058         $attribs['fields'] = array(
00059             array('PasswordField', "${name}_1", $attribs),
00060             array('PasswordField', "${name}_2", $attribs)
00061         );
00062 
00063         $attribs['arrangement'] = 'vertical';
00064 
00065         $this->meter = true;
00066         $this->suggest = false;
00067         parent::__construct($name, $parentForm, $attribs);
00068     }
00069 
00070     
00076     public function __set($name, $value)
00077     {
00078         if($name == 'meter')
00079             $this->meter = $value;
00080         elseif($name == 'suggest')
00081             $this->suggest = $value;
00082         else
00083             parent::__set($name, $value);
00084     }
00085 
00089     public function drawInput()
00090     {
00091         $this->fields[0]->onkeyup = "updatePasswordMeter('$this->name', testPasswordStrength(this.value))";
00092         parent::drawInput();
00093 
00094         if($this->suggest)
00095         {
00096             $passwords = null;
00097             exec('apg -n 5', $passwords);
00098             
00099             echo '<div class="pwdSuggest">';
00100             echo '<div style="border-bottom: 1px solid gray;">Password Suggestions</div>';
00101 
00102             foreach($passwords as $passwd)
00103                 echo "<span onclick=\"useSuggestion('$this->name', this);\" class='passwd'>$passwd</span><br/>";
00104 
00105             echo '</div>';
00106         }
00107 
00108         if($this->meter)
00109         {
00110             echo <<<EOHTML
00111             <span id='{$this->name}_meterlabel' class='pwdMeterLabel'>Password Quality:</span>
00112             <div>   
00113                 <div id='{$this->name}_meter1' class='pwdMeterInactive'></div>
00114                 <div id='{$this->name}_meter2' class='pwdMeterInactive'></div>
00115                 <div id='{$this->name}_meter3' class='pwdMeterInactive'></div>
00116                 <div id='{$this->name}_meter4' class='pwdMeterInactive'></div>
00117                 <div style="clear:both;"></div>
00118             </div>
00119 EOHTML;
00120         }
00121     }
00122 
00123     
00128     public function validate()
00129     {
00130         parent::validate();
00131         
00132         if($this->fields[0]->getData() != $this->fields[1]->getData())
00133         {
00134             $this->hasError = true;
00135             $this->errorMessage = "The passwords entered do not match";
00136 
00137             # clear the 2nd password field, and mark it as error'ed
00138             $this->fields[1]->value = null;
00139             $this->fields[1]->forceError();
00140         }
00141     }
00142 
00147     public function getData()
00148     {
00149         return $this->fields[0]->getData();
00150     }
00151 
00156     public function getSqlImpl()
00157     {
00158         # Use the first PasswordField's getSqlImpl, changing the column name to this field's name
00159         return str_replace("{$this->name}_1", $this->name, $this->fields[0]->getSqlImpl());
00160     }
00161 
00165     public function getJs()
00166     {
00167         $js = null;
00168 
00169         if(!self::$meterJsDrawn && $this->meter)
00170         {
00171             self::$meterJsDrawn = true;
00172             $js = file_get_contents('inc/form/js/passwordchange-meter.js', true); # this is going to cause troubles...
00173         }
00174 
00175         if(!self::$suggestJsDrawn && $this->suggest)
00176         {
00177             self::$suggestJsDrawn = true;
00178             $js .= file_get_contents('inc/form/js/passwordchange-suggest.js', true);
00179         }
00180 
00181         return $js;
00182     }
00183 
00184 
00189     public function getCss()
00190     {
00191         if(self::$cssDrawn)
00192             return null;
00193 
00194         self::$cssDrawn = true;
00195         return <<<EOCSS
00196             *.pwdMeterActive, *.pwdMeterInactive 
00197             {
00198                 border: 1px solid black;
00199                 height: 5px;
00200                 width: 25px;
00201                 margin: 0px 0px 3px 3px;
00202                 float: left;
00203             }
00204 
00205             *.pwdMeterActive
00206             {
00207                 background-color: green;
00208             }
00209 
00210             *.pwdMeterInactive
00211             {
00212                 background-color: grey;
00213             }
00214 
00215             *.pwdMeterLabel
00216             {
00217                 font-size: 0.8em;
00218             } 
00219 
00220             *.pwdSuggest
00221             {
00222                 border: 1px solid gray;
00223                 background-color: #FFFFCC;
00224                 width: 10em;
00225                 font-size: 0.7em;
00226             }
00227 EOCSS;
00228     }
00229 }
00230 ?>

Generated on Fri Oct 27 12:26:39 2006 for BaseJumper by doxygen 1.3.9.1