Вход Регистрация
Файл: upload/module/group/include/service/process.class.php
Строк: 666
<?php
/**
 * [PHPFOX_HEADER]
 */

defined('PHPFOX') or exit('NO DICE!');

/**
 * 
 * 
 * @copyright        [PHPFOX_COPYRIGHT]
 * @author          Raymond Benc
 * @package          Module_Group
 * @version         $Id: process.class.php 2526 2011-04-13 18:15:51Z Raymond_Benc $
 */
class Group_Service_Process extends Phpfox_Service 
{
    private 
$_bHasImage false;
    
    private 
$_aInvited = array();
    
    private 
$_aCategories = array();    
    
    
/**
     * Class constructor
     */    
    
public function __construct()
    {    
        
$this->_sTable Phpfox::getT('group');
    }
    
    public function 
add($aVals)
    {        
        if (!
$this->_verify($aVals))
        {
            return 
false;
        }
        
        
$oParseInput Phpfox::getLib('parse.input');        

        
$bIApproveGroup = (Phpfox::getUserParam('group.approve_groups') ? true false);
        
$sCheck '';
        foreach (
$aVals as $aVal)
        {
            if (
is_array($aVal))
            {
                
$sCheck .= implode(' '$aVal);
            }
            else
            {
                
$sCheck .= ' ' $aVal;
            }
        }
        
        
Phpfox::getService('ban')->checkAutomaticBan($sCheck);
        
$sUrlTitle $oParseInput->prepareTitle('group'$aVals['title'], 'title_url'null$this->_sTable);                
        
$aSql = array(
            
'is_public' => ($bIApproveGroup '1' '0'),
            
'view_id' => (int) $aVals['view_id'],
            
'user_id' => Phpfox::getUserId(),
            
'title' => $oParseInput->clean($aVals['title'], 255),
            
'title_url' => $sUrlTitle,
            
'short_description' => (empty($aVals['short_description']) ? null $oParseInput->clean($aVals['short_description'], 255)),
            
'country_iso' => $aVals['country_iso'],
            
'country_child_id' => (isset($aVals['country_child_id']) ? (int) $aVals['country_child_id'] : 0),
            
'postal_code' => (empty($aVals['postal_code']) ? null Phpfox::getLib('parse.input')->clean($aVals['postal_code'], 20)),
            
'city' => (empty($aVals['city']) ? null $oParseInput->clean($aVals['city'], 255)),
            
'time_stamp' => PHPFOX_TIME,
            
'auto_approve' => (int)$aVals['auto_approve']
        );
        
        
$iId $this->database()->insert($this->_sTable$aSql);
        
        if (!
$iId)
        {
            return 
false;
        }
        
        
$this->database()->insert(Phpfox::getT('group_text'), array(
                
'group_id' => $iId,
                
'description' => (empty($aVals['description']) ? null $oParseInput->clean($aVals['description'])),
                
'description_parsed' => (empty($aVals['description']) ? null $oParseInput->prepare($aVals['description']))
            )
        );        
        
        
$this->updateAccess($iId$aVals);
        
        foreach (
$this->_aCategories as $iCategoryId)
        {
            
$this->database()->insert(Phpfox::getT('group_category_data'), array('group_id' => $iId'category_id' => $iCategoryId));
        }        
        
        if (
$aVals['view_id'] != '2' && !$bIApproveGroup)
        {
            (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->add('group'$iId) : null);
        }
        
        
$this->joinGroup($iIdPhpfox::getUserId(), true);
                
        
// Plugin call
        
if ($sPlugin Phpfox_Plugin::get('group.service_process_add__end')){eval($sPlugin);}
                
        return 
$iId;
    }    
    
    public function 
approve($iGroupId)
    {
        
$aGroup $this->database()->select('*')
            ->
from(Phpfox::getT('group'))
            ->
where('group_id = ' . (int) $iGroupId)
            ->
execute('getSlaveRow');
            
        if (!isset(
$aGroup['group_id']))
        {
            return 
false;
        }
        
        
$this->database()->update(Phpfox::getT('group'), array('is_public' => '0'), 'group_id = ' . (int) $iGroupId);
        
        (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->add('group'$aGroup['group_id']) : null);
        
        
$sCurrentUrl Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);
        
Phpfox::getLib('mail')->to($aGroup['user_id'])
            ->
subject(array('group.group_approved_on_site_title', array('site_title' => Phpfox::getParam('core.site_title'))))
            ->
message(array('group.your_group_group_title_on_site_title', array('group_title' => $aGroup['title'], 'site_title' => Phpfox::getParam('core.site_title'), 'link' => $sCurrentUrl)))
            ->
send();        
        
