1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-05-17 08:18:18 +03:00

доработка инвайтов, введено ограничение на число приглашений и отображение в профиле кто кого пригласил

This commit is contained in:
Mzhelskiy Maxim 2008-10-16 04:29:15 +00:00
parent 16b2f600bd
commit 2367a27ff6
8 changed files with 193 additions and 9 deletions

View file

@ -132,6 +132,19 @@ class ActionProfile extends Action {
* Получаем список тех у кого в друзьях
*/
$aUsersSelfFrend=$this->User_GetUsersSelfFrend($this->oUserProfile->getId());
if (USER_USE_INVITE) {
/**
* Получаем список тех кого пригласил юзер
*/
$aUsersInvite=$this->User_GetUsersInvite($this->oUserProfile->getId());
$this->Viewer_Assign('aUsersInvite',$aUsersInvite);
/**
* Получаем того юзера, кто пригласил текущего
*/
$oUserInviteFrom=$this->User_GetUserInviteFrom($this->oUserProfile->getId());
$this->Viewer_Assign('oUserInviteFrom',$oUserInviteFrom);
}
/**
* Получаем список блогов в которых состоит юзер
*/
@ -145,7 +158,7 @@ class ActionProfile extends Action {
*/
$this->Viewer_Assign('aBlogsUser',$aBlogsUser);
$this->Viewer_Assign('aBlogsOwner',$aBlogsOwner);
$this->Viewer_Assign('aUsersFrend',$aUsersFrend);
$this->Viewer_Assign('aUsersFrend',$aUsersFrend);
$this->Viewer_Assign('aUsersSelfFrend',$aUsersSelfFrend);
$this->Viewer_AddHtmlTitle('Профиль '.$this->oUserProfile->getLogin());
$this->Viewer_AddHtmlTitle('Whois');

View file

@ -97,21 +97,28 @@ class ActionSettings extends Action {
*
* @return unknown
*/
protected function EventInvite() {
$this->sMenuItemSelect='invite';
$this->sMenuSubItemSelect='';
$this->Viewer_AddHtmlTitle('Инвайты');
protected function EventInvite() {
if (!USER_USE_INVITE) {
$this->Message_AddErrorSingle('Приглашения не доступны','Ошибка');
return Router::Action('error');
}
$this->sMenuItemSelect='invite';
$this->sMenuSubItemSelect='';
$this->Viewer_AddHtmlTitle('Инвайты');
$this->Viewer_Assign('iCountInviteAvailable',$this->User_GetCountInviteAvailable($this->oUserCurrent));
$this->Viewer_Assign('iCountInviteUsed',$this->User_GetCountInviteUsed($this->oUserCurrent->getId()));
if (!isset($_REQUEST['submit_invite'])) {
return ;
}
if (!$this->ACL_CanSendInvite($this->oUserCurrent) and !$this->oUserCurrent->isAdministrator()) {
$this->Message_AddError('У вас пока нет доступных инвайтов','Ошибка');
return ;
}
if (!func_check(getRequest('invite_mail'),'mail')) {
$this->Message_AddError('Неверный формат e-mail','Ошибка');
return ;

View file

@ -154,5 +154,17 @@ class ACL extends Module {
}
return false;
}
/**
* Проверяет можно ли юзеру слать инвайты
*
* @param UserEntity_User $oUser
* @return unknown
*/
public function CanSendInvite(UserEntity_User $oUser) {
if ($this->User_GetCountInviteAvailable($oUser)==0) {
return false;
}
return true;
}
}
?>

View file

@ -431,6 +431,8 @@ class User extends Module {
* @return unknown
*/
public function UpdateInvite(UserEntity_Invite $oInvite) {
//чистим зависимые кеши
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("invate_new_to_{$oInvite->getUserToId()}","invate_new_from_{$oInvite->getUserFromId()}"));
return $this->oMapper->UpdateInvite($oInvite);
}
/**
@ -446,5 +448,65 @@ class User extends Module {
$oInvite->setUserFromId($oUser->getId());
return $this->AddInvite($oInvite);
}
/**
* Получает число использованых приглашений юзером за определенную дату
*
* @param unknown_type $sUserIdFrom
* @param unknown_type $sDate
* @return unknown
*/
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
return $this->oMapper->GetCountInviteUsedByDate($sUserIdFrom,$sDate);
}
/**
* Получает полное число использованных приглашений юзера
*
* @param unknown_type $sUserIdFrom
* @return unknown
*/
public function GetCountInviteUsed($sUserIdFrom) {
return $this->oMapper->GetCountInviteUsed($sUserIdFrom);
}
/**
* Получаем число доступных приглашений для юзера
*
* @param unknown_type $oUserFrom
* @return unknown
*/
public function GetCountInviteAvailable(UserEntity_User $oUserFrom) {
$sDay=7;
$iCountUsed=$this->GetCountInviteUsedByDate($oUserFrom->getId(),date("Y-m-d 00:00:00",mktime(0,0,0,date("m"),date("d")-$sDay,date("Y"))));
$iCountAllAvailable=round($oUserFrom->getRating()+$oUserFrom->getSkill());
$iCountAllAvailable = $iCountAllAvailable<0 ? 0 : $iCountAllAvailable;
$iCountAvailable=$iCountAllAvailable-$iCountUsed;
$iCountAvailable = $iCountAvailable<0 ? 0 : $iCountAvailable;
return $iCountAvailable;
}
/**
* Получает список приглашенных юзеров
*
* @param unknown_type $sUserId
* @return unknown
*/
public function GetUsersInvite($sUserId) {
if (false === ($data = $this->Cache_Get("users_invite_{$sUserId}"))) {
$data = $this->oMapper->GetUsersInvite($sUserId);
$this->Cache_Set($data, "users_invite_{$sUserId}", array("user_update","invate_new_from_{$sUserId}"), 60*5);
}
return $data;
}
/**
* Получает юзера который пригласил
*
* @param unknown_type $sUserIdTo
* @return unknown
*/
public function GetUserInviteFrom($sUserIdTo) {
if (false === ($data = $this->Cache_Get("user_invite_from_{$sUserIdTo}"))) {
$data = $this->oMapper->GetUserInviteFrom($sUserIdTo);
$this->Cache_Set($data, "user_invite_from_{$sUserIdTo}", array("user_update","invate_new_to_{$sUserIdTo}"), 60*5);
}
return $data;
}
}
?>

View file

@ -441,5 +441,64 @@ class Mapper_User extends Mapper {
}
return false;
}
public function GetCountInviteUsedByDate($sUserIdFrom,$sDate) {
$sql = "SELECT count(invite_id) as count FROM ".DB_TABLE_INVITE." WHERE user_from_id = ?d and invite_date_add >= ? ";
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom,$sDate)) {
return $aRow['count'];
}
return 0;
}
public function GetCountInviteUsed($sUserIdFrom) {
$sql = "SELECT count(invite_id) as count FROM ".DB_TABLE_INVITE." WHERE user_from_id = ?d";
if ($aRow=$this->oDb->selectRow($sql,$sUserIdFrom)) {
return $aRow['count'];
}
return 0;
}
public function GetUsersInvite($sUserId) {
$sql = "SELECT
u.*
FROM
".DB_TABLE_INVITE." as i,
".DB_TABLE_USER." as u
WHERE
i.user_from_id = ?d
AND
i.user_to_id = u.user_id
AND
u.user_activate = 1
ORDER BY u.user_login;
";
$aUsers=array();
if ($aRows=$this->oDb->select($sql,$sUserId)) {
foreach ($aRows as $aUser) {
$aUsers[]=new UserEntity_User($aUser);
}
}
return $aUsers;
}
public function GetUserInviteFrom($sUserIdTo) {
$sql = "SELECT
u.*
FROM
".DB_TABLE_INVITE." as i,
".DB_TABLE_USER." as u
WHERE
i.user_to_id = ?d
AND
i.user_from_id = u.user_id
AND
u.user_activate = 1
LIMIT 0,1;
";
if ($aRow=$this->oDb->selectRow($sql,$sUserIdTo)) {
return new UserEntity_User($aRow);
}
return null;
}
}
?>

