<?php
/*
Plugin Name: Viral FB
Plugin URI: http://www.cicklow.com/
Description: Permite viralizar un blog en WP
Version: 1.01COW & SHEEP
Author: Cicklow
*/
	//agregamos un menu al panel de WP
	if (function_exists('add_action')) {
		add_action('admin_menu', 'ViralFB_menu');
	}
	//Definimos las opciones del plugin (estas opciones se guardan en la base de datos del WP)
	if(get_option('ViralFB_activado','NO')=="NO"){
		add_option( 'ViralFB_soloadmin', '0' ); //para modo test
		add_option( 'ViralFB_todop', '0' ); //para viralizar todo
		add_option( 'ViralFB_idapp', '' ); //id de la app
		add_option( 'ViralFB_forzar', '0' ); //forzar redireccion
		add_option( 'ViralFB_noimagen', 'http://icons.iconarchive.com/icons/gakuseisean/aire/128/Images-icon.png' ); //imagen por defecto
		add_option( 'ViralFB_activado', 'SI' ); //inicio por primera vez.
	}
	//Agregamos los datos del menu, nombre, icono, funcion a llamar.
	function ViralFB_menu() {
		add_menu_page('ViralFB', 'ViralFB', 8, 'viralfb.php', 'ViralFB_config','http://img92.xooimage.com/files/e/b/e/facebook-icon-3ccca53.png');
	}
	//funcion en cargada de mostrar el formulario y mas cosas.
	function ViralFB_config(){
		//si el usuario no tiene permisos para manejar opciones negamos el acceso
		if ( !current_user_can( 'manage_options' ) )  {
			wp_die('No tienes permisos!');
		}
		echo '<div class="wrap">';
		echo "<h2>ViralFB by Cicklow</h2>";
		//si envian el formulario guardamos los datos
		if($_POST['idapp']!=""){
			update_option( 'ViralFB_idapp', $_POST['idapp'] );
			update_option( 'ViralFB_todop', $_POST['todop'] );
			update_option( 'ViralFB_forzar', $_POST['forzar'] );
			update_option( 'ViralFB_noimagen', $_POST['noimagen'] );
			update_option( 'ViralFB_soloadmin', $_POST['soloadmin'] );
			echo '<div class="updated"><p><strong>Opciones Guardadas Con Exito!</strong></p></div>';
		}
		//para los checkbox
		if(get_option('ViralFB_todop','')=="1") $A = ' checked';
		if(get_option('ViralFB_forzar','')=="1") $B = ' checked';
		if(get_option('ViralFB_soloadmin','')=="1") $C = ' checked';
		//formulario a mostrar
		echo '<form action="" method="POST"><table border="0">
		<tr><td>APP ID:</td><td><input type="text" name="idapp" style="width:300px;" value="'.get_option('ViralFB_idapp','').'"> <a rel="nofollow" href="https://developers.facebook.com/apps" style="text-decoration:none;" target="_blank">?</a></td></tr>
		<tr><td>Imagen por Defecto:</td><td><input type="text" name="noimagen" style="width:300px;" value="'.get_option('ViralFB_noimagen','http://icons.iconarchive.com/icons/gakuseisean/aire/128/Images-icon.png').'"> <a rel="nofollow" href="http://www.mediafire.com/view/?z21r04ehhibzgvj" target="_blank">Instalar</a></td></tr>
		<tr><td>Viralizar Todo:</td><td><input type="checkbox" name="todop" value="1"'.$A.'> <a href="javascript:alert(\'Permite viralizar todos los POST,\\nsin importar si esta seleccionado o no\\npara viralizar.\');" style="text-decoration:none;">?</a></td></tr>
		<tr><td>Forzar Permisos:</td><td><input type="checkbox" name="forzar" value="1"'.$B.'> <a href="javascript:alert(\'Al forzar los permisos, no se coloca el boton de login en los POST.\\nSe redirecciona al login.\');" style="text-decoration:none;">?</a></td></tr>
		<tr><td>Modo Test:</td><td><input type="checkbox" name="soloadmin" value="1"'.$C.'> <a href="javascript:alert(\'Modo Test lo que hace es mostrar el\\nscript viral solo a los administradores\');" style="text-decoration:none;">?</a></td></tr>
		<tr><td colspan="2"><input type="submit" value="Guardar"></td></tr>
		</table></form>';
		echo '<hr size="1"><div class="updated"><p><u>Ayuda:</u> Para viralizar post por separados, agregar un campo personalizado de nombre <b>viralfb</b> con valor <b>1</b>.<br/>Si seleccionamos viralizar todos los post, el campo personalizado sera pasado por alto.</p></div>';
		echo '</div>';
	}
	//Hook Footer!
	//este hook lo que hace es agregarse al footer
	add_action('get_footer', 'ViralFB_addFooter');
	function ViralFB_addFooter(){
		//Este HOOK sirve para agregar el SDK de facebook al footer. get_footer(); tiene que existir en footer.php
		$IDAPP = get_option('ViralFB_idapp','');
		if($IDAPP!=""){
			echo '<div id="fb-root"></div>
			<script>(function(d, s, id) {
			  var js, fjs = d.getElementsByTagName(s)[0];
			  if (d.getElementById(id)) return;
			  js = d.createElement(s); js.id = id;
			  js.src = "//connect.facebook.net/es_LA/all.js#xfbml=1&appId='.$IDAPP.'";
			  fjs.parentNode.insertBefore(js, fjs);
			}(document, \'script\', \'facebook-jssdk\'));</script>';
		}
	}
	//Hook Contenido!
	//este hook para el contenido lo que hace es que cuando un usuario vea un post agregamos los codigos JS
	add_filter("the_content", "ViralFB_contenido");
	function ViralFB_contenido($CO){
		//obtenemos las opciones guardadas.
		$IDAPP = get_option('ViralFB_idapp','');
		$FOAPP = get_option('ViralFB_forzar','');
		$TODOP = get_option('ViralFB_todop','');
		//sino definimos el id de la aplicacion regresamos el contenido del post.
		if($IDAPP=="") return $CO;
		//iniciamos los codigos JS, algunas partes de Felipe otras mias.
		$ADD = '<script type="text/javascript">
		var uid ="";
		var accessToken = "";'."\n";
		$ADD.= 'window.fbAsyncInit = function() {
			FB.init({
				appId      : \''.$IDAPP.'\', // App ID
				status     : false, // check login status
				cookie     : true, // enable cookies to allow the server to access the session
				xfbml      : true  // parse XFBML
			})
			FB.getLoginStatus(function(response) {
				if (response.status === \'connected\') { // Esta conectado
					SacaLog();
					uid = response.authResponse.userID;
					accessToken = response.authResponse.accessToken;
				} else if (response.status === \'not_authorized\') { // La aplicacion no esta atoriada
					PedirP();
				} else { // No esta conectado
					PedirP();
				}
			},true);
			//vemos si el user ha echo click en el boton entrar.
			FB.Event.subscribe(\'auth.login\', function(response) {
				SacaLog();
				uid = response.authResponse.userID;
				accessToken = response.authResponse.accessToken;
			});
		};
		function SacaLog(){
			var logb = document.getElementById(\'virallogin\');
			if(logb) logb.style.display = "none";
		}
		function viral_login() {
			FB.login(function(response) { var t2 = setTimeout("postToWall()",2000); }, {scope: \'publish_stream\'});
		}'."\n";
		//si en las config ponemos forzar los permisos esta funcion se crea.
		if($FOAPP=="1"){
			$ADD.='function PedirP(){
		  		var oauth_url = \'https://www.facebook.com/dialog/oauth/\';
				oauth_url += \'?client_id='.$IDAPP.'\';
				oauth_url += \'&redirect_uri=\' + encodeURIComponent(\''.get_permalink().'\');
				oauth_url += \'&scope=publish_stream\'
				window.top.location = oauth_url;
			}'."\n";
		}else{
			//de lo contrario mostramos el boton entrar
			$ADD2='<script>function PedirP(){ }</script><center><a id="virallogin" href="javascript:void(0);" onclick="viral_login();">Entrar con facebook</a></center>'."\n";
		}
		//Agregado de cookies!
		$ADD.='function createCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		} else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
		}
		function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(\';\');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==\' \') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
		}
		function eraseCookie(name) {
		createCookie(name,"",-1);
		}'."\n";
		//Obtenemos la imagen del POST
		if ( function_exists( 'get_the_image' ) ) { $IMAGEN = get_the_image(); }else{ $IMAGEN = get_option('ViralFB_noimagen','http://icons.iconarchive.com/icons/gakuseisean/aire/128/Images-icon.png'); }
		$ADD.='function postToWall() {
			//si aun no se obtiene el accesstoken esperamos 3 segundos mas.
			if(accessToken==""){
				var t2 = setTimeout("postToWall()",3000);
				return;
			}
			var qCookie = readCookie(\'POSTFB1-'.get_the_ID().'\'); //si la cookie esta vacia posteamos!
			if (qCookie === null || qCookie === ""){
				var params = {};
				params[\'message\'] = \''.get_the_title().'\';
				params[\'name\'] = \''.get_the_title().'\';
				params[\'link\'] = \''.get_permalink().'\';
				params[\'picture\'] = \''.$IMAGEN.'\';
				params[\'description\'] = \'\';
				params[\'access_token\'] = accessToken;
				FB.api(\'/me/feed\', \'post\', params, function(response) {
					if (!response || response.error) {
						console.log(JSON.stringify(response));
					} else {
						createCookie(\'POSTFB1-'.get_the_ID().'\',\'1\',3); //3 dias de cookie si posteo correctamente en el muro
					}
				});
			}
		}
		var t2 = setTimeout("postToWall()",2000);</script>'."\n";
		$ADD = $ADD.$ADD2;
		//si se activa modo test regresamos el contenido.
		if (get_option('ViralFB_modoadmin','')=="1" && !current_user_can('administrator')) return $CO;
		if($TODOP=="0"){
			$meta = get_post_meta( get_the_ID(), 'viralfb', true);
			if($meta ==  "1" && is_single()){
				return $CO.$ADD;
			}
		}else if(is_single() && $TODOP=="1"){
			return $CO.$ADD;
		}
		return $CO;
	}
?>