1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
22:
23: namespace picon;
24:
25: 26: 27: 28: 29: 30:
31: class ListenerRequestResolver implements RequestResolver
32: {
33: public function matches(Request $request)
34: {
35: return array_key_exists('listener', $request->getParameters());
36: }
37:
38: public function resolve(Request $request)
39: {
40: $behaviour = null;
41:
42: if(array_key_exists('behaviour', $request->getParameters()))
43: {
44: $behaviour = $request->getParameter('behaviour');
45: }
46:
47: if(array_key_exists('pageid', $request->getParameters()))
48: {
49: $page = PageMap::get()->getPageById($request->getParameter('pageid'));
50: if($page!=null)
51: {
52: return new ListenerRequestTarget($page, $request->getParameter('listener'), $behaviour);
53: }
54: return new PageRequestTarget(\SessionExpiredPage::getIdentifier());
55: }
56: else
57: {
58: return new ListenerRequestTarget($this->getPageClassForPath($request), $request->getParameter('listener'), $behaviour);
59: }
60:
61: }
62:
63: 64: 65: 66: 67: 68:
69: private function getPageClassForPath(Request $request)
70: {
71: $mapEntry = PageMap::getPageMap();
72:
73: foreach($mapEntry as $path => $pageClass)
74: {
75: if(preg_match("/^".$this->prepare($request->getRootPath())."\/".$path."{1}([?|&]{1}\\S+={1}\\S+)*$/", $request->getPath()))
76: {
77: return $pageClass::getIdentifier();
78: }
79: }
80: return false;
81: }
82:
83: public function generateUrl(RequestTarget $target)
84: {
85: throw new \NotImplementedException();
86: }
87:
88: public function handles(RequestTarget $target)
89: {
90: return false;
91: }
92:
93: private function prepare($value)
94: {
95: return str_replace('/', "\\/", $value);
96: }
97: }
98:
99: ?>
100: