public function searchAction() { $logger = $this->getServiceLocator()->get('Logger'); $form = new Form\SearchOrder(); $result = array(); /* * - use "" (quotes) to search exakt strings with spaces * - use - (minus) to exclude a string * - use space as and operator * - use (a,b,c) as or operator */ $searchText = $this->params()->fromQuery('q'); if (!empty($searchText)) { $form->get('q')->setValue($searchText); $matches = array(); preg_match('/"[^"]+"/', $searchText, $matches); $searchElements = preg_replace('/"/', '', $matches); $logger->info('found matches:'); $logger->info($matches); $searchArray = split(' ', $searchText); $exclude = false; $excludeElements = array(); foreach ($searchArray as $element) { if (preg_match('/^"/', $element)) { $exclude = true; } if (!$exclude) { if (preg_match('/^-/', $element)) { $excludeElements[] = preg_replace('/^-/', '', $element); } else { $searchElements[] = $element; } } if (preg_match('/"$/', $element)) { $exclude = false; } } $logger->info('search elements:'); $logger->info($searchElements); $logger->info('exclude elements:'); $logger->info($excludeElements); $searchString = array(); $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $result = array(); /* * search code */ $qb = $em->getRepository("ErsBase\\Entity\\Order")->createQueryBuilder('o'); $qb->join('o.code', 'oc'); $qb->join('o.packages', 'p'); $qb->join('p.code', 'pc'); $i = 0; foreach ($searchElements as $element) { if ($i == 0) { $qb->where('oc.value LIKE :param' . $i); } else { $qb->orWhere('oc.value LIKE :param' . $i); } $qb->setParameter('param' . $i, $element); $i++; $code = new Entity\Code(); $code->setValue($element); if ($code->checkCode()) { $qb->orWhere('oc.value LIKE :param' . $i); $qb->orWhere('pc.value LIKE :param' . $i); $qb->setParameter('param' . $i, $code->getValue()); $i++; } } $check_first = $i; foreach ($excludeElements as $elemnt) { if ($i == $check_first) { $qb->where('oc.value NOT LIKE :param' . $i); } else { $qb->orWhere('oc.value NOT LIKE :param' . $i); } $qb->orWhere('pc.value NOT LIKE :param' . $i); $qb->setParameter('param' . $i, $element); $i++; } $result = array_merge($result, $qb->getQuery()->getResult()); /* * search firstname, surname, email, birthdate * of buyer and participant */ $qb = $em->getRepository("ErsBase\\Entity\\Order")->createQueryBuilder('o'); $qb->join('o.buyer', 'b'); $qb->join('o.packages', 'p'); $qb->join('p.participant', 'u'); $i = 0; foreach ($searchElements as $element) { $b_expr = $qb->expr()->lower($qb->expr()->concat('b.firstname', $qb->expr()->concat($qb->expr()->literal(' '), 'b.surname'))); $u_expr = $qb->expr()->lower($qb->expr()->concat('u.firstname', $qb->expr()->concat($qb->expr()->literal(' '), 'u.surname'))); $be_expr = $qb->expr()->lower('b.email'); $ue_expr = $qb->expr()->lower('u.email'); if ($i == 0) { $qb->where($qb->expr()->like($b_expr, ':param' . $i)); } else { $qb->orWhere($qb->expr()->like($b_expr, ':param' . $i)); } $qb->orWhere($qb->expr()->like($u_expr, ':param' . $i)); $qb->orWhere($qb->expr()->like($be_expr, ':param' . $i)); $qb->orWhere($qb->expr()->like($ue_expr, ':param' . $i)); $qb->setParameter('param' . $i, '%' . strtolower($element) . '%'); $i++; } $result = array_merge($result, $qb->getQuery()->getResult()); } else { $logger->warn($form->getMessages()); } return new ViewModel(array('form' => $form, 'result' => $result)); }
private function findAllCodes($string) { $length = 8; $regex = '/[A-Z0-9]{' . $length . '}/'; $prepared_string = preg_replace('/\\ /', '', $string); $matches = array(); $codes = array(); $ret = array(); $offset = 0; $old_offset = 1; while ($offset != $old_offset) { preg_match($regex, $prepared_string, $matches, PREG_OFFSET_CAPTURE, $offset); if (!isset($matches[0])) { break; } $codes[] = $matches[0][0]; $old_offset = $offset; $offset = $matches[0][1] + 1; } $code = new Entity\Code(); foreach ($codes as $value) { $code->setValue($value); if ($code->checkCode()) { $ret[] = clone $code; } $code->normalize(); if ($code->checkCode()) { $ret[] = clone $code; } } return $this->array_unique_callback($ret, function ($code) { return $code->getValue(); }); }
public function acceptParticipantChangeAction() { $logger = $this->getServiceLocator()->get('Logger'); $user_id = (int) $this->params()->fromQuery('user_id', 0); $item_id = (int) $this->params()->fromQuery('item_id', 0); $form = new Form\AcceptParticipantChangeItem(); $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $request = $this->getRequest(); if ($request->isPost()) { $inputFilter = $this->getServiceLocator()->get('Admin\\InputFilter\\AcceptParticipantChangeItem'); #$form->setInputFilter($inputFilter->getInputFilter()); $form->setData($request->getPost()); if ($form->isValid()) { $data = $form->getData(); $user = $em->getRepository("ErsBase\\Entity\\User")->findOneBy(array('id' => $data['user_id'])); $item = $em->getRepository("ErsBase\\Entity\\Item")->findOneBy(array('id' => $data['item_id'])); $log = new Entity\Log(); $log->setUser($this->zfcUserAuthentication()->getIdentity()); $log->setData('changed participant for item ' . $item->getCode()->getValue() . ': ' . $data['comment']); $em->persist($log); #$em->flush(); $package = $item->getPackage(); # initialize new package $newPackage = new Entity\Package(); $code = new Entity\Code(); $code->genCode(); $codecheck = 1; while ($codecheck != null) { $code->genCode(); $codecheck = $em->getRepository("ErsBase\\Entity\\Code")->findOneBy(array('value' => $code->getValue())); } $newPackage->setCode($code); # set order for package $newPackage->setOrder($package->getOrder()); $cloneService = $this->getServiceLocator()->get('ErsBase\\Service\\CloneService'); $cloneService->setTransfer(true); $newItem = $cloneService->cloneItem($item); #$newItem = clone $item; $newPackage->addItem($newItem); $item->setStatus('transferred'); #$item->setTransferredItem($newItem); $code = new Entity\Code(); $code->genCode(); $codecheck = 1; while ($codecheck != null) { $code->genCode(); $codecheck = $em->getRepository("ErsBase\\Entity\\Code")->findOneBy(array('value' => $code->getValue())); } $newItem->setCode($code); $em->persist($item); $em->persist($newItem); #$newPackage->setTransferredPackage($package); $newPackage->setParticipant($user); $em->persist($newPackage); #$em->persist($package); $em->flush(); $order = $package->getOrder(); return $this->redirect()->toRoute('admin/order', array('action' => 'detail', 'id' => $order->getId())); } else { $logger->warn($form->getMessages()); } } $user = null; if ($user_id != 0) { $user = $em->getRepository("ErsBase\\Entity\\User")->findOneBy(array('id' => $user_id)); } $item = null; if ($item_id != 0) { $item = $em->getRepository("ErsBase\\Entity\\Item")->findOneBy(array('id' => $item_id)); } $form->get('item_id')->setValue($item->getId()); $form->get('user_id')->setValue($user->getId()); $forrest = new Service\BreadcrumbService(); if (!$forrest->exists('item')) { $forrest->set('item', 'admin/order', array('action' => 'search')); } return new ViewModel(array('form' => $form, 'user' => $user, 'item' => $item, 'breadcrumb' => $forrest->get('package'))); }