<?php
/**
* [PHPFOX_HEADER]
*/
defined('PHPFOX') or exit('NO DICE!');
/**
*
*
* @copyright [PHPFOX_COPYRIGHT]
* @author Raymond_Benc
* @package Phpfox_Service
* @version $Id: process.class.php 7230 2014-03-26 21:14:12Z Fern $
*/
abstract class Phpfox_Pages_Process extends Phpfox_Service
{
protected $_bHasImage = false;
/**
* Class constructor
*/
public function __construct()
{
$this->_sTable = Phpfox::getT('pages');
}
/**
* @return Phpfox_Pages_Facade
*/
abstract public function getFacade();
public function removeLogo($iPageId = null)
{
$aPage = $this->getFacade()->getItems()->getPage($iPageId);
if (!isset($aPage['page_id']))
{
return false;
}
$aPage['link'] = $this->getFacade()->getItems()->getUrl($aPage['page_id'], $aPage['title'], $aPage['vanity_url']);
if (!$this->getFacade()->getItems()->isAdmin($aPage))
{
return false;
}
$this->database()->update(Phpfox::getT('pages'), array('cover_photo_id' => '0', 'cover_photo_position' => null), 'page_id = ' . (int) $iPageId);
return $aPage;
}
public function deleteWidget($iId)
{
$aWidget = $this->database()->select('*')
->from(Phpfox::getT('pages_widget'))
->where('widget_id = '. (int) $iId)
->execute('getSlaveRow');
if (!isset($aWidget['widget_id']))
{
return false;
}
$aPage = $this->getFacade()->getItems()->getPage($aWidget['page_id']);
if (!isset($aPage['page_id']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_find_the_page_you_are_looking_for'));
}
if (!$this->getFacade()->getItems()->isAdmin($aPage))
{
if (!Phpfox::isAdmin())
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_delete_this_widget'));
}
}
$this->database()->delete(Phpfox::getT('pages_widget'), 'widget_id = ' . (int) $iId);
$this->database()->delete(Phpfox::getT('pages_widget_text'), 'widget_id = ' . (int) $iId);
return true;
}
public function addWidget($aVals, $iEditId = null)
{
$bHasImage = false;
$oImage = Phpfox_Image::instance();
$oFile = Phpfox_File::instance();
$aPage = $this->getFacade()->getItems()->getPage($aVals['page_id']);
if (!isset($aPage['page_id']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_find_the_page_you_are_looking_for'));
}
if (!$this->getFacade()->getItems()->isAdmin($aPage))
{
if (!$this->getFacade()->getUserParam('can_moderate_pages'))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_add_a_widget_to_this_page'));
}
}
if (empty($aVals['title']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('provide_a_title_for_your_widget'));
}
if (empty($aVals['text']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('provide_content_for_your_widget'));
}
if (!$aVals['is_block'])
{
if (empty($aVals['menu_title']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('provide_a_menu_title_for_your_widget'));
}
if (empty($aVals['url_title']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('provide_a_url_title_for_your_widget'));
}
}
if (Phpfox::isModule($aVals['url_title']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('you_cannot_use_this_url_for_your_widget'));
}
// upload the image uploaded if allowed
if (isset($_FILES['image']['name']) && ($_FILES['image']['name'] != ''))
{
$aImage = $oFile->load('image', array('jpg','gif','png'));
if ($aImage === false)
{
return false;
}
$bHasImage = true;
}
$oFilter = Phpfox::getLib('parse.input');
if ($iEditId !== null)
{
$sNewTitle = $this->database()->select('url_title')
->from(Phpfox::getT('pages_widget'))
->where('widget_id = ' . (int)$iEditId)
->execute('getSlaveField');
}
if (!$aVals['is_block'] && ($iEditId !== null && ($sNewTitle != $aVals['url_title'])))
{
$sNewTitle = Phpfox::getLib('parse.input')->prepareTitle('pages', $aVals['url_title'], 'url_title', Phpfox::getUserId(), Phpfox::getT('pages_widget'), 'page_id = ' . (int) $aPage['page_id'] . ' AND url_title LIKE \'%' . $aVals['url_title'] . '%\'');
}
$aSql = array(
'page_id' => $aPage['page_id'],
'title' => $aVals['title'],
'is_block' => (int) $aVals['is_block'],
'menu_title' => ($aVals['is_block'] ? null : $aVals['menu_title']),
'url_title' => ($aVals['is_block'] ? null : (isset($sNewTitle) ? $sNewTitle : $aVals['url_title']))
);
if ($iEditId === null)
{
$aSql['time_stamp'] = PHPFOX_TIME;
$aSql['user_id'] = Phpfox::getUserId();
$iId = $this->database()->insert(Phpfox::getT('pages_widget'), $aSql);
$this->database()->insert(Phpfox::getT('pages_widget_text'), array(
'widget_id' => $iId,
'text' => $oFilter->clean($aVals['text']),
'text_parsed' => $oFilter->prepare($aVals['text'])
)
);
}
else
{
$aWidget = $this->database()->select('*')
->from(Phpfox::getT('pages_widget'))
->where('widget_id = ' . (int) $iEditId)
->execute('getSlaveRow');
$this->database()->update(Phpfox::getT('pages_widget'), $aSql, 'widget_id = ' . (int) $iEditId);
$this->database()->update(Phpfox::getT('pages_widget_text'), array(
'text' => $oFilter->clean($aVals['text']),
'text_parsed' => $oFilter->prepare($aVals['text'])
), 'widget_id = ' . (int) $iEditId
);
$iId = $iEditId;
if ($bHasImage && file_exists(Phpfox::getParam('pages.dir_image') . sprintf($aWidget['image_path'], '_16')))
{
Phpfox_File::instance()->unlink(Phpfox::getParam('pages.dir_image') . sprintf($aWidget['image_path'], '_16'));
}
}
if ($bHasImage)
{
$iSize = 16;
$sFileName = $oFile->upload('image', Phpfox::getParam('pages.dir_image'), $iId);
$this->database()->update(Phpfox::getT('pages_widget'), array('image_path' => $sFileName), 'widget_id = ' . $iId);
$oImage->createThumbnail(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''), Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize), $iSize, $iSize);
Phpfox_File::instance()->unlink(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''));
$this->database()->update(Phpfox::getT('pages_widget'), array('image_server_id' => Phpfox_Request::instance()->getServer('PHPFOX_SERVER_ID')), 'widget_id = ' . (int) $iId);
}
return $iId;
}
public function updateWidget($iId, $aVals)
{
return $this->addWidget($aVals, $iId);
}
public function updateCategory($iId, $aVals)
{
//Update phrase
$aLanguages = Language_Service_Language::instance()->getAll();
if (Phpfox::isPhrase($aVals['name'])){
foreach ($aLanguages as $aLanguage){
if (isset($aVals['name_' . $aLanguage['language_id']])){
$name = $aVals['name_' . $aLanguage['language_id']];
Language_Service_Phrase_Process::instance()->updateVarName($aLanguage['language_id'], $aVals['name'], $name);
}
}
} else {
//Add new phrase if before is not phrase
$name = $aVals['name_' . $aLanguages[0]['language_id']];
$phrase_var_name = $this->getFacade()->getItemType() . '_category_' . md5('Pages/Groups Category'. $name . PHPFOX_TIME);
$aText = [];
foreach ($aLanguages as $aLanguage){
if (isset($aVals['name_' . $aLanguage['language_id']]) && !empty($aVals['name_' . $aLanguage['language_id']])){
$aText[$aLanguage['language_id']] = $aVals['name_' . $aLanguage['language_id']];
} else {
Phpfox_Error::set((_p('Provide a "{{ language_name }}" name.', ['language_name' => $aLanguage['title']])));
}
}
$aValsPhrase = [
'product_id' => 'phpfox',
'module' => $this->getFacade()->getItemType() . '|' . $this->getFacade()->getItemType(),
'var_name' => $phrase_var_name,
'text' => $aText
];
$aVals['name'] = Language_Service_Phrase_Process::instance()->add($aValsPhrase);
}
if (!empty($aVals['type_id']))
{
$this->database()->update(Phpfox::getT('pages_category'), array(
'type_id' => (int) $aVals['type_id'],
'name' => $aVals['name'],
'page_type' => isset($aVals['page_type']) ? (int) $aVals['page_type'] : 0
), 'category_id = ' . (int) $iId
);
}
else
{
$this->database()->update(Phpfox::getT('pages_type'), array(
'name' => $aVals['name']
), 'type_id = ' . (int) $iId
);
}
//Remove phrase cache of module pages/groups
foreach ($aLanguages as $aLanguage){
$this->cache()->remove('locale_language_' . $aLanguage['language_id'] . '_phrase_' . $this->getFacade()->getItemType(), 'substr');
}
//remove category cache
$this->cache()->remove($this->getFacade()->getItemType() . '_category', 'substr');
$this->cache()->remove($this->getFacade()->getItemType() . '_type', 'substr');
return true;
}
public function addCategory($aVals)
{
//Add phrase for category
$aLanguages = Language_Service_Language::instance()->getAll();
$name = $aVals['name_' . $aLanguages[0]['language_id']];
$phrase_var_name = $this->getFacade()->getItemType() . '_category_' . md5('Pages/Groups Category'. $name . PHPFOX_TIME);
//Add phrases
$aText = [];
foreach ($aLanguages as $aLanguage){
if (isset($aVals['name_' . $aLanguage['language_id']]) && !empty($aVals['name_' . $aLanguage['language_id']])){
$aText[$aLanguage['language_id']] = $aVals['name_' . $aLanguage['language_id']];
} else {
return Phpfox_Error::set((_p('Provide a "{{ language_name }}" name.', ['language_name' => $aLanguage['title']])));
}
}
$aValsPhrase = [
'var_name' => $phrase_var_name,
'text' => $aText
];
$finalPhrase = Language_Service_Phrase_Process::instance()->add($aValsPhrase);
if (!empty($aVals['type_id']))
{
$iId = $this->database()->insert(Phpfox::getT('pages_category'), array(
'type_id' => (int) $aVals['type_id'],
'is_active' => '1',
'name' => $finalPhrase,
'page_type' => isset($aVals['page_type']) ? (int) $aVals['page_type'] : 0
)
);
}
else
{
$iId = $this->database()->insert(Phpfox::getT('pages_type'), [
'is_active' => '1',
'name' => $finalPhrase,
'time_stamp' => PHPFOX_TIME,
'ordering' => '0',
'item_type' => $this->getFacade()->getItemTypeId(),
]);
}
Core\Lib::phrase()->clearCache();
$this->cache()->remove('pages', 'substr');
return $iId;
}
public function updateActivity($iId, $iType, $iSub)
{
Phpfox::isUser(true);
$this->getFacade()->getUserParam('admincp.has_admin_access', true);
$this->database()->update(($iSub ? Phpfox::getT('pages_category') : Phpfox::getT('pages_type')), array('is_active' => (int) ($iType == '1' ? 1 : 0)), ($iSub ? 'category_id' : 'type_id') . ' = ' . (int) $iId);
$this->cache()->remove('pages', 'substr');
}
public function deleteCategory($iId, $bIsSub = false)
{
if ($bIsSub) {
//Delete phrase of category
$aCategory = $this->database()->select('*')
->from(':pages_category')
->where('category_id=' . (int) $iId)
->execute('getSlaveRow');
if (isset($aCategory['name']) && Phpfox::isPhrase($aCategory['name'])){
Language_Service_Phrase_Process::instance()->delete($aCategory['name'], true);
}
$this->database()->delete(Phpfox::getT('pages_category'), 'category_id = ' . (int) $iId);
} else {
//Delete phrase of type
$aType = $this->database()->select('*')
->from(':pages_type')
->where('type_id=' . (int) $iId)
->execute('getSlaveRow');
if (isset($aType['name']) && Phpfox::isPhrase($aType['name'])){
Language_Service_Phrase_Process::instance()->delete($aType['name'], true);
}
$this->database()->delete(Phpfox::getT('pages_type'), 'type_id = ' . (int) $iId);
//Delete phrase of all categories have this type
$aCategories = $this->database()->select('*')
->from(':pages_category')
->where('type_id=' .(int) $iId)
->execute('getSlaveRows');
if (is_array($aCategories) && count($aCategories) ){
foreach ($aCategories as $aCategory){
Language_Service_Phrase_Process::instance()->delete($aCategory['name'], true);
}
}
$this->database()->delete(Phpfox::getT('pages_category'), 'type_id = ' . (int) $iId);
}
$this->cache()->remove('pages', 'substr');
return true;
}
public function add($aVals, $bIsApp = false)
{
$iViewId = ($this->getFacade()->getUserParam('approve_pages') ? '1' : '0');
//Check last time created
$iLastTimestamp = $this->database()->select('time_stamp')
->from(':pages')
->where('user_id=' . Phpfox::getUserId())
->order('time_stamp DESC')
->execute('getSlaveField');
if ((PHPFOX_TIME - $iLastTimestamp) < 10) {
return Phpfox_Error::set(_p('try_again_in_1_minute'));
}
if (empty($aVals['title'])) {
return Phpfox_Error::set($this->getFacade()->getPhrase('page_name_cannot_be_empty'));
}
if (defined('PHPFOX_APP_CREATED') || $bIsApp) {
$iViewId = 0;
}
if ($sPlugin = Phpfox_Plugin::get($this->getFacade()->getItemType() . '.service_process_add_1')){eval($sPlugin);}
$aInsert = [
'view_id' => $iViewId,
'type_id' => (isset($aVals['type_id']) ? (int)$aVals['type_id'] : 0),
'app_id' => (isset($aVals['app_id']) ? (int)$aVals['app_id'] : 0),
'category_id' => (isset($aVals['category_id']) ? (int)$aVals['category_id'] : 0),
'user_id' => Phpfox::getUserId(),
'title' => $this->preParse()->clean($aVals['title'], 255),
'time_stamp' => PHPFOX_TIME,
'item_type' => $this->getFacade()->getItemTypeId()
];
$iId = $this->database()->insert($this->_sTable, $aInsert);
$aInsertText = array('page_id' => $iId);
if (isset($aVals['info']))
{
$aInsertText['text'] = $this->preParse()->clean($aVals['info']);
$aInsertText['text_parsed'] = $this->preParse()->prepare($aVals['info']);
}
$this->database()->insert(Phpfox::getT('pages_text'), $aInsertText);
$sSalt = '';
for ($i = 0; $i < 3; $i++)
{
$sSalt .= chr(rand(33, 91));
}
$sPossible = '23456789bcdfghjkmnpqrstvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
$sPassword = '';
$i = 0;
while ($i < 10)
{
$sPassword .= substr($sPossible, mt_rand(0, strlen($sPossible)-1), 1);
$i++;
}
$iUserId = $this->database()->insert(Phpfox::getT('user'), array(
'profile_page_id' => $iId,
'user_group_id' => NORMAL_USER_ID,
'view_id' => '7',
'full_name' => $this->preParse()->clean($aVals['title']),
'joined' => PHPFOX_TIME,
'password' => Phpfox::getLib('hash')->setHash($sPassword, $sSalt),
'password_salt' => $sSalt
)
);
$aExtras = array(
'user_id' => $iUserId
);
$this->database()->insert(Phpfox::getT('user_activity'), $aExtras);
$this->database()->insert(Phpfox::getT('user_field'), $aExtras);
$this->database()->insert(Phpfox::getT('user_space'), $aExtras);
$this->database()->insert(Phpfox::getT('user_count'), $aExtras);
$this->setDefaultPermissions($iId);
$this->cache()->remove(array('user', $this->getFacade()->getItemType() . '_' . Phpfox::getUserId()));
$this->cache()->remove($this->getFacade()->getItemType() . '_' . Phpfox::getUserId());
$this->cache()->remove(array($this->getFacade()->getItemType(), Phpfox::getUserId()));
if (!$this->getFacade()->getUserParam('approve_pages'))
{
User_Service_Activity::instance()->update(Phpfox::getUserId(), $this->getFacade()->getItemType());
}
Like_Service_Process::instance()->add($this->getFacade()->getItemType(), $iId, null, null);
return $iId;
}
public function update($iId, $aVals, $aPage)
{
if (!$this->_verify($aVals, true)) {
return false;
}
if ($sPlugin = Phpfox_Plugin::get($this->getFacade()->getItemType() . '.service_process_update_0')){eval($sPlugin);if (isset($mReturnFromPlugin)){return $mReturnFromPlugin;}}
$aUser = $this->database()->select('user_id')
->from(Phpfox::getT('user'))
->where('profile_page_id = ' . (int) $iId)
->execute('getSlaveRow');
$aUpdate = array(
'type_id' => (isset($aVals['type_id']) ? (int) $aVals['type_id'] : '0'),
'category_id' => (isset($aVals['category_id']) ? (int) $aVals['category_id'] : 0),
'reg_method' => (isset($aVals['reg_method']) ? (int) $aVals['reg_method'] : 0),
'privacy' => (isset($aVals['privacy']) ? (int) $aVals['privacy'] : 0)
);
/* Only store the location if the admin has set a google key or ipinfodb key. This input is not always available */
if ( (Phpfox::getParam('core.ip_infodb_api_key') != '' || Phpfox::getParam('core.google_api_key')) && isset($aVals['location'])) {
if (isset($aVals['location']['name'])) {
$aUpdate['location_name'] = $this->preParse()->clean($aVals['location']['name']);
}
if (isset($aVals['location']['latlng'])) {
$aMatch = explode(',',$aVals['location']['latlng']);
if (isset($aMatch[1])) {
$aUpdate['location_latitude'] = $aMatch[0];
$aUpdate['location_longitude']= $aMatch[1];
}
}
}
if (isset($aVals['landing_page'])) {
$aUpdate['landing_page'] = $aVals['landing_page'];
}
if (!empty($aVals['title'])) {
$aUpdate['title'] = $this->preParse()->clean($aVals['title']);
}
if ($this->_bHasImage) {
if (!empty($aPage['image_path'])) {
$this->deleteImage($aPage);
}
$oImage = Phpfox_Image::instance();
$sFileName = Phpfox_File::instance()->upload('image', Phpfox::getParam('pages.dir_image'), $iId);
$iFileSizes = filesize(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''));
$aUpdate['image_path'] = $sFileName;
$aUpdate['image_server_id'] = Phpfox_Request::instance()->getServer('PHPFOX_SERVER_ID');
$aUpdate['item_type'] = $this->getFacade()->getItemTypeId();
$iSize = 50;
$oImage->createThumbnail(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''), Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize), $iSize, $iSize, false);
$iFileSizes += filesize(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize));
$iSize = 120;
$oImage->createThumbnail(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''), Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize), $iSize, $iSize, false);
$iFileSizes += filesize(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize));
$iSize = 200;
$oImage->createThumbnail(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''), Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize), $iSize, $iSize, false);
$iFileSizes += filesize(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize));
//200 square
$iSize = 200;
$oImage->createThumbnail(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''), Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . '200_square'), $iSize, $iSize, false);
$iFileSizes += filesize(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, '_' . $iSize));
//Crop max width
if (Phpfox::isModule('photo')){
Photo_Service_Photo::instance()->cropMaxWidth(Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''));
}
define('PHPFOX_PAGES_IS_IN_UPDATE', true);
User_Service_Process::instance()->uploadImage($aUser['user_id'], true, Phpfox::getParam('pages.dir_image') . sprintf($sFileName, ''));
// Update user space usage
User_Service_Space::instance()->update(Phpfox::getUserId(), $this->getFacade()->getItemType(), $iFileSizes);
}
$this->database()->update($this->_sTable, $aUpdate, 'page_id = ' . (int) $iId);
$this->database()->update(Phpfox::getT('pages_text'), array(
'text' => $this->preParse()->clean($aVals['text']),
'text_parsed' => $this->preParse()->prepare($aVals["text"])
), 'page_id = ' . (int) $iId);
if ($sPlugin = Phpfox_Plugin::get($this->getFacade()->getItemType() . '.service_process_update_1')){eval($sPlugin);if (isset($mReturnFromPlugin)){return $mReturnFromPlugin;}}
if (isset($aVals['invite']) && is_array($aVals['invite']))
{
$aNewPage = $this->getFacade()->getItems()->getForEdit($aPage['page_id']);
$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');
$bSent = false;
$sLink = $this->getFacade()->getItems()->getUrl($aNewPage['page_id'], $aNewPage['title'], $aNewPage['vanity_url']);
foreach ($aUsers as $aUser)
{
if (isset($aCachedEmails[$aUser['email']]))
{
continue;
}
if (isset($aInvited['user'][$aUser['user_id']]))
{
continue;
}
$sMessage = $this->getFacade()->getPhrase('full_name_invited_you_to_the_page_title', array('full_name' => Phpfox::getUserBy('full_name'), 'title' => $aNewPage['title']));
$sMessage .= "\n" . $this->getFacade()->getPhrase('to_view_this_page_click_the_link_below_a_href_link_link_a', array('link' => $sLink)) . "\n";
$bSent = Phpfox::getLib('mail')->to($aUser['user_id'])
->subject($this->getFacade()->getPhrase('full_name_sent_you_a_page_invitation', array('full_name' => Phpfox::getUserBy('full_name'))))
->message($sMessage)
->translated()
->send();
if ($bSent)
{
$this->database()->insert(Phpfox::getT('pages_invite'), array(
'page_id' => $iId,
'user_id' => Phpfox::getUserId(),
'invited_user_id' => $aUser['user_id'],
'time_stamp' => PHPFOX_TIME
)
);
(Phpfox::isModule('request') ? Request_Service_Process::instance()->add($this->getFacade()->getItemType() . '_invite', $iId, $aUser['user_id']) : null);
}
}
if ($bSent == true)
{
Phpfox::addMessage($this->getFacade()->getPhrase('invitations_sent_out'));
}
}
$aUserCache = array();
$this->database()->delete(Phpfox::getT('pages_admin'), 'page_id = ' . (int) $iId);
$aAdmins = Phpfox_Request::instance()->getArray('admins');
if (count($aAdmins))
{
foreach ($aAdmins as $iAdmin)
{
if (isset($aUserCache[$iAdmin]))
{
continue;
}
$aUserCache[$iAdmin] = true;
$this->database()->insert(Phpfox::getT('pages_admin'), array('page_id' => $iId, 'user_id' => $iAdmin));
$this->cache()->remove(array('user', 'pages_' . $iAdmin));
$this->cache()->remove(array('pages', $iAdmin));
}
}
if (isset($aVals['perms']))
{
$this->database()->delete(Phpfox::getT('pages_perm'), 'page_id = ' . (int) $iId);
foreach ($aVals['perms'] as $sPermId => $iPermValue)
{
$this->database()->insert(Phpfox::getT('pages_perm'), array('page_id' => (int) $iId, 'var_name' => $sPermId, 'var_value' => (int) $iPermValue));
}
}
$this->database()->update(Phpfox::getT('user'), array('full_name' => Phpfox::getLib('parse.input')->clean($aVals['title'], 255)), 'profile_page_id = ' . (int) $iId);
return true;
}
public function deleteImage($aPage)
{
if (!empty($aPage['image_path']))
{
$aImages = array(
Phpfox::getParam('pages.dir_image') . sprintf($aPage['image_path'], ''),
Phpfox::getParam('pages.dir_image') . sprintf($aPage['image_path'], '_50'),
Phpfox::getParam('pages.dir_image') . sprintf($aPage['image_path'], '_120'),
Phpfox::getParam('pages.dir_image') . sprintf($aPage['image_path'], '_200')
);
$iFileSizes = 0;
foreach ($aImages as $sImage)
{
if (file_exists($sImage))
{
$iFileSizes += filesize($sImage);
Phpfox_File::instance()->unlink($sImage);
}
// http://www.phpfox.com/tracker/view/15187/
if (Phpfox::getParam('core.allow_cdn'))
{
Phpfox::getLib('cdn')->remove($sImage);
}
}
if ($iFileSizes > 0)
{
User_Service_Space::instance()->update($aPage['user_id'], $this->getFacade()->getItemType(), $iFileSizes, '-');
}
}
$this->database()->update($this->_sTable, array('image_path' => null), 'page_id = ' . (int) $aPage['page_id']);
return true;
}
public function updateTitle($iId, $sNewTitle)
{
if (!Ban_Service_Ban::instance()->check('username', $sNewTitle) || !Ban_Service_Ban::instance()->check('word', $sNewTitle))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('that_title_is_not_allowed'));
}
$aTitle = $this->database()->select('*')
->from(Phpfox::getT('pages_url'))
->where('page_id = ' . (int) $iId)
->execute('getSlaveRow');
if (isset($aTitle['vanity_url']))
{
$this->database()->update(Phpfox::getT('pages_url'), array('vanity_url' => $sNewTitle), 'page_id = ' . (int) $iId);
}
else
{
$this->database()->insert(Phpfox::getT('pages_url'), array('vanity_url' => $sNewTitle, 'page_id' => (int) $iId));
}
$this->database()->update(Phpfox::getT('user'), array('user_name' => $sNewTitle), 'profile_page_id = ' . (int) $iId);
return true;
}
public function register($iId)
{
$aPage = $this->database()->select('*')
->from(Phpfox::getT('pages'))
->where('page_id = ' . (int) $iId)
->execute('getSlaveRow');
if (!isset($aPage['page_id']))
{
return false;
}
$iId = $this->database()->insert(Phpfox::getT('pages_signup'), array(
'page_id' => $iId,
'user_id' => Phpfox::getUserId(),
'time_stamp' => PHPFOX_TIME
)
);
if (Phpfox::isModule('notification'))
{
Notification_Service_Process::instance()->add($this->getFacade()->getItemType() . '_register', $iId, $aPage['user_id']);
$aAdmins = $this->database()->select('*')
->from(Phpfox::getT('pages_admin'))
->where('page_id = ' . (int) $aPage['page_id'])
->execute('getSlaveRows');
foreach ($aAdmins as $aAdmin)
{
if ($aAdmin['user_id'] == $aPage['user_id'])
{
continue;
}
Notification_Service_Process::instance()->add($this->getFacade()->getItemType() . '_register', $iId, $aAdmin['user_id']);
}
}
return true;
}
public function moderation($aModerations, $sAction)
{
$iCnt = 0;
if (is_array($aModerations) && count($aModerations)){
foreach ($aModerations as $iModeration) {
$iCnt++;
$aPage = $this->database()->select('p.*, ps.user_id AS post_user_id')
->from(Phpfox::getT('pages_signup'), 'ps')
->join(Phpfox::getT('pages'), 'p', 'p.page_id = ps.page_id')
->where('ps.signup_id = ' . (int) $iModeration)
->execute('getSlaveRow');
if (!isset($aPage['page_id']))
{
return Phpfox_Error::display($this->getFacade()->getPhrase('unable_to_find_the_page'));
}
if (!$this->getFacade()->getItems()->isAdmin($aPage))
{
return Phpfox_Error::display($this->getFacade()->getPhrase('unable_to_moderate_this_page'));
}
if ($sAction == 'approve')
{
Like_Service_Process::instance()->add($this->getFacade()->getItemType(), $aPage['page_id'], $aPage['post_user_id'], null, ['ignoreCheckPermission' => true]);
}
Notification_Service_Process::instance()->delete($this->getFacade()->getItemType() . '_register', $iModeration, Phpfox::getUserId());
$this->database()->delete(Phpfox::getT('pages_signup'), 'signup_id = ' . (int) $iModeration);
}
}
return true;
}
public function login($iPageId)
{
$aPage = $this->database()->select('p.*, p.user_id AS owner_user_id, u.*')
->from(Phpfox::getT('pages'), 'p')
->join(Phpfox::getT('user'), 'u', 'u.profile_page_id = p.page_id')
->where('p.page_id = ' . (int) $iPageId)
->execute('getSlaveRow');
if (!isset($aPage['page_id']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_find_the_page_you_are_trying_to_login_to'));
}
$iCurrentUserId = Phpfox::getUserId();
$bCanLogin = false;
if ($aPage['owner_user_id'] == Phpfox::getUserId())
{
$bCanLogin = true;
}
if (!$bCanLogin)
{
$iAdmin = (int) $this->database()->select('COUNT(*)')
->from(Phpfox::getT('pages_admin'))
->where('page_id = ' . (int) $aPage['page_id'] . ' AND user_id = ' . (int) Phpfox::getUserId())
->execute('getSlaveField');
if ($iAdmin)
{
$bCanLogin = true;
}
}
if (!$bCanLogin)
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_log_in_as_this_page'));
}
if (Phpfox::getParam('core.auth_user_via_session'))
{
$this->database()->delete(Phpfox::getT('session'), 'user_id = ' . (int) Phpfox::getUserId());
$this->database()->insert(Phpfox::getT('session'), array(
'user_id' => $aPage['user_id'],
'last_activity' => PHPFOX_TIME,
'id_hash' => Phpfox_Request::instance()->getIdHash()
)
);
}
$sPasswordHash = Phpfox::getLib('hash')->setRandomHash(Phpfox::getLib('hash')->setHash($aPage['password'], $aPage['password_salt']));
$iTime = 0;
$aUserCookieNames = User_Service_Auth::instance()->getCookieNames();
Phpfox::setCookie($aUserCookieNames[0], $aPage['user_id'], $iTime);
Phpfox::setCookie($aUserCookieNames[1], $sPasswordHash, $iTime);
Phpfox::getLib('session')->remove(Phpfox::getParam('core.theme_session_prefix') . 'theme');
$this->database()->update(Phpfox::getT('user'), array('last_login' => PHPFOX_TIME), 'user_id = ' . $aPage['user_id']);
$this->database()->insert(Phpfox::getT('user_ip'), array(
'user_id' => $aPage['user_id'],
'type_id' => 'login',
'ip_address' => Phpfox::getIp(),
'time_stamp' => PHPFOX_TIME
)
);
$iLoginId = $this->database()->insert(Phpfox::getT('pages_login'), array(
'page_id' => $aPage['page_id'],
'user_id' => $iCurrentUserId,
'time_stamp' => PHPFOX_TIME
)
);
Phpfox::setCookie('page_login', $iLoginId, $iTime);
return true;
}
public function clearLogin($iUserId)
{
$this->database()->delete(Phpfox::getT('pages_login'), 'user_id = ' . (int) $iUserId);
Phpfox::setCookie('page_login', '', -1);
}
public function delete($iId, $bDoCallback = true)
{
$aPage = $this->database()->select('*')
->from(Phpfox::getT('pages'))
->where('page_id = ' . (int) $iId)
->execute('getSlaveRow');
if (!isset($aPage['page_id']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_find_the_page_you_are_trying_to_delete'));
}
if ($aPage['user_id'] == Phpfox::getUserId() || $this->getFacade()->getUserParam('can_moderate_pages'))
{
User_Service_Activity::instance()->update($aPage['user_id'], $this->getFacade()->getItemType(), '-');
$iUser = $this->database()->select('user_id')->from(Phpfox::getT('user'))->where('profile_page_id = ' . (int)$aPage['page_id'] . ' AND view_id = 7')->execute('getSlaveField');
$this->database()->delete(Phpfox::getT('pages_url'), 'page_id = ' . (int) $aPage['page_id']);
$this->database()->delete(Phpfox::getT('feed'), 'type_id = \'' . $this->getFacade()->getItemType() . '_itemLiked\' AND item_id = ' . (int) $aPage['page_id']);
if (((int)$iUser) > 0 && $bDoCallback === true)
{
Phpfox::massCallback('onDeleteUser', $iUser);
}
$this->deleteImage($aPage);
$this->database()->delete(Phpfox::getT('pages'), 'page_id = ' . $aPage['page_id']);
User_Service_Activity::instance()->update(Phpfox::getUserId(), $this->getFacade()->getItemType(), '-');
(Phpfox::isModule('like') ? Like_Service_Process::instance()->delete($this->getFacade()->getItemType(),(int) $aPage['page_id'], 0, true) : null);
$this->cache()->remove(array($this->getFacade()->getItemType(), $aPage['user_id']));
return true;
}
return Phpfox_Error::set($this->getFacade()->getPhrase('you_are_unable_to_delete_this_page'));
}
public function approve($iId)
{
if (!$this->getFacade()->getUserParam('can_moderate_pages'))
{
return false;
}
$aPage = $this->getFacade()->getItems()->getPage($iId);
if (!isset($aPage['page_id']))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('unable_to_find_the_page_you_are_trying_to_approve'));
}
if ($aPage['view_id'] != '1')
{
return false;
}
$this->database()->update(Phpfox::getT('pages'), array('view_id' => '0', 'time_stamp' => PHPFOX_TIME), 'page_id = ' . $aPage['page_id']);
if (Phpfox::isModule('notification'))
{
Notification_Service_Process::instance()->add($this->getFacade()->getItemType() . '_approved', $aPage['page_id'], $aPage['user_id']);
}
User_Service_Activity::instance()->update($aPage['user_id'], 'pages');
(($sPlugin = Phpfox_Plugin::get($this->getFacade()->getItemType() . '.service_process_approve__1')) ? eval($sPlugin) : false);
// Send the user an email
$sLink = $this->getFacade()->getItems()->getUrl($aPage['page_id'], $aPage['title'], $aPage['vanity_url']);
Phpfox::getLib('mail')->to($aPage['user_id'])
->subject($this->getFacade()->getPhrase('page_title_approved', array('title' => $aPage['title'])))
->message($this->getFacade()->getPhrase('your_page_title_has_been_approved', array('title' => $aPage['title'], 'link' => $sLink)))
->translated()
->send();
return true;
}
/* Claim status:
1: Not defined
2: Approved
3: Denied
*/
public function approveClaim($iClaimId)
{
// get the claim
$aClaim = $this->database()->select('*')
->from(Phpfox::getT('pages_claim'))
->where('claim_id = ' . (int)$iClaimId . ' AND status_id = 1')
->execute('getSlaveRow');
if (empty($aClaim))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('not_a_valid_claim'));
}
// set the user_id to the page
$this->database()->update(Phpfox::getT('pages'), array('user_id' => $aClaim['user_id']), 'page_id = ' . $aClaim['page_id']);
$this->database()->update(Phpfox::getT('pages_claim'), array('status_id' => 2), 'claim_id = ' . (int)$iClaimId);
return true;
}
public function denyClaim($iClaimId)
{
// get the claim
$aClaim = $this->database()->select('*')
->from(Phpfox::getT('pages_claim'))
->where('claim_id = ' . (int)$iClaimId . ' AND status_id = 1')
->execute('getSlaveRow');
if (empty($aClaim))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('not_a_valid_claim'));
}
// set the user_id to the page
$this->database()->update(Phpfox::getT('pages_claim'), array('status_id' => 3), 'claim_id = ' . (int)$iClaimId);
return true;
}
/**
* param $bAjaxPageUpload
*/
public function setCoverPhoto($iPageId, $iPhotoId, $bIsAjaxPageUpload = false)
{
if (!$this->getFacade()->getItems()->isAdmin($iPageId) && !Phpfox::isAdmin())
{
return Phpfox_Error::set($this->getFacade()->getPhrase('user_is_not_an_admin'));
}
if ($bIsAjaxPageUpload == false)
{
// check that this photo belongs to this page
$iPhotoId = $this->database()->select('photo_id')
->from(Phpfox::getT('photo'))
->where('module_id = \'' .$this->getFacade()->getItemType() . '\' AND group_id = '. (int)$iPageId . ' AND photo_id = ' . (int)$iPhotoId)
->execute('getSlaveField');
}
if (!empty($iPhotoId))
{
$this->database()->update(Phpfox::getT('pages'), array('cover_photo_position' => '', 'cover_photo_id' => (int)$iPhotoId), 'page_id = ' . (int)$iPageId);
return true;
}
return Phpfox_Error::set($this->getFacade()->getPhrase('the_photo_does_not_belong_to_this_page'));
}
public function updateCoverPosition($iPageId, $iPosition)
{
if (!$this->getFacade()->getItems()->isAdmin($iPageId) && !Phpfox::isAdmin())
{
return Phpfox_Error::set($this->getFacade()->getPhrase('user_is_not_an_admin'));
}
$this->database()->update(Phpfox::getT('pages'), array(
'cover_photo_position' => (int)$iPosition
), 'page_id = ' . (int)$iPageId);
return true;
}
public function removeCoverPhoto($iPageId)
{
if (!Phpfox::isAdmin())
{
$bIsAdmin = $this->database()->select('user_id')
->from(Phpfox::getT('pages_admin'))
->where('page_id = ' . (int)$iPageId . ' AND user_id = ' . Phpfox::getUserId())
->execute('getSlaveField');
if (empty($bIsAdmin))
{
return Phpfox_Error::set($this->getFacade()->getPhrase('user_is_not_an_admin'));
}
}
$this->database()->update(Phpfox::getT('pages'), array('cover_photo_id' => '', 'cover_photo_position' => ''), 'page_id = ' . (int)$iPageId);
return true;
}
/**
* set default permissions for page/group
* @param integer $iPageId is the ID of page/group
* @return bool
*/
public function setDefaultPermissions($iPageId)
{
$iDefaultValue = 0;
$aPermissions = [];
switch($this->getFacade()->getItemType()) {
case 'pages':
$iDefaultValue = 0;
$aPermissions = Pages_Service_Pages::instance()->getPerms($iPageId);
break;
case 'groups':
$iDefaultValue = 1;
$aPermissions = Core\Lib::appsGroup()->getPerms($iPageId);
break;
}
foreach ($aPermissions as $aPerm) {
$this->database()->insert(Phpfox::getT('pages_perm'), array('page_id' => (int) $iPageId, 'var_name' => $aPerm['id'], 'var_value' => $iDefaultValue));
}
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($this->getFacade()->getItemType() . '.service_process__call'))
{
eval($sPlugin);
return;
}
/**
* 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, $bIsUpdate = false)
{
if (isset($_FILES['image']['name']) && ($_FILES['image']['name'] != ''))
{
$aImage = Phpfox_File::instance()->load('image', array(
'jpg',
'gif',
'png'
), ($this->getFacade()->getUserParam('max_upload_size_pages') === 0 ? null : ($this->getFacade()->getUserParam('max_upload_size_pages') / 1024))
);
if ($aImage === false)
{
return false;
}
$this->_bHasImage = true;
}
return true;
}
}