xref: /plugin/combo/ComboStrap/MetaManagerForm.php (revision c3437056399326d621a01da73b649707fbb0ae69)
1*c3437056SNickeau<?php
2*c3437056SNickeau
3*c3437056SNickeau
4*c3437056SNickeaunamespace ComboStrap;
5*c3437056SNickeau
6*c3437056SNickeau
7*c3437056SNickeauuse ModificationDate;
8*c3437056SNickeauuse ReplicationDate;
9*c3437056SNickeauuse Slug;
10*c3437056SNickeau
11*c3437056SNickeauclass MetaManagerForm
12*c3437056SNickeau{
13*c3437056SNickeau
14*c3437056SNickeau    public const TAB_PAGE_VALUE = "page";
15*c3437056SNickeau    public const TAB_TYPE_VALUE = "type";
16*c3437056SNickeau    public const TAB_CACHE_VALUE = "cache";
17*c3437056SNickeau    public const TAB_REDIRECTION_VALUE = "redirection";
18*c3437056SNickeau    public const TAB_LANGUAGE_VALUE = "language";
19*c3437056SNickeau    public const TAB_INTEGRATION_VALUE = "integration";
20*c3437056SNickeau    public const TAB_QUALITY_VALUE = "quality";
21*c3437056SNickeau    public const TAB_IMAGE_VALUE = "image";
22*c3437056SNickeau    private $page;
23*c3437056SNickeau
24*c3437056SNickeau    private const FORM_METADATA_LIST = [ResourceName::PROPERTY_NAME,
25*c3437056SNickeau        PageTitle::PROPERTY_NAME,
26*c3437056SNickeau        PageH1::PROPERTY_NAME,
27*c3437056SNickeau        PageDescription::PROPERTY_NAME,
28*c3437056SNickeau        PageKeywords::PROPERTY_NAME,
29*c3437056SNickeau        PagePath::PROPERTY_NAME,
30*c3437056SNickeau        Canonical::PROPERTY_NAME,
31*c3437056SNickeau        Slug::PROPERTY_NAME,
32*c3437056SNickeau        PageUrlPath::PROPERTY_NAME,
33*c3437056SNickeau        PageLayout::PROPERTY_NAME,
34*c3437056SNickeau        ModificationDate::PROPERTY_NAME,
35*c3437056SNickeau        PageCreationDate::PROPERTY_NAME,
36*c3437056SNickeau        PageImages::PROPERTY_NAME,
37*c3437056SNickeau        Aliases::PROPERTY_NAME,
38*c3437056SNickeau        PageType::PROPERTY_NAME,
39*c3437056SNickeau        PagePublicationDate::PROPERTY_NAME,
40*c3437056SNickeau        StartDate::PROPERTY_NAME,
41*c3437056SNickeau        EndDate::PROPERTY_NAME,
42*c3437056SNickeau        LdJson::PROPERTY_NAME,
43*c3437056SNickeau        LowQualityPageOverwrite::PROPERTY_NAME,
44*c3437056SNickeau        QualityDynamicMonitoringOverwrite::PROPERTY_NAME,
45*c3437056SNickeau        Locale::PROPERTY_NAME,
46*c3437056SNickeau        Lang::PROPERTY_NAME,
47*c3437056SNickeau        Region::PROPERTY_NAME,
48*c3437056SNickeau        ReplicationDate::PROPERTY_NAME,
49*c3437056SNickeau        PageId::PROPERTY_NAME,
50*c3437056SNickeau        CacheExpirationFrequency::PROPERTY_NAME,
51*c3437056SNickeau        CacheExpirationDate::PROPERTY_NAME
52*c3437056SNickeau    ];
53*c3437056SNickeau
54*c3437056SNickeau    /**
55*c3437056SNickeau     * @var MetadataFormDataStore
56*c3437056SNickeau     */
57*c3437056SNickeau    private $targetFormDataStore;
58*c3437056SNickeau
59*c3437056SNickeau    /**
60*c3437056SNickeau     * MetaManager constructor.
61*c3437056SNickeau     */
62*c3437056SNickeau    public function __construct($page)
63*c3437056SNickeau    {
64*c3437056SNickeau        $this->page = $page;
65*c3437056SNickeau        $this->targetFormDataStore = MetadataFormDataStore::getOrCreateFromResource($page);
66*c3437056SNickeau    }
67*c3437056SNickeau
68*c3437056SNickeau    public static function createForPage(Page $page): MetaManagerForm
69*c3437056SNickeau    {
70*c3437056SNickeau        return new MetaManagerForm($page);
71*c3437056SNickeau    }
72*c3437056SNickeau
73*c3437056SNickeau    /**
74*c3437056SNickeau     * @return FormMeta
75*c3437056SNickeau     */
76*c3437056SNickeau    function toFormMeta(): FormMeta
77*c3437056SNickeau    {
78*c3437056SNickeau
79*c3437056SNickeau        /**
80*c3437056SNickeau         * Case when the page was changed externally
81*c3437056SNickeau         * with a new frontmatter
82*c3437056SNickeau         * The frontmatter data should be first replicated into the metadata file
83*c3437056SNickeau         */
84*c3437056SNickeau        $instructions = $this->page->getInstructionsDocument();
85*c3437056SNickeau        if (!$instructions->shouldProcess()) {
86*c3437056SNickeau            $instructions->process();
87*c3437056SNickeau        }
88*c3437056SNickeau
89*c3437056SNickeau        /**
90*c3437056SNickeau         * Creation
91*c3437056SNickeau         */
92*c3437056SNickeau        $formMeta = FormMeta::create($this->page->getDokuwikiId())
93*c3437056SNickeau            ->setType(FormMeta::FORM_NAV_TABS_TYPE);
94*c3437056SNickeau
95*c3437056SNickeau
96*c3437056SNickeau        /**
97*c3437056SNickeau         * The manager
98*c3437056SNickeau         */
99*c3437056SNickeau        $dokuwikiFsStore = MetadataDokuWikiStore::getOrCreateFromResource($this->page);
100*c3437056SNickeau        foreach (self::FORM_METADATA_LIST as $formsMetaDatum) {
101*c3437056SNickeau
102*c3437056SNickeau            $metadata = Metadata::getForName($formsMetaDatum);
103*c3437056SNickeau            if ($metadata === null) {
104*c3437056SNickeau                LogUtility::msg("The metadata ($formsMetaDatum} was not found");
105*c3437056SNickeau                continue;
106*c3437056SNickeau            }
107*c3437056SNickeau            $metadata
108*c3437056SNickeau                ->setResource($this->page)
109*c3437056SNickeau                ->setReadStore($dokuwikiFsStore)
110*c3437056SNickeau                ->buildFromReadStore()
111*c3437056SNickeau                ->setWriteStore($this->targetFormDataStore);
112*c3437056SNickeau            $formMeta->addFormFieldFromMetadata($metadata);
113*c3437056SNickeau        }
114*c3437056SNickeau
115*c3437056SNickeau
116*c3437056SNickeau        /**
117*c3437056SNickeau         * Tabs (for whatever reason, javascript keep the order of the properties
118*c3437056SNickeau         * and therefore the order of the tabs)
119*c3437056SNickeau         */
120*c3437056SNickeau        $formMeta
121*c3437056SNickeau            ->addTab(
122*c3437056SNickeau                FormMetaTab::create(self::TAB_PAGE_VALUE)
123*c3437056SNickeau                    ->setLabel("Page")
124*c3437056SNickeau                    ->setWidthLabel(3)
125*c3437056SNickeau                    ->setWidthField(9)
126*c3437056SNickeau            )
127*c3437056SNickeau            ->addTab(
128*c3437056SNickeau                FormMetaTab::create(self::TAB_TYPE_VALUE)
129*c3437056SNickeau                    ->setLabel("Page Type")
130*c3437056SNickeau                    ->setWidthLabel(3)
131*c3437056SNickeau                    ->setWidthField(9)
132*c3437056SNickeau            )
133*c3437056SNickeau            ->addTab(
134*c3437056SNickeau                FormMetaTab::create(self::TAB_REDIRECTION_VALUE)
135*c3437056SNickeau                    ->setLabel("Redirection")
136*c3437056SNickeau                    ->setWidthLabel(3)
137*c3437056SNickeau                    ->setWidthField(9)
138*c3437056SNickeau            )
139*c3437056SNickeau            ->addTab(
140*c3437056SNickeau                FormMetaTab::create(self::TAB_IMAGE_VALUE)
141*c3437056SNickeau                    ->setLabel("Image")
142*c3437056SNickeau                    ->setWidthField(12)
143*c3437056SNickeau            )
144*c3437056SNickeau            ->addTab(
145*c3437056SNickeau                FormMetaTab::create(self::TAB_QUALITY_VALUE)
146*c3437056SNickeau                    ->setLabel("Quality")
147*c3437056SNickeau                    ->setWidthLabel(6)
148*c3437056SNickeau                    ->setWidthField(6)
149*c3437056SNickeau            )->addTab(
150*c3437056SNickeau                FormMetaTab::create(self::TAB_LANGUAGE_VALUE)
151*c3437056SNickeau                    ->setLabel("Language")
152*c3437056SNickeau                    ->setWidthLabel(2)
153*c3437056SNickeau                    ->setWidthField(10)
154*c3437056SNickeau            )->addTab(
155*c3437056SNickeau                FormMetaTab::create(self::TAB_INTEGRATION_VALUE)
156*c3437056SNickeau                    ->setLabel("Integration")
157*c3437056SNickeau                    ->setWidthLabel(4)
158*c3437056SNickeau                    ->setWidthField(8)
159*c3437056SNickeau            )->addTab(
160*c3437056SNickeau                FormMetaTab::create(self::TAB_CACHE_VALUE)
161*c3437056SNickeau                    ->setLabel("Cache")
162*c3437056SNickeau                    ->setWidthLabel(6)
163*c3437056SNickeau                    ->setWidthField(6)
164*c3437056SNickeau            );
165*c3437056SNickeau
166*c3437056SNickeau
167*c3437056SNickeau        return $formMeta;
168*c3437056SNickeau
169*c3437056SNickeau    }
170*c3437056SNickeau
171*c3437056SNickeau
172*c3437056SNickeau    public function toFormData(): array
173*c3437056SNickeau    {
174*c3437056SNickeau        return $this->toFormMeta()->toFormData();
175*c3437056SNickeau    }
176*c3437056SNickeau
177*c3437056SNickeau
178*c3437056SNickeau}
179