        return 
true;
    }
    
    public function 
update($iId$aVals$aGroupPost null)
    {
        if (!
$this->_verify($aVals))
        {
            return 
false;
        }
        
Phpfox::getService('ban')->checkAutomaticBan($aVals['title'] . ' ' $aVals['description']);
        
$oParseInput Phpfox::getLib('parse.input');
        
        
$aSql = array(
            
'view_id' => (int) $aVals['view_id'],
            
'title' => $oParseInput->clean($aVals['title'], 255),
            
'short_description' => (empty($aVals['short_description']) ? null $oParseInput->clean($aVals['short_description'], 255)),
            
'country_iso' => $aVals['country_iso'],
            
'country_child_id' => (isset($aVals['country_child_id']) ? (int) $aVals['country_child_id'] : 0),
            
'postal_code' => (empty($aVals['postal_code']) ? null Phpfox::getLib('parse.input')->clean($aVals['postal_code'], 20)),
            
'city' => (empty($aVals['city']) ? null $oParseInput->clean($aVals['city'], 255)),            
        );            
        
        if (
$this->_bHasImage)
        {            
            
$oImage Phpfox::getLib('image');
            
            
$sFileName Phpfox::getLib('file')->upload('image'Phpfox::getParam('group.dir_image'), $iId);
            
$iFileSizes filesize(Phpfox::getParam('group.dir_image') . sprintf($sFileName''));            
            
            
$aSql['image_path'] = $sFileName;
            
$aSql['server_id'] = Phpfox::getLib('request')->getServer('PHPFOX_SERVER_ID');
            
            
$iSize 50;            
            
$oImage->createThumbnail(Phpfox::getParam('group.dir_image') . sprintf($sFileName''), Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize), $iSize$iSize);            
            
$iFileSizes += filesize(Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize));            
            
            
$iSize 120;            
            
$oImage->createThumbnail(Phpfox::getParam('group.dir_image') . sprintf($sFileName''), Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize), $iSize$iSize);            
            
$iFileSizes += filesize(Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize));

            
$iSize 200;            
            
$oImage->createThumbnail(Phpfox::getParam('group.dir_image') . sprintf($sFileName''), Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize), $iSize$iSize);            
            
$iFileSizes += filesize(Phpfox::getParam('group.dir_image') . sprintf($sFileName'_' $iSize));
            
            
// Update user space usage
            
Phpfox::getService('user.space')->update(Phpfox::getUserId(), 'group'$iFileSizes);
        }    
        
        
