/** * Generate pages (form and templates) specified in the list. */ public static function generatePages($pageSchemaObj, $selectedPages) { global $wgUser; $psFormItems = $pageSchemaObj->getFormItemsList(); $form_items = array(); $jobs = array(); $templateHackUsed = false; $isCategoryNameSet = false; // Generate every specified template foreach ($psFormItems as $psFormItem) { if ($psFormItem['type'] == 'Template') { $psTemplate = $psFormItem['item']; $templateName = $psTemplate->getName(); $templateTitle = Title::makeTitleSafe(NS_TEMPLATE, $templateName); $fullTemplateName = PageSchemas::titleString($templateTitle); $template_fields = self::getFieldsFromTemplateSchema($psTemplate); // Get property for use in either #set_internal // or #subobject, defined by either SIO's or // SMW's Page Schemas portion. We don't need // to record which one it came from, because // SF's code to generate the template runs its // own, similar check. // @TODO - $internalObjProperty should probably // have a more generic name. if (class_exists('SIOPageSchemas')) { $internalObjProperty = SIOPageSchemas::getInternalObjectPropertyName($psTemplate); } elseif (method_exists('SMWPageSchemas', 'getConnectingPropertyName')) { $internalObjProperty = SMWPageSchemas::getConnectingPropertyName($psTemplate); } else { $internalObjProperty = null; } // TODO - actually, the category-setting should be // smarter than this: if there's more than one // template in the schema, it should probably be only // the first non-multiple template that includes the // category tag. if ($psTemplate->isMultiple()) { $categoryName = null; } else { if ($isCategoryNameSet == false) { $categoryName = $pageSchemaObj->getCategoryName(); $isCategoryNameSet = true; } else { $categoryName = null; } } if (method_exists($psTemplate, 'getFormat')) { $templateFormat = $psTemplate->getFormat(); } else { $templateFormat = null; } $sfTemplate = new SFTemplate($templateName, $template_fields); $sfTemplate->setConnectingProperty($internalObjProperty); $sfTemplate->setCategoryName($categoryName); $sfTemplate->setFormat($templateFormat); // Set Cargo table, if one was set in the schema. $cargoArray = $psTemplate->getObject('cargo_TemplateDetails'); if (!is_null($cargoArray)) { $sfTemplate->mCargoTable = PageSchemas::getValueFromObject($cargoArray, 'Table'); } $templateText = $sfTemplate->createText(); if (in_array($fullTemplateName, $selectedPages)) { $params = array(); $params['user_id'] = $wgUser->getId(); $params['page_text'] = $templateText; $jobs[] = new PSCreatePageJob($templateTitle, $params); if (strpos($templateText, '{{!}}') > 0) { $templateHackUsed = true; } } $templateValues = self::getTemplateValues($psTemplate); if (array_key_exists('Label', $templateValues)) { $templateLabel = $templateValues['Label']; } else { $templateLabel = null; } $form_fields = self::getFormFieldInfo($psTemplate, $template_fields); // Create template info for form, for use in generating // the form (if it will be generated). $form_template = SFTemplateInForm::create($templateName, $templateLabel, $psTemplate->isMultiple(), null, $form_fields); $form_items[] = array('type' => 'template', 'name' => $form_template->getTemplateName(), 'item' => $form_template); } elseif ($psFormItem['type'] == 'Section') { $psPageSection = $psFormItem['item']; $form_section = self::getPageSection($psPageSection); $form_section->setSectionLevel($psPageSection->getSectionLevel()); $form_items[] = array('type' => 'section', 'name' => $form_section->getSectionName(), 'item' => $form_section); } } // Create the "!" hack template, if it's necessary if ($templateHackUsed) { $templateTitle = Title::makeTitleSafe(NS_TEMPLATE, '!'); if (!$templateTitle->exists()) { $params = array(); $params['user_id'] = $wgUser->getId(); $params['page_text'] = '|'; $jobs[] = new PSCreatePageJob($templateTitle, $params); } } if (class_exists('JobQueueGroup')) { JobQueueGroup::singleton()->push($jobs); } else { // MW <= 1.20 Job::batchInsert($jobs); } // Create form, if it's specified. $formName = self::getFormName($pageSchemaObj); $categoryName = $pageSchemaObj->getCategoryName(); if (!empty($formName)) { $formInfo = self::getMainFormInfo($pageSchemaObj); $formTitle = Title::makeTitleSafe(SF_NS_FORM, $formName); $fullFormName = PageSchemas::titleString($formTitle); if (in_array($fullFormName, $selectedPages)) { self::generateForm($formName, $formTitle, $form_items, $formInfo, $categoryName); } } }
public static function generatePages($pageSchemaObj, $selectedPages) { global $smwgContLang, $wgUser; $datatypeLabels = $smwgContLang->getDatatypeLabels(); $pageTypeLabel = $datatypeLabels['_wpg']; $jobs = array(); $jobParams = array(); $jobParams['user_id'] = $wgUser->getId(); $psTemplates = $pageSchemaObj->getTemplates(); foreach ($psTemplates as $psTemplate) { $sioPropertyName = self::getInternalObjectPropertyName($psTemplate); if (is_null($sioPropertyName)) { continue; } $propTitle = Title::makeTitleSafe(SMW_NS_PROPERTY, $sioPropertyName); if (!in_array($propTitle, $selectedPages)) { continue; } // FIXME: cannot access protected SMWPageSchemas::createPropertyText $jobParams['page_text'] = SMWPageSchemas::createPropertyText($pageTypeLabel, null); $jobs[] = new PSCreatePageJob($propTitle, $jobParams); } Job::batchInsert($jobs); }