View file

@ -129,7 +129,7 @@ ALTER TABLE `prefix_invite`
ADD CONSTRAINT `prefix_invite_fk` FOREIGN KEY (`user_from_id`) REFERENCES `prefix_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `prefix_invite_fk1` FOREIGN KEY (`user_to_id`) REFERENCES `prefix_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `prefix_invite` ADD INDEX ( `invite_date_add` )
-- Дополнительные поля настройки у юзера

View file

@ -120,6 +120,33 @@
</div>
{/if}
{if $USER_USE_INVITE and $oUserInviteFrom}
<div class="logicgroup_menu">
<div class="userinfo_line">
<div class="left">
Пригласил:
</div>
<div class="right">
<span class="nowrap"><a href="{$DIR_WEB_ROOT}/profile/{$oUserInviteFrom->getLogin()}/"><img src="{$DIR_STATIC_SKIN}/img/user.gif" border="0" alt="посмотреть профиль" title="посмотреть профиль"></a><a href="{$DIR_WEB_ROOT}/profile/{$oUserInviteFrom->getLogin()}/" class="userinfo_nickname_normal">{$oUserInviteFrom->getLogin()}</a></span>
</div>
</div>
</div>
{/if}
{if $USER_USE_INVITE and $aUsersInvite}
<div class="logicgroup_menu">
<div class="userinfo_line">
<div class="left">
Приглашенные:
</div>
<div class="right">
{foreach from=$aUsersInvite item=oUserInvite}
<span class="nowrap"><a href="{$DIR_WEB_ROOT}/profile/{$oUserInvite->getLogin()}/"><img src="{$DIR_STATIC_SKIN}/img/user.gif" border="0" alt="посмотреть профиль" title="посмотреть профиль"></a><a href="{$DIR_WEB_ROOT}/profile/{$oUserInvite->getLogin()}/" class="userinfo_nickname_normal">{$oUserInvite->getLogin()}</a></span>
{/foreach}
</div>
</div>
</div>
{/if}
{if $aBlogsOwner}
<div class="logicgroup">

View file

@ -13,7 +13,11 @@
<p><span class="header">Управление приглашениями</span>
<BR>
<BR>Доступно: {if $oUserCurrent->isAdministrator()}много{else}{$iCountInviteAvailable}{/if}
<BR>Использовано: {$iCountInviteUsed}
<BR>
<BR>
<form action="{$DIR_WEB_ROOT}/settings/invite/" method="POST" enctype="multipart/form-data">
<label for="invite_mail"><span class="form">Пригласить по e-mail адресу:</span></label><br />