$this->database()->update($this->_sTable$aSql'group_id = ' . (int) $iId);    
        
        
$this->database()->update(Phpfox::getT('group_text'), array(                
                
'description' => (empty($aVals['description']) ? null $oParseInput->clean($aVals['description'])),
                
'description_parsed' => (empty($aVals['description']) ? null $oParseInput->prepare($aVals['description']))
            ), 
'group_id = ' . (int) $iId
        
);        
        
        
$this->updateAccess($iId$aVals);
        
        if (isset(
$aVals['emails']) || isset($aVals['invite']))
        {
            
$aGroup $this->database()->select('title_url')
                ->
from($this->_sTable)
                ->
where('group_id = ' . (int) $iId)
                ->
execute('getSlaveRow');
                
            
$aInvites $this->database()->select('invited_user_id, invited_email')
                ->
from(Phpfox::getT('group_invite'))
                ->
where('group_id = ' . (int) $iId)
                ->
execute('getRows');
            
$aInvited = array();
            foreach (
$aInvites as $aInvite)
            {
                
$aInvited[(empty($aInvite['invited_email']) ? 'user' 'email')][(empty($aInvite['invited_email']) ? $aInvite['invited_user_id'] : $aInvite['invited_email'])] = true;
            }            
        }        
        
        if (isset(
$aVals['emails']))
        {
            
// if (strpos($aVals['emails'], ','))
            
{
                
$aEmails explode(','$aVals['emails']);
                
$aCachedEmails = array();
                foreach (
$aEmails as $sEmail)
                {
                    
$sEmail trim($sEmail);
                    if (!
Phpfox::getLib('mail')->checkEmail($sEmail))
                    {
                        continue;
                    }
                    
                    if (isset(
$aInvited['email'][$sEmail]))
                    {
                        continue;
                    }                    
                    
                    
$sLink Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);
                    
$sMessage Phpfox::getPhrase('group.full_name_invited_you_to_title', array(
                            
'full_name' => Phpfox::getUserBy('full_name'),
                            
'title' => $oParseInput->clean($aVals['title'], 255),
                            
'link' => $sLink
                        
)
                    );
                    if (!empty(
$aVals['personal_message']))
                    {
                        
$sMessage .= "nn" Phpfox::getPhrase('group.full_name_added_the_following_personal_message', array('full_name' => Phpfox::getUserBy('full_name'))) . ":n";
                        
$sMessage .= $aVals['personal_message'];
                    }                    
                    
$bSent Phpfox::getLib('mail')->to($sEmail)                        
                        ->
subject(array('group.full_name_invited_you_to_the_group_title', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $oParseInput->clean($aVals['title'], 255))))
                        ->
message($sMessage)
                        ->
send();
                        
                    
$bSent true;
                    if (
$bSent)
                    {
                        
$this->_aInvited[] = array('email' => $sEmail);
                        
                        
$aCachedEmails[$sEmail] = true;
                        
                        
$this->database()->insert(Phpfox::getT('group_invite'), array(
                                
'group_id' => $iId,                                
                                
'user_id' => Phpfox::getUserId(),
                                
'invited_email' => $sEmail,
                                
'time_stamp' => PHPFOX_TIME
                            
)
                        );
                    }
                }
            }
        }
        
        if (isset(
$aVals['invite']) && is_array($aVals['invite']))
        {
            
$sUserIds '';
            foreach (
$aVals['invite'] as $iUserId)
            {
                if (!
is_numeric($iUserId))
                {
                    continue;
                }
                
$sUserIds .= $iUserId ',';
            }
            
$sUserIds rtrim($sUserIds',');
            
            
$aUsers $this->database()->select('user_id, email, language_id, full_name')
                ->
from(Phpfox::getT('user'))
                ->
where('user_id IN(' $sUserIds ')')
                ->
execute('getSlaveRows');
                
            foreach (
$aUsers as $aUser)
            {
                if (isset(
$aCachedEmails[$aUser['email']]))
                {
                    continue;
                }    
                
                if (isset(
$aInvited['user'][$aUser['user_id']]))
                {
                    continue;
                }                                            
                
                
$sLink Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);
                
$sMessage Phpfox::getPhrase('group.full_name_invited_you_to_title', array(
                        
'full_name' => Phpfox::getUserBy('full_name'),
                        
'title' => $oParseInput->clean($aVals['title'], 255),
                        
'link' => $sLink
                    
), falsenull$aUser['language_id']
                );
                if (!empty(
$aVals['personal_message']))
                {
                    
$sMessage .= "nn" Phpfox::getPhrase('group.full_name_added_the_following_personal_message', array('full_name' => Phpfox::getUserBy('full_name')), falsenull$aUser['language_id']) . ":n";
                    
$sMessage .= $aVals['personal_message'];
                }
                
$bSent Phpfox::getLib('mail')->to($aUser['user_id'])                        
                    ->
subject(array('group.full_name_invited_you_to_the_group_title', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $oParseInput->clean($aVals['title'], 255))))
                    ->
message($sMessage)
                    ->
notification('group.new_invite')
                    ->
send();

                
$bSent true;
                if (
$bSent)
                {
                    
$this->_aInvited[] = array('user' => $aUser['full_name']);    
                    
                    
$iInviteId $this->database()->insert(Phpfox::getT('group_invite'), array(
                            
'group_id' => $iId,                                
                            
'user_id' => Phpfox::getUserId(),
                            
'invited_user_id' => $aUser['user_id'],
                            
'time_stamp' => PHPFOX_TIME
                        
)
                    );
                    
                    (
Phpfox::isModule('request') ? Phpfox::getService('request.process')->add('group_invite'$iInviteId$aUser['user_id']) : null);
                }
            }
        }                
        
        
