protected function execute(InputInterface $input, OutputInterface $output) { $licence = $input->getArgument('licence'); $center = $input->getArgument('center'); $filterDate = $input->getOption('filter'); $mail = $input->getOption('mail'); $client = new Client(); $crawler = $client->request('GET', 'https://driverpracticaltest.direct.gov.uk/application'); $output->writeln('Step 1'); $form = $crawler->selectButton('testTypeCar')->form(); $crawler = $client->submit($form); $output->writeln('Step 2'); $form = $crawler->selectButton('drivingLicenceSubmit')->form(); $form->setValues(['driverLicenceNumber' => $licence, 'extendedTest' => 'false', 'specialNeeds' => 'false']); $crawler = $client->submit($form); $output->writeln('Step 3'); $form = $crawler->selectButton('testCentreSubmit')->form(); $form->setValues(['testCentreName' => $center]); $crawler = $client->submit($form); $output->writeln('Step 4'); $link = $crawler->filter('.test-centre-results > li > a')->first()->link(); $crawler = $client->click($link); $output->writeln('Step 5'); $button = $crawler->selectButton('drivingLicenceSubmit'); if ($button->count() == 0) { $output->writeln('Captcha!'); //TODO: display captcha image and ask to solve? Use decaptcha? return; } $form = $button->form(); $date = (new \DateTime())->format('d/m/y'); $form->setValues(['preferredTestDate' => $date]); $crawler = $client->submit($form); $output->writeln('Step 6'); $slots = $crawler->filter('.slotDateTime'); $dates = $slots->each(function ($node, $i) use($output) { return $node->text(); }); if ($filterDate) { $filter = new DateFilter(); $dates = $filter->filterDates($dates, $filterDate); } foreach ($dates as $date) { $output->writeln($date); } if (count($dates) && $mail) { $mailer = new DateMailer(); $mailer->mail($mail, $dates); } }
static function match($token) { global $config; self::$matched = false; if (parent::_find_match($token, $config['date_tok_rgx']) === true) { self::$operator = self::$matched_tokens[1]; self::$date = self::$matched_tokens[2]; self::$matched_token = self::$matched_tokens[0]; self::$matched = true; } return self::$matched; }
public function revenue_detail($hotelId, $acctCat) { if (!$this->securitypolicy->validateAccessRight(1, 'read')) { $this->_redirectInvalidAccess(); } $hotel = new Hotel(); $acctCat = urldecode($acctCat); # check date filters in session if ($this->session->has_userdata('revFilter')) { $dateFilterVal = $this->session->userdata('revFilter'); if (array_key_exists('start-date', $dateFilterVal)) { $sDateFilter = new DateFilter(); $sDateFilter->setFilter(array('type' => 'start', 'value' => $dateFilterVal['start-date'][0])); $hotel->addRevenueFilter($sDateFilter); } if (array_key_exists('end-date', $dateFilterVal)) { $eDateFilter = new DateFilter(); $eDateFilter->setFilter(array('type' => 'end', 'value' => $dateFilterVal['end-date'][0])); $hotel->addRevenueFilter($eDateFilter); } } $hotel->setById($hotelId); $this->_viewData['hotel'] = $hotel; $financeAccts = new FinanceAccts(); $financeAccts->setAll(); if (!is_numeric($acctCat)) { $this->_viewData['revenuedata'] = $this->_getCompositeRevenueData($hotel, $acctCat); } else { $this->_viewData['revenuedata'] = $hotel->finances->getRevenueGroup($acctCat); $acctCat = $financeAccts->getName($acctCat); } $this->_viewData['financeAccts'] = $financeAccts; $this->_viewData['title'] = $acctCat; $this->load->view('revenue_list_detail', $this->_viewData); }