예제 #1
0
 /**
  * Getting all aco records as tree
  * @return array
  */
 public function getAll()
 {
     $acos = $this->Acos->find()->toArray();
     $acos = Hash::combine($acos, '{n}.name', '{n}');
     ksort($acos);
     //        $acos = Hash::expand($acos, '/');
     return $acos;
 }
예제 #2
0
 /**
  * Index method
  *
  * @return \Cake\Network\Response|null
  */
 public function index()
 {
     $treeRoles = $this->Roles->find('treeList')->toArray();
     $roles = $this->Roles->find('all')->toArray();
     $roles = Hash::combine($roles, '{n}.id', '{n}');
     $this->set(compact('roles', 'treeRoles'));
     $this->set('_serialize', ['roles']);
 }
예제 #3
0
 public function main()
 {
     try {
         $DEFAULT_URL = 'https://ens.firebaseio.com/';
         $DEFAULT_TOKEN = Configure::read('Firebase.token');
         $DEFAULT_PATH = '/sms';
         $firebase = new \Firebase\FirebaseLib($DEFAULT_URL, $DEFAULT_TOKEN);
         if (!isset($this->args[0])) {
             throw new \Exception('Missing queue ID');
         }
         $this->out('Start...');
         $sendQueueTable = TableRegistry::get('SendQueues');
         $numberTable = TableRegistry::get('Numbers');
         $dateTimeUtc = new \DateTimeZone('UTC');
         $now = new \DateTime('now', $dateTimeUtc);
         $sendQueue = $sendQueueTable->find('all', ['conditions' => ['type' => 1, 'send_queue_id' => $this->args[0], 'OR' => ['next_try_datetime IS NULL', 'next_try_datetime <=' => $now]]]);
         if (!$sendQueue->count()) {
             throw new \Exception('No more queue');
         }
         $firstQueue = $sendQueue->first();
         // Mark as being processed...
         $firebase->set($DEFAULT_PATH . '/' . $firstQueue->send_queue_id . '/status', 1);
         $firstQueue->status = 1;
         $firstQueue->start_datetime = $now;
         $sendQueueTable->save($firstQueue);
         // Mark as sending...
         $firebase->set($DEFAULT_PATH . '/' . $firstQueue->send_queue_id . '/status', 2);
         $firstQueue->status = 2;
         $sendQueueTable->save($firstQueue);
         $page = 1;
         while (true) {
             $numbers = $numberTable->find('all', ['fields' => ['number_id', 'number_list_id', 'country_code', 'phone_number'], 'conditions' => ['number_list_id' => $firstQueue->number_list_id], 'limit' => 5000, 'page' => $page]);
             $list = $numbers->toArray();
             if (!count($list)) {
                 break;
             }
             // Format the number for Firebase
             $numberForFb = Hash::combine($list, '{n}.number_id', '{n}');
             $this->out(json_encode($numberForFb));
             $this->out($page);
             // Put the all the number on Firebase
             $firebase->update($DEFAULT_PATH . '/' . $firstQueue->send_queue_id . '/numbers', $numberForFb);
             // Send SMS
             foreach ($numbers as $number) {
                 shell_exec(ROOT . DS . 'bin' . DS . 'cake SendSmsBackground ' . $firstQueue->send_queue_id . ' ' . $number->number_id . ' ' . $number->country_code . ' ' . $number->phone_number . ' "THIS IS A TEST! ' . $firstQueue->message . '" > /dev/null 2>/dev/null &');
                 usleep(10000);
             }
             $page++;
         }
         // Mark as done...
         $firebase->set($DEFAULT_PATH . '/' . $firstQueue->send_queue_id . '/status', 3);
         $firstQueue->status = 3;
         $firstQueue->end_datetime = new \DateTime('now', $dateTimeUtc);
         $sendQueueTable->save($firstQueue);
     } catch (\Exception $ex) {
         $this->out($ex->getMessage());
     }
 }
 /**
  * Finds all the categories
  *
  * @param string $extensionName The extension to get the categories for
  * @return array The categories and all their settings
  * @throws InternalErrorException Thrown if the extension entry could not be found or there are no categories
  */
 public function getCategories($extensionName)
 {
     $extension = $this->_getExtension($extensionName);
     $categories = $extension->categories;
     if (empty($categories)) {
         throw new InternalErrorException(__('No categories were found for the extension {0}.', $extension->name) . '\\n' . __('Refer to the author\'s help page for help with this extension.'));
     }
     $categories = Hash::combine($categories, '{n}.id', '{n}');
     foreach ($categories as $category) {
         $category->settings = Hash::combine($category->settings, '{n}.id', '{n}');
     }
     return $categories;
 }
 public function edit($id = null)
 {
     if (!$this->isAuthorizedForClub($id)) {
         return $this->redirect(['action' => 'index']);
     }
     try {
         $club = $this->Clubs->getForEdit($id);
     } catch (InvalidPrimaryKeyException $e) {
         //Usually happens when attempting to go to "/edit" with no
         //id specified at all. Just go back to index with no further
         //message
         return $this->redirect(['action' => 'index']);
     } catch (RecordNotFoundException $e) {
         $this->Flash->error('Club not found');
         return $this->redirect(['action' => 'index']);
     }
     if ($this->request->is(['patch', 'post', 'put'])) {
         //Hack for old, incomplete imported data:
         if (empty($this->request->data['advisor']['net_id'])) {
             unset($this->request->data['advisor']);
         }
         if (!empty($this->request->data['members']) && is_array($this->request->data['members'])) {
             foreach ($this->request->data['members'] as $memberIndex => $member) {
                 if (empty($member['net_id'])) {
                     unset($this->request->data['members'][$memberIndex]);
                 }
             }
         }
         $club = $this->Clubs->officerPatch($club, $this->request->data);
         if ($this->Clubs->save($club)) {
             $this->Flash->success("{$club->name} changes saved");
             if ($newStatus = $this->Clubs->autoStatus($club->id)) {
                 $this->Flash->set("Your changes have automatically reset the club status to {$newStatus}", ['element' => $newStatus == "Recognized" ? 'success' : 'warning']);
             }
             return $this->redirect(['action' => 'view', $id]);
         } else {
             $this->Flash->error('Error saving changes');
         }
     }
     $this->loadModel('Departments');
     $departments = Hash::combine($this->Departments->getList(), '{n}.dept_name', '{n}.sort_name');
     $categories = $this->Clubs->Categories->find('list');
     $types = array_combine($this->Clubs->types, $this->Clubs->types);
     $statuses = array_combine($this->Clubs->statuses, $this->Clubs->statuses);
     $advisorStatuses = array_combine($this->Clubs->Advisors->statuses, $this->Clubs->Advisors->statuses);
     $officerStatuses = $this->Clubs->Members->Officers->statuses;
     $riskEstimates = $this->Clubs->riskEstimates;
     $this->set(compact('club', 'categories', 'types', 'statuses', 'departments', 'advisorStatuses', 'officerStatuses', 'riskEstimates'));
 }
 /**
  * Finds all the categories
  *
  * @param Table $extensionsTable The extensions database table
  * @return array The categories and all their settings
  */
 protected function _getSettings(Table $extensionsTable)
 {
     $extensions = $extensionsTable->find('all', ['fields' => ['Extensions.id', 'Extensions.short_name'], 'contain' => ['Categories' => ['fields' => ['Categories.id', 'Categories.extension_id', 'Categories.short_name', 'Categories.enabled'], 'Settings' => ['fields' => ['Settings.short_name', 'Settings.category_id', 'Settings.default_value'], 'SettingValues' => ['fields' => ['SettingValues.value']]]]]])->all()->toArray();
     $extensions = Hash::combine($extensions, '{n}.short_name', '{n}');
     foreach ($extensions as $extension) {
         $extension->categories = Hash::combine($extension->categories, '{n}.short_name', '{n}');
         foreach ($extension->categories as $category) {
             $category->settings = Hash::combine($category->settings, '{n}.short_name', '{n}');
             foreach ($category->settings as $setting) {
                 if (isset($setting->setting_value->value)) {
                     $setting->setting_value = $setting->setting_value->value;
                 }
             }
         }
     }
     return $extensions;
 }
