Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
Kmario19

[Mod] Moderación de fotos - Aprobar antes de publicar

Recommended Posts

Hola gente les comparto este mod a pedido de iamchavo:

Y es de moderar una foto antes de ser pública:

wdsfXww.png

Bueno la instalación es la siguiente:

1. Hacer la consulta en la base de datos:

ALTER TABLE `w_configuracion` ADD `c_desapprove_foto` INT(1) NOT NULL DEFAULT '0' AFTER `c_desapprove_post`;

2. En el archivo c.admin.php y buscar:

            'desapprove_post' => empty($_POST['desapprove_post']) ? 0 : 1,

Debajo de eso agregar:

            'desapprove_foto' => empty($_POST['desapprove_foto']) ? 0 : 1,

Luego de eso buscamos:

$c['desapprove_post'] . '\'

Al lado de eso agregar:

, `c_desapprove_foto` = \'' . $c['desapprove_foto'] . '\'

Luego buscar dos veces:

'mocp' => $_POST['mod-contenidoposts'],

Y debajo de cada uno agregar:

'mocf' => $_POST['mod-contenidofotos'],

Buscar la función:

    function rebootFoto($fid)

Y reemplazarla por esta:

    function rebootFoto($fid)
    {
        global $tsUser;
        if ($tsUser->is_admod || $tsUser->permisos['mocdf'])
        {
			// PRIMERO COMPROBAMOS SI ESTÁ OCULTO
            $datos = db_exec('fetch_assoc', db_exec(array(__FILE__, __LINE__), 'query', 'SELECT foto_id, f_status FROM f_fotos WHERE foto_id = \'' .
                (int)$fid . '\' LIMIT 1'));
            if ($datos['f_status'] == 3)
            {
                if (!db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM `w_historial` WHERE `pofid` = \'' . (int) $fid . '\' && `type` = \'2\' && `action` = \'3\''))
                    return '0: No se pudo restaurar la foto.';
            } else
            {
                //BORRAMOS LA DENUNCIAS
                if (!db_exec(array(__FILE__, __LINE__), 'query', 'DELETE FROM `w_denuncias` WHERE `obj_id` = \'' . (int) $fid . '\' AND `d_type` = \'4\''))
                    return '0: No se pudo eliminar la denuncia.';
            }
            // REGRESAMOS EL POST
            if (db_exec(array(__FILE__, __LINE__), 'query', 'UPDATE `f_fotos` SET `f_status` = \'0\' WHERE `foto_id` = \'' .
                $fid . '\''))
            {
                return '1: La foto ha sido restaurada.';
            } else
                return '0: No se pudo restaurar la foto.';
        } else
            return '0: No continúe por aquí.';
    }

Casi al final del archivo buscar:

