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

t3lib_matchCondition Class Reference

List of all members.

Public Member Functions

 match ($string)
 Evaluates a TypoScript condition given as input, eg.
 testNumber ($test, $value)
 Will evaluate a $value based on an operator: "<", ">" or "=" (default).
 matchWild ($haystack, $needle)
 Matching two strings against each other, supporting a "*" wildcard in either end of the $needle.
 whichDevice ($useragent)
 Returns a code for a browsing device based on the input useragent string.
 browserInfo ($useragent)
 Generates an array with abstracted browser information In the function match() this method is called and the result stored in $this->browserInfoArray.
 browserInfo_version ($tmp)
 Returns the version of a browser; Basically getting doubleval() of the input string, stripping of any non-numeric values in the beginning of the string first.
 getGlobal ($var, $inArr='')
 Return global variable where the input string $var defines array keys separated by "|".
 getGP_ENV_TSFE ($var)
 Returns GP / ENV / TSFE vars.

Public Attributes

 $matchAlternative = array()
 $matchAll = 0
 $altRootLine = array()

Member Function Documentation

t3lib_matchCondition::browserInfo useragent  ) 
 

Generates an array with abstracted browser information In the function match() this method is called and the result stored in $this->browserInfoArray.

Parameters:
string The useragent string, t3lib_div::getIndpEnv('HTTP_USER_AGENT')
Returns:
array Contains keys "browser", "version", "system" private
See also:
match()

Definition at line 413 of file class.t3lib_matchcondition.php.

References browserInfo_version().

Referenced by match().

00413                                     {
00414       $useragent = trim($useragent);
00415       $browserInfo=Array();
00416       $browserInfo['useragent']=$useragent;
00417       if ($useragent)   {
00418          // browser
00419          if (strstr($useragent,'MSIE'))   {
00420             $browserInfo['browser']='msie';
00421          } elseif(strstr($useragent,'Opera'))   {
00422             $browserInfo['browser']='opera';
00423          } elseif(strstr($useragent,'Lynx')) {
00424             $browserInfo['browser']='lynx';
00425          } elseif(strstr($useragent,'PHP'))  {
00426             $browserInfo['browser']='php';
00427          } elseif(strstr($useragent,'AvantGo')) {
00428             $browserInfo['browser']='avantgo';
00429          } elseif(strstr($useragent,'WebCapture')) {
00430             $browserInfo['browser']='acrobat';
00431          } elseif(strstr($useragent,'IBrowse')) {
00432             $browserInfo['browser']='ibrowse';
00433          } elseif(strstr($useragent,'Teleport'))   {
00434             $browserInfo['browser']='teleport';
00435          } elseif(strstr($useragent,'Mozilla')) {
00436             $browserInfo['browser']='netscape';
00437          } else {
00438             $browserInfo['browser']='unknown';
00439          }
00440          // version
00441          switch($browserInfo['browser'])  {
00442             case 'netscape':
00443                $browserInfo['version'] = $this->browserInfo_version(substr($useragent,8));
00444                if (strstr($useragent,'Netscape6')) {$browserInfo['version']=6;}
00445             break;
00446             case 'msie':
00447                $tmp = strstr($useragent,'MSIE');
00448                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,4));
00449             break;
00450             case 'opera':
00451                $tmp = strstr($useragent,'Opera');
00452                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
00453             break;
00454             case 'lynx':
00455                $tmp = strstr($useragent,'Lynx/');
00456                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
00457             break;
00458             case 'php':
00459                $tmp = strstr($useragent,'PHP/');
00460                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,4));
00461             break;
00462             case 'avantgo':
00463                $tmp = strstr($useragent,'AvantGo');
00464                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
00465             break;
00466             case 'acrobat':
00467                $tmp = strstr($useragent,'WebCapture');
00468                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
00469             break;
00470             case 'ibrowse':
00471                $tmp = strstr($useragent,'IBrowse/');
00472                $browserInfo['version'] = $this->browserInfo_version(substr($tmp,5));
00473             break;
00474          }
00475          // system
00476          $browserInfo['system']='';
00477          if (strstr($useragent,'Win')) {
00478             // windows
00479             if (strstr($useragent,'Win98') || strstr($useragent,'Windows 98'))   {
00480                $browserInfo['system']='win98';
00481             } elseif (strstr($useragent,'Win95') || strstr($useragent,'Windows 95'))   {
00482                $browserInfo['system']='win95';
00483             } elseif (strstr($useragent,'WinNT') || strstr($useragent,'Windows NT'))   {
00484                $browserInfo['system']='winNT';
00485             } elseif (strstr($useragent,'Win16') || strstr($useragent,'Windows 311'))  {
00486                $browserInfo['system']='win311';
00487             }
00488          } elseif (strstr($useragent,'Mac')) {
00489             $browserInfo['system']='mac';
00490             // unixes
00491          } elseif (strstr($useragent,'Linux'))  {
00492             $browserInfo['system']='linux';
00493          } elseif (strstr($useragent,'SGI') && strstr($useragent,' IRIX '))   {
00494             $browserInfo['system']='unix_sgi';
00495          } elseif (strstr($useragent,' SunOS '))   {
00496             $browserInfo['system']='unix_sun';
00497          } elseif (strstr($useragent,' HP-UX '))   {
00498             $browserInfo['system']='unix_hp';
00499          }
00500       }
00501 
00502       return $browserInfo;
00503    }