예제 #7
0
 /**
  * Test combine with formatting rules.
  *
  * @return void
  */
 public function testCombineWithFormatting()
 {
     $a = static::userData();
     $result = Hash::combine($a, '{n}.User.id', ['%1$s: %2$s', '{n}.User.Data.user', '{n}.User.Data.name'], '{n}.User.group_id');
     $expected = [1 => [2 => 'mariano.iglesias: Mariano Iglesias', 25 => 'gwoo: The Gwoo'], 2 => [14 => 'phpnut: Larry E. Masters']];
     $this->assertEquals($expected, $result);
     $result = Hash::combine($a, ['%s: %s', '{n}.User.Data.user', '{n}.User.Data.name'], '{n}.User.id');
     $expected = ['mariano.iglesias: Mariano Iglesias' => 2, 'phpnut: Larry E. Masters' => 14, 'gwoo: The Gwoo' => 25];
     $this->assertEquals($expected, $result);
     $result = Hash::combine($a, ['%1$s: %2$d', '{n}.User.Data.user', '{n}.User.id'], '{n}.User.Data.name');
     $expected = ['mariano.iglesias: 2' => 'Mariano Iglesias', 'phpnut: 14' => 'Larry E. Masters', 'gwoo: 25' => 'The Gwoo'];
     $this->assertEquals($expected, $result);
     $result = Hash::combine($a, ['%2$d: %1$s', '{n}.User.Data.user', '{n}.User.id'], '{n}.User.Data.name');
     $expected = ['2: mariano.iglesias' => 'Mariano Iglesias', '14: phpnut' => 'Larry E. Masters', '25: gwoo' => 'The Gwoo'];
     $this->assertEquals($expected, $result);
 }
                $db->close();
                $this->flash->flashLater('success', 'Profile information successfuly updated! Congratulation!');
                return $response->withStatus(302)->withHeader('Location', $this->router->pathFor('membership-profile'));
            } catch (Exception $e) {
                $db->rollback();
                $db->close();
                $this->flash->flashNow('error', 'System failed<br />' . $e->getMessage());
            }
        } else {
            $this->flash->flashNow('warning', 'Some of mandatory fields is empty!');
        }
    }
    $q_member = $db->createQueryBuilder()->select('m.*', 'reg_prv.regional_name AS province', 'reg_cit.regional_name AS city')->from('members_profiles', 'm')->leftJoin('m', 'regionals', 'reg_prv', 'reg_prv.id = m.province_id')->leftJoin('m', 'regionals', 'reg_cit', 'reg_cit.id = m.city_id')->where('m.user_id = :uid')->setParameter(':uid', $_SESSION['MembershipAuth']['user_id'])->execute();
    $q_members_socmeds = $db->createQueryBuilder()->select('member_socmed_id', 'socmed_type', 'account_name', 'account_url')->from('members_socmeds')->where('user_id = :uid')->andWhere('deleted = :d')->setParameter(':uid', $_SESSION['MembershipAuth']['user_id'])->setParameter(':d', 'N')->execute();
    $q_provinces = $db->createQueryBuilder()->select('id', 'regional_name')->from('regionals')->where('parent_id IS NULL')->andWhere('city_code = :ccode')->orderBy('province_code, city_code')->setParameter(':ccode', '00', \Doctrine\DBAL\Types\Type::STRING)->execute();
    $q_cities = $db->createQueryBuilder()->select('id', 'regional_name')->from('regionals')->where('parent_id = :pvid')->orderBy('province_code, city_code')->setParameter(':pvid', $_SESSION['MembershipAuth']['province_id'], \Doctrine\DBAL\Types\Type::INTEGER)->execute();
    $q_religions = $db->createQueryBuilder()->select('religion_id', 'religion_name')->from('religions')->execute();
    $q_jobs = $db->createQueryBuilder()->select('job_id')->from('jobs')->execute();
    $member = $q_member->fetch();
    $members_socmeds = $q_members_socmeds->fetchAll();
    $provinces = \Cake\Utility\Hash::combine($q_provinces->fetchAll(), '{n}.id', '{n}.regional_name');
    $cities = \Cake\Utility\Hash::combine($q_cities->fetchAll(), '{n}.id', '{n}.regional_name');
    $religions = \Cake\Utility\Hash::combine($q_religions->fetchAll(), '{n}.religion_id', '{n}.religion_name');
    $jobs = \Cake\Utility\Hash::combine($q_jobs->fetchAll(), '{n}.job_id', '{n}.job_id');
    $genders = array('female' => 'Wanita', 'male' => 'Pria');
    $identity_types = array('ktp' => 'KTP', 'sim' => 'SIM', 'ktm' => 'Kartu Mahasiswa');
    $socmedias = $this->getContainer()->get('settings')['socmedias'];
    $db->close();
    $this->view->getPlates()->addData(array('page_title' => 'Membership', 'sub_page_title' => 'Update Profile Anggota'), 'layouts::layout-system');
    return $this->view->render($response, 'membership/profile-edit', compact('member', 'provinces', 'cities', 'genders', 'religions', 'identity_types', 'socmedias', 'members_socmeds', 'jobs'));
})->setName('membership-profile-edit');
 public function term()
 {
     $settings = TableRegistry::get('Settings');
     $users = TableRegistry::get('Users');
     $session = $this->request->session();
     $user = $users->get($this->Auth->user('id'));
     $now = Time::now();
     $apiId = $settings->get('10')->text;
     $apiToken = $settings->get('11')->text;
     $apiBase = $settings->get('12')->text;
     if (is_null($user->osm_secret) || !$session->check('OSM.Secret')) {
         $this->Flash->error(__('Please link your account first'));
         return $this->redirect(['action' => 'link']);
     } elseif (is_null($user->osm_section_id)) {
         $this->Flash->error(__('Please set your section first'));
         return $this->redirect(['action' => 'section']);
     } else {
         $userOsmId = $user->osm_user_id;
         $userOsmSecret = $user->osm_secret . $session->read('OSM.Secret');
         $userOsmSection = $user->osm_section_id;
     }
     $http = new Client(['host' => $apiBase, 'scheme' => 'https']);
     $url = '/api.php?action=getTerms';
     $response = $http->post($url, ['userid' => $userOsmId, 'secret' => $userOsmSecret, 'token' => $apiToken, 'apiid' => $apiId]);
     if ($response->isOk()) {
         $preBody = $response->json;
         // Debugger::dump($preBody);
         $body = Hash::get($preBody, $user->osm_section_id);
         // Debugger::dump($body);
         $terms = Hash::combine($body, '{n}.termid', '{n}', '{n}.past');
         // Debugger::dump($terms);
         $term = Hash::get($terms, 1);
         //Debugger::dump($term);
         //$term_end = $term->enddate;
         foreach ($term as $term) {
             $startdate = Hash::get($term, 'startdate');
             $start = Time::parse($startdate);
             $enddate = Hash::get($term, 'enddate');
             $end = Time::parse($enddate);
             $count = 0;
             if ($start < $now && $end > $now) {
                 $count = $count + 1;
                 $termSel = $term;
             }
         }
         if ($count == 1) {
             $termId = Hash::get($termSel, 'termid');
             $termEndDate = Hash::get($termSel, 'enddate');
             $termEnd = Time::parse($termEndDate);
             $usrData = ['osm_current_term' => $termId, 'osm_term_end' => $termEnd, 'osm_linked' => 3];
             $users->patchEntity($user, $usrData);
             if ($users->save($user)) {
                 $this->Flash->success(__('Your OSM Term has been set.'));
                 return $this->redirect(['action' => 'home']);
             } else {
                 $this->Flash->error(__('The user could not be saved. Please, try again.'));
                 return $this->redirect(['action' => 'home']);
             }
         } else {
             $this->Flash->error(__('More than 1 Term Applies.'));
         }
     } else {
         $this->Flash->error(__('There was a request error, please try again.'));
         return $this->redirect(['action' => 'home']);
     }
 }
