/** * 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; }
/** * 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']); }
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; }
/** * 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']); } }
/** * Get an array of key -> values for a select. * * @return array */ public static function getSelect() { return Hash::combine(self::getConstants(), '{s}.value', '{s}.name'); }
/** * 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; }
/** * 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');
/** * 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']); }
/** * 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');
/** * 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; }
/** * 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]]); }
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')); }