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