예제 #10
0
 /**
  * Get an array of key -> values for a select.
  *
  * @return array
  */
 public static function getSelect()
 {
     return Hash::combine(self::getConstants(), '{s}.value', '{s}.name');
 }
예제 #11
0
 /**
  * Returns an array used in browser-based and Excel reports
  *
  * @return array
  */
 public function getReport()
 {
     $report = [];
     $communitiesTable = TableRegistry::get('Communities');
     $communities = $communitiesTable->find('all')->select(['id', 'name', 'score', 'notes'])->where(['dummy' => 0])->contain(['ParentAreas' => function ($q) {
         return $q->select(['id', 'name', 'fips']);
     }, 'OfficialSurvey' => function ($q) {
         return $q->select(['id', 'alignment']);
     }, 'OrganizationSurvey' => function ($q) {
         return $q->select(['id', 'alignment']);
     }])->order(['Communities.name' => 'ASC']);
     $respondentsTable = TableRegistry::get('Respondents');
     $respondents = $respondentsTable->find('all')->select(['id', 'approved', 'invited', 'survey_id'])->contain(['Responses' => function ($q) {
         return $q->select(['id', 'respondent_id']);
     }])->toArray();
     $respondents = Hash::combine($respondents, '{n}.id', '{n}', '{n}.survey_id');
     $responsesTable = TableRegistry::get('Responses');
     $surveysTable = TableRegistry::get('Surveys');
     $sectors = $surveysTable->getSectors();
     foreach ($communities as $community) {
         // Collect general information about this community
         $report[$community->id] = ['name' => $community->name, 'parentArea' => $community->parent_area->name, 'parentAreaFips' => $community->parent_area->fips, 'presentationsGiven' => ['a' => 'No', 'b' => 'No', 'c' => 'No'], 'notes' => $community->notes];
         // Collect information about survey responses and alignment
         $surveyTypes = ['official_survey' => $community->official_survey, 'organization_survey' => $community->organization_survey];
         foreach ($surveyTypes as $key => $survey) {
             $invitationCount = 0;
             $approvedResponseCount = 0;
             $responseRate = 'N/A';
             if ($survey && isset($respondents[$survey->id])) {
                 foreach ($respondents[$survey->id] as $respondent) {
                     if ($respondent->invited) {
                         $invitationCount++;
                     }
                     if ($respondent->approved && !empty($respondent->responses)) {
                         $approvedResponseCount++;
                     }
                 }
                 if ($invitationCount) {
                     $responseRate = round($approvedResponseCount / $invitationCount * 100) . '%';
                 } else {
                     $responseRate = 'N/A';
                 }
             }
             // Format and sum internal alignment
             $internalAlignment = [];
             if ($survey) {
                 $internalAlignment = $responsesTable->getInternalAlignmentPerSector($survey->id);
                 if ($internalAlignment) {
                     foreach ($internalAlignment as $sector => &$value) {
                         $value = round($value, 1);
                     }
                     $internalAlignment['total'] = array_sum($internalAlignment);
                 }
             }
             if (!$internalAlignment) {
                 $internalAlignment = array_combine($sectors, [null, null, null, null, null]);
                 $internalAlignment['total'] = null;
             }
             // Determine status
             $correspondingStep = $key == 'official_survey' ? 2 : 3;
             if ($community->score < $correspondingStep) {
                 $status = 'Not started yet';
             } elseif ($community->score < $correspondingStep + 1) {
                 $status = 'In progress';
             } else {
                 $status = 'Complete';
             }
             // PWRRR alignment
             if ($survey) {
                 $alignment = $survey->alignment ? $survey->alignment . '%' : null;
                 $alignmentCalculated = $survey->alignment ? 'Yes' : 'No';
             } else {
                 $alignment = null;
                 $alignmentCalculated = 'No';
             }
             $report[$community->id][$key] = ['invitations' => $invitationCount, 'responses' => $approvedResponseCount, 'responseRate' => $responseRate, 'alignment' => $alignment, 'alignmentCalculated' => $alignmentCalculated, 'internalAlignment' => $internalAlignment, 'status' => $status];
         }
     }
     return $report;
 }
