ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilCaptchaUtil.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
12 {
13  const CONTEXT_FORUM = 'frm';
14  const CONTEXT_LOGIN = 'auth';
15  const CONTEXT_REGISTRATION = 'reg';
16  const CONTEXT_WIKI = 'wiki';
17 
21  protected static $context_map;
22 
27  public static function checkFreetype()
28  {
29  if(function_exists('imageftbbox'))
30  {
31  return true;
32  }
33  return false;
34  }
35 
42  public static function __callStatic($name, array $arguments = array())
43  {
44  if(
45  strpos($name, 'isActiveFor') === 0 ||
46  strpos($name, 'setActiveFor') === 0
47  )
48  {
49  $settings = new ilSetting('cptch');
50  $supported_contexts = self::getSupportedContexts();
51  $method_parts = explode('_', strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $name)));
52  $requested_context = strtolower($method_parts[count($method_parts) - 1]);
53  if(!isset($requested_context, self::$context_map))
54  {
55  throw new BadMethodCallException('Method ' . $name . ' called for a non existing context.');
56  }
57 
58  if('set' == $method_parts[0])
59  {
60  $settings->set('activate_captcha_anonym_' . $supported_contexts[$requested_context], (int)$arguments[0]);
61  return;
62  }
63  else
64  {
65  return self::checkFreetype() && (bool)$settings->get('activate_captcha_anonym_' . $supported_contexts[$requested_context], false);
66  }
67  }
68  else
69  {
70  throw new BadMethodCallException('Call to an undefined static method ' . $name . ' in class ' . __CLASS__ . '.');
71  }
72  }
73 
77  public static function getPreconditionsMessage()
78  {
82  global $lng;
83 
84  $lng->loadLanguageModule('cptch');
85  return "<a target='_blank' href='http://php.net/manual/en/image.installation.php'>" . $lng->txt('cptch_freetype_support_needed') . "</a>";
86  }
87 
91  private static function getSupportedContexts()
92  {
93  if(null !== self::$context_map)
94  {
95  return self::$context_map;
96  }
97 
98  self::$context_map = array();
99 
100  $r = new ReflectionClass(new self());
101  $constants = $r->getConstants();
102  foreach($constants as $name => $value)
103  {
104  if(strpos($name, 'CONTEXT_') === 0)
105  {
106  self::$context_map[strtolower(substr($name, strlen('CONTEXT_')))] = $value;
107  }
108  }
109 
110  return self::$context_map;
111  }
112 }