$this->database()->delete(Phpfox::getT('group_category_data'), 'group_id = ' . (int) $iId);
        foreach (
$this->_aCategories as $iCategoryId)
        {
            
$this->database()->insert(Phpfox::getT('group_category_data'), array('group_id' => $iId'category_id' => $iCategoryId));
        }
        
        if (
$aVals['view_id'] == '2')
        {
            (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->delete('group'$iId) : null);    
        }
        else 
        {
            if (isset(
$aGroupPost['view_id']) && $aGroupPost['view_id'] == '2')
            {
                (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->add('group'$iId) : null);
            }
            else 
            {
                (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->update('group'$iId) : null);
            }
        }
        
        return 
true;
    }    
    
    public function 
updateAccess($iGroup, &$aVals)
    {        
        
$this->database()->delete(Phpfox::getT('group_access'), 'group_id = ' . (int) $iGroup);
        if (isset(
$aVals['access']))
        {
            foreach (
$aVals['access'] as $sParam => $iValue)
            {
                
$iValue = (int) $iValue;
                
                if (
$iValue == 1)
                {
                    continue;
                }
                
                
$this->database()->insert(Phpfox::getT('group_access'), array(
                        
'group_id' => $iGroup,
                        
'var_name' => $sParam,
                        
'access_value' => $iValue
                    
)
                );
            }
        }
        
        return 
true;
    }
    
    public function 
invite($iGroup$iUserId)
    {
        
$aGroup $this->database()->select('g.group_id, g.view_id, g.title, g.title_url, gi.invite_id')    
            ->
from(Phpfox::getT('group'), 'g')
            ->
join(Phpfox::getT('group_invite'), 'gi''gi.group_id = g.group_id AND gi.member_id = 1 AND gi.invited_user_id = ' . (int) Phpfox::getUserId())
            ->
where('g.group_id = ' . (int) $iGroup)
            ->
execute('getSlaveRow');
            
        if (!isset(
$aGroup['group_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.unable_to_invite_to_this_group'));
        }
        
        
$iInviteId $this->database()->insert(Phpfox::getT('group_invite'), array(
                    
'group_id' => (int) $iGroup,                                
                    
'user_id' => Phpfox::getUserId(),
                    
'invited_user_id' => (int) $iUserId,
                    
'time_stamp' => PHPFOX_TIME
                
)
            );    
            
        
$sLink Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);
        
Phpfox::getLib('mail')->to($iUserId)                        
            ->
subject(array('group.full_name_invited_you_to_the_group_title', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $aGroup['title'])))
            ->
message(array('group.full_name_invited_you_to_title_to_check_out_this_group', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $aGroup['title'], 'link' => $sLink)))
            ->
notification('group.new_invite')
            ->
send();            
            
        (
Phpfox::isModule('request') ? Phpfox::getService('request.process')->add('group_invite'$iInviteId$iUserId) : null);    
            
        return 
true;
    }

    public function 