예제 #12
0
 /**
  * Returns an array of ['Capitalized-type' => [$areaId => $areaName], ...]
  *
  * @return array
  */
 public function getGroupedList()
 {
     $result = $this->find('all')->select(['id', 'name', 'type'])->order(['name' => 'ASC'])->toArray();
     $grouped = Hash::combine($result, '{n}.id', '{n}.name', '{n}.type');
     // Unfortunately, this (apparently) can't be accomplished with text-transform: capitalize
     // because area types are displayed in <optgroup label="areatype">
     $capitalizedGrouped = [];
     foreach ($grouped as $type => $areas) {
         $type = ucwords($type);
         $capitalizedGrouped[$type] = $areas;
     }
     return $capitalizedGrouped;
 }
    $db = $this->getContainer()->get('db');
    if ($request->isPost()) {
        $validator = $this->getContainer()->get('validator');
        $validator->createInput($_POST);
        $validator->rule('required', array('company_name', 'industry_id', 'start_date_y', 'work_status', 'job_title', 'job_desc', 'career_level_id'));
        if ($_POST['work_status'] == 'R') {
            $validator->rule('required', 'end_date_y');
        }
        if ($validator->validate()) {
            if ($_POST['work_status'] == 'A') {
                $_POST['end_date_y'] = null;
                $_POST['end_date_m'] = null;
                $_POST['end_date_d'] = null;
            }
            $db->insert('members_portfolios', array('user_id' => $_SESSION['MembershipAuth']['user_id'], 'company_name' => filter_var(trim($_POST['company_name']), FILTER_SANITIZE_STRING), 'industry_id' => filter_var(trim($_POST['industry_id']), FILTER_SANITIZE_STRING), 'start_date_y' => filter_var(trim($_POST['start_date_y']), FILTER_SANITIZE_STRING), 'start_date_m' => $_POST['start_date_m'] == '' ? null : filter_var(trim($_POST['start_date_m']), FILTER_SANITIZE_STRING), 'start_date_d' => $_POST['start_date_d'] == '' ? null : filter_var(trim($_POST['start_date_d']), FILTER_SANITIZE_STRING), 'end_date_y' => filter_var(trim($_POST['end_date_y']), FILTER_SANITIZE_STRING), 'end_date_m' => $_POST['end_date_m'] == '' ? null : filter_var(trim($_POST['end_date_m']), FILTER_SANITIZE_STRING), 'end_date_d' => $_POST['end_date_d'] == '' ? null : filter_var(trim($_POST['end_date_d']), FILTER_SANITIZE_STRING), 'work_status' => filter_var(trim($_POST['work_status']), FILTER_SANITIZE_STRING), 'job_title' => filter_var(trim($_POST['job_title']), FILTER_SANITIZE_STRING), 'job_desc' => filter_var(trim($_POST['job_desc']), FILTER_SANITIZE_STRING), 'career_level_id' => filter_var(trim($_POST['career_level_id']), FILTER_SANITIZE_STRING), 'created' => date('Y-m-d H:i:s'), 'created_by' => $_SESSION['MembershipAuth']['user_id'], 'deleted' => 'N'));
            $this->flash->flashLater('success', 'Item portfolio baru berhasil ditambahkan. Selamat! . Silahkan tambahkan lagi item portfolio anda.');
            return $response->withStatus(302)->withHeader('Location', $this->router->pathFor('membership-profile'));
        } else {
            $this->flash->flashNow('warning', 'Masih ada isian-isian wajib yang belum anda isi. Atau masih ada isian yang belum diisi dengan benar');
        }
    }
    $q_carerr_levels = $db->createQueryBuilder()->select('career_level_id')->from('career_levels')->orderBy('order_by', 'ASC')->execute();
    $q_industries = $db->createQueryBuilder()->select('industry_id', 'industry_name')->from('industries')->execute();
    $career_levels = \Cake\Utility\Hash::combine($q_carerr_levels->fetchAll(), '{n}.career_level_id', '{n}.career_level_id');
    $industries = \Cake\Utility\Hash::combine($q_industries->fetchAll(), '{n}.industry_id', '{n}.industry_name');
    $years_range = $this->getContainer()->get('years_range');
    $months_range = $this->getContainer()->get('months_range');
    $days_range = $this->getContainer()->get('days_range');
    $this->view->getPlates()->addData(array('page_title' => 'Membership', 'sub_page_title' => 'Update Portfolio'), 'layouts::layout-system');
    return $this->view->render($response, 'membership/portfolio-add', compact('career_levels', 'industries', 'years_range', 'months_range', 'days_range'));
})->setName('membership-portfolio-add');
예제 #14
0
 /**
  * Alignment calculation settings method
  *
  * @return void
  */
 public function alignmentCalcSettings()
 {
     $settingsTable = TableRegistry::get('Settings');
     $settings = $settingsTable->find('all')->select(['name', 'value'])->where(function ($exp, $q) {
         return $exp->in('name', ['intAlignmentAdjustment', 'intAlignmentThreshhold']);
     })->toArray();
     $settings = Hash::combine($settings, '{n}.name', '{n}.value');
     $communities = $this->Communities->find('all')->select(['id', 'name', 'intAlignmentAdjustment', 'intAlignmentThreshhold'])->order(['created' => 'DESC']);
     $this->set(['communities' => $communities, 'settings' => $settings, 'titleForLayout' => 'Internal Alignment Calculation Settings']);
 }