t3lib_matchCondition::browserInfo_version tmp  ) 
 

Returns the version of a browser; Basically getting doubleval() of the input string, stripping of any non-numeric values in the beginning of the string first.

Parameters:
string A string with version number, eg. "/7.32 blablabla"
Returns:
double Returns double value, eg. "7.32"

Definition at line 511 of file class.t3lib_matchcondition.php.

Referenced by browserInfo().

00511                                        {
00512       return doubleval(ereg_replace('^[^0-9]*','',$tmp));
00513    }

t3lib_matchCondition::getGlobal var,
inArr = ''
 

Return global variable where the input string $var defines array keys separated by "|".

Parameters:
string Global var key, eg. "HTTP_GET_VAR" or "HTTP_GET_VARS|id" to get the id GET parameter back.
array Alternative array than $GLOBAL to get variables from.
Returns:
mixed Whatever value. If none, then blank string. private

Definition at line 523 of file class.t3lib_matchcondition.php.

References $a.

Referenced by getGP_ENV_TSFE().

00523                                       {
00524       $vars = explode('|',$var);
00525       $c = count($vars);
00526       $k = trim($vars[0]);
00527       $theVar = is_array($inArr) ? $inArr[$k] : $GLOBALS[$k];
00528 
00529       for ($a=1;$a<$c;$a++) {
00530          if (!isset($theVar)) {break;}
00531          $theVar = $theVar[trim($vars[$a])];
00532       }
00533       if (!is_array($theVar)) {
00534          return $theVar;
00535       } else {
00536          return '';
00537       }
00538    }

t3lib_matchCondition::getGP_ENV_TSFE var  ) 
 

Returns GP / ENV / TSFE vars.

Parameters:
string Identifier
Returns:
mixed The value of the variable pointed to. private &tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=311&cHash=487cbd5cdf

Definition at line 548 of file class.t3lib_matchcondition.php.

References $val, and getGlobal().

Referenced by match().

00548                                  {
00549       $vars = explode(':',$var,2);
00550       if (count($vars)==1) {
00551          $val = $this->getGlobal($var);
00552       } else {
00553          $splitAgain=explode('|',$vars[1],2);
00554          $k=trim($splitAgain[0]);
00555          if ($k)  {
00556             switch((string)trim($vars[0]))   {
00557                case 'GP':
00558                   $val = t3lib_div::_GP($k);
00559                break;
00560                case 'TSFE':
00561                   $val = $GLOBALS['TSFE']->$k;
00562                break;
00563                case 'ENV':
00564                   $val = getenv($k);
00565                break;
00566                case 'IENV':
00567                   $val = t3lib_div::getIndpEnv($k);
00568                break;
00569                case 'LIT':
00570                   return trim($vars[1]);  // return litteral value...
00571                break;
00572             }
00573                // If array:
00574             if (count($splitAgain)>1)  {
00575                if (is_array($val) && trim($splitAgain[1]))  {
00576                   $val=$this->getGlobal($splitAgain[1],$val);
00577                } else {
00578                   $val='';
00579                }
00580             }
00581          }
00582       }
00583       return $val;
00584    }

t3lib_matchCondition::match string  ) 
 

Evaluates a TypoScript condition given as input, eg.

"[browser=net][...(other conditions)...]"

Parameters:
string The condition to match against its criterias.
Returns:
boolean Returns true or false based on the evaluation.
See also:
t3lib_tsparser::parse() &tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=292&cHash=c6c7d43d2f

Definition at line 91 of file class.t3lib_matchcondition.php.

References browserInfo(), getGP_ENV_TSFE(), matchWild(), testNumber(), and whichDevice().

