Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 63
CargoZipFormat
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
306
0.00% covered (danger)
0.00%
0 / 63
 allowedParameters
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 getFiles
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 27
 display
0.00% covered (danger)
0.00%
0 / 1
72
0.00% covered (danger)
0.00%
0 / 31
<?php
/**
 * @author Sanjay Thiyagarajan
 * @ingroup Cargo
 *
 * Generates a zip file consisting all queried files
 */
use MediaWiki\MediaWikiServices;
class CargoZipFormat extends CargoDisplayFormat {
    public static function allowedParameters() {
        return [
            'filename' => [ 'type' => 'string' ],
            'link text' => [ 'type' => 'string' ]
        ];
    }
    protected function getFiles( $valuesTable, $fieldDescriptions ) {
        $fileField = null;
        foreach ( $fieldDescriptions as $field => $fieldDesc ) {
            if ( $fieldDesc->mType == 'File' || $fieldDesc->mType == 'Page' ) {
                $fileField = $field;
                break;
            }
        }
        $fileNames = [];
        foreach ( $valuesTable as $row ) {
            if ( array_key_exists( $fileField, $row ) ) {
                $fileNames[] = [
                    'title' => $row[$fileField]
                ];
            }
        }
        $files = [];
        foreach ( $fileNames as $f ) {
            $title = Title::makeTitleSafe( NS_FILE, $f['title'] );
            if ( $title == null ) {
                continue;
            }
            $files[] = [
                'title' => $title
            ];
        }
        return $files;
    }
    /**
     * @param array $valuesTable Unused
     * @param array $formattedValuesTable
     * @param array $fieldDescriptions
     * @param array $displayParams Unused
     * @return string HTML
     */
    public function display( $valuesTable, $formattedValuesTable, $fieldDescriptions, $displayParams ) {
        $this->mOutput->addModules( [ 'ext.cargo.zip' ] );
        $files = self::getFiles( $valuesTable, $fieldDescriptions );
        if ( array_key_exists( 'filename', $displayParams ) && $displayParams['filename'] != '' ) {
            $filename = $displayParams['filename'];
        } else {
            $filename = 'results.zip';
        }
        if ( array_key_exists( 'link text', $displayParams ) && $displayParams['link text'] != '' ) {
            $linkText = $displayParams['link text'];
        } else {
            $linkText = wfMessage( 'cargo-downloadzip' );
        }
        $text = '<div class="downloadlink" data-fileurls="' . $filename . ' ';
        foreach ( $files as $file ) {
            $filename = explode( ':', $file['title'] );
            $filename = array_pop( $filename );
            if ( method_exists( MediaWikiServices::class, 'getRepoGroup' ) ) {
                // MediaWiki 1.34+
                $localRepo = MediaWikiServices::getInstance()->getRepoGroup()->getLocalRepo();
            } else {
                $localRepo = RepoGroup::singleton()->getLocalRepo();
            }
            if ( $localRepo->findFile( $filename ) ) {
                $url = $localRepo->findFile( $filename )->getFullUrl();
                $text .= $url . ' ';
            } else {
                throw new MWException( wfMessage( 'cargo-downloadzip-invalidformat' ) );
            }
        }
        $text .= '">' . $linkText . '</div>';
        return $text;
    }
}