예제 #15
0
 /**
  * Getting all permission related to given aro entity
  * @param Entity $aro
  * @return array|mixed
  */
 public function getPermissions($aro)
 {
     if (empty($aro)) {
         return [];
     }
     if (!is_array($aro)) {
         $aro = [$aro];
     }
     $permissions = $this->Aros->find()->contain(['Acos'])->where(['id IN' => Hash::extract($aro, '{n}.id')])->toArray();
     $permissions = Hash::extract($permissions, '{n}.acos');
     $permissions = Hash::combine($permissions, '{n}.{n}.name', '{n}.{n}');
     $permissions = Hash::sort($permissions, '{s}.name');
     //        $permissions = Hash::expand($permissions, '/');
     return $permissions;
 }
        $this->validator->createInput($_POST);
        $this->validator->rule('required', array('skill_parent_id', 'skill_self_assesment'));
        if (isset($_POST['skill_id'])) {
            $this->validator->rule('required', array('skill_id'));
        }
        if ($this->validator->validate()) {
            $skill_id = null;
            $skill_parent_id = filter_var(trim($_POST['skill_parent_id']), FILTER_SANITIZE_STRING);
            if (!isset($_POST['skill_id'])) {
                $skill_id = $skill_parent_id;
            } else {
                $skill_id = filter_var(trim($_POST['skill_id']), FILTER_SANITIZE_STRING);
            }
            $this->db->insert('members_skills', array('user_id' => filter_var(trim($_SESSION['MembershipAuth']['user_id']), FILTER_SANITIZE_STRING), 'skill_id' => $skill_id, 'skill_parent_id' => $skill_parent_id, 'skill_self_assesment' => filter_var(trim($_POST['skill_self_assesment']), FILTER_SANITIZE_STRING), 'created' => date('Y-m-d H:i:s'), 'modified' => null));
            $this->db->close();
            $this->flash->flashLater('success', 'Item skill baru berhasil ditambahkan. Selamat! . Silahkan tambahkan lagi item skill anda.');
            return $response->withStatus(302)->withHeader('Location', $this->router->pathFor('membership-profile'));
        } else {
            $this->flash->flashNow('warning', 'Masih ada isian-isian wajib yang belum anda isi. Atau masih ada isian yang belum diisi dengan benar');
        }
    }
    $q_skills_main = $this->db->createQueryBuilder()->select('skill_id', 'skill_name')->from('skills')->where('parent_id IS NULL')->execute();
    $skills_main = \Cake\Utility\Hash::combine($q_skills_main->fetchAll(), '{n}.skill_id', '{n}.skill_name');
    $skills = array();
    if (isset($_POST['skill_id']) && $_POST['skill_parent_id'] != '') {
        $q_skills = $this->db->createQueryBuilder()->select('skill_id', 'skill_name')->from('skills')->where('parent_id = :pid')->setParameter(':pid', $_POST['skill_parent_id'])->execute();
        $skills = \Cake\Utility\Hash::combine($q_skills->fetchAll(), '{n}.skill_id', '{n}.skill_name');
    }
    $this->view->getPlates()->addData(array('page_title' => 'Membership', 'sub_page_title' => 'Add new techno skill item'), 'layouts::layout-system');
    return $this->view->render($response, 'membership/skill-add', compact('skills_main', 'skills'));
})->setName('membership-skill-add');
                $_POST['end_date_m'] = null;
                $_POST['end_date_d'] = null;
            }
            $db->update('members_portfolios', array('company_name' => filter_var(trim($_POST['company_name']), FILTER_SANITIZE_STRING), 'industry_id' => filter_var(trim($_POST['industry_id']), FILTER_SANITIZE_STRING), 'start_date_y' => filter_var(trim($_POST['start_date_y']), FILTER_SANITIZE_STRING), 'start_date_m' => $_POST['start_date_m'] == '' ? null : filter_var(trim($_POST['start_date_m']), FILTER_SANITIZE_STRING), 'start_date_d' => $_POST['start_date_d'] == '' ? null : filter_var(trim($_POST['start_date_d']), FILTER_SANITIZE_STRING), 'end_date_y' => filter_var(trim($_POST['end_date_y']), FILTER_SANITIZE_STRING), 'end_date_m' => $_POST['end_date_m'] == '' ? null : filter_var(trim($_POST['end_date_m']), FILTER_SANITIZE_STRING), 'end_date_d' => $_POST['end_date_d'] == '' ? null : filter_var(trim($_POST['end_date_d']), FILTER_SANITIZE_STRING), 'work_status' => filter_var(trim($_POST['work_status']), FILTER_SANITIZE_STRING), 'job_title' => filter_var(trim($_POST['job_title']), FILTER_SANITIZE_STRING), 'job_desc' => filter_var(trim($_POST['job_desc']), FILTER_SANITIZE_STRING), 'career_level_id' => filter_var(trim($_POST['career_level_id']), FILTER_SANITIZE_STRING), 'modified' => date('Y-m-d H:i:s'), 'modified_by' => $_SESSION['MembershipAuth']['user_id']), array('member_portfolio_id' => $_POST['member_portfolio_id']));
            $this->flash->flashLater('success', 'Item portfolio berhasil diperbaharui. Selamat!');
            return $response->withStatus(302)->withHeader('Location', $this->router->pathFor('membership-profile'));
        } else {
            $this->flash->flashNow('warning', 'Masih ada isian-isian wajib yang belum anda isi. Atau masih ada isian yang belum diisi dengan benar');
        }
    }
    $q_portfolio = $db->createQueryBuilder()->select('member_portfolio_id', 'company_name', 'industry_id', 'start_date_y', 'start_date_m', 'start_date_d', 'end_date_y', 'end_date_m', 'end_date_d', 'work_status', 'job_title', 'job_desc', 'career_level_id', 'created')->from('members_portfolios')->where('member_portfolio_id = :id')->andWhere('deleted = :d')->setParameter(':id', $args['id'])->setParameter(':d', 'N')->execute();
    $q_carerr_levels = $db->createQueryBuilder()->select('career_level_id')->from('career_levels')->orderBy('order_by', 'ASC')->execute();
    $q_industries = $db->createQueryBuilder()->select('industry_id', 'industry_name')->from('industries')->execute();
    $portfolio = $q_portfolio->fetch();
    $industries = \Cake\Utility\Hash::combine($q_industries->fetchAll(), '{n}.industry_id', '{n}.industry_name');
    $career_levels = \Cake\Utility\Hash::combine($q_carerr_levels->fetchAll(), '{n}.career_level_id', '{n}.career_level_id');
    $years_range = $this->getContainer()->get('years_range');
    $months_range = $this->getContainer()->get('months_range');
    $days_range = $this->getContainer()->get('days_range');
    $this->view->getPlates()->addData(array('page_title' => 'Membership', 'sub_page_title' => 'Update portfolio item'), 'layouts::layout-system');
    return $this->view->render($response, 'membership/portfolio-edit', compact('portfolio', 'industries', 'career_levels', 'years_range', 'months_range', 'days_range'));
})->add(function ($req, $res, $next) {
    $routeInfo = $req->getAttribute('routeInfo');
    $id = $routeInfo[2]['id'];
    $q_user = $this['db']->createQueryBuilder()->select('count(*) num', 'user_id', 'member_portfolio_id')->from('members_portfolios')->where('member_portfolio_id = :portId')->andWhere('user_id = :userId')->setParameter(':portId', $routeInfo[2]['id'])->setParameter(':userId', $_SESSION['MembershipAuth']['user_id'])->execute();
    $user = $q_user->fetch();
    if ($user['num'] < 1) {
        $this['flash']->flashLater('warning', 'Permission denied.');
        return $res->withStatus(302)->withHeader('Location', $this['router']->pathFor('membership-profile'));
    }
    return $next($req, $res);
    // Paging handling
    $countQueryBuilderModifier = function ($q_members) {
        $q_members->select('COUNT(DISTINCT u.user_id) AS total_results')->setMaxResults(1);
    };
    $pagerAdapter = new \Pagerfanta\Adapter\DoctrineDbalAdapter($q_members, $countQueryBuilderModifier);
    $pagerfanta = new \Pagerfanta\Pagerfanta($pagerAdapter);
    $pagerfanta->setMaxPerPage(20);
    $pagerfanta->setCurrentPage(isset($_GET['page']) ? $_GET['page'] : 1);
    $viewPager = new \Pagerfanta\View\TwitterBootstrapView();
    $routerGen = function ($page) use($request) {
        $uri_page = 'membership?page=' . $page;
        $count_get_req = count($_GET);
        if ($count_get_req > 0) {
            $_GET['page'] = $page;
            $uri_page = 'membership?' . http_build_query($_GET);
        }
        return $uri_page;
    };
    $html_view_pager = $viewPager->render($pagerfanta, $routerGen, array('proximity' => 3, 'prev_message' => 'Prev', 'next_message' => 'Next'));
    $members = $pagerfanta->getCurrentPageResults();
    // --- End of paging handling
    $q_provinces = $db->createQueryBuilder()->select('id', 'regional_name')->from('regionals')->where('parent_id IS NULL')->andWhere('city_code = :ccode')->orderBy('province_code, city_code')->setParameter(':ccode', '00', \Doctrine\DBAL\Types\Type::STRING)->execute();
    $provinces = \Cake\Utility\Hash::combine($q_provinces->fetchAll(), '{n}.id', '{n}.regional_name');
    $cities = array();
    if (isset($_GET['province_id']) && !empty($_GET['province_id'])) {
        $q_cities = $db->createQueryBuilder()->select('id', 'regional_name')->from('regionals')->where('parent_id = :pvid')->orderBy('province_code, city_code')->setParameter(':pvid', $_GET['province_id'])->execute();
        $cities = \Cake\Utility\Hash::combine($q_cities->fetchAll(), '{n}.id', '{n}.regional_name');
    }
    $this->view->getPlates()->addData(array('page_title' => 'Membership', 'sub_page_title' => 'Keanggotaan'), 'layouts::layout-system');
    return $this->view->render($response, 'membership/index', compact('members', 'provinces', 'cities', 'html_view_pager'));
})->setName('membership-index');
예제 #19
0
 /**
  * Look for a new job that can be processed with the current abilities and
  * from the specified group (or any if null).
  *
  * @param array $capabilities Available QueueWorkerTasks.
  * @param string $group Request a job from this group, (from any group if null)
  * @return array Taskdata.
  */
 public function requestJob(array $capabilities, $group = null)
 {
     $whereClause = [];
     $wasFetched = [];
     //$this->virtualFields['age'] = 'IFNULL(TIMESTAMPDIFF(SECOND, NOW(),notbefore), 0)';
     $findCond = ['conditions' => ['completed IS' => null, 'OR' => []], 'fields' => function ($query) {
         return ['id', 'jobtype', 'fetched', 'age' => $query->newExpr()->add('IFNULL(TIMESTAMPDIFF(SECOND, NOW(), notbefore), 0)')];
     }, 'order' => ['age ASC', 'id ASC'], 'limit' => 3];
     if ($group !== null) {
         $findCond['conditions']['task_group'] = $group;
     }
     // generate the task specific conditions.
     foreach ($capabilities as $task) {
         list($plugin, $name) = pluginSplit($task['name']);
         $tmp = ['jobtype' => $name, 'AND' => [['OR' => ['notbefore <' => time(), 'notbefore IS' => null]], ['OR' => ['fetched <' => time() - $task['timeout'], 'fetched IS' => null]]], 'failed <' => $task['retries'] + 1];
         if (array_key_exists('rate', $task) && $tmp['jobtype'] && array_key_exists($tmp['jobtype'], $this->rateHistory)) {
             $tmp['UNIX_TIMESTAMP() >='] = $this->rateHistory[$tmp['jobtype']] + $task['rate'];
         }
         $findCond['conditions']['OR'][] = $tmp;
     }
     // First, find a list of a few of the oldest unfinished tasks.
     $data = $this->find('all', $findCond)->all()->toArray();
     if (!$data) {
         return null;
     }
     // Generate a list of already fetched ID's and a where clause for the update statement
     $capTimeout = Hash::combine($capabilities, '{s}.name', '{s}.timeout');
     foreach ($data as $item) {
         $whereClause[] = '(id = ' . $item['id'] . ' AND (workerkey IS NULL OR fetched <= "' . date('Y-m-d H:i:s', time() - $capTimeout[$item['jobtype']]) . '"))';
         if (!empty($item['fetched'])) {
             $wasFetched[] = $item['id'];
         }
     }
     $key = $this->key();
     //debug($key);ob_flush();
     // try to update one of the found tasks with the key of this worker.
     $virtualFields['age'] = 'IFNULL(TIMESTAMPDIFF(SECOND, NOW(),notbefore), 0)';
     $this->_connection->query('UPDATE ' . $this->table() . ' SET workerkey = "' . $key . '", fetched = "' . date('Y-m-d H:i:s') . '" WHERE ' . implode(' OR ', $whereClause) . ' ORDER BY ' . $virtualFields['age'] . ' ASC, id ASC LIMIT 1');
     // Read which one actually got updated, which is the job we are supposed to execute.
     $data = $this->find('all', ['conditions' => ['workerkey' => $key, 'completed IS' => null], 'order' => ['fetched' => 'DESC']])->first();
     if (!$data) {
         return null;
     }
     // If the job had an existing fetched timestamp, increment the failure counter
     if (in_array($data['id'], $wasFetched)) {
         $data['failed']++;
         $data['failure_message'] = 'Restart after timeout';
         //$this->id = $data['id'];
         $this->save($data, ['fieldList' => ['id', 'failed', 'failure_message']]);
     }
     //save last fetch by type for Rate Limiting.
     $this->rateHistory[$data['jobtype']] = time();
     return $data;
 }
