<?php
/* Copyright (C) NAVER <http://www.navercorp.com> */

/**
 * @class  syndicationController
 * @author NAVER (developers@xpressengine.com)
 * @brief syndication module's Controller class
 **/

class syndicationController extends syndication
{
	function triggerInsertDocument(&$obj) {
		if($obj->module_srl < 1) return new Object();

		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($obj->module_srl)) return new Object();

		$config = $oModuleModel->getModuleConfig('syndication');

		$id = $oSyndicationModel->getID('channel', $obj->module_srl);
		$this->ping($id, 'article');

		return new Object();
	}

	function triggerUpdateDocument(&$obj) {
		if($obj->module_srl < 1) return new Object();

		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($obj->module_srl)) return new Object();

		$config = $oModuleModel->getModuleConfig('syndication');

		$id = $oSyndicationModel->getID('channel', $obj->module_srl);
		$this->ping($id, 'article');

		return new Object();
	}

	function triggerDeleteDocument(&$obj) {
		if($obj->module_srl < 1) return new Object();

		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($obj->module_srl)) return new Object();

		$this->insertLog($obj->module_srl, $obj->document_srl, $obj->title, $obj->content);

		$id = $oSyndicationModel->getID('channel', $obj->module_srl);
		$this->ping($id, 'deleted');

		return new Object();
	}

	function triggerDeleteModule(&$obj) {
		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($obj->module_srl)) return new Object();

		$this->insertLog($obj->module_srl, $obj->document_srl, $obj->title, $obj->content);

		$output = executeQuery('syndication.getExceptModule', $obj);
		if($output->data->count) return new Object();

		$id = $oSyndicationModel->getID('site', $obj->module_srl);
		$this->ping($id, 'deleted');

		return new Object();
	}

	function triggerMoveDocumentToTrash(&$obj) {
		$document_srl = $obj->document_srl;
		$module_srl = $obj->module_srl;

		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($module_srl)) return new Object();

		$id = $oSyndicationModel->getID('channel', $module_srl);
		$this->ping($id, 'deleted');

		return new Object();
	}

	function triggerRestoreTrash(&$obj) {
		$document_srl = $obj->document_srl;
		$module_srl = $obj->module_srl;

		$oSyndicationModel = getModel('syndication');
		$oModuleModel = getModel('module');

		if($oSyndicationModel->isExceptedModules($module_srl)) return new Object();

		$id = $oSyndicationModel->getID('article', $module_srl.'-'.$document_srl);
		$this->ping($id, 'article');

		return new Object();
	}

	function insertLog($module_srl, $document_srl, $title = null, $summary = null)
	{
		$args = new stdClass;
		$args->module_srl = $module_srl;
		$args->document_srl = $document_srl;
		$args->title = $title;
		$args->summary = $summary;
		$output = executeQuery('syndication.insertLog', $args);
	}

	function ping($id, $type) {
		$oModuleModel = getModel('module');
		$config = $oModuleModel->getModuleConfig('syndication');

		if(!count($config->target_services)) return;
		if(substr($config->site_url,-1)!='/') $config->site_url .= '/';

		foreach($config->target_services as $key => $val)
		{
			$ping_url = trim($this->services[$val]);
			if(!$ping_url) continue;

			$ping_body = sprintf('http://%s?module=syndication&act=getSyndicationList&id=%s&type=%s', $config->site_url, $id, $type);
			FileHandler::getRemoteResource($ping_url, null, 3, 'POST', 'application/x-www-form-urlencoded', array(), array(), array('link'=>$ping_body));
		}
	}
}
