Grav\Plugin\Admin\Admin::data PHP Метод

data() публичный Метод

Gets configuration data.
public data ( string $type, array $post = [] ) : mixed
$type string
$post array
Результат mixed
    public function data($type, array $post = [])
    {
        static $data = [];
        if (isset($data[$type])) {
            return $data[$type];
        }
        if (!$post) {
            $post = isset($_POST['data']) ? $_POST['data'] : [];
        }
        // Check to see if a data type is plugin-provided, before looking into core ones
        $event = $this->grav->fireEvent('onAdminData', new Event(['type' => &$type]));
        if ($event && isset($event['data_type'])) {
            return $event['data_type'];
        }
        /** @var UniformResourceLocator $locator */
        $locator = $this->grav['locator'];
        $filename = $locator->findResource("config://{$type}.yaml", true, true);
        $file = CompiledYamlFile::instance($filename);
        if (preg_match('|plugins/|', $type)) {
            /** @var Plugins $plugins */
            $plugins = $this->grav['plugins'];
            $obj = $plugins->get(preg_replace('|plugins/|', '', $type));
            if (!$obj) {
                return [];
            }
            $obj->merge($post);
            $obj->file($file);
            $data[$type] = $obj;
        } elseif (preg_match('|themes/|', $type)) {
            /** @var Themes $themes */
            $themes = $this->grav['themes'];
            $obj = $themes->get(preg_replace('|themes/|', '', $type));
            if (!$obj) {
                return [];
            }
            $obj->merge($post);
            $obj->file($file);
            $data[$type] = $obj;
        } elseif (preg_match('|users/|', $type)) {
            $obj = User::load(preg_replace('|users/|', '', $type));
            $obj->merge($post);
            $data[$type] = $obj;
        } elseif (preg_match('|user/|', $type)) {
            $obj = User::load(preg_replace('|user/|', '', $type));
            $obj->merge($post);
            $data[$type] = $obj;
        } elseif (preg_match('|config/|', $type)) {
            $type = preg_replace('|config/|', '', $type);
            $blueprints = $this->blueprints("config/{$type}");
            $config = $this->grav['config'];
            $obj = new Data\Data($config->get($type, []), $blueprints);
            $obj->merge($post);
            // FIXME: We shouldn't allow user to change configuration files in system folder!
            $filename = $this->grav['locator']->findResource("config://{$type}.yaml") ?: $this->grav['locator']->findResource("config://{$type}.yaml", true, true);
            $file = CompiledYamlFile::instance($filename);
            $obj->file($file);
            $data[$type] = $obj;
        } else {
            throw new \RuntimeException("Data type '{$type}' doesn't exist!");
        }
        return $data[$type];
    }

Usage Example

 /**
  * Handle deleting a file from a blueprint
  *
  * @return bool True if the action was performed.
  */
 protected function taskRemoveFileFromBlueprint()
 {
     $uri = $this->grav['uri'];
     $blueprint = base64_decode($uri->param('blueprint'));
     $path = base64_decode($uri->param('path'));
     $proute = base64_decode($uri->param('proute'));
     $type = $uri->param('type');
     $field = $uri->param('field');
     $event = $this->grav->fireEvent('onAdminCanSave', new Event(['controller' => &$this]));
     if (!$event['can_save']) {
         return false;
     }
     $this->taskRemoveMedia();
     if ($type == 'pages') {
         $page = $this->admin->page(true, $proute);
         $keys = explode('.', preg_replace('/^header./', '', $field));
         $header = (array) $page->header();
         $data_path = implode('.', $keys);
         $data = Utils::getDotNotation($header, $data_path);
         if (isset($data[$path])) {
             unset($data[$path]);
             Utils::setDotNotation($header, $data_path, $data);
             $page->header($header);
         }
         $page->save();
     } else {
         $blueprint_prefix = $type == 'config' ? '' : $type . '.';
         $blueprint_name = str_replace('/blueprints', '', str_replace('config/', '', $blueprint));
         $blueprint_field = $blueprint_prefix . $blueprint_name . '.' . $field;
         $files = $this->grav['config']->get($blueprint_field);
         if ($files) {
             foreach ($files as $key => $value) {
                 if ($key == $path) {
                     unset($files[$key]);
                 }
             }
         }
         $this->grav['config']->set($blueprint_field, $files);
         switch ($type) {
             case 'config':
                 $data = $this->grav['config']->get($blueprint_name);
                 $config = $this->admin->data($blueprint, $data);
                 $config->save();
                 break;
             case 'themes':
                 Theme::saveConfig($blueprint_name);
                 break;
             case 'plugins':
                 Plugin::saveConfig($blueprint_name);
                 break;
         }
     }
     $this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.REMOVE_SUCCESSFUL')];
     return true;
 }
All Usage Examples Of Grav\Plugin\Admin\Admin::data