joinGroup($iGroup$iUserId$bIsAdmin false)
    {
        
Phpfox::isUser(true);
        
        
$aGroup $this->database()->select('group_id, view_id, title, title_url, auto_approve')
            ->
from($this->_sTable)
            ->
where('group_id = ' . (int) $iGroup)
            ->
execute('getRow');        
            
        if (!isset(
$aGroup['group_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.the_group_you_are_looking_for_does_not_exist'));
        }        
        
        
$aInvite $this->database()->select('invite_id, member_id')
            ->
from(Phpfox::getT('group_invite'))
            ->
where('group_id = ' . (int) $iGroup ' AND invited_user_id = ' . (int) $iUserId)
            ->
execute('getRow');            
        
        if (isset(
$aInvite['invite_id']))
        {            
            if (
$aGroup['view_id'] == '1')
            {
                if (
$aInvite['member_id'] == '2')
                {
                    if (!
Phpfox::getService('group')->isAdmin($aGroup['group_id']))
                    {
                        return 
Phpfox_Error::set(Phpfox::getPhrase('group.you_are_not_allowed_to_approve_members_for_this_group'));
                    }
                }                
            }            
            
            if (
$aGroup['view_id'] == '1')
            {
                
$sLink Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);            
                
Phpfox::getLib('mail')->to($iUserId)                        
                    ->
subject(array('group.group_membership_approved_title', array('title' => $aGroup['title'])))
                    ->
message(array('group.your_membership_for_the_group_title_has_been_approved', array('title' => $aGroup['title'], 'link' => $sLink)))
                    ->
notification('group.membership_approved')
                    ->
send();                                    
            }
            
            (
Phpfox::isModule('request') ? Phpfox::getService('request.process')->delete('group_invite'$aInvite['invite_id'], $iUserId) : false);            
            
            
$this->database()->update(Phpfox::getT('group_invite'), array(
                    
'member_id' => 1
                
), 'invite_id = ' $aInvite['invite_id']
            );        
            
            
$this->database()->updateCount('group_invite''group_id = ' . (int) $aGroup['group_id'] . ' AND member_id = 1''total_member''group''group_id = ' . (int) $aGroup['group_id']);
        }        
        else
        {
            
$this->database()->insert(Phpfox::getT('group_invite'), array(
                    
'group_id' => $iGroup,
                    
'is_admin' => ($bIsAdmin === true '1' '0'),
                    
'member_id' => (($aGroup['view_id'] == '1' && $bIsAdmin === false) ? '2' '1'),
                    
'user_id' => $iUserId,
                    
'invited_user_id' => $iUserId,
                    
'time_stamp' => PHPFOX_TIME
                
)
            );            
            
            if ((
$aGroup['view_id'] == '1' && $bIsAdmin === false))
            {
                
$sLink Phpfox::getLib('url')->makeUrl('group.add.manage', array('id' => $aGroup['group_id']));                
                foreach (
Phpfox::getService('group')->getAdmins($aGroup['group_id']) as $aAdmin)
                {
                    
Phpfox::getLib('mail')->to($aAdmin['user_id'])                        
                        ->
subject(array('group.title_has_a_new_member_pending_approval', array('title' => $aGroup['title'])))
                        ->
message(array('group.full_name_has_joined_the_group_title_which_you_are_administrating', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $aGroup['title'], 'link' => $sLink)))
                        ->
notification('group.member_pending_approval')
                        ->
send();
                }
            }
            
            if (
$aGroup['view_id'] == '0')
            {
                
$sLink Phpfox::getLib('url')->makeUrl('group'$aGroup['title_url']);                
                foreach (
Phpfox::getService('group')->getAdmins($aGroup['group_id']) as $aAdmin)
                {
                    
Phpfox::getLib('mail')->to($aAdmin['user_id'])                        
                        ->
subject(array('group.title_has_a_new_member', array('title' => $aGroup['title'])))
                        ->
message(array('group.full_name_has_joined_the_group_title_which_you_are_administrating', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $aGroup['title'], 'link' => $sLink)))
                        ->
notification('group.on_new_member')
                        ->
send();
                }                
                
                
$this->database()->updateCount('group_invite''group_id = ' . (int) $aGroup['group_id'] . ' AND member_id = 1''total_member''group''group_id = ' . (int) $aGroup['group_id']);
            }        
        }        
        
        return ((
$aGroup['view_id'] == '1' && !isset($aInvite['invite_id'])) ? '1' $aGroup);
    }    
    
    public function 
leaveGroup($iGroup$iUserId)
    {
        
Phpfox::isUser(true);    
        
        
$aGroup $this->database()->select('g.group_id, gi.invite_id, g.user_id')
            ->
from(Phpfox::getT('group_invite'), 'gi')
            ->
join(Phpfox::getT('group'), 'g''g.group_id = gi.group_id')
            ->
where('gi.group_id = ' . (int) $iGroup ' AND gi.invited_user_id = ' . (int) $iUserId)
            ->
execute('getRow');
            
        if (!isset(
$aGroup['group_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.unable_to_leave_this_group_as_you_are_not_a_member'));
        }
        if (
$aGroup['user_id'] == Phpfox::getUserId())
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.cant_leave_group_only_delete'));
        }
        
        
