/** * can i add or edit account * * @param array $level_groups target level groups * @return boolean */ public function canIAddEditAccount($level_groups) { if (!is_array($level_groups) || is_array($level_groups) && empty($level_groups)) { return false; } // get account id $cookie = $this->getAccountCookie('admin'); if (!isset($cookie['account_id'])) { return false; } $account_id = $cookie['account_id']; unset($cookie); // get site id and set table prefix for site $site_id = \Model_Sites::getSiteId(false); $table_site_prefix = ''; if ($site_id != '1') { $table_site_prefix = $site_id . '_'; } unset($site_id); // get current user level group priority $my_level = \DB::select()->from($table_site_prefix . 'account_level')->as_object('\\Model_AccountLevel')->join($table_site_prefix . 'account_level_group', 'LEFT')->on($table_site_prefix . 'account_level_group.level_group_id', '=', $table_site_prefix . 'account_level.level_group_id')->where('account_id', $account_id)->order_by('level_priority', 'ASC')->execute(); $my_level = $my_level->current(); if ($my_level == null || $my_level->count() == '0') { return false; } $my_level_priority = $my_level->account_level_group->level_priority; // loop check each target level group. foreach ($level_groups as $level_group_id) { // get target level group priority $target_level = \Model_AccountLevelGroup::query()->where('level_group_id', $level_group_id)->get_one(); if ($target_level == null) { return false; } // check if target level is higher than current user level (priority of target is less than my) if ($target_level->level_priority < $my_level_priority) { return false; } } unset($level_group_id, $my_level, $my_level_priority, $target_level); // all checked pass! return true; }