<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mooontes.com &#187; smf</title>
	<atom:link href="http://mooontes.com/tag/smf/feed/" rel="self" type="application/rss+xml" />
	<link>http://mooontes.com</link>
	<description></description>
	<lastBuildDate>Sun, 07 Mar 2010 17:29:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ajustar el tamaño de las fotos en SMF (Simple Machines Forum)</title>
		<link>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/</link>
		<comments>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 13:43:11 +0000</pubDate>
		<dc:creator>montes</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[smf]]></category>

		<guid isPermaLink="false">http://mooontes.com/?p=245</guid>
		<description><![CDATA[Si tienes un foro en SMF (Simple Machines Forum), una de las opciones que no deberías activar nunca es la de ajustar automáticamente el tamaño de las fotos, ya que implica que cada vez que alguien escribe un mensaje que incluye fotos, el servidor se descargará todas las fotos del mensaje para comprobar su tamaño [...]]]></description>
			<content:encoded><![CDATA[<p>Si tienes un foro en SMF (<a href="http://www.simplemachines.org">Simple Machines Forum</a>), una de las opciones que no deberías activar nunca es la de ajustar automáticamente el tamaño de las fotos, ya que implica que cada vez que alguien escribe un mensaje que incluye fotos, el servidor se descargará todas las fotos del mensaje para comprobar su tamaño antes de que el mensaje se publique, con la consiguiente pérdida de tiempo y de paciencia del usuario.</p>
<p>En nuestro caso tenemos un foro con SMF2 y un movimiento de unos 1.200 mensajes diarios, con lo que realizar esta tarea manualmente (que es la única alternativa que queda) se hace bastante pesado.</p>
<p>La solución que he encontrado es escribir un pequeño programa en PHP que se ejecutará una vez al día gracias a <a href="http://es.wikipedia.org/wiki/Cron_%28unix%29">cron</a> y que realizará esta tarea por nosotros.<br />
<span id="more-245"></span><br />
Lo que hace este script es comprobar el tamaño de las fotos de los mensajes que se han escrito durante las últimas 24 horas y en el caso de que el tamaño exceda los 800 pixels de ancho, sustituirá la etiqueta <em>[IMG]</em> por <em>[IMG width=800]</em>, lo que evitará esas fotos gigantes que estropean la normal lectura del foro, además nos enviará un correo con la lista de mensajes que haya modificado.</p>
<p>Este es el script (bajo <a href="http://creativecommons.org/licenses/by/3.0/es/deed.es">licencia CC</a> como es habitual por aquí). Sólo ha sido testeado con SMF2, aunque no creo que haya mucho problema para hacerlo funcionar con SMF1.</p>
<p>Para hacerlo funcionar en vuestro servidor sólo tenéis que modificar la primera línea <em>require_once</em> con la ruta de vuestro <em>Settings.php</em> de SMF, la segunda línea asignando la variable <em>$to</em> al correo donde queréis recibir el resumen diario de mensajes modificados y la tercera línea asignando a <em>$url_foro</em> la dirección de vuestro foro. Y luego por supuesto añadir la tarea para que se ejecute diariamente.</p>
<pre class="brush: php;">
	//***
	//Creado Junio 2009 por Montes http://mooontes.com
	//Bajo licencia http://creativecommons.org/licenses/by/3.0/es/deed.es
	//***
	require_once(&quot;/ruta/Settings.php&quot;);  //la configuracion de la BD la cogemos del archivo de configuracion de SMF
	$to = &quot;correo@mail.com&quot;;
	$url_foro = &quot;www.foro.com&quot;;

	$mysqli = new mysqli($db_server,$db_user,$db_passwd,$db_name);

	$mail = &quot;Fotos modificadas hoy &quot;.date(&quot;d/m/Y&quot;).&quot;\n\n&quot;;

	//Comprobamos conexion
	if (mysqli_connect_errno())
	{
		printf(&quot;Connect failed: %s\n&quot;, mysqli_connect_error());
		exit();
	}	

	//Buscamos todos los mensajes con fotos de las ultimas 24 horas
	$sql = &quot;SELECT id_msg,id_topic,body FROM smf_messages WHERE DATE(FROM_UNIXTIME(poster_time))&quot;.
			&quot;&gt; DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) AND body LIKE '%[IMG]http%'&quot;;
	if ($result = $mysqli-&gt;query($sql))
	{
		while($row = $result-&gt;fetch_assoc())
		{
			$body = $row[&quot;body&quot;];
			echo &quot;\n****msg: &quot;.$row[&quot;id_msg&quot;].&quot; topic: &quot;.$row[&quot;id_topic&quot;].&quot;, buscando imagenes...\n\n&quot;;

			//Comprobamos imagen x imagen
			preg_match_all(&quot;%\[img\]([^\[]*)\[/img\]%i&quot;, $row[&quot;body&quot;], $encuentra, PREG_PATTERN_ORDER);
			for ($j = 0; $j &lt; count($encuentra[1]); $j++)
			{
				echo &quot;una foto: &quot;.$encuentra[1][$j].&quot;\n&quot;;
				if (list($ancho, $altura, $tipo, $atr) = getimagesize($encuentra[1][$j]))
				{
					echo &quot;ancho: &quot;.$ancho.&quot; alto: &quot;.$altura.&quot;\n&quot;;
					if ($ancho &gt; 800)
					{
						echo &quot;Tamanyo mayor de 800, vamos a reemplazar...\n&quot;;
						//Mas ancha de 800 pixels? anyadimos width=800
						$body = str_ireplace(&quot;[img]&quot;.$encuentra[1][$j].&quot;[/img]&quot;, &quot;[img width=800]&quot;.$encuentra[1][$j].&quot;[/img]&quot;, $body);
						//actualizamos en la bd
						$bodys = addslashes($body);
						$sql = &quot;UPDATE smf_messages SET body = '&quot;.$bodys.
							&quot;', modified_time=UNIX_TIMESTAMP(), modified_name='bot' WHERE id_msg = &quot;.$row[&quot;id_msg&quot;];
						$mysqli-&gt;query($sql);
						echo &quot;Actualizada la BD\n&quot;;
						$mail .= &quot;Modificada foto en: http://&quot;.$url_foro
						.&quot;/index.php?topic=&quot;.$row[&quot;id_topic&quot;].&quot;.msg&quot;.
						$row[&quot;id_msg&quot;].&quot;#msg&quot;.$row[&quot;id_msg&quot;].&quot;\n&quot;;
					}
				}
				else
				{
					echo &quot;Tamanyo desconocido\n&quot;;
				}
			}
		}
	}

    $result-&gt;close();
    unset($row);
    unset($sql);
    unset($query);

	if ($mail != &quot;Fotos modificadas hoy &quot;.date(&quot;d/m/Y&quot;).&quot;\n\n&quot;)
	{
		$subject = &quot;Fotos arregladas dimensiones &quot;.date(&quot;d/m/Y&quot;);
		if (mail($to, $subject, $mail))
		{
			echo(&quot;Mensaje enviado\n&quot;);
		}
		else
		{
			echo(&quot;Fallo al enviar mensaje...\n&quot;);
		}
	}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mooontes.com/2009/06/15/ajustar-el-tamano-de-las-fotos-en-smf-simple-machines-forum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