$this->database()->delete(Phpfox::getT('group_invite'), 'group_id = ' . (int) $iGroup ' AND invited_user_id = ' . (int) $iUserId);
        
        
$this->database()->updateCount('group_invite''group_id = ' . (int) $iGroup ' AND member_id = 1''total_member''group''group_id = ' . (int) $iGroup);
        
        (
Phpfox::isModule('request') ? Phpfox::getService('request.process')->delete('group_invite'$aGroup['invite_id'], $iUserId) : false);
        
        return 
true;
    }

    public function 
updateDesign($aVals)
    {
        
Phpfox::isUser(true);
        
        if (!(
$aGroup Phpfox::getService('group')->getForEdit($aVals['designer_item_id'])))
        {
            return 
false;    
        }        
        
        if (isset(
$aVals['order']))
        {
            
$this->database()->delete(Phpfox::getT('group_design_order'), 'group_id = ' . (int) $aGroup['group_id'] . ' AND is_hidden = 0');
            foreach (
$aVals['order'] as $sCacheId => $aOrder)
            {                
                
$aKey array_keys($aOrder);
                
$aValue array_values($aOrder);                
                
$this->database()->insert(Phpfox::getT('group_design_order'), array('group_id' => $aGroup['group_id'], 'cache_id' => $sCacheId'block_id' => $aKey[0], 'ordering' => $aValue[0]));
            }
        }            
        
        if (isset(
$aVals['cache_id']))
        {
            
$this->hideBlock($aGroup['group_id'], $aVals['cache_id'], ($aVals['is_installed'] ? 0));
        }        
        
        if (isset(
$aVals['style_id']))
        {
            
$this->database()->update($this->_sTable, array('designer_style_id' => (int) $aVals['style_id']), 'group_id = ' $aGroup['group_id']);
        }
        
        return 
true;
    }    
    
    public function 
hideBlock($iGroupId$sBlockId$iHidden 1)
    {        
        
$iHasEntry $this->database()->select('COUNT(*)')
            ->
from(Phpfox::getT('group_design_order'))
            ->
where('group_id = ' $iGroupId ' AND cache_id = 'js_block_border_' . $this->database()->escape($sBlockId) . ''')
            ->
execute('getSlaveField');
            
        if (
$iHasEntry)
        {
            
$this->database()->update(Phpfox::getT('group_design_order'), array('is_hidden' => $iHidden), 'group_id = ' $iGroupId ' AND cache_id = 'js_block_border_' . $this->database()->escape($sBlockId) . ''');
        }
        else 
        {
            
$this->database()->insert(Phpfox::getT('group_design_order'), array('group_id' => $iGroupId'cache_id' => 'js_block_border_' $sBlockId'block_id' => null'ordering' => 0'is_hidden' => $iHidden));
        }
    }        
    
    public function 
deleteImage($iId)
    {
        
$aGroup $this->database()->select('user_id, image_path')
            ->
from($this->_sTable)
            ->
where('group_id = ' . (int) $iId)
            ->
execute('getRow');        
            
        if (!isset(
$aGroup['user_id']))
        {
            return 
Phpfox_Error::set('Unable to find the group.');
        }
            
        if (!
Phpfox::getService('user.auth')->hasAccess('group''group_id'$iId'group.can_edit_own_group''group.can_edit_other_group'$aGroup['user_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.you_do_not_have_sufficient_permission_to_modify_this_group'));
        }            
        
        if (!empty(
$aGroup['image_path']))
        {
            
$aImages = array(
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], ''),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_50'),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_120'),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_200')
            );            
            
            
$iFileSizes 0;
            foreach (
$aImages as $sImage)
            {
                if (
file_exists($sImage))
                {
                    
$iFileSizes += filesize($sImage);
                    
                    @
unlink($sImage);
                }
            }
            
            if (
$iFileSizes 0)
            {
                
Phpfox::getService('user.space')->update($aGroup['user_id'], 'group'$iFileSizes'-');
            }
        }

        
$this->database()->update($this->_sTable, array('image_path' => null), 'group_id = ' . (int) $iId);    
        
        return 
true;
    }    
    
    public function 
