• ¡Bienvenido a XenFácil!

    Estás viendo el sitio como Invitado. Para poder participar en este sitio

    y obtendrás privilegios adicionales, acceso a otras áreas y mucho mas.

    ¡Es gratis!


    ¿Ya eres miembro? Inicia sesión

FAQ Codigo para grupos de usuarios

Estado
Cerrado para nuevas respuestas

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Tengo este código de un complemento pero necesito cambiarlo para que sólo trabaje con grupos de usuarios, alguien puede guiarme ...

PHP:
	public function sendMonthlyEmails()
	{
		$users = $this->getModelFromCache('XenForo_Model_User')->getUsers(array(
			'user_status' => 'valid',
			'receive_admin_email' => 1,
			'is_banned' => 0,
		), array(
			'join' => XenForo_Model_User::FETCH_USER_FULL
		));
 
		$viewParams = array(
			'options' => XenForo_Application::get('options'),
			'threads' => $this->_getRecentPublicThreads()
		);
 
		foreach ($users as $user)
		{
			$mail = XenForo_Mail::create('monthly_email', array_merge($viewParams, array('user' => $user)), $user['language_id']);
			$mail->enableAllLanguagePreCache();
			$mail->queue($user['email'], $user['username']);
		}
	}

Nota: Ya tengo una variable para los grupos de usuarios, lo que me falta es saber donde y como insertarla:

PHP:
$options->monthlyemail_groups)
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Básicamente sería meter una condicional en el foreach en que compararías el grupo de $user con el/los que deseas que ocurra. Si cumple, envías el email y si no cumple lo dejas pasar.

Si eres más explícito ($options->monthlyemail_groups ¿es una matríz, es un literal?) se te podría ayudar más.

