%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home1/lightco1/www/plugins/csviaddon/content/com_content/model/export/
Upload File :
Create Path :
Current File : //home1/lightco1/www/plugins/csviaddon/content/com_content/model/export/content.php

<?php
/**
 * @package     CSVI
 * @subpackage  JoomlaContent
 *
 * @author      Roland Dalmulder <contact@csvimproved.com>
 * @copyright   Copyright (C) 2006 - 2016 RolandD Cyber Produksi. All rights reserved.
 * @license     GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 * @link        http://www.csvimproved.com
 */

defined('_JEXEC') or die;

require_once JPATH_ADMINISTRATOR . '/components/com_csvi/models/exports.php';

/**
 * Export Joomla articles.
 *
 * @package     CSVI
 * @subpackage  JoomlaContent
 * @since       6.0
 */
class Com_ContentModelExportContent extends CsviModelExports
{
	/**
	 * The custom fields that from other extensions.
	 *
	 * @var    array
	 * @since  6.5.0
	 */
	private $pluginfieldsExport = array();

	/**
	 * Export the data.
	 *
	 * @return  void.
	 *
	 * @since   6.0
	 */
	protected function exportBody()
	{
		if (parent::exportBody())
		{
			// Get some basic data
			require_once JPATH_SITE . '/components/com_content/helpers/route.php';
			$sef = new CsviHelperSef($this->settings, $this->template, $this->log);
			$this->loadPluginFields();

			// Build something fancy to only get the fieldnames the user wants
			$userfields = array();
			$exportfields = $this->fields->getFields();

			// Group by fields
			$groupbyfields = json_decode($this->template->get('groupbyfields', '', 'string'));
			$groupby = array();

			if (isset($groupbyfields->name))
			{
				$groupbyfields = array_flip($groupbyfields->name);
			}
			else
			{
				$groupbyfields = array();
			}

			// Sort selected fields
			$sortfields = json_decode($this->template->get('sortfields', '', 'string'));
			$sortby = array();

			if (isset($sortfields->name))
			{
				$sortbyfields = array_flip($sortfields->name);
			}
			else
			{
				$sortbyfields = array();
			}

			foreach ($exportfields as $field)
			{
				switch ($field->field_name)
				{
					case 'category_path':
						$userfields[] = $this->db->quoteName('c.catid');

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.catid');
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.catid');
						}
						break;
					case 'article_url':
						$userfields[] = $this->db->quoteName('c.id');
						$userfields[] = $this->db->quoteName('cat.id', 'catid');

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.id');
							$groupby[] = $this->db->quoteName('cat.id');
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.id');
							$sortby[] = $this->db->quoteName('cat.id');
						}
						break;
					case 'access':
					case 'alias':
					case 'asset_id':
					case 'checked_out':
					case 'checked_out_time':
					case 'created_by':
					case 'created_by_alias':
					case 'hits':
					case 'id':
					case 'language':
					case 'metadata':
					case 'metadesc':
					case 'metakey':
					case 'title':
					case 'version':
						$userfields[] = $this->db->quoteName('c.' . $field->field_name);

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.' . $field->field_name);
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.' . $field->field_name);
						}
					break;
					case 'show_title':
					case 'link_titles':
					case 'show_intro':
					case 'show_category':
					case 'link_category':
					case 'show_parent_category':
					case 'link_parent_category':
					case 'show_author':
					case 'link_author':
					case 'show_create_date':
					case 'show_modify_date':
					case 'show_publish_date':
					case 'show_item_navigation':
					case 'show_icons':
					case 'show_print_icon':
					case 'show_email_icon':
					case 'show_vote':
					case 'show_hits':
					case 'show_noauth':
					case 'urls_position':
					case 'alternative_readmore':
					case 'article_layout':
					case 'show_publishing_options':
					case 'show_article_options':
					case 'show_urls_images_backend':
					case 'show_urls_images_frontend':
						$userfields[] = $this->db->quoteName('c.id');
						$userfields[] = $this->db->quoteName('c.attribs');

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.attribs');
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.attribs');
						}
					break;
					case 'image_intro':
					case 'float_intro':
					case 'image_intro_alt':
					case 'image_intro_caption':
					case 'image_fulltext':
					case 'float_fulltext':
					case 'image_fulltext_alt':
					case 'image_fulltext_caption':
						$userfields[] = $this->db->quoteName('c.images');

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.images');
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.images');
						}
					break;
					case 'urla':
					case 'urlatext':
					case 'targeta':
					case 'urlb':
					case 'urlbtext':
					case 'targetb':
					case 'urlc':
					case 'urlctext':
					case 'targetc':
						$userfields[] = $this->db->quoteName('c.urls');

						if (array_key_exists($field->field_name, $groupbyfields))
						{
							$groupby[] = $this->db->quoteName('c.urls');
						}

						if (array_key_exists($field->field_name, $sortbyfields))
						{
							$sortby[] = $this->db->quoteName('c.urls');
						}
					break;
					case 'custom':
						break;
					default:
						// Do not include custom fields into the query
						if (!in_array($field->field_name, $this->pluginfieldsExport))
						{
							$userfields[] = $this->db->quoteName($field->field_name);

							if (array_key_exists($field->field_name, $groupbyfields))
							{
								$groupby[] = $this->db->quoteName($field->field_name);
							}

							if (array_key_exists($field->field_name, $sortbyfields))
							{
								$sortby[] = $this->db->quoteName($field->field_name);
							}
						}
						break;
				}
			}

			// Build the query
			$userfields = array_unique($userfields);
			$query = $this->db->getQuery(true);
			$query->select(implode(",\n", $userfields));
			$query->from($this->db->quoteName('#__content', 'c'));
			$query->leftJoin($this->db->quoteName('#__categories', 'cat') . ' ON ' . $this->db->quoteName('cat.id') . ' = ' . $this->db->quoteName('c.catid'));

			// Filter by published state
			$publish_state = $this->template->get('publish_state');

			if ($publish_state != '' && ($publish_state == 1 || $publish_state == 0))
			{
				$query->where($this->db->quoteName('c.state') . ' = ' . (int) $publish_state);
			}

			// Filter by language
			$language = $this->template->get('content_language');

			if ($language != '*')
			{
				$query->where($this->db->quoteName('c.language') . ' = ' . $this->db->quote($language));
			}

			// Filter by category
			$categories = $this->template->get('content_categories');

			if ($categories && $categories[0] != '*')
			{
				$query->where($this->db->quoteName('catid') . " IN ('" . implode("','", $categories) . "')");
			}

			// Group the fields
			$groupby = array_unique($groupby);

			if (!empty($groupby))
			{
				$query->group($groupby);
			}

			// Sort set fields
			$sortby = array_unique($sortby);

			if (!empty($sortby))
			{
				$query->order($sortby);
			}

			// Add export limits
			$limits = $this->getExportLimit();

			// Execute the query
			$this->csvidb->setQuery($query, $limits['offset'], $limits['limit']);
			$this->log->add('Export query' . $query->__toString(), false);

			// Check if there are any records
			$logcount = $this->csvidb->getNumRows();

			if ($logcount > 0)
			{
				while ($record = $this->csvidb->getRow())
				{
					$this->log->incrementLinenumber();

					// Clean some settings
					$attribs = '';
					$images = '';
					$urls = '';

					foreach ($exportfields as $field)
					{
						$fieldname = $field->field_name;

						// Set the field value
						if (isset($record->$fieldname))
						{
							$fieldvalue = $record->$fieldname;
						}
						else
						{
							$fieldvalue = '';
						}

						// Process the field
						switch ($fieldname)
						{
							case 'category_path':
								$query->clear()
									->select($this->db->quoteName('path'))
									->from($this->db->quoteName('#__categories'))
									->where($this->db->quoteName('id') . ' = ' . (int) $record->catid);
								$this->db->setQuery($query);
								$fieldvalue = $this->db->loadResult();
								break;
							case 'article_url':
								// Let's create a SEF URL
								$fieldvalue = $sef->getSEF(ContentHelperRoute::getArticleRoute($record->id, $record->catid));
								break;
							case 'show_title':
							case 'link_titles':
							case 'show_intro':
							case 'show_category':
							case 'link_category':
							case 'show_parent_category':
							case 'link_parent_category':
							case 'show_author':
							case 'link_author':
							case 'show_create_date':
							case 'show_modify_date':
							case 'show_publish_date':
							case 'show_item_navigation':
							case 'show_icons':
							case 'show_print_icon':
							case 'show_email_icon':
							case 'show_vote':
							case 'show_hits':
							case 'show_noauth':
							case 'urls_position':
							case 'alternative_readmore':
							case 'article_layout':
							case 'show_publishing_options':
							case 'show_article_options':
							case 'show_urls_images_backend':
							case 'show_urls_images_frontend':
								if (empty($attribs))
								{
									$attribs = json_decode($record->attribs);
								}

								if (isset($attribs->$fieldname))
								{
									$fieldvalue = $attribs->$fieldname;
								}
								break;
							case 'image_intro':
							case 'float_intro':
							case 'image_intro_alt':
							case 'image_intro_caption':
							case 'image_fulltext':
							case 'float_fulltext':
							case 'image_fulltext_alt':
							case 'image_fulltext_caption':
								if (empty($images))
								{
									$images = json_decode($record->images);
								}

								if (isset($images->$fieldname))
								{
									$fieldvalue = $images->$fieldname;
								}
								break;
							case 'urla':
							case 'urlatext':
							case 'targeta':
							case 'urlb':
							case 'urlbtext':
							case 'targetb':
							case 'urlc':
							case 'urlctext':
							case 'targetc':
								if (empty($urls))
								{
									$urls = json_decode($record->urls);
								}

								if (isset($urls->$fieldname))
								{
									$fieldvalue = $urls->$fieldname;
								}
								break;
							default:
								if (in_array($fieldname, $this->pluginfieldsExport))
								{
									$fieldvalue = '';

									// Get value from content plugin
									$dispatcher = new RantaiPluginDispatcher;
									$dispatcher->importPlugins('csviext', $this->db);
									$result = $dispatcher->trigger(
										'onExportContent',
										array(
											'extension' => 'joomla',
											'operation' => 'content',
											'id' => $record->id,
											'fieldname' => $fieldname,
											'log' => $this->log
										)
									);

									if (isset($result[0]))
									{
										$fieldvalue = $result[0];
									}
								}
								break;
						}

						// Store the field value
						$this->fields->set($field->csvi_templatefield_id, $fieldvalue);
					}

					// Output the data
					$this->addExportFields();

					// Output the contents
					$this->writeOutput();
				}
			}
			else
			{
				$this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND'));

				// Output the contents
				$this->writeOutput();
			}
		}
	}

	/**
	 * Get a list of plugin fields that can be used as available field.
	 *
	 * @return  void.
	 *
	 * @since   6.5.0
	 */
	private function loadPluginFields()
	{
		$dispatcher = new RantaiPluginDispatcher;
		$dispatcher->importPlugins('csviext', $this->db);
		$result = $dispatcher->trigger(
			'getAttributes',
			array(
				'extension' => 'joomla',
				'operation' => 'content',
				'log' => $this->log
			)
		);

		if (is_array($result) && !empty($result))
		{
			$this->pluginfieldsExport = array_merge($this->pluginfieldsExport, $result[0]);
		}
	}
}

Zerion Mini Shell 1.0