00091                            {
00092 
00093       if ($this->matchAll) return true;
00094       if (count($this->matchAlternative)) {
00095          return in_array($string,$this->matchAlternative);
00096       }
00097 
00098       if (!$this->browserInfoArray) {
00099          $this->browserInfoArray = $this->browserInfo(t3lib_div::getIndpEnv('HTTP_USER_AGENT'));
00100       }
00101       $browserInfo = $this->browserInfoArray;
00102       $string = trim($string);
00103       $string = substr($string,1,strlen($string)-2);
00104       $parts = explode('][',$string);
00105       reset($parts);
00106       while(list(,$val)=each($parts))  {
00107          $pcs = explode('=',$val,2);
00108          $switchKey = trim($pcs[0]);
00109          switch($switchKey)   {
00110             case 'browser':
00111                $values = explode(',',$pcs[1]);
00112                while(list(,$test)=each($values))   {
00113                   if (strstr($browserInfo['browser'].$browserInfo['version'],trim($test)))   {
00114                      return true;
00115                   }
00116                }
00117             break;
00118             case 'version':
00119                $values = explode(',',$pcs[1]);
00120                while(list(,$test)=each($values))   {
00121                   $test = trim($test);
00122                   if ($test)  {
00123                      if (strcspn($test,'=<>')==0)  {
00124                         switch(substr($test,0,1))  {
00125                            case '=':
00126                               if (doubleval(substr($test,1))==$browserInfo['version']) return true;
00127                            break;
00128                            case '<':
00129                               if (doubleval(substr($test,1))>$browserInfo['version'])  return true;
00130                            break;
00131                            case '>':
00132                               if (doubleval(substr($test,1))<$browserInfo['version'])  return true;
00133                            break;
00134                         }
00135                      } else {
00136                         if (strpos(' '.$browserInfo['version'],$test)==1)  {return true;}
00137                      }
00138                   }
00139                }
00140             break;
00141             case 'system':
00142                $values = explode(',',$pcs[1]);
00143                while(list(,$test)=each($values))   {
00144                   $test = trim($test);
00145                   if ($test)  {
00146                      if (strpos(' '.$browserInfo['system'],$test)==1)   {return true;}
00147                   }
00148                }
00149             break;
00150             case 'device':
00151                $values = explode(',',$pcs[1]);
00152                if (!isset($this->deviceInfo))   {
00153                   $this->deviceInfo = $this->whichDevice(t3lib_div::getIndpEnv('HTTP_USER_AGENT'));
00154                }
00155                while(list(,$test)=each($values))   {
00156                   $test = trim($test);
00157                   if ($test)  {
00158                      if ($this->deviceInfo==$test) {return true;}
00159                   }
00160                }
00161             break;
00162             case 'useragent':
00163                $test = trim($pcs[1]);
00164                if ($test)  {
00165                   return $this->matchWild($browserInfo['useragent'],$test);
00166                }
00167             break;
00168             case 'language':
00169                $values = explode(',',$pcs[1]);
00170                while(list(,$test)=each($values))   {
00171                   $test = trim($test);
00172                   if ($test)  {
00173                      if (ereg('^\*.+\*$',$test))   {
00174                         $allLanguages = split('[,;]',t3lib_div::getIndpEnv('HTTP_ACCEPT_LANGUAGE'));
00175                         if (in_array(substr($test,1,-1), $allLanguages))   {return true;}
00176                      } else {
00177                         if (t3lib_div::getIndpEnv('HTTP_ACCEPT_LANGUAGE') == $test) {return true;}
00178                      }
00179                   }
00180                }
00181             break;
00182             case 'IP':
00183                if (t3lib_div::cmpIP(t3lib_div::getIndpEnv('REMOTE_ADDR'), $pcs[1])) {return true;}
00184             break;
00185             case 'hostname':
00186                if (t3lib_div::cmpFQDN(t3lib_div::getIndpEnv('REMOTE_ADDR'), $pcs[1]))  {return true;}
00187             break;
00188                // hour, minute, dayofweek, dayofmonth, month
00189             case 'hour':
00190             case 'minute':
00191             case 'dayofweek':
00192             case 'dayofmonth':
00193             case 'month':
00194                $theEvalTime = $GLOBALS['SIM_EXEC_TIME']; // In order to simulate time properly in templates.
00195                switch($switchKey)   {
00196                   case 'hour':      $theTestValue = date('H',$theEvalTime);   break;
00197                   case 'minute':    $theTestValue = date('i',$theEvalTime);   break;
00198                   case 'dayofweek': $theTestValue = date('w',$theEvalTime);   break;
00199                   case 'dayofmonth':   $theTestValue = date('d',$theEvalTime);   break;
00200                   case 'month':     $theTestValue = date('m',$theEvalTime);   break;
00201                }
00202                $theTestValue = intval($theTestValue);
00203                   // comp
00204                $values = explode(',',$pcs[1]);
00205                reset($values);
00206                while(list(,$test)=each($values))   {
00207                   $test = trim($test);
00208                   if (t3lib_div::testInt($test))   {$test='='.$test;}
00209                   if ($test)  {
00210                      if ($this->testNumber($test,$theTestValue)) {return true;}
00211                   }
00212                }
00213             break;
00214             case 'usergroup':
00215                if ($GLOBALS['TSFE']->gr_list!='0,-1') {     // '0,-1' is the default usergroups when not logged in!
00216                   $values = explode(',',$pcs[1]);
00217                   while(list(,$test)=each($values))   {
00218                      $test = trim($test);
00219                      if ($test)  {
00220                         if ($test=='*' || t3lib_div::inList($GLOBALS['TSFE']->gr_list,$test))   {return true;}
00221                      }
00222                   }
00223                }
00224             break;
00225             case 'loginUser':
00226                if ($GLOBALS['TSFE']->loginUser) {
00227                   $values = explode(',',$pcs[1]);
00228                   while(list(,$test)=each($values))   {
00229                      $test = trim($test);
00230                      if ($test)  {
00231                         if ($test=='*' || !strcmp($GLOBALS['TSFE']->fe_user->user['uid'],$test))   {return true;}
00232                      }
00233                   }
00234                }
00235             break;
00236             case 'globalVar':
00237                $values = explode(',',$pcs[1]);
00238                while(list(,$test)=each($values))   {
00239                   $test = trim($test);
00240                   if ($test)  {
00241                      $point = strcspn($test,'=<>');
00242                      $theVarName = substr($test,0,$point);
00243                      $nv = $this->getGP_ENV_TSFE(trim($theVarName));
00244                      if ($this->testNumber(substr($test,$point) ,$nv)) {return true;}
00245                   }
00246                }
00247             break;
00248             case 'globalString':
00249                $values = explode(',',$pcs[1]);
00250                while(list(,$test)=each($values))   {
00251                   $test = trim($test);
00252                   if ($test)  {
00253                      $point = strcspn($test,'=');
00254                      $theVarName = substr($test,0,$point);
00255                      $nv = $this->getGP_ENV_TSFE(trim($theVarName));
00256                      if ($this->matchWild($nv,trim(substr($test,$point+1)))) {return true;}
00257                   }
00258                }
00259             break;
00260             case 'treeLevel':
00261                $values = explode(',',$pcs[1]);
00262                $theRootLine = is_array($GLOBALS['TSFE']->tmpl->rootLine) ? $GLOBALS['TSFE']->tmpl->rootLine : $this->altRootLine;
00263                $theRLC = count($theRootLine)-1;
00264                while(list(,$test)=each($values))   {
00265                   $test = trim($test);
00266                   if ($test==$theRLC)  {  return true;   }
00267                }
00268             break;
00269             case 'PIDupinRootline':
00270             case 'PIDinRootline':
00271                $values = explode(',',$pcs[1]);
00272                if (($switchKey=='PIDinRootline') || (!in_array($GLOBALS['TSFE']->id,$values))) {
00273                   $theRootLine = is_array($GLOBALS['TSFE']->tmpl->rootLine) ? $GLOBALS['TSFE']->tmpl->rootLine : $this->altRootLine;
00274                   reset($values);
00275                   while(list(,$test)=each($values))   {
00276                      $test = trim($test);
00277                      reset($theRootLine);
00278                      while(list($rl_key,$rl_dat)=each($theRootLine)) {
00279                         if ($rl_dat['uid']==$test) {  return true;   }
00280                      }
00281                   }
00282                }
00283             break;
00284             case 'userFunc':
00285                $values = split('\(|\)',$pcs[1]);
00286                $funcName=trim($values[0]);
00287                $funcValue = t3lib_div::trimExplode(',',$values[1]);
00288                $pre = $GLOBALS['TSFE']->TYPO3_CONF_VARS['FE']['userFuncClassPrefix'];
00289                if ($pre &&
00290                   !t3lib_div::isFirstPartOfStr(trim($funcName),$pre) &&
00291                   !t3lib_div::isFirstPartOfStr(trim($funcName),'tx_')
00292                   )  {
00293                   if (is_object($GLOBALS['TT']))   $GLOBALS['TT']->setTSlogMessage('Match condition: Function "'.$funcName.'" was not prepended with "'.$pre.'"',3);
00294                   return false;
00295                }
00296                if (function_exists($funcName) && call_user_func($funcName, $funcValue[0]))   {
00297                   return true;
00298                }
00299             break;
00300          }
00301       }
00302    }

