function execute($category) { global $wgUser, $wgRequest, $wgOut, $wgPageSchemasHandlerClasses; if (!$wgUser->isAllowed('generatepages')) { $wgOut->permissionRequired('generatepages'); return; } $this->setHeaders(); $param = $wgRequest->getText('param'); if (!empty($param) && !empty($category)) { // Generate the pages! $this->generatePages($param, $wgRequest->getArray('page')); $text = Html::element('p', null, wfMessage('ps-generatepages-success')->parse()); $wgOut->addHTML($text); return true; } if ($category == "") { // No category listed. // TODO - show an error message. return true; } // Standard "generate pages" form, with category name set. // Check for a valid category, with a page schema defined. $pageSchemaObj = new PSSchema($category); if (!$pageSchemaObj->isPSDefined()) { $text = Html::element('p', null, wfMessage('ps-generatepages-noschema')->parse()); $wgOut->addHTML($text); return true; } $text = Html::element('p', null, wfMessage('ps-generatepages-desc')->parse()) . "\n"; $text .= '<form method="post">'; $text .= Html::input('param', $category, 'hidden') . "\n"; $text .= '<div id="ps_check_all_check_none"> <input type="button" id="ps_check_all" value="' . wfMessage('powersearch-toggleall')->parse() . '" /> <input type="button" id="ps_check_none" value="' . wfMessage('powersearch-togglenone')->parse() . '" /> </div><br/>'; $wgOut->addModules('ext.pageschemas.generatepages'); // This hook will set an array of strings, with each value // as a title of a page to be created. $pageList = array(); foreach ($wgPageSchemasHandlerClasses as $psHandlerClass) { $pagesFromHandler = call_user_func(array($psHandlerClass, "getPagesToGenerate"), $pageSchemaObj); foreach ($pagesFromHandler as $page) { $pageList[] = $page; } } foreach ($pageList as $page) { if (!$page instanceof Title) { continue; } $pageName = PageSchemas::titleString($page); $text .= Html::input('page[]', $pageName, 'checkbox', array('checked' => true)); $text .= "\n" . Linker::link($page) . "<br />\n"; } $text .= "<br />\n"; $text .= Html::input(null, wfMessage('generatepages')->parse(), 'submit'); $text .= "\n</form>"; $wgOut->addHTML($text); return true; }
/** * Generate pages (form and templates) specified in the list. */ public static function generatePages($pageSchemaObj, $selectedPages) { global $wgUser; $psTemplates = $pageSchemaObj->getTemplates(); $form_templates = array(); $jobs = array(); foreach ($psTemplates as $psTemplate) { // Generate every specified template $templateName = $psTemplate->getName(); $templateTitle = Title::makeTitleSafe(NS_TEMPLATE, $templateName); $fullTemplateName = PageSchemas::titleString($templateTitle); $template_fields = self::getFieldsFromTemplateSchema($psTemplate); if (class_exists('SIOPageSchemas')) { $internalObjProperty = SIOPageSchemas::getInternalObjectPropertyName($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 { $categoryName = $pageSchemaObj->getCategoryName(); } $templateText = SFTemplateField::createTemplateText($templateName, $template_fields, $internalObjProperty, $categoryName, null, null, null); if (in_array($fullTemplateName, $selectedPages)) { $params = array(); $params['user_id'] = $wgUser->getId(); $params['page_text'] = $templateText; $jobs[] = new PSCreatePageJob($templateTitle, $params); } $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_templates[] = $form_template; } Job::batchInsert($jobs); // Create form, if it's specified. $formName = self::getFormName($pageSchemaObj); 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_templates, $formInfo, $categoryName); } } }
function execute( $category ) { global $wgUser, $wgRequest, $wgOut, $wgPageSchemasHandlerClasses; if ( ! $wgUser->isAllowed( 'generatepages' ) ) { $wgOut->permissionRequired( 'generatepages' ); return; } $this->setHeaders(); $param = $wgRequest->getText('param'); if ( !empty( $param ) && !empty( $category ) ) { // Generate the pages! $this->generatePages( $param, $wgRequest->getArray( 'page' ) ); $text = Html::element( 'p', null, wfMsg( 'ps-generatepages-success' ) ); $wgOut->addHTML( $text ); return true; } if ( $category == "") { // No category listed. // TODO - show an error message. return true; } // Standard "generate pages" form, with category name set. // Check for a valid category, with a page schema defined. $pageSchemaObj = new PSSchema( $category ); if ( !$pageSchemaObj->isPSDefined() ) { $text = Html::element( 'p', null, wfMsg( 'ps-generatepages-noschema' ) ); $wgOut->addHTML( $text ); return true; } $text = Html::element( 'p', null, wfMsg( 'ps-generatepages-desc' ) ) . "\n"; $text .= '<form method="post">'; $text .= Html::input( 'param', $category, 'hidden' ) . "\n"; // This hook will set an array of strings, with each value // as a title of a page to be created. $pageList = array(); foreach ( $wgPageSchemasHandlerClasses as $psHandlerClass ) { $pagesFromHandler = call_user_func( array( $psHandlerClass, "getPagesToGenerate" ), $pageSchemaObj ); foreach ( $pagesFromHandler as $page ) { $pageList[] = $page; } } // SpecialPage::getSkin() was added in MW 1.18 if ( is_callable( $this, 'getSkin' ) ) { $skin = $this->getSkin(); } else { global $wgUser; $skin = $wgUser->getSkin(); } foreach ( $pageList as $page ) { if ( !( $page instanceof Title ) ) { continue; } $pageName = PageSchemas::titleString( $page ); $text .= Html::input( 'page[]', $pageName, 'checkbox', array( 'checked' => true ) ); $text .= "\n" . $skin->link( $page ) . "<br />\n"; } $text .= "<br />\n"; $text .= Html::input( null, wfMsg( 'generatepages' ), 'submit' ); $text .= "\n</form>"; $wgOut->addHTML( $text ); return true; }
/** * 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); } } }