예제 #20
0
 /**
  * Sets the $adminHeader variable
  *
  * @return void
  */
 public function prepareAdminHeader()
 {
     $this->loadModel('Communities');
     $communities = $this->Communities->find('list')->order(['name' => 'ASC']);
     $route = ['prefix' => 'admin', 'controller' => 'Communities'];
     $communityPages = ['Edit' => Router::url($route + ['action' => 'edit']) . '/{community-id}', 'Progress' => Router::url($route + ['action' => 'progress']) . '/{community-id}', 'Clients' => Router::url($route + ['action' => 'clients']) . '/{community-id}', 'Client Home' => Router::url($route + ['action' => 'clienthome']) . '/{community-id}', 'Presentations' => Router::url($route + ['action' => 'presentations']) . '/{community-id}', 'Notes' => Router::url($route + ['action' => 'notes']) . '/{community-id}'];
     $surveyPages = ['Overview' => Router::url(['prefix' => 'admin', 'controller' => 'Surveys', 'action' => 'view']) . '/{community-id}/{survey-type}', 'Activate' => Router::url(['prefix' => 'admin', 'controller' => 'Surveys', 'action' => 'activate']) . '/{survey-id}', 'Link' => Router::url(['prefix' => 'admin', 'controller' => 'Surveys', 'action' => 'link']) . '/{community-id}/{survey-type}', 'Alignment' => Router::url(['prefix' => 'admin', 'controller' => 'Responses', 'action' => 'view']) . '/{survey-id}', 'Invitations' => Router::url(['prefix' => 'admin', 'controller' => 'Surveys', 'action' => 'invite']) . '/{survey-id}', 'Reminders' => Router::url(['prefix' => 'admin', 'controller' => 'Surveys', 'action' => 'remind']) . '/{survey-id}'];
     $this->loadModel('Surveys');
     $results = $this->Surveys->find('all')->select(['id', 'type', 'community_id'])->toArray();
     $surveyIds = Hash::combine($results, '{n}.type', '{n}.id', '{n}.community_id');
     $this->set(['adminHeader' => ['communities' => $communities, 'communityPages' => $communityPages, 'currentUrl' => '/' . $this->request->url, 'surveyIds' => $surveyIds, 'surveyPages' => $surveyPages]]);
 }