t3lib_matchCondition::matchWild haystack,
needle
 

Matching two strings against each other, supporting a "*" wildcard in either end of the $needle.

Parameters:
string The string in which to find $needle.
string The string to find in $haystack
Returns:
boolean Returns true if $needle matches or is found in (according to wildcards) in $haystack. Eg. if $haystack is "Netscape 6.5" and $needle is "Net*" or "Netscape*" then it returns true.

Definition at line 333 of file class.t3lib_matchcondition.php.

Referenced by match().

00333                                           {
00334       if ($needle && $haystack)  {
00335          if (substr($needle,0,1)=='*') {$mode.='before';}
00336          if (substr($needle,-1,1)=='*')   {$mode.='after';}
00337          switch($mode)  {
00338             case 'before':
00339                $matchStr = substr($needle,1);
00340                if (substr($haystack,-strlen($matchStr))==$matchStr) return true;
00341             break;
00342             case 'after':
00343                if (strpos(' '.$haystack,substr($needle,0,-1))==1) return true;
00344             break;
00345             case 'beforeafter':
00346                if (strstr($haystack,substr($needle,1,-1)))  return true;
00347             break;
00348             default:
00349                if ($needle==$haystack) return true;
00350             break;
00351          }
00352       }
00353    }

t3lib_matchCondition::testNumber test,
value
 

