Cheetah
All Classes Namespaces Files Functions Variables Pages
ChPageACModule.php
Go to the documentation of this file.
1 <?php
2 
8 ch_import('ChWsbModule');
9 ch_import('ChWsbCacheFile');
10 
12 {
17  {
18  parent::__construct($aModule);
19  }
20  //--- Pages (tabs) ---//
21  function actionGetPageRules()
22  {
24  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
25 
26  header('Content-Type: text/html; charset=utf-8');
27 
28  $sRet = DesignBoxAdmin(_t('_ch_pageac_current_rules'), $this->actionGetRulesList(true), '', '', 11);
29  $sRet .= DesignBoxAdmin(_t('_ch_pageac_new_rule'), $this->_oTemplate->displayNewRuleForm(), '', '', 11);
30  $sRet .= DesignBoxAdmin(_t('_ch_pageac_note'), $GLOBALS['oAdmTemplate']->parseHtmlByName('design_box_content.html', array('content' => _t('_ch_pageac_note_text'))));
31  return $sRet;
32  }
34  {
36  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
37 
38  header('Content-Type: text/html; charset=utf-8');
39 
40  $aTopMenuArray = $this->_oDb->getTopMenuArray();
41  return $this->_oTemplate->displayTopMenuCompose($aTopMenuArray);
42  }
44  {
46  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
47 
48  header('Content-Type: text/html; charset=utf-8');
49 
50  $aMemberMenuArray = $this->_oDb->getMemberMenuArray();
51  return $this->_oTemplate->displayMemberMenuCompose($aMemberMenuArray);
52  }
53  function actionGetPagePageBlocks($sPage = '')
54  {
56  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
57 
58  header('Content-Type: text/html; charset=utf-8');
59 
60  if (empty($sPage)) {
61  return $this->_oTemplate->_getAvailablePages($this->_oDb->getAvailablePages());
62  } else {
63  $aColumns = $this->_oDb->getPageBlocks($sPage);
64  return $this->_oTemplate->_getPageBlocks($aColumns);
65  }
66  }
67  //--- Actions ---//
68  function actionGetRulesList($bAddWrapper = false)
69  {
70  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
71 
72  $aRules = $this->_oDb->getAllRules();
73  $sRet = $this->_oTemplate->displayRulesList($aRules);
74  if ($bAddWrapper) $sRet= '<div id="rules_list">'.$sRet.'</div>';
75 
76  header('Content-Type: text/html; charset=utf-8');
77  return $sRet;
78  }
79 
80  function actionNewRule()
81  {
82  if(!isAdmin()) return 'Hack attempt';
83 
84  $sRule = $this->_validateRule($_POST['rule'], $_POST['advanced']);
85  if (!empty($sRule)) {
86  $aMemLevels = array();
87  foreach ($_POST['memlevels'] as $iID) {
88  $aMemLevels[$iID] = 1;
89  }
90 
91  $this->_oDb->addRule($sRule, $aMemLevels);
92  return '';
93  } else {
94  header('Content-Type: text/html; charset=utf-8');
95  return _t('_ch_pageac_page_url_empty');
96  }
97 
98  }
99  function actionSaveRule()
100  {
101  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
102 
103  $iRuleID = intval($_POST['rule_id']);
104  $sRule = $this->_validateRule($_POST['rule_text'], true);
105  if (!strlen($sRule)) {
106  return $this->actionDeleteRule();
107  } else {
108  $aMemLevels = array();
109  $aData = explode(',', $_POST['rule_mlvs']);
110  foreach ($aData as $iID) {
111  if ($iID) $aMemLevels[$iID] = 1;
112  }
113  $this->_oDb->updateRule($iRuleID, $sRule, $aMemLevels);
114  return MsgBox(_t('_ch_pageac_saved'), 1).$this->actionGetRulesList();
115  }
116  }
117 
118  function actionDeleteRule()
119  {
120  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
121 
122  $iRuleID = intval($_POST['rule_id']);
123 
124  $this->_oDb->deleteRule($iRuleID);
125  return MsgBox(_t('_ch_pageac_deleted'), 1).$this->actionGetRulesList();
126  }
127 
128  function actionTopMenu($sAction, $iMenuItemID)
129  {
130  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
131 
132  if ($sAction == 'edit') {
133  $aMenuItemVisibility = $this->_oDb->getMenuItemVisibility('top', $iMenuItemID);
134 
135  header('Content-Type: text/html; charset=utf-8');
136  return PopupBox('pageac_popup_edit_form', _t('_ch_pageac_visible_for'), $GLOBALS['oAdmTemplate']->parseHtmlByName('design_box_content.html', array('content' => $this->_oTemplate->getMenuItemEditForm('top', $iMenuItemID, $aMenuItemVisibility).LoadingBox('formItemEditLoading'))));
137  }elseif ($sAction == 'save') {
138  $this->saveMenuItem('top', $iMenuItemID);
139  $aResult = array('message' => MsgBox(_t('_Saved')), 'timer' => 1);
140  return json_encode($aResult);
141  }
142  }
143  function actionMemberMenu($sAction, $iMenuItemID)
144  {
145  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
146 
147  if ($sAction == 'edit') {
148  $aMenuItemVisibility = $this->_oDb->getMenuItemVisibility('member', $iMenuItemID);
149 
150  header('Content-Type: text/html; charset=utf-8');
151  return PopupBox('pageac_popup_edit_form', _t('_ch_pageac_visible_for'), $GLOBALS['oAdmTemplate']->parseHtmlByName('design_box_content.html', array('content' => $this->_oTemplate->getMenuItemEditForm('member', $iMenuItemID, $aMenuItemVisibility).LoadingBox('formItemEditLoading'))));
152  }elseif ($sAction == 'save') {
153  $this->saveMenuItem('member', $iMenuItemID);
154  $aResult = array('message' => MsgBox(_t('_Saved')), 'timer' => 1);
155  return json_encode($aResult);
156  }
157  }
158  function saveMenuItem($sType, $iMenuItemID)
159  {
160  $aVisibleTo = array();
161  if (is_array($_POST['mlv_visible_to'])) {
162  $aData = array_flip($_POST['mlv_visible_to']);
163  if ( !isset($aData[-1]) ) {
164  foreach ($aData as $iLevel => $dummy) {
165  $aVisibleTo[$iLevel] = 1;
166  }
167  }
168  }
169  if (empty($aVisibleTo) && !isset($aData[-1])) $aVisibleTo[] = 0;
170  $this->_oDb->setMenuItemVisibility($sType, $iMenuItemID, $aVisibleTo);
171  }
172  function actionPageBlock($sAction, $iID)
173  {
174  if(!isAdmin()) $this->_oTemplate->displayAccessDenied();
175 
176  if ($sAction == 'edit') {
177  $aVisibility = $this->_oDb->getPageBlockVisibility($iID);
178 
179  header('Content-Type: text/html; charset=utf-8');
180  return PopupBox('pageac_popup_edit_form', _t('_ch_pageac_visible_for'), $GLOBALS['oAdmTemplate']->parseHtmlByName('design_box_content.html', array('content' => $this->_oTemplate->getPageBlockEditForm($iID, $aVisibility).LoadingBox('formItemEditLoading'))));
181  }elseif ($sAction == 'save') {
182  $aVisibleTo = array();
183  if (is_array($_POST['mlv_visible_to'])) {
184  $aData = array_flip($_POST['mlv_visible_to']);
185  if ( !isset($aData[-1]) ) {
186  foreach ($aData as $iMemLevel => $dummy) {
187  $aVisibleTo[$iMemLevel] = 1;
188  }
189  }
190  }
191  if (empty($aVisibleTo) && !isset($aData[-1])) $aVisibleTo[] = 0;
192  $this->_oDb->setPageBlockVisibility($iID, $aVisibleTo);
193  $aResult = array('message' => MsgBox(_t('_Saved')), 'timer' => 1);
194  return json_encode($aResult);
195  }
196  }
197  function _validateRule($sRule, $bIsAdvanced)
198  {
199  $sRule = trim($sRule);
200  if (empty($sRule)) return '';
201 
202  $sBaseURL = basename(CH_WSB_URL_ROOT);
203 
204  if (strpos($sRule, CH_WSB_URL_ROOT) === 0) $sRule = substr($sRule, strlen(CH_WSB_URL_ROOT)); //if URL starts from http://www.site.com
205  elseif (strpos($sRule, $sBaseURL) === 0) $sRule = substr($sRule, strlen($sBaseURL)+1); //if URL starts from www.site.com
206  else {
207  if (strpos($sBaseURL, 'www.') === 0) {
208  $sBaseURL = substr($sBaseURL, 4);
209  if (strpos($sRule, $sBaseURL) === 0) $sRule = substr($sRule, strlen($sBaseURL)+1); //if URL starts from site.com
210  }
211  }
212 
213  if (!$bIsAdvanced) {
214  $sRule = addcslashes($sRule, '|\\{}[]()#:^$.?+*'); // |\{}[]()#:^$.?+* - special regex characters
215  if (!empty($sRule)) $sRule .= '.*';
216  }
217 
218  return $sRule;
219  }
220 
221  //--- Services ---//
222  function serviceMenuItemsFilter($sType, &$aItems)
223  {
224  //to avoid menu filtering during module uninstallation.
225  if(isset($_REQUEST['modules-uninstall']) && $_REQUEST['modules-uninstall'] && in_array('cheetah/pageac/', $_REQUEST['pathes']))
226  return ;
227 
228  if(!defined('CH_WSB_ROLE_MEMBER'))
229  define('CH_WSB_ROLE_MEMBER', 1); //this code is required here because at the time of ChWsbMenu::load function call profiles.inc.php isn't fully included yet,
230  if(!defined('CH_WSB_ROLE_ADMIN'))
231  define('CH_WSB_ROLE_ADMIN', 2); //thus all defines and function calls located in profiles.inc.php aren't executed at this moment
232 
233  check_logged(); //so a call to isLogged or check_logged always would fail here because CH_WSB_ROLE_MEMBER/CH_WSB_ROLE_ADMIN aren't defined yet.
234 
235  if(!isLogged())
236  return; //non-members visibility controlled by default in builders
237  else if (isRole(CH_WSB_ROLE_ADMIN, getLoggedId()))
238  return; //admin isn't affected by this module
239 
240  $aMembership = getMemberMembershipInfo(getLoggedId());
241  $iMemLevel = intval($aMembership['ID']);
242 
243  $aMenuCache = $this->_oDb->getAllMenuItems($sType);
244 
245  if ($sType == 'member') {
246  foreach ($aItems as $sSection => $aSubItems) {
247  if (!is_array($aSubItems)) continue;
248  foreach ($aSubItems as $iItem => $aItem) {
249  $iRealID = $aSubItems[$iItem]['menu_id'];
250  if (!empty($aMenuCache[$iRealID]['MemLevels']) && !$aMenuCache[$iRealID]['MemLevels'][$iMemLevel]) unset($aItems[$sSection][$iItem]);
251  }
252  $aItems[$sSection] = array_values($aItems[$sSection]);
253  }
254  } else {
255  foreach ($aItems as $iItem => $aItem) {
256  if (!empty($aMenuCache[$iItem]['MemLevels']) && !$aMenuCache[$iItem]['MemLevels'][$iMemLevel]) unset($aItems[$iItem]);
257  }
258  }
259  }
260 
261  function servicePageBlocksFilter(&$oChWsbPageView)
262  {
263  if (!isLogged()) return; //non-members visibility controlled by default in builders
264  elseif (isRole(CH_WSB_ROLE_ADMIN, getLoggedId())) return; //admin isn't affected by this module
265 
266  $aMembership = getMemberMembershipInfo(getLoggedId());
267  $iMemLevel = $aMembership['ID'];
268 
269  $aPageBlocksCache = $this->_oDb->getAllPageBlocks();
270 
271  foreach ($oChWsbPageView->aPage['Columns'] as $iColumn => $aColumn) {
272  foreach ($aColumn['Blocks'] as $iBlockID => $aBlock) {
273  if (!empty($aPageBlocksCache[$iBlockID]) && !$aPageBlocksCache[$iBlockID]['MemLevels'][$iMemLevel]) unset($oChWsbPageView->aPage['Columns'][$iColumn]['Blocks'][$iBlockID]);
274  }
275  }
276  }
277  function serviceIsUrlAccessable($sURL, $iUserId = 0)
278  {
279  if ($iUserId && isRole(CH_WSB_ROLE_ADMIN, $iUserId) || strpos($sURL, '/'.$GLOBALS['admin_dir']) === 0) return true; //admin isn't affected by this module also access to admin panel shouldn't ever be protected
280 
281  $aMemLevel = getMemberMembershipInfo($iUserId);
282  $iMemLevel = $aMemLevel['ID'];
283 
284  if ($iMemLevel) {
285  $aRules = $this->_oDb->getAllRules();
286  foreach ($aRules as $aRule) {
287  if ($aRule['MemLevels'][$iMemLevel] && @preg_match('#'.$aRule['Rule'].'#i', $sURL))
288  return false;
289  }
290  }
291 
292  return true;
293  }
295  {
296  if (!isLogged() && ch_get('oid') && ch_get('pwd')) { // in case of request from flash, cookies are not passed, and we have to set it explicitly
297  $_COOKIE['memberID'] = ch_get('oid');
298  $_COOKIE['memberPassword'] = ch_get('pwd');
299  check_logged();
300  }
301 
302  if (!$this->serviceIsUrlAccessable($sURL, getLoggedId())) {
303  global $_page;
305  $_page['name_index'] = -1;
306  $_page['header'] = _t("_ch_pageac_access_denied");
307  $_page_cont[$_page['name_index']]['page_main_code'] = MsgBox(_t("_ch_pageac_deny_text"));
308  PageCode();
309  exit;
310  }
311  }
312 }
ChPageACModule\saveMenuItem
saveMenuItem($sType, $iMenuItemID)
Definition: ChPageACModule.php:158
header
</code > Be careful enabling this directive if you have a redirector script that does not use the< code > Location</code > HTTP header
Definition: URI.MungeResources.txt:10
ChPageACModule\actionGetPagePageBlocks
actionGetPagePageBlocks($sPage='')
Definition: ChPageACModule.php:53
ChPageACModule\actionNewRule
actionNewRule()
Definition: ChPageACModule.php:80
ChPageACModule\actionTopMenu
actionTopMenu($sAction, $iMenuItemID)
Definition: ChPageACModule.php:128
MsgBox
MsgBox($sText, $iTimer=0)
Definition: design.inc.php:175
check_logged
check_logged()
Definition: admin.inc.php:238
ChWsbModule\isLogged
isLogged()
Definition: ChWsbModule.php:113
ChPageACModule\actionGetPageTopMenu
actionGetPageTopMenu()
Definition: ChPageACModule.php:33
ChPageACModule\actionGetRulesList
actionGetRulesList($bAddWrapper=false)
Definition: ChPageACModule.php:68
$aModule
$aModule
Definition: classifieds.php:21
$_page
$_page['name_index']
Definition: about_us.php:13
ch_import
ch_import($sClassName, $aModule=array())
Definition: utils.inc.php:1218
$aResult
$aResult
Definition: index.php:19
$_page_cont
$_page_cont[$_ni]['page_main_code']
Definition: about_us.php:24
ch_get
ch_get($sName)
Definition: utils.inc.php:1664
php
isRole
isRole($iRole, $iId=0)
Definition: profiles.inc.php:62
ChPageACModule\serviceMenuItemsFilter
serviceMenuItemsFilter($sType, &$aItems)
Definition: ChPageACModule.php:222
send_headers_page_changed
send_headers_page_changed()
Definition: design.inc.php:99
ChPageACModule\actionMemberMenu
actionMemberMenu($sAction, $iMenuItemID)
Definition: ChPageACModule.php:143
ChPageACModule\actionPageBlock
actionPageBlock($sAction, $iID)
Definition: ChPageACModule.php:172
isAdmin
isAdmin()
Definition: index.php:649
DesignBoxAdmin
DesignBoxAdmin($sTitle, $sContent, $mixedTopItems='', $sBottomItems='', $iIndex=1)
Definition: admin_design.inc.php:50
exit
exit
Definition: cart.php:21
$sType
$sType
Definition: actions.inc.php:11
ChPageACModule\servicePageBlocksFilter
servicePageBlocksFilter(&$oChWsbPageView)
Definition: ChPageACModule.php:261
getLoggedId
getLoggedId()
Definition: profiles.inc.php:32
ChPageACModule\actionSaveRule
actionSaveRule()
Definition: ChPageACModule.php:99
ChPageACModule\actionDeleteRule
actionDeleteRule()
Definition: ChPageACModule.php:118
$_REQUEST
$_REQUEST['action']
Definition: cmd.php:11
global
if(!defined("GLOBAL_MODULE")) define("GLOBAL_MODULE" global
Definition: header.inc.php:25
ChWsbModule
Definition: ChWsbModule.php:41
_t
_t($key, $arg0="", $arg1="", $arg2="")
Definition: languages.inc.php:509
PageCode
PageCode($oTemplate=null)
Definition: design.inc.php:91
ChPageACModule\actionGetPageRules
actionGetPageRules()
Definition: ChPageACModule.php:21
ChPageACModule\serviceIsUrlAccessable
serviceIsUrlAccessable($sURL, $iUserId=0)
Definition: ChPageACModule.php:277
getMemberMembershipInfo
getMemberMembershipInfo($iMemberId, $iTime='', $bCheckUserStatus=false)
Definition: membership_levels.inc.php:234
PopupBox
PopupBox($sName, $sTitle, $sContent, $aActions=array())
Definition: design.inc.php:189
ChPageACModule\_validateRule
_validateRule($sRule, $bIsAdvanced)
Definition: ChPageACModule.php:197
$sAction
$sAction
Definition: categories.php:274
empty
Attr AllowedRel this is empty
Definition: Attr.AllowedRel.txt:7
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
ChPageACModule\serviceResponceProtectURL
serviceResponceProtectURL($sURL)
Definition: ChPageACModule.php:294
CH_WSB_ROLE_ADMIN
const CH_WSB_ROLE_ADMIN
Definition: profiles.inc.php:17
$GLOBALS
$GLOBALS['iAdminPage']
Definition: advanced_settings.php:10
ChPageACModule\__construct
__construct($aModule)
Definition: ChPageACModule.php:16
ChPageACModule
Definition: ChPageACModule.php:12
ChPageACModule\actionGetPageMemberMenu
actionGetPageMemberMenu()
Definition: ChPageACModule.php:43