delete($iId, &$aGroup null)
    {
        if (
$aGroup === null)
        {
            
$aGroup $this->database()->select('user_id, image_path, is_sponsor')
                ->
from($this->_sTable)
                ->
where('group_id = ' . (int) $iId)
                ->
execute('getRow');
                
            if (!isset(
$aGroup['user_id']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('group.unable_to_find_the_group_you_want_to_delete'));
            }
            
            if (!
Phpfox::getService('user.auth')->hasAccess('group''group_id'$iId'group.can_delete_own_group''group.can_delete_other_group'$aGroup['user_id']))
            {
                return 
Phpfox_Error::set(Phpfox::getPhrase('group.you_do_not_have_sufficient_permission_to_delete_this_listing'));
            }
        }

        
        if (!empty(
$aGroup['image_path']))
        {
            
$aImages = array(
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], ''),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_50'),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_120'),
                
Phpfox::getParam('group.dir_image') . sprintf($aGroup['image_path'], '_200')
            );            
            
            
$iFileSizes 0;
            foreach (
$aImages as $sImage)
            {
                if (
file_exists($sImage))
                {
                    
$iFileSizes += filesize($sImage);
                    
                    @
unlink($sImage);
                }
            }
            
            if (
$iFileSizes 0)
            {
                
Phpfox::getService('user.space')->update($aGroup['user_id'], 'group'$iFileSizes'-');
            }
        }
        
        
// (Phpfox::isModule('comment') ? Phpfox::getService('comment.process')->deleteForItem(null, $iId, 'group') : null);        
        
(Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->delete('group'$iId) : null);
        (
Phpfox::isModule('feed') ? Phpfox::getService('feed.process')->delete('comment_group'$iId) : null);
        
        
Phpfox::massCallback('deleteGroup'$iId);        
        
        
/*
        $aInvites = $this->database()->select('invite_id, invited_user_id')
            ->from(Phpfox::getT('group_invite'))
            ->where('group_id = ' . (int) $iId)
            ->execute('getSlaveRows');
        foreach ($aInvites as $aInvite)
        {
            (Phpfox::isModule('request') ? Phpfox::getService('request.process')->delete('group_invite', $aInvite['invite_id'], $aInvite['invited_user_id']) : false);
        }
        */
        
        
$this->database()->delete($this->_sTable'group_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('group_access'), 'group_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('group_text'), 'group_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('group_category_data'), 'group_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('group_invite'), 'group_id = ' . (int) $iId);
        
$this->database()->delete(Phpfox::getT('group_design_order'), 'group_id = ' . (int) $iId);
        
// $this->database()->delete(Phpfox::getT('group_shoutbox'), 'item_id = ' . (int) $iId);        
        
if ($aGroup['is_sponsor'] == 1)
        {
            
$this->cache()->remove('group_sponsored');
        }
        return 
true;
    }        
    
    public function 
deleteMember($iInviteId)
    {        
        
$aGroup $this->database()->select('e.group_id, e.user_id, ei.invited_user_id, ei.member_id')
            ->
from(Phpfox::getT('group_invite'), 'ei')
            ->
join($this->_sTable'e''e.group_id = ei.group_id')
            ->
where('ei.invite_id = ' . (int) $iInviteId)
            ->
execute('getRow');
            
        if (!isset(
$aGroup['user_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.unable_to_find_the_group'));
        }
            
        if (
$aGroup['user_id'] == $aGroup['invited_user_id'] && !Phpfox::getService('user.auth')->hasAccess('group''group_id'$aGroup['group_id'], 'group.can_edit_own_group''group.can_edit_other_group'$aGroup['user_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.you_do_not_have_sufficient_permission_to_modify_this_group'));
        }
        
        
$this->database()->delete(Phpfox::getT('group_invite'), 'invite_id = ' . (int) $iInviteId);    
        
        if (
$aGroup['member_id'])
        {
            
$this->database()->updateCount('group_invite''group_id = ' . (int) $aGroup['group_id'] . ' AND member_id = 1''total_member''group''group_id = ' . (int) $aGroup['group_id']);
        }
        
        (
Phpfox::isModule('request') ? Phpfox::getService('request.process')->delete('group_invite'$iInviteId$aGroup['invited_user_id']) : false);
            
        return 
true;
    }

    public function 