Will evaluate a $value based on an operator: "<", ">" or "=" (default).

Parameters:
string The value to compare with on the form [operator][number]. Eg. "< 123"
integer The number
Returns:
boolean If $value is "50" and $test is "< 123" then it will return true.

Definition at line 311 of file class.t3lib_matchcondition.php.

Referenced by match().

00311                                      {
00312       $test = trim($test);
00313       switch(substr($test,0,1))  {
00314          case '<':
00315             if (doubleval(substr($test,1))>$value) return true;
00316          break;
00317          case '>':
00318             if (doubleval(substr($test,1))<$value) return true;
00319          break;
00320          default:
00321             if (trim(substr($test,1))==$value)  return true;
00322          break;
00323       }
00324    }

t3lib_matchCondition::whichDevice useragent  ) 
 

Returns a code for a browsing device based on the input useragent string.

Parameters:
string User agent string from browser, t3lib_div::getIndpEnv('HTTP_USER_AGENT')
Returns:
string A code. See link. private &tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=296&cHash=a8ae66c7d6

Definition at line 363 of file class.t3lib_matchcondition.php.

Referenced by match().

00363                                     {
00364       $agent=strtolower(trim($useragent));
00365          // pda
00366       if(   strstr($agent, 'avantgo')) {
00367          return 'pda';
00368       }
00369 
00370          // wap
00371       $browser=substr($agent,0,4);
00372       $wapviwer=substr(stristr($agent,'wap'),0,3);
00373       if(   $wapviwer=='wap' ||
00374          $browser=='noki' ||
00375          $browser== 'eric' ||
00376          $browser== 'r380' ||
00377          $browser== 'up.b' ||
00378          $browser== 'winw' ||
00379          $browser== 'wapa')   {
00380             return 'wap';
00381       }
00382 
00383          // grabber
00384       if(   strstr($agent, 'g.r.a.b.') ||
00385          strstr($agent, 'utilmind httpget') ||
00386          strstr($agent, 'webcapture') ||
00387          strstr($agent, 'teleport') ||
00388          strstr($agent, 'webcopier'))  {
00389          return 'grabber';
00390       }
00391 
00392          // robots
00393       if(   strstr($agent, 'crawler') ||
00394          strstr($agent, 'spider') ||
00395          strstr($agent, 'googlebot') ||
00396          strstr($agent, 'searchbot') ||
00397          strstr($agent, 'infoseek') ||
00398          strstr($agent, 'altavista') ||
00399          strstr($agent, 'diibot'))  {
00400          return 'robot';
00401       }
00402    }


Member Data Documentation

t3lib_matchCondition::$altRootLine = array()
 

Definition at line 81 of file class.t3lib_matchcondition.php.

t3lib_matchCondition::$matchAll = 0
 

Definition at line 79 of file class.t3lib_matchcondition.php.

t3lib_matchCondition::$matchAlternative = array()
 

Definition at line 78 of file class.t3lib_matchcondition.php.


The documentation for this class was generated from the following file:
Generated on Sun Oct 3 01:07:00 2004 for TYPO3core 3.7.0 dev by  doxygen 1.3.8-20040913