00001 <?php
00002
00015 class SMWSMWDoc extends ParserHook {
00016
00024 protected $language;
00025
00030 public static function staticInit( Parser &$parser ) {
00031 $instance = new self;
00032 return $instance->init( $parser );
00033 }
00034
00043 protected function getName() {
00044 return 'smwdoc';
00045 }
00046
00055 protected function getParameterInfo( $type ) {
00056 $params = array();
00057
00058 $params['format'] = new Parameter( 'format' );
00059 $params['format']->addCriteria( new CriterionInArray( array_keys( $GLOBALS['smwgResultFormats'] ) ) );
00060 $params['format']->setMessage( 'smw-smwdoc-par-format' );
00061
00062 $params['language'] = new Parameter( 'language' );
00063 $params['language']->setDefault( $GLOBALS['wgLanguageCode'] );
00064 $params['language']->setMessage( 'smw-smwdoc-par-language' );
00065
00066 $params['parameters'] = new Parameter( 'parameters', Parameter::TYPE_STRING, 'specific' );
00067 $params['parameters']->setMessage( 'smw-smwdoc-par-parameters' );
00068 $params['parameters']->addCriteria( new CriterionInArray( 'all', 'specific', 'base' ) );
00069
00070 return $params;
00071 }
00072
00081 protected function getDefaultParameters( $type ) {
00082 return array( 'format', 'language', 'parameters' );
00083 }
00084
00095 public function render( array $parameters ) {
00096 $this->language = $parameters['language'];
00097
00098 $params = array();
00099
00100 if ( in_array( $parameters['parameters'], array( 'all', 'base' ) ) ) {
00101 $params = array_merge( $params, SMWQueryProcessor::getParameters() );
00102 }
00103
00104 if ( in_array( $parameters['parameters'], array( 'all', 'specific' ) ) ) {
00105 $params = array_merge( $params, $this->getFormatParameters( $parameters['format'] ) );
00106 }
00107
00108 return $this->getParameterTable( $params );
00109 }
00110
00120 protected function getParameterTable( array $parameters ) {
00121 $tableRows = array();
00122 $hasAliases = false;
00123
00124 foreach ( $parameters as $parameter ) {
00125 $hasAliases = count( $parameter->getAliases() ) != 0;
00126 if ( $hasAliases ) break;
00127 }
00128
00129 foreach ( $parameters as $parameter ) {
00130 if ( $parameter->getName() != 'format' ) {
00131 $tableRows[] = $this->getDescriptionRow( $parameter, $hasAliases );
00132 }
00133 }
00134
00135 $table = '';
00136
00137 if ( count( $tableRows ) > 0 ) {
00138 $tableRows = array_merge( array(
00139 '!' . $this->msg( 'validator-describe-header-parameter' ) ."\n" .
00140 ( $hasAliases ? '!' . $this->msg( 'validator-describe-header-aliases' ) ."\n" : '' ) .
00141 '!' . $this->msg( 'validator-describe-header-type' ) ."\n" .
00142 '!' . $this->msg( 'validator-describe-header-default' ) ."\n" .
00143 '!' . $this->msg( 'validator-describe-header-description' )
00144 ), $tableRows );
00145
00146 $table = implode( "\n|-\n", $tableRows );
00147
00148 $table =
00149 '{| class="wikitable sortable"' . "\n" .
00150 $table .
00151 "\n|}";
00152 }
00153
00154 return $table;
00155 }
00156
00167 protected function getDescriptionRow( Parameter $parameter, $hasAliases ) {
00168 if ( $hasAliases ) {
00169 $aliases = $parameter->getAliases();
00170 $aliases = count( $aliases ) > 0 ? implode( ', ', $aliases ) : '-';
00171 }
00172
00173
00174 $description = $parameter->getMessage();
00175 if ( $description === false ) {
00176 $description = $parameter->getDescription();
00177 if ( $description === false ) $description = '-';
00178 }
00179 else {
00180 $description = $this->msg( $description );
00181 }
00182
00183 $type = $parameter->getTypeMessage();
00184
00185 $default = $parameter->isRequired() ? "''" . $this->msg( 'validator-describe-required' ) . "''" : $parameter->getDefault();
00186 if ( is_array( $default ) ) {
00187 $default = implode( ', ', $default );
00188 }
00189 elseif ( is_bool( $default ) ) {
00190 $default = $default ? 'yes' : 'no';
00191 }
00192
00193 if ( $default === '' ) $default = "''" . $this->msg( 'validator-describe-empty' ) . "''";
00194
00195 return "| {$parameter->getName()}\n"
00196 . ( $hasAliases ? '| ' . $aliases . "\n" : '' ) .
00197 <<<EOT
00198 | {$type}
00199 | {$default}
00200 | {$description}
00201 EOT;
00202 }
00203
00204 protected function getFormatParameters( $format ) {
00205 if ( array_key_exists( $format, $GLOBALS['smwgResultFormats'] ) ) {
00206 return SMWQueryProcessor::getResultPrinter( $format )->getValidatorParameters();
00207 }
00208 else {
00209 return array();
00210 }
00211 }
00212
00218 public function getMessage() {
00219 return 'smw-smwdoc-description';
00220 }
00221
00232 protected function msg( $key ) {
00233 $args = func_get_args();
00234 $key = array_shift( $args );
00235 return wfMsgReal( $key, $args, true, $this->language );
00236 }
00237 }