feature($iGroup$iType)
    {
        
Phpfox::isUser(true);
        
Phpfox::getUserParam('group.can_feature_groups'true);
        
Phpfox::getUserParam('admincp.has_admin_access'true);
        
        
$this->database()->update($this->_sTable, array('is_featured' => ((int) $iType == '1' '0')), 'group_id = ' . (int) $iGroup);
        
        return 
true;
    }

    
/**
     * Enables and disables sponsor of an item
     * @param int $iGroup
     * @param int $iType
     * @return bool
     */
    
public function sponsor($iGroup$iType)
    {
        if (!
Phpfox::getUserParam('group.can_sponsor_group') && !Phpfox::getUserParam('group.can_purchase_sponsor') && !defined('PHPFOX_API_CALLBACK'))
        {
            return 
Phpfox_Error::set('Hack attempt?');
        }

        
$iType = (int)$iType;
        if (
$iType != && $iType != 1)
        {
            return 
false;
        }
        
$this->database()->update($this->_sTable, array('is_featured' => 0'is_sponsor' => $iType), 'group_id = ' . (int)$iGroup);

        
$this->cache()->remove('group_sponsored');
        if (
$sPlugin Phpfox_Plugin::get('group.service_process_sponsor__end'))
        {
            return eval(
$sPlugin);
        }
        return 
true;
    }

    public function 
processAdmin($iInviteId$iType)
    {
        
$aGroup $this->database()->select('g.group_id')
            ->
from(Phpfox::getT('group_invite'), 'gi')
            ->
join(Phpfox::getT('group'), 'g''g.group_id = gi.group_id')
            ->
where('gi.invite_id = ' . (int) $iInviteId)
            ->
execute('getSlaveRow');
            
        if (!isset(
$aGroup['group_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.group_is_not_valid'));
        }
        
        if (!
Phpfox::getService('group')->isAdmin($aGroup['group_id']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.unable_to_add_the_user_as_an_admin'));
        }
        
        
$this->database()->update(Phpfox::getT('group_invite'), array('is_admin' => ((int) $iType == '1' '0')), 'invite_id = ' . (int) $iInviteId);
        
        return 
true;
    }
    
    
/**
     * If a call is made to an unknown method attempt to connect
     * it to a specific plug-in with the same name thus allowing 
     * plug-in developers the ability to extend classes.
     *
     * @param string $sMethod is the name of the method
     * @param array $aArguments is the array of arguments of being passed
     */
    
public function __call($sMethod$aArguments)
    {
        
/**
         * Check if such a plug-in exists and if it does call it.
         */
        
if ($sPlugin Phpfox_Plugin::get('group.service_process__call'))
        {
            return eval(
$sPlugin);
        }
            
        
/**
         * No method or plug-in found we must throw a error.
         */
        
Phpfox_Error::trigger('Call to undefined method ' __CLASS__ '::' $sMethod '()'E_USER_ERROR);
    }    
    
    private function 
_verify(&$aVals)
    {                
        if (!isset(
$aVals['category']))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.provide_a_category_this_group_will_belong_to'));
        }
        
        foreach (
$aVals['category'] as $iCategory)
        {        
            if (empty(
$iCategory))
            {
                continue;
            }
            
            if (!
is_numeric($iCategory))
            {
                continue;
            }            
            
            
$this->_aCategories[] = $iCategory;
        }
        
        if (!
count($this->_aCategories))
        {
            return 
Phpfox_Error::set(Phpfox::getPhrase('group.provide_a_category_this_group_will_belong_to'));
        }        
        
        if (isset(
$_FILES['image']['name']) && ($_FILES['image']['name'] != ''))
        {
            
$aImage Phpfox::getLib('file')->load('image', array(
                    
'jpg',
                    
'gif',
                    
'png'
                
), (Phpfox::getUserParam('group.max_upload_size_group') === null : (Phpfox::getUserParam('group.max_upload_size_group') / 1024))
            );
            
            if (
$aImage === false)
            {
                return 
false;
            }
            
            
$this->_bHasImage true;
        }    

        return 
true;    
    }    
}

?>
Онлайн: 2
Реклама