<?php
/**
 * @version  $Revision$
 * @package  liberty
 * @subpackage plugins_data
 */
// +----------------------------------------------------------------------+
// | Copyright (c) 2004, bitweaver.org
// +----------------------------------------------------------------------+
// | All Rights Reserved. See below for details and a complete list of authors.
// | Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details
// |
// | For comments, please use phpdocu.sourceforge.net documentation standards!!!
// | -> see http://phpdocu.sourceforge.net/
// +----------------------------------------------------------------------+
// | Author (TikiWiki): Gustavo Muslera <gmuslera@users.sourceforge.net>
// | Reworked for Bitweaver (& Undoubtedly Screwed-Up)
// | by: StarRider <starrrider@users.sourceforge.net>
// | Reworked from: wikiplugin_articles.php - see deprecated code below
// +----------------------------------------------------------------------+
// $Id$

namespace Bitweaver\Liberty;

use Bitweaver\Articles\BitArticle;
use Bitweaver\KernelTools;

/**
 * definitions
 */
global $gBitSystem, $gBitSmarty;
define( 'PLUGIN_GUID_DATAARTICLES', 'dataarticles' );
global $gLibertySystem;
$pluginParams = [
	'tag'           => 'ARTICLES',
	'auto_activate' => false,
	'requires_pair' => false,
	'load_function' => 'data_articles',
	'help_function' => 'data_articles_help',
	'title'         => 'Articles',
	'help_page'     => 'DataPluginArticles',
	'description'   => KernelTools::tra( "This plugin will display several Articles." ),
	'syntax'        => "{ARTICLES max= topic= type= }",
	'plugin_type'   => DATA_PLUGIN,
];
$gLibertySystem->registerPlugin( PLUGIN_GUID_DATAARTICLES, $pluginParams );
$gLibertySystem->registerDataTag( $pluginParams['tag'], PLUGIN_GUID_DATAARTICLES );

// Help Routine
function data_articles_help()
{
	$help =
		"<table class=\"data help\"><tr><th>" . KernelTools::tra( "Key" ) . '</th>'
				.'<th>' . KernelTools::tra( "Type" ) . '</th>'
				.'<th>' . KernelTools::tra( "Comments" ) . '</th>'
			.'</tr>'
			.'<tr class="odd">'
				.'<td>max</td>'
				.'<td>' . KernelTools::tra( "numeric") . '<br />' . KernelTools::tra("(optional)") . '</td>'
				.'<td>' . KernelTools::tra( "The number of Articles to be displayed. (Default = 3)") . '</td>'
			.'</tr>'
			.'<tr class="even">'
				.'<td>topic</td>'
				.'<td>' . KernelTools::tra( "topic name") . '<br />' . KernelTools::tra("(optional)") . '</td>'
				.'<td>' . KernelTools::tra( "Filters the Articles so that only the Topic specified is displayed") . '</td>'
			.'</tr>'
			.'<tr class="odd">'
				.'<td>type</td>'
				.'<td>' . KernelTools::tra( "type name") . '<br />' . KernelTools::tra("(optional)") . '</td>'
				.'<td>' . KernelTools::tra( "Filters the Articles so that only the Type specified is displayed") . '</td>'
			.'</tr>'
			.'<tr class="even">'
				.'<td>format</td>'
				.'<td>' . KernelTools::tra( "string") . '<br />' . KernelTools::tra("(optional)") . '</td>'
				.'<td>' . KernelTools::tra( "Specify format for article display - options: full, list (default)") . '</td>'
			.'</tr>'
		.'</table>'
		. KernelTools::tra("Example: ") . "{ARTICLES max=5 topic='some_topic'}<br />"
		. KernelTools::tra("Example: ") . "{ARTICLES max=5 type='some_type'}";
	return $help;
}

// Executable Routine
function data_articles($data, $params) { // No change in the parameters with Clyde
	global $gLibertySystem, $gBitSmarty, $gBitSystem;
	if( $gBitSystem->isPackageActive( 'articles' ) ) { // Do not include this Plugin if the Package is not active
		// The next 2 lines allow access to the $pluginParams given above and may be removed when no longer needed
		$pluginParams = $gLibertySystem->mPlugins[PLUGIN_GUID_DATAARTICLES];

		require_once( LIBERTY_PKG_INCLUDE_PATH.'lookup_content_inc.php' );

		$module_params = $params;
		$articlesObject = new BitArticle();
		$stati = [ 'pending', 'approved' ];
		$status_id = ( !empty( $module_params['status'] ) && in_array( $module_params['status'], $stati ) ) ? constant( 'ARTICLE_STATUS_' . strtoupper( $module_params['status'] ) ) : ARTICLE_STATUS_APPROVED;

		$sortOptions = [
			"last_modified_asc",
			"last_modified_desc",
			"created_asc",
			"created_desc",
			"random",
		];
		$sort_mode = ( !empty( $module_params['sort_mode'] ) && in_array( $module_params['sort_mode'], $sortOptions ) ) ? $module_params['sort_mode'] : 'last_modified_desc';

		$getHash = [];
		$getHash['status_id']     = $status_id;
		$getHash['sort_mode']     = $sort_mode;
		$getHash['max_records']   = empty( $module_params['max'] ) ? 1 : $module_params['max'];
		if( isset( $module_params['topic'] )) {
			$getHash['topic']     = !empty( $module_params['topic'] ) ? $module_params['topic'] : NULL;
		}
		if( isset( $module_params['topic_id'] )) {
			$getHash['topic_id']  = $module_params['topic_id'];
		}
		$articles_results = $articlesObject->getList( $getHash );

		$display_format = empty( $module_params['format'] ) ? 'simple_title_list' : $module_params['format'];
		$display_result = "";

		switch( $display_format ) {
			case 'full':
				$display_result = '<div class="articles">';
				$gBitSmarty->assign( 'showDescriptionsOnly', TRUE );
				foreach( $articles_results as $article ) {
					$gBitSmarty->assign( 'article', $article );
					$gBitSmarty->assign( 'gContent', $articlesObject );
					$display_result .= $gBitSmarty->fetch( 'bitpackage:articles/article_display.tpl' );
				}
				$display_result .= '</div>';
				$display_result = preg_replace( "/\\\\n/", '', $display_result );
				break;
			case 'list':
			default:
				$display_result = "<ul>";
				foreach( $articles_results as $article ) {
					$link = $articlesObject->getdisplaylink( $article['title'], $article );
					$display_result .= "<li>$link</li>\n";
				}
				$display_result .= "</ul>\n";
				break;
		}
		return $display_result;
	}
	return "<div class=error>The articles package is not active.</div>";

}