예제 #21
0
 public function edit($id = null)
 {
     try {
         $club = $this->Clubs->getForEdit($id);
     } catch (InvalidPrimaryKeyException $e) {
         //Usually happens when attempting to go to "/edit" with no
         //id specified at all. Just go back to index with no further
         //message
         return $this->redirect(['action' => 'index']);
     } catch (RecordNotFoundException $e) {
         $this->Flash->error('Club not found');
         return $this->redirect(['action' => 'index']);
     }
     if ($this->request->is(['patch', 'post', 'put'])) {
         //Hack for old, incomplete imported data:
         if (empty($this->request->data['advisor']['net_id'])) {
             unset($this->request->data['advisor']);
         }
         if (!empty($this->request->data['members']) && is_array($this->request->data['members'])) {
             foreach ($this->request->data['members'] as $memberIndex => $member) {
                 if (empty($member['net_id'])) {
                     unset($this->request->data['members'][$memberIndex]);
                 }
             }
         }
         $club = $this->Clubs->patchEntity($club, $this->request->data, ['associated' => ['Advisors', 'Approvals', 'SocialLinks', 'Members.Officers']]);
         if ($this->Clubs->save($club)) {
             $this->Flash->success("{$club->name} changes saved");
             return $this->redirect(['action' => 'index', '?' => $this->request->query]);
         } else {
             $this->Flash->error('Error saving changes');
         }
     }
     $this->loadModel('Departments');
     $departments = Hash::combine($this->Departments->getList(), '{n}.dept_name', '{n}.sort_name');
     $categories = $this->Clubs->Categories->find('list');
     $types = array_combine($this->Clubs->types, $this->Clubs->types);
     $statuses = array_combine($this->Clubs->statuses, $this->Clubs->statuses);
     $advisorStatuses = array_combine($this->Clubs->Advisors->statuses, $this->Clubs->Advisors->statuses);
     $officerStatuses = $this->Clubs->Members->Officers->statuses;
     $riskEstimates = $this->Clubs->riskEstimates;
     $approvalStatuses = array_combine($this->Clubs->Approvals->statuses, $this->Clubs->Approvals->statuses);
     $this->set(compact('club', 'categories', 'types', 'statuses', 'departments', 'advisorStatuses', 'officerStatuses', 'riskEstimates', 'approvalStatuses'));
 }