Si es matríz, puedes comparar los array ( if (is_inArray($options->monthlyemail_groups, $user['usergroupid']) {código aquí}). Aún no siendo array puede funcionar esta condicional.

Me dices

Salud2
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Prueba con esto:
PHP:
 public function sendMonthlyEmails()
{
  $options = XenForo_Application::get('options');
  $users = $this->_getUserModel()->getUsers(array(
  'user_status' => 'valid',
  'receive_admin_email' => 1,
  'is_banned' => 0,
  ), array(
  'join' => XenForo_Model_User::FETCH_USER_FULL
  ));
  $viewParams = array(
  'options' => XenForo_Application::get('options'),
  'threads' => $this->_getRecentPublicThreads()
  );
 
  $groupsIds = explode(',', $options->monthlyemail_groups);
 
  foreach ($users as $user)
  {
  if ($this->isMemberOf($user, $groupsIds, true))
  {
	$mail = XenForo_Mail::create('monthly_email', array_merge($viewParams, array('user' => $user)), $user['language_id']);
	$mail->enableAllLanguagePreCache();
	$mail->queue($user['email'], $user['username']);
  }
  }
}
 
/**
  * Determina si el visitante es miembro de un grupo especificado
  *
  * @param integer $userGroupId
  * @param boolean $includeSecondaryGroups
  *
  * @return boolean
  */
public function isMemberOf(&$user, $userGroupId, $includeSecondaryGroups = true)
{
  $userModel = $this->_getUserModel();
  return $userModel->isMemberOfUserGroup($user, $userGroupId, $includeSecondaryGroups);
}
/**
  * @return XenForo_Model_User
  */
protected function _getUserModel()
{
  return $this->getModelFromCache('XenForo_Model_User');
}

Salud2
 

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Gracias por responder Lms.

Me da error, te voy a pasar el complemento con lo que llevo hecho en una conversación, creo que lo entenderás mejor.
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Es interesante poner qué error te da.

Prueba cambiando la nueva función que te paso por esto:
PHP:
 public function isMemberOf(&$user, $userGroupId, $includeSecondaryGroups = true)
 {
  static $userModel = null;
  if ($userModel === null)
  {
   $userModel = XenForo_Model::create('XenForo_Model_User');
  }
  return $userModel->isMemberOfUserGroup($user, $userGroupId, $includeSecondaryGroups);
 }

Salud2
 

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Tienes razón con lo del informe del error, así que aqui te lo dejo.

Error con el primer código.
Insertar CODE, HTML o PHP:
Registro de errores

Información del error

ErrorException: Undefined variable: options - library\MonthlyEmails\Model\Email.php:20
Generado por: Admin, Hace un momento

Seguimiento

#0 C:\wamp\www\xf13\library\MonthlyEmails\Model\Email.php(20): XenForo_Application::handlePhpError(8, 'Undefined varia...', 'C:\wamp\www\xf1...', 20, Array)
#1 C:\wamp\www\xf13\library\MonthlyEmails\CronEntry\MonthlyEmail.php(7): MonthlyEmails_Model_Email->sendMonthlyEmails()
#2 [internal function]: MonthlyEmails_CronEntry_MonthlyEmail::sendEmails(Array)
#3 C:\wamp\www\xf13\library\XenForo\Model\Cron.php(356): call_user_func(Array, Array)
#4 C:\wamp\www\xf13\library\XenForo\ControllerAdmin\Cron.php(204): XenForo_Model_Cron->runEntry(Array)
#5 C:\wamp\www\xf13\library\XenForo\FrontController.php(310): XenForo_ControllerAdmin_Cron->actionRun()
#6 C:\wamp\www\xf13\library\XenForo\FrontController.php(132): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#7 C:\wamp\www\xf13\admin.php(13): XenForo_FrontController->run()
#8 {main}

Estado de la solicitud

array (size=3)
  'url' => string 'http://127.0.0.1/xf13/admin.php?cron/sendMonthlyEmails/run&_xfToken=1%2C1354475684%2C66b9d6ea76ca5acf5a89b5a0a8f20723d980006f' (length=125)
  '_GET' => 
	array (size=2)
	  'cron/sendMonthlyEmails/run' => string '' (length=0)
	  '_xfToken' => string '1,1354475684,66b9d6ea76ca5acf5a89b5a0a8f20723d980006f' (length=53)
  '_POST' => 
	array (size=0)
	  empty


Error con el segundo código.
Insertar CODE, HTML o PHP:
Registro de errores

Información del error

ErrorException: Undefined variable: options - library\MonthlyEmails\Model\Email.php:20
Generado por: Admin, hace 3 minutos

Seguimiento

#0 C:\wamp\www\xf13\library\MonthlyEmails\Model\Email.php(20): XenForo_Application::handlePhpError(8, 'Undefined varia...', 'C:\wamp\www\xf1...', 20, Array)
#1 C:\wamp\www\xf13\library\MonthlyEmails\CronEntry\MonthlyEmail.php(7): MonthlyEmails_Model_Email->sendMonthlyEmails()
#2 [internal function]: MonthlyEmails_CronEntry_MonthlyEmail::sendEmails(Array)
#3 C:\wamp\www\xf13\library\XenForo\Model\Cron.php(356): call_user_func(Array, Array)
#4 C:\wamp\www\xf13\library\XenForo\ControllerAdmin\Cron.php(204): XenForo_Model_Cron->runEntry(Array)
#5 C:\wamp\www\xf13\library\XenForo\FrontController.php(310): XenForo_ControllerAdmin_Cron->actionRun()
#6 C:\wamp\www\xf13\library\XenForo\FrontController.php(132): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#7 C:\wamp\www\xf13\admin.php(13): XenForo_FrontController->run()
#8 {main}

Estado de la solicitud

array (size=3)
  'url' => string 'http://127.0.0.1/xf13/admin.php?cron/sendMonthlyEmails/run&_xfToken=1%2C1354475927%2Ca2d0a93f45d4c1aa8c3dbae6079896445591bf70' (length=125)
  '_GET' => 
	array (size=2)
	  'cron/sendMonthlyEmails/run' => string '' (length=0)
	  '_xfToken' => string '1,1354475927,a2d0a93f45d4c1aa8c3dbae6079896445591bf70' (length=53)
  '_POST' => 
	array (size=0)
	  empty
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Gracias por la ayuda.

Ahora me genera este nuevo error:

Insertar CODE, HTML o PHP:
Registro de errores

Información del error
ErrorException: explode() expects parameter 2 to be string, array given - library\MonthlyEmails\Model\Email.php:21
Generado por: Admin, Hace 1 minuto

Seguimiento
#0 [internal function]: XenForo_Application::handlePhpError(2, 'explode() expec...', 'C:\wamp\www\xf1...', 21, Array)
#1 C:\wamp\www\xf13\library\MonthlyEmails\Model\Email.php(21): explode(',', Array)
#2 C:\wamp\www\xf13\library\MonthlyEmails\CronEntry\MonthlyEmail.php(7): MonthlyEmails_Model_Email->sendMonthlyEmails()
#3 [internal function]: MonthlyEmails_CronEntry_MonthlyEmail::sendEmails(Array)
#4 C:\wamp\www\xf13\library\XenForo\Model\Cron.php(356): call_user_func(Array, Array)
#5 C:\wamp\www\xf13\library\XenForo\ControllerAdmin\Cron.php(204): XenForo_Model_Cron->runEntry(Array)
#6 C:\wamp\www\xf13\library\XenForo\FrontController.php(310): XenForo_ControllerAdmin_Cron->actionRun()
#7 C:\wamp\www\xf13\library\XenForo\FrontController.php(132): XenForo_FrontController->dispatch(Object(XenForo_RouteMatch))
#8 C:\wamp\www\xf13\admin.php(13): XenForo_FrontController->run()
#9 {main}

Estado de la solicitud
array (size=3)
  'url' => string 'http://127.0.0.1/xf13/admin.php?cron/sendMonthlyEmails/run&_xfToken=1,1354480226,ef981451da365510d43a25495063396fbbd0311a' (length=121)
  '_GET' => 
	array (size=2)
	  'cron/sendMonthlyEmails/run' => string '' (length=0)
	  '_xfToken' => string '1,1354480226,ef981451da365510d43a25495063396fbbd0311a' (length=53)
  '_POST' => 
	array (size=0)
	  empty
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Sustituye la línea de
PHP:
  $groupsIds = explode(',', $options->monthlyemail_groups);
por
PHP:
  if (!is_array($options->monthlyemail_groups)
  {
  $groupsIds = explode(',', $options->monthlyemail_groups);
  }
  else
  {
   $groupsIds = $options->monthlyemail_groups;
  }

Salud2
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
El código final sería:
PHP:
 public function sendMonthlyEmails()
{
  $options = XenForo_Application::get('options');
  $users = $this->_getUserModel()->getUsers(array(
  'user_status' => 'valid',
  'receive_admin_email' => 1,
  'is_banned' => 0,
  ), array(
  'join' => XenForo_Model_User::FETCH_USER_FULL
  ));
  $viewParams = array(
  'options' => XenForo_Application::get('options'),
  'threads' => $this->_getRecentPublicThreads()
  );
 
  if (!is_array($options->monthlyemail_groups))
  {
  $groupsIds = explode(',', $options->monthlyemail_groups);
  }
  else
  {
  $groupsIds = $options->monthlyemail_groups;
  }
  foreach ($users as $user)
  {
  if ($this->isMemberOf($user, $groupsIds, true))
  {
	$mail = XenForo_Mail::create('monthly_email', array_merge($viewParams, array('user' => $user)), $user['language_id']);
	$mail->enableAllLanguagePreCache();
	$mail->queue($user['email'], $user['username']);
  }
  }
}
 
/**
  * Determina si el visitante es miembro de un grupo especificado
  *
  * @param integer $userGroupId
  * @param boolean $includeSecondaryGroups
  *
  * @return boolean
  */
public function isMemberOf(&$user, $userGroupId, $includeSecondaryGroups = true)
{
  static $userModel = null;
  if ($userModel === null)
  {
  $userModel = XenForo_Model::create('XenForo_Model_User');
  }
  return $userModel->isMemberOfUserGroup($user, $userGroupId, $includeSecondaryGroups);
}
/**
  * @return XenForo_Model_User
  */
protected function _getUserModel()
{
  return $this->getModelFromCache('XenForo_Model_User');
}

Salud2
 

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Pues no me va, ahora me genera este:
Insertar CODE, HTML o PHP:
( ! ) Parse error: syntax error, unexpected '{' in C:\wamp\www\xf13\library\MonthlyEmails\Model\Email.php on line 22
Call Stack
#	Time	Memory	Function	Location
1	0.0003	373224	{main}( )	..\admin.php:0
2	0.0131	1387152	XenForo_FrontController->run( )	..\admin.php:13
3	0.0413	3987040	XenForo_FrontController->dispatch( )	..\FrontController.php:132
4	0.0649	5633296	XenForo_ControllerAdmin_Cron->actionRun( )	..\FrontController.php:310
5	0.0679	5739720	XenForo_Model_Cron->runEntry( )	..\Cron.php:204
6	0.0683	5742512	call_user_func ( )	..\Cron.php:356
7	0.0683	5742528	MonthlyEmails_CronEntry_MonthlyEmail::sendEmails( )	..\Cron.php:356
8	0.0683	5742600	XenForo_Model::create( )	..\MonthlyEmail.php:7
9	0.0683	5742648	XenForo_Application::resolveDynamicClass( )	..\Model.php:189
10	0.0683	5742680	XenForo_Application::autoload( )	..\Application.php:352
11	0.0683	5742680	XenForo_Autoloader->autoload( )	..\Application.php:858

error.png

Después de tres días intentando de todo ya me voy a dar por vencido.
 

lms

Administrador
Mensajes
7.741
Puntuación de reacciones
2.163
Puntos
2.613
Sitio web
xenfacil.com
País
España
Versión de XenForo
2.1.x
PayPal
Donar dinero a este usuario
Página web
Web
Sí señor. ¡Me había dejado un cierre de paréntesis!

Ya lo he corregido en el último código.

Prueba ahora.

Salud2
 

luis

Administrador
Mensajes
1.636
Puntuación de reacciones
727
Puntos
613
Sitio web
xenfacil.com
País
España
Versión de XenForo
1.5.12
PayPal
Donar dinero a este usuario
Página web
Web
Gracias Lms, ahora funciona perfectamente.

Ahora voy a ver si implemento días de corte para los temas y días de inactividad de usuarios.

Este ya lo cierro pues ya está solucionado.
 
Estado
Cerrado para nuevas respuestas
Arriba