HTMLPurifier_Config::prepareArrayFromForm PHP Method

prepareArrayFromForm() public static method

Prepares an array from a form into something usable for the more strict parts of HTMLPurifier_Config
public static prepareArrayFromForm ( array $array, string | boolean $index = false, array | boolean $allowed = true, boolean $mq_fix = true, HTMLPurifier_ConfigSchema $schema = null ) : array
$array array $_GET or $_POST array to import
$index string | boolean Index/name that the config variables are in
$allowed array | boolean List of allowed namespaces/directives
$mq_fix boolean Boolean whether or not to enable magic quotes fix
$schema HTMLPurifier_ConfigSchema Schema to use, if not global copy
return array
    public static function prepareArrayFromForm($array, $index = false, $allowed = true, $mq_fix = true, $schema = null)
    {
        if ($index !== false) {
            $array = isset($array[$index]) && is_array($array[$index]) ? $array[$index] : array();
        }
        $mq = $mq_fix && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc();
        $allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema);
        $ret = array();
        foreach ($allowed as $key) {
            list($ns, $directive) = $key;
            $skey = "{$ns}.{$directive}";
            if (!empty($array["Null_{$skey}"])) {
                $ret[$ns][$directive] = null;
                continue;
            }
            if (!isset($array[$skey])) {
                continue;
            }
            $value = $mq ? stripslashes($array[$skey]) : $array[$skey];
            $ret[$ns][$directive] = $value;
        }
        return $ret;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * @Route("/purifierconfig")
  * @Method("POST")
  *
  * Update HTMLPurifier configuration.
  *
  * @param Request $request
  *
  * @return RedirectResponse
  *
  * @throws AccessDeniedException Thrown if the user doesn't have admin access to the module
  */
 public function updatepurifierconfigAction(Request $request)
 {
     $this->checkCsrfToken();
     // Security check
     if (!SecurityUtil::checkPermission('ZikulaSecurityCenterModule::', '::', ACCESS_ADMIN)) {
         throw new AccessDeniedException();
     }
     // Load HTMLPurifier Classes
     $purifier = SecurityCenterUtil::getpurifier();
     // Update module variables.
     $config = $request->request->get('purifierConfig', null);
     $config = \HTMLPurifier_Config::prepareArrayFromForm($config, false, true, true, $purifier->config->def);
     $allowed = \HTMLPurifier_Config::getAllowedDirectivesForForm(true, $purifier->config->def);
     foreach ($allowed as $allowedDirective) {
         list($namespace, $directive) = $allowedDirective;
         $directiveKey = $namespace . '.' . $directive;
         $def = $purifier->config->def->info[$directiveKey];
         if (isset($config[$namespace]) && array_key_exists($directive, $config[$namespace]) && is_null($config[$namespace][$directive])) {
             unset($config[$namespace][$directive]);
             if (count($config[$namespace]) <= 0) {
                 unset($config[$namespace]);
             }
         }
         if (isset($config[$namespace]) && isset($config[$namespace][$directive])) {
             if (is_int($def)) {
                 $directiveType = abs($def);
             } else {
                 $directiveType = isset($def->type) ? $def->type : 0;
             }
             switch ($directiveType) {
                 case \HTMLPurifier_VarParser::LOOKUP:
                     $value = explode(PHP_EOL, $config[$namespace][$directive]);
                     $config[$namespace][$directive] = array();
                     foreach ($value as $val) {
                         $val = trim($val);
                         if (!empty($val)) {
                             $config[$namespace][$directive][$val] = true;
                         }
                     }
                     if (empty($config[$namespace][$directive])) {
                         unset($config[$namespace][$directive]);
                     }
                     break;
                 case \HTMLPurifier_VarParser::ALIST:
                     $value = explode(PHP_EOL, $config[$namespace][$directive]);
                     $config[$namespace][$directive] = array();
                     foreach ($value as $val) {
                         $val = trim($val);
                         if (!empty($val)) {
                             $config[$namespace][$directive][] = $val;
                         }
                     }
                     if (empty($config[$namespace][$directive])) {
                         unset($config[$namespace][$directive]);
                     }
                     break;
                 case \HTMLPurifier_VarParser::HASH:
                     $value = explode(PHP_EOL, $config[$namespace][$directive]);
                     $config[$namespace][$directive] = array();
                     foreach ($value as $val) {
                         list($i, $v) = explode(':', $val);
                         $i = trim($i);
                         $v = trim($v);
                         if (!empty($i) && !empty($v)) {
                             $config[$namespace][$directive][$i] = $v;
                         }
                     }
                     if (empty($config[$namespace][$directive])) {
                         unset($config[$namespace][$directive]);
                     }
                     break;
             }
         }
         if (isset($config[$namespace]) && array_key_exists($directive, $config[$namespace]) && is_null($config[$namespace][$directive])) {
             unset($config[$namespace][$directive]);
             if (count($config[$namespace]) <= 0) {
                 unset($config[$namespace]);
             }
         }
     }
     $this->setVar('htmlpurifierConfig', serialize($config));
     // clear all cache and compile directories
     ModUtil::apiFunc('ZikulaSettingsModule', 'admin', 'clearallcompiledcaches');
     // the module configuration has been updated successfuly
     $request->getSession()->getFlashBag()->add('status', $this->__('Done! Saved HTMLPurifier configuration.'));
     return new RedirectResponse($this->get('router')->generate('zikulasecuritycentermodule_admin_modifyconfig', array(), RouterInterface::ABSOLUTE_URL));
 }
All Usage Examples Of HTMLPurifier_Config::prepareArrayFromForm