(SELECT count(foto_id) FROM f_fotos WHERE f_status = \'0\') as fotos_visibles,

Y agregar debajo esto:

(SELECT count(foto_id) FROM f_fotos WHERE f_status = \'3\') as fotos_revision,

Un poco mas abajo buscar:

 + $num['fotos_eliminadas']

Y agregar al lado:

 + $num['fotos_revision']

3. En el archivo c.core.php buscar:

(SELECT count(post_id) FROM p_posts WHERE post_status = \'3\') as revposts,

Al lado de eso agregar:

 (SELECT count(foto_id) FROM f_fotos WHERE f_status = \'3\') as revfotos,

Y una línea abajo buscar:

+ $datos['revposts']

Agregar al lado:

 + $datos['revfotos']

4. En el archivo c.moderacion.php buscar:

    /**
     * @name getHistory()

Arriba de eso agregar:

    public function getFotosD()
    {
        global $tsUser, $tsCore;
        //
        $max = 20; // MAXIMO A MOSTRAR
        $limit = $tsCore->setPageLimit($max, true);

        // PAGINAS
        $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT COUNT(*) FROM f_fotos AS f LEFT JOIN u_miembros AS u ON u.user_id = f.f_user WHERE f.f_status = \'3\'');

        list($total) = db_exec('fetch_row', $query);
        
        $data['pages'] = $tsCore->pageIndex($tsCore->settings['url'] .
            "/moderacion/revfotos?", $_GET['s'], $total, $max);
        //
        $query = db_exec(array(__FILE__, __LINE__), 'query', 'SELECT u.user_id, u.user_name, h.*, f.foto_id, f.f_title FROM f_fotos AS f LEFT JOIN w_historial AS h ON h.pofid = f.foto_id LEFT JOIN u_miembros AS u ON u.user_id = h.mod  WHERE h.type = \'2\' AND h.action = \'3\' AND f.f_status = \'3\' LIMIT ' .
            $limit);
        $data['datos'] = result_array($query);
        
        //
        return $data;
    }

5. En c.fotos.php buscar:

			if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `f_fotos` (f_title, f_date, f_description, f_url, f_user, f_closed, f_visitas, f_last, f_ip) VALUES (\''.$fData['titulo'].'\', \''.time().'\', \''.$fData['desc'].'\',  \''.$img_url.'\', \''.$tsUser->uid.'\', \''.$fData['closed'].'\', \''.$fData['visitas'].'\', \'1\', \''.$_SERVER['REMOTE_ADDR'].'\')')) {
                $fid = db_exec('insert_id');

Y reemplazarlo por:

			if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `f_fotos` (f_title, f_date, f_description, f_url, f_user, f_closed, f_visitas, f_status, f_last, f_ip) VALUES (\''.$fData['titulo'].'\', \''.time().'\', \''.$fData['desc'].'\',  \''.$img_url.'\', \''.$tsUser->uid.'\', \''.$fData['closed'].'\', \''.$fData['visitas'].'\', '.((!$tsUser->is_admod && $tsCore->settings['c_desapprove_foto'] == 1) ? '\'3\'' : '\'0\'').', \'1\', \''.$_SERVER['REMOTE_ADDR'].'\')')) {
				$fid = db_exec('insert_id');
				// Si está oculto, lo creamos en el historial e.e
				if(!$tsUser->is_admod && $tsCore->settings['c_desapprove_foto'] == 1) db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO `w_historial` (`pofid`, `action`, `type`, `mod`, `reason`, `date`, `mod_ip`) VALUES (\''.(int)$fid.'\', \'3\', \'2\', \''.$tsUser->uid.'\', \'Revisión al publicar\', \''.time().'\', \''.$_SERVER['REMOTE_ADDR'].'\')');

Buscar y eliminar la línea:

$data['foto']['exist'] = db_exec('num_rows', $query);

Buscar un poco arriba de eso:

$data['foto'] = db_exec('fetch_assoc', $query);

Y debajo agregar:

        if(empty($data['foto']['foto_id'])) return 'La foto fue eliminada!';
        elseif($data['foto']['f_status'] == 1 && (!$tsUser->is_admod && $tsUser->permisos['morf'] == false)) return 'La foto está en revisión por acumulación de denuncias.';
        elseif($data['foto']['f_status'] == 3 && (!$tsUser->is_admod && $tsUser->permisos['mocf'] == false)) return 'La foto se encuentra en revisión, a la espera de su publicación.';

Un poco mas arriba en la consulta buscar y eliminar

AND f.f_status = \'0\' 

6. En fotos.php al lado de:

"La imagen <b>".$titulo."</b> fue agregada."

Agregar:

.(!$tsUser->is_admod && $tsCore->settings['c_desapprove_foto'] == 1 ? ' Deber&aacute; esperar su aprobaci&oacute;n' : '')

Un poco abajo buscar el contenido del case "ver":

            $tsFoto = $tsFotos->getFoto();
            // TITULO
            $tsTitle = $tsFoto['foto']['f_title'].' - '.$tsFoto['foto']['user_name'].' - '.$tsCore->settings['titulo'];
			
			if($tsFoto['foto']['f_status'] == 1 && (!$tsUser->is_admod && $tsUser->permisos['moacp'] == false)) {
			$tsPage = 'aviso';
            $smarty->assign("tsAviso",array('titulo' => 'Opps...', 'mensaje' => 'Esta foto se encuentra en revisi&oacute;n por acumulaci&oacute;n de denuncias', 'but' => 'Ir a Fotos', 'link' => "{$tsCore->settings['url']}/fotos/"));
			}elseif($tsFoto['foto']['exist'] == 0){
            $tsPage = 'aviso';
			$smarty->assign("tsAviso",array('titulo' => 'Opps...', 'mensaje' => 'Esta foto no existe', 'but' => 'Ir a Fotos', 'link' => "{$tsCore->settings['url']}/fotos/"));
			}else{
			$smarty->assign("tsFoto", $tsFoto['foto']);
            $smarty->assign("tsUFotos", $tsFoto['last']);
            $smarty->assign("tsFFotos", $tsFoto['amigos']);
            $smarty->assign("tsFComments", $tsFoto['comments']);
			$smarty->assign("tsFVisitas", $tsFoto['visitas']);
			$smarty->assign("tsFMedallas", $tsFoto['medallas']);
			$smarty->assign("tsTMedallas", $tsFoto['m_total']);
			}

Y todo eso Reemplazarlo por:

            $tsFoto = $tsFotos->getFoto();            
            if(is_array($tsFoto)) {
                // TITULO
                $tsTitle = $tsFoto['foto']['f_title'].' - '.$tsFoto['foto']['user_name'].' - '.$tsCore->settings['titulo'];
    			$smarty->assign("tsFoto", $tsFoto['foto']);
                $smarty->assign("tsUFotos", $tsFoto['last']);
                $smarty->assign("tsFFotos", $tsFoto['amigos']);
                $smarty->assign("tsFComments", $tsFoto['comments']);
    			$smarty->assign("tsFVisitas", $tsFoto['visitas']);
    			$smarty->assign("tsFMedallas", $tsFoto['medallas']);
    			$smarty->assign("tsTMedallas", $tsFoto['m_total']);
			} else {
                $tsPage = 'aviso';
                $smarty->assign("tsAviso",array('titulo' => 'Opps...', 'mensaje' => $tsFoto, 'but' => 'Ir a Fotos', 'link' => "{$tsCore->settings['url']}/fotos/"));
            }

7. En moderacion.php buscar:

	elseif($action == 'revposts'){
        $smarty->assign("tsPosts",$tsMod->getPostsD());
    }

Debajo de eso agregar:

    elseif($action == 'revfotos'){
        $smarty->assign("tsFotos",$tsMod->getFotosD());
    }

8. En templates/admin_mods/m.admin_configs.tpl debajo de:

										<dl>
										    <dt><label for="ai_desapprove_post">Revisi&oacute;n de posts tras su publicaci&oacute;n</label><br /><span>Si est&aacute; activado, el equipo de moderaci&oacute;n deber&aacute; aprobar un post antes de que &eacute;ste sea publicado.</span></dt>                                            
                                            <dd>
										      <label><input name="desapprove_post" type="radio" id="ai_desapprove_post" value="1" {if $tsConfig.c_desapprove_post == 1}checked="checked"{/if} class="radio"/>S&iacute;</label>                                               
										      <label><input name="desapprove_post" type="radio" id="ai_desapprove_post" value="0" {if $tsConfig.c_desapprove_post != 1}checked="checked"{/if} class="radio"/>No</label>                                            
                                            </dd>
                                        </dl>

Agregar:

                                        <dl>
                                            <dt><label for="ai_desapprove_foto">Revisi&oacute;n de fotos tras su publicaci&oacute;n</label><br /><span>Si est&aacute; activado, el equipo de moderaci&oacute;n deber&aacute; aprobar una foto antes de que &eacute;sta sea publicada.</span></dt>                                            
                                            <dd>
                                              <label><input name="desapprove_foto" type="radio" id="ai_desapprove_foto" value="1" {if $tsConfig.c_desapprove_foto == 1}checked="checked"{/if} class="radio"/>S&iacute;</label>                                               
                                              <label><input name="desapprove_foto" type="radio" id="ai_desapprove_foto" value="0" {if $tsConfig.c_desapprove_foto != 1}checked="checked"{/if} class="radio"/>No</label>                                            
                                            </dd>
                                        </dl>

9. En templates/admin_mods/m.admin_rangos.tpl debajo de:

										<input type="checkbox" id="mocp" name="mod-contenidoposts" {if $tsRango.permisos.mocp}checked{/if} /><label style="font-weight:bold;" for="mocp">Posts desaprobados. </label><label for="mocp"> &nbsp; Podr&aacute;n ver la secci&oacute;n y los posts ocultos.</label>
										<br /><hr>

Agregar:

										<input type="checkbox" id="mocf" name="mod-contenidofotos" {if $tsRango.permisos.mocf}checked{/if} /><label style="font-weight:bold;" for="mocf">Fotos desaprobadas. </label><label for="mocf"> &nbsp; Podr&aacute;n ver la secci&oacute;n y las fotos ocultas.</label>
										<br /><hr>

10. En esa carpeta crear el archivo templates/admin_mods/m.mod_revision_fotos.tpl y en su contenido agregar:

<div class="boxy-title">
   <h3>Fotos desaprobadas</h3>
</div>
<div id="res" class="boxy-content" style="position:relative">                          
{if !$tsFotos.datos}
<div class="phpostAlfa">No hay fotos esperando aprobaci&oacute;n</div>
{else}
<table cellpadding="0" cellspacing="0" border="0" class="admin_table" width="100%" align="center">
	<thead>
		<th>ID</th>
		<th>Foto</th>
		<th>Moderador</th>							
        <th>Raz&oacute;n</th>										
		<th>Fecha</th>                                                           
		<th>IP</th>
		<th>Acciones</th>
	</thead>
	<tbody>
		{foreach from=$tsFotos.datos item=f}
		<tr id="report_{$f.foto_id}">                                            
			<td>{$f.foto_id}</td>
			<td><a href="{$tsConfig.url}/fotos/{$f.user_name}/{$f.foto_id}/{$f.f_title|seo}.html" target="_blank" title="{$f.f_title}"><img src="{$f.f_url}" width="50" height="50" /></a></td> 
			<td><a href="{$tsConfig.url}/perfil/{$f.user_name}" class="hovercard" uid="{$f.user_id}">{$f.user_name}</a></td>
			<td>{$f.reason}</td>
			<td>{$f.date|hace:true}</td> 
			<td>{$f.mod_ip}</td>                					
			<td class="admin_actions">
					<a href="#" onclick="mod.reboot({$f.foto_id}, 'fotos', 'reboot', false); return false;"><img src="{$tsConfig.default}/images/icons/reboot.png" title="Reactivar Foto" /></a>
					<a href="{$tsConfig.url}/fotos/editar.php?id={$f.foto_id}" target="_blank"><img src="{$tsConfig.default}/images/icons/edit.png" title="Editar Foto" /></a>
					<a href="#" onclick="mod.fotos.borrar({$f.foto_id}, false); return false"><img src="{$tsConfig.default}/images/icons/close.png" title="Borrar Foto" /></a>
			</td>
		</tr>
		{/foreach}
	</tbody>
	<tfoot>
		<td colspan="8">P&aacute;ginas: {$tsFotos.pages}</td>
	</tfoot>
</table>
{/if}								
</div>

11. En el archivo templates/admin_mods/m.mods_sidemenu.tpl en la misma carpeta, buscar:

{if $tsUser->is_admod || $tsUser->permisos.mocp}<li id="a_revposts"><span class="cat-title"><a onclick="$('#a_revposts').addClass('active');" href="{$tsConfig.url}/moderacion/revposts">Posts <span class="cadGe cadGe_{if $tsConfig.novemods.revposts > 15}red{elseif $tsConfig.novemods.revposts > 5}purple{else}green{/if}">{$tsConfig.novemods.revposts}</span></a></span></li>{/if}

Debajo agregar:

{if $tsUser->is_admod || $tsUser->permisos.mocf}<li id="a_revfotos"><span class="cat-title"><a onclick="$('#a_revfotos').addClass('active');" href="{$tsConfig.url}/moderacion/revfotos">Fotos <span class="cadGe cadGe_{if $tsConfig.novemods.revfotos > 15}red{elseif $tsConfig.novemods.revfotos > 5}purple{else}green{/if}">{$tsConfig.novemods.revfotos}</span></a></span></li>{/if}

12. En el archivo templates/admin_mods/m.admin_fotos.tpl al lado de:

if $f.f_status == 1

Agregar:

 || $f.f_status == 3

13. En el archivo templates/admin_mods/m.admin_stats.tpl buscar:

<li class="clearfix"><span class="floatL">&nbsp; En revisi&oacute;n</span><span class="floatR number">{$tsAdminStats.fotos_ocultas} &nbsp;</span></li>

Reemplazar por:

                                                    <li class="clearfix"><span class="floatL">&nbsp; En revisi&oacute;n</span><span class="floatR number">{$tsAdminStats.fotos_revision} &nbsp;</span></li>
        											<li class="clearfix"><span class="floatL">&nbsp; Inactivas</span><span class="floatR number">{$tsAdminStats.fotos_ocultas} &nbsp;</span></li>

14. En el archivo templates/t.moderacion.tpl debajo de:

{if $tsUser->is_admod || $tsUser->permisos.mocp}{include file='admin_mods/m.mod_revision_posts.tpl'}{/if}

Agregar:

                                {elseif $tsAction == 'revfotos'}
                                {if $tsUser->is_admod || $tsUser->permisos.mocf}{include file='admin_mods/m.mod_revision_fotos.tpl'}{/if}

15. Por último en css/moderacion.css al lado de:

li#a_revposts

Agregar:

, li#a_revfotos

Y listo eso es todo, la instalación es algo larga pero abarca muchas secciones importantes para que esté bien instalado, es decir que se note tanto en la administración como en la moderación y claro está que no se vean las fotos públicas después de compartirlas en la web.

EWI6ciZ.png

oFg8yuA.png

Gjv0trx.png
YxfdEvg.png

wTeAUFx.png

 

Eso es todo nos vemos en otro aporte, hasta pronto B)

 

Edited by Kmario19
  • Like 12

Share this post


Link to post
Share on other sites

Que bueno que esta esto :D , grande por haber tomado el pedido y  haberlo cumplido con creces , Gracias por la dedicación que le pones a esto  ;)

Share this post


Link to post
Share on other sites

La verdad que nose como agradecerte, muy buen trabajo!!
Estos detalles hacen de Phpost una gran comunidad.
Muchas gracias por haber tomado mi consulta, mañana la implementare :)

A muchos le vendrá bien, ya que a veces hay imágenes prohibidas que se suben y no las llegamos a ver a tiempo.

GRACIAS!! :D

Share this post


Link to post
Share on other sites

Buen mod kmario, además lo hiciste completísimo! Me quedé sin +1, en cuanto tenga vengo a dejarlo ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Patrocinador



  • ×