diff options
Diffstat (limited to 'www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php')
-rw-r--r-- | www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php | 257 |
1 files changed, 0 insertions, 257 deletions
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php b/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php deleted file mode 100644 index 8e9d2529..00000000 --- a/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php +++ /dev/null @@ -1,257 +0,0 @@ -<?php - -/** - * A class to print query results in an outline format, along with some - * helper classes to handle the aggregation - */ - -/** - * Represents a single item, or page, in the outline - contains both the - * SMWResultArray and an array of some of its values, for easier aggregation - */ -class SRFOutlineItem { - - var $mRow; - var $mVals; - - function __construct( $row ) { - $this->mRow = $row; - $this->mVals = []; - } - - function addFieldValue( $field_name, $field_val ) { - if ( array_key_exists( $field_name, $this->mVals ) ) { - $this->mVals[$field_name][] = $field_val; - } else { - $this->mVals[$field_name] = [ $field_val ]; - } - } - - function getFieldValues( $field_name ) { - if ( array_key_exists( $field_name, $this->mVals ) ) { - return $this->mVals[$field_name]; - } else { - return [ wfMessage( 'srf_outline_novalue' )->text() ]; - } - } -} - -/** - * A tree structure for holding the outline data - */ -class SRFOutlineTree { - - var $mTree; - var $mUnsortedItems; - - function __construct( $items = [] ) { - $this->mTree = []; - $this->mUnsortedItems = $items; - } - - function addItem( $item ) { - $this->mUnsortedItems[] = $item; - } - - function categorizeItem( $vals, $item ) { - foreach ( $vals as $val ) { - if ( array_key_exists( $val, $this->mTree ) ) { - $this->mTree[$val]->mUnsortedItems[] = $item; - } else { - $this->mTree[$val] = new SRFOutlineTree( [ $item ] ); - } - } - } - - function addProperty( $property ) { - if ( count( $this->mUnsortedItems ) > 0 ) { - foreach ( $this->mUnsortedItems as $item ) { - $cur_vals = $item->getFieldValues( $property ); - $this->categorizeItem( $cur_vals, $item ); - } - $this->mUnsortedItems = null; - } else { - foreach ( $this->mTree as $i => $node ) { - $this->mTree[$i]->addProperty( $property ); - } - } - } -} - -class SRFOutline extends SMWResultPrinter { - - protected $mOutlineProperties = []; - protected $mInnerFormat = ''; - - protected function handleParameters( array $params, $outputmode ) { - parent::handleParameters( $params, $outputmode ); - $this->mOutlineProperties = $params['outlineproperties']; - } - - public function getName() { - return wfMessage( 'srf_printername_outline' )->text(); - } - - /** - * Code mostly copied from SMW's SMWListResultPrinter::getResultText() - */ - function printItem( $item ) { - $first_col = true; - $found_values = false; // has anything but the first column been printed? - $result = ""; - foreach ( $item->mRow as $orig_ra ) { - // handling is somewhat simpler for SMW 1.5+ - $realFunction = [ 'SMWQueryResult', 'getResults' ]; - if ( is_callable( $realFunction ) ) { - // make a new copy of this, so that the call to - // getNextText() will work again - $ra = clone ( $orig_ra ); - } else { - // make a new copy of this, so that the call to - // getNextText() will work again - $ra = new SMWResultArray( $orig_ra->getContent(), $orig_ra->getPrintRequest() ); - } - $val = $ra->getPrintRequest()->getText( SMW_OUTPUT_WIKI, null ); - if ( in_array( $val, $this->mOutlineProperties ) ) { - continue; - } - $first_value = true; - while ( ( $text = $ra->getNextText( SMW_OUTPUT_WIKI, $this->mLinker ) ) !== false ) { - if ( !$first_col && !$found_values ) { // first values after first column - $result .= ' ('; - $found_values = true; - } elseif ( $found_values || !$first_value ) { - // any value after '(' or non-first values on first column - $result .= ', '; - } - if ( $first_value ) { // first value in any column, print header - $first_value = false; - if ( $this->mShowHeaders && ( '' != $ra->getPrintRequest()->getLabel() ) ) { - $result .= $ra->getPrintRequest()->getText( SMW_OUTPUT_WIKI, $this->mLinker ) . ' '; - } - } - $result .= $text; // actual output value - } - $first_col = false; - } - if ( $found_values ) { - $result .= ')'; - } - return $result; - } - - function printTree( $outline_tree, $level = 0 ) { - $text = ""; - if ( !is_null( $outline_tree->mUnsortedItems ) ) { - $text .= "<ul>\n"; - foreach ( $outline_tree->mUnsortedItems as $item ) { - $text .= "<li>{$this->printItem($item)}</li>\n"; - } - $text .= "</ul>\n"; - } - if ( $level > 0 ) { - $text .= "<ul>\n"; - } - $num_levels = count( $this->mOutlineProperties ); - // set font size and weight depending on level we're at - $font_level = $level; - if ( $num_levels < 4 ) { - $font_level += ( 4 - $num_levels ); - } - if ( $font_level == 0 ) { - $font_size = 'x-large'; - } elseif ( $font_level == 1 ) { - $font_size = 'large'; - } elseif ( $font_level == 2 ) { - $font_size = 'medium'; - } else { - $font_size = 'small'; - } - if ( $font_level == 3 ) { - $font_weight = 'bold'; - } else { - $font_weight = 'regular'; - } - foreach ( $outline_tree->mTree as $key => $node ) { - $text .= "<p style=\"font-size: $font_size; font-weight: $font_weight;\">$key</p>\n"; - $text .= $this->printTree( $node, $level + 1 ); - } - if ( $level > 0 ) { - $text .= "</ul>\n"; - } - return $text; - } - - protected function getResultText( SMWQueryResult $res, $outputmode ) { - $print_fields = []; - foreach ( $res->getPrintRequests() as $pr ) { - $field_name = $pr->getText( $outputmode, $this->mLinker ); - // only print it if it's not already part of the - // outline - if ( !in_array( $field_name, $this->mOutlineProperties ) ) { - $print_fields[] = $field_name; - } - } - - // for each result row, create an array of the row itself - // and all its sorted-on fields, and add it to the initial - // 'tree' - $outline_tree = new SRFOutlineTree(); - while ( $row = $res->getNext() ) { - $item = new SRFOutlineItem( $row ); - foreach ( $row as $field ) { - $field_name = $field->getPrintRequest()->getText( SMW_OUTPUT_HTML ); - if ( in_array( $field_name, $this->mOutlineProperties ) ) { - while ( ( $object = $field->getNextDataValue() ) !== false ) { - $field_val = $object->getLongWikiText( $this->mLinker ); - $item->addFieldValue( $field_name, $field_val ); - } - } - } - $outline_tree->addItem( $item ); - } - - // now, cycle through the outline properties, creating the - // tree - foreach ( $this->mOutlineProperties as $outline_prop ) { - $outline_tree->addProperty( $outline_prop ); - } - $result = $this->printTree( $outline_tree ); - - // print further results footer - if ( $this->linkFurtherResults( $res ) ) { - $link = $res->getQueryLink(); - if ( $this->getSearchLabel( $outputmode ) ) { - $link->setCaption( $this->getSearchLabel( $outputmode ) ); - } - $link->setParameter( 'outline', 'format' ); - if ( array_key_exists( 'outlineproperties', $this->params ) ) { - $link->setParameter( $this->params['outlineproperties'], 'outlineproperties' ); - } - $result .= $link->getText( $outputmode, $this->mLinker ) . "\n"; - } - return $result; - } - - /** - * @see SMWResultPrinter::getParamDefinitions - * - * @since 1.8 - * - * @param $definitions array of IParamDefinition - * - * @return array of IParamDefinition|array - */ - public function getParamDefinitions( array $definitions ) { - $params = parent::getParamDefinitions( $definitions ); - - $params['outlineproperties'] = [ - 'islist' => true, - 'default' => [], - 'message' => 'srf_paramdesc_outlineproperties', - ]; - - return $params; - } - -} |