/** * @Route("/read", name="read") * @Method({"GET", "POST", "OPTIONS"}) */ public function appshedAction(Request $request) { $view = $this->getView($request); if (!$view->getId()) { $screen = new Screen("Error"); $screen->addChild(new Text("You must setup the view first")); return (new Remote($screen))->getSymfonyResponse(); } $rootScreen = new Screen($view->getTitle() ?: "Results"); if ($view->getMessage()) { $rootScreen->addChild(new Text($view->getMessage())); } $datas = $this->getDoctrine()->getRepository('AppShedExtensionsStorageBundle:Data')->getDataForView($view); /** @var Data $dataO */ foreach ($datas as $dataO) { $data = $dataO->getData(); if (count($data)) { if (array_key_exists('title', $data)) { $title = $data['title']; unset($data['title']); } else { $title = current($data); } $dataScreen = new Screen($title); foreach ($data as $key => $value) { $dataScreen->addChild(new Thumb($key, $value)); } $link = new Link($title); $link->setScreenLink($dataScreen); $rootScreen->addChild($link); } } return (new Remote($rootScreen))->getSymfonyResponse(); }
/** * @Route("/hello", name="hello") */ public function helloAction(Request $request) { $screen = new Screen("Hello Word"); $name = $request->query->get('name'); $screen->addChild(new Text("Hi {$name}!")); $remote = new Remote($screen); return $remote->getSymfonyResponse(); }
/** * @Route("/projects") */ public function indexAction() { $projects = $this->getRedmine()->getProjects(); $screen = new Screen("Projects"); foreach ($projects as $project) { $item = new Link($project['name']); $screen->addChild($item); } return (new Remote($screen))->getSymfonyResponse(); }
/** * @Route("/write", name="write") * @Method({"GET", "POST"}) */ public function appshedAction(Request $request) { $view = $this->getView($request); if (!$view->getId()) { $screen = new Screen("Error"); $screen->addChild(new Text("You must setup the view first")); return (new Remote($screen))->getSymfonyResponse(); } $store = $view->getStore(); $data = Remote::getRequestVariables(); $systemFields = $this->container->getParameter('data_system_fields'); foreach (array_keys($data) as $key) { if (in_array($key, $systemFields)) { unset($data[$key]); continue; } if (is_array($data[$key])) { $data[$key] = '[' . implode(', ', $data[$key]) . ']'; } } $cols = array_keys($data); if (!count($cols)) { $screen = new Screen("Error"); $screen->addChild(new Text("You must send some data")); return (new Remote($screen))->getSymfonyResponse(); } //Add any new columns to the store $newColumns = array_diff($cols, $store->getColumns()); if (count($newColumns)) { $store->setColumns(array_merge($store->getColumns(), $newColumns)); } //Create new data obj $dataO = new Data(); $dataO->setColumns($cols); $dataO->setData($data); $dataO->setStore($store); $em = $this->getDoctrine()->getManager(); $em->persist($dataO); $em->flush(); $screen = new Screen($view->getTitle() ?: "Thank you"); $screen->addChild(new Text($view->getMessage() ?: "Your entry has been saved")); return (new Remote($screen))->getSymfonyResponse(); }
/** * @Route("/document") * @Route("/document/") */ public function documentAction(Request $request) { if (Remote::isOptionsRequest()) { return Remote::getCORSSymfonyResponse(); } $rowData = $this->cleanData(Remote::getRequestVariables()); $secret = $request->get('identifier'); $em = $this->getDoctrine()->getManager(); /** @var Doc $doc */ $doc = $em->getRepository('AppShedExtensionsSpreadsheetBundle:Doc')->findOneBy(['itemsecret' => $secret]); if (!$doc) { $screen = new Screen('Error'); $screen->addChild(new HTML('You must setup the extension before using it')); return (new Remote($screen))->getSymfonyResponse(); } try { $existingTitles = $this->getColumnTitles($doc->getKey()); $store = false; foreach ($rowData as $titleName => $value) { if (!in_array($titleName, $existingTitles)) { $store = true; $this->addTitle($titleName, $doc->getKey()); $existingTitles[] = $titleName; } } if ($store) { $doc->setTitles(array_unique($existingTitles)); $em->flush(); } foreach ($existingTitles as $titleName) { if (!isset($rowData[$titleName])) { $rowData[$titleName] = ''; } } if (count($rowData) > 0) { $this->getSpreadsheets()->insertRow($rowData, $doc->getKey(), 1); } } catch (\Exception $e) { $screen = new Screen('Error'); $screen->addChild(new HTML('There was an error storing')); $screen->addChild(new Text($e->getMessage())); $this->logger->error('Problem accessing a spreadsheet', ['exception' => $e, 'rowData' => $rowData]); return (new Remote($screen))->getSymfonyResponse(); } $screen = new Screen('Saved'); $screen->addChild(new HTML("Your record has been saved")); return (new Remote($screen))->getSymfonyResponse(); }
/** * @Route("/view") */ public function documentAction(Request $request) { if (Remote::isOptionsRequest()) { return Remote::getCORSSymfonyResponse(); } $secret = $request->get('identifier'); /** @var Doc $doc */ $doc = $this->getDoctrine()->getManager()->getRepository('AppShedExtensionsSpreadsheetMapsBundle:Doc')->findOneBy(['itemsecret' => $secret]); if (!$doc) { $screen = new Screen('Error'); $screen->addChild(new HTML('You must setup the extension before using it')); return (new Remote($screen))->getSymfonyResponse(); } $address = strtolower($doc->getAddress() ?: 'address'); try { $document = $this->getDocument($doc->getKey(), $this->getFilterString($doc->getFilters(), $request)); //This screen will have a list of the markers in Address column $screen = new Map($document->getTitle()); //For each row of the table foreach ($document as $entry) { $index = true; $lines = $entry->getCustom(); //Each of the columns of the row foreach ($lines as $customEntry) { $name = $customEntry->getColumnName(); $value = $customEntry->getText(); //If the name of a column ends with a '-' then we dont show it if ((strlen($name) - 1 == strpos($name, '-')) == false) { if ($index == true) { //This screen will have all the values across the row $innerScreen = new Screen($value); $index = false; } else { if (!empty($value)) { if ($name == $address) { $geo = $this->geoService->getGeo($value); if ($geo) { $marker = new Marker($address, $value, $geo['lng'], $geo['lat']); $marker->setScreenLink($innerScreen); $screen->addChild($marker); } } $innerScreen->addChild(new HTML($value)); } } } } } return (new Remote($screen))->getSymfonyResponse(); } catch (\Exception $e) { $screen = new Screen('Error'); $screen->addChild(new HTML('There was an error reading')); $screen->addChild(new Text($e->getMessage())); $this->logger->error('Problem reading a spreadsheet', ['exception' => $e]); return (new Remote($screen))->getSymfonyResponse(); } }
<?php require __DIR__ . '/../vendor/autoload.php'; use AppShed\Remote\Element\Screen\Screen; use AppShed\Remote\Element\Item\Text; use AppShed\Remote\Element\Item\Image; use AppShed\Remote\Element\Item\Marker; use AppShed\Remote\Element\Item\Toggle; use AppShed\Remote\HTML\Remote; if (Remote::isOptionsRequest()) { Remote::getCORSResponseHeaders(); } $screen = new Screen('My Screen'); $screen->addChild(new Text('Hi there')); $screen->addChild(new Image(new AppShed\Remote\Style\Image("http://images.nationalgeographic.com/wpf/media-live/photos/000/005/cache/domestic-cat_516_600x450.jpg"))); $screen->addChild(new Marker('Hi there', 'hello', 49, 32)); $screen->addChild($link = new \AppShed\Remote\Element\Item\Link('link')); $link->setEmailLink('*****@*****.**', 'hello', 'body'); $screen->addChild(new Toggle('test switch', 'title', 'value-1', true)); $remote = new Remote($screen); $remote->getResponse();
/** * Get the html node for this element * * @param \AppShed\Remote\XML\DOMDocument $xml * @param \DOMElement $node * @param \AppShed\Remote\HTML\Settings $settings */ protected function applyLinkToNode(DOMDocument $xml, \DOMElement $node, Settings $settings) { switch ($this->linktype) { case LinkConstants::LINK_JAVASCRIPT: $node->setAttribute('data-linktype', LinkConstants::LINK_JAVASCRIPT); $node->setAttribute('data-href', $this->getIdType() . $settings->getPrefix() . $this->getId()); break; case LinkConstants::LINK_APP: $node->setAttribute('data-linktype', LinkConstants::LINK_APP); if ($this->screen instanceof App) { $this->app->getHTMLNode($xml, $settings); $node->setAttribute('data-href', $settings->getPrefix() . $this->app->getId()); } else { $node->setAttribute('data-href', $settings->getPrefix() . $this->app); } break; case LinkConstants::LINK_SCREEN: $node->setAttribute('data-linktype', LinkConstants::LINK_SCREEN); if ($this->screen instanceof Screen) { $this->screen->getHTMLNode($xml, $settings); $node->setAttribute('data-href', $settings->getPrefix() . $this->screen->getId()); } elseif ($this->appshedLink) { $node->setAttribute('data-href', $this->screen); $node->setAttribute('data-appshed', 'appshed'); } else { $node->setAttribute('data-href', $settings->getPrefix() . $this->screen); } if (!empty($this->elementId)) { $node->setAttribute('data-element', $this->elementId); } break; case LinkConstants::LINK_TAB: $node->setAttribute('data-linktype', LinkConstants::LINK_TAB); if ($this->tab instanceof Tab) { $node->setAttribute('data-href', $settings->getPrefix() . $this->tab->getId()); } elseif ($this->appshedLink) { $node->setAttribute('data-href', $this->tab); $node->setAttribute('data-appshed', 'appshed'); } else { $node->setAttribute('data-href', $settings->getPrefix() . $this->tab); } break; case LinkConstants::LINK_FILE: $node->setAttribute('data-linktype', LinkConstants::LINK_FILE); $node->setAttribute('data-href', $this->fileUrl); if ($this->fileName) { $node->setAttribute('data-filename', $this->fileName); } break; case LinkConstants::LINK_SOUND: $node->setAttribute('data-linktype', LinkConstants::LINK_SOUND); $node->setAttribute('data-href', $this->soundUrl); if ($this->soundName) { $node->setAttribute('data-filename', $this->soundName); } break; case LinkConstants::LINK_WEB: $node->setAttribute('data-linktype', LinkConstants::LINK_WEB); $node->setAttribute('data-href', $this->applyVariablesToUrl($this->webUrl)); $node->setAttribute('data-weblinktype', $this->webType); break; case LinkConstants::LINK_REMOTE: $node->setAttribute('data-linktype', LinkConstants::LINK_REMOTE); $node->setAttribute('data-href', $this->applyVariablesToUrl($this->remoteUrl)); $node->setAttribute('data-direct', 'direct'); break; case LinkConstants::LINK_LOGIN: $node->setAttribute('data-linktype', LinkConstants::LINK_LOGIN); $node->setAttribute('data-href', $this->loginId); break; case LinkConstants::LINK_REGISTER: $node->setAttribute('data-linktype', LinkConstants::LINK_REGISTER); $node->setAttribute('data-href', $this->registerId); break; case LinkConstants::LINK_YOUTUBE: $node->setAttribute('data-linktype', LinkConstants::LINK_YOUTUBE); $node->setAttribute('data-href', $this->youTubeUrl); break; case LinkConstants::LINK_VIMEO: $node->setAttribute('data-linktype', LinkConstants::LINK_VIMEO); $node->setAttribute('data-href', $this->vimeoUrl); break; case LinkConstants::LINK_VIDEO: $node->setAttribute('data-linktype', LinkConstants::LINK_VIDEO); $node->setAttribute('data-href', $this->videoUrl); break; case LinkConstants::LINK_FACEBOOK: $node->setAttribute('data-linktype', LinkConstants::LINK_FACEBOOK); $node->setAttribute('data-href', $this->facebookUrl); break; case LinkConstants::LINK_TWITTER: $node->setAttribute('data-linktype', LinkConstants::LINK_TWITTER); $node->setAttribute('data-href', $this->twitterScreenName); break; case LinkConstants::LINK_BBM: $node->setAttribute('data-linktype', LinkConstants::LINK_BBM); break; case LinkConstants::LINK_REFRESH: $node->setAttribute('data-linktype', LinkConstants::LINK_REFRESH); break; case LinkConstants::LINK_EMAIL: if ($settings->getEmailPreview()) { $screen = new Screen('Email'); $screen->setId('email' . $this->getId()); $screen->setEditable(false); $screen->setBack($settings->getCurrentScreen()); $screen->addChild(new Input('email_to', 'To', $this->emailTo)); $screen->addChild(new Input('email_subject', 'Subject', $this->emailSubject)); $screen->addChild(new TextArea('email_body', 'Message', $this->emailBody)); $send = new Button('Send'); $send->setWebLink('mailto:{email_to}?subject={email_subject}&body={email_body}', LinkConstants::WEBLINK_EXTERNAL); $screen->addChild($send); $screen->getHTMLNode($xml, $settings); $node->setAttribute('data-linktype', LinkConstants::LINK_SCREEN); $node->setAttribute('data-href', $settings->getPrefix() . $screen->getId()); } else { $node->setAttribute('data-linktype', LinkConstants::LINK_WEB); $node->setAttribute('data-href', 'mailto:' . $this->emailTo . '?' . http_build_query(['subject' => $this->emailSubject, 'body' => $this->emailBody])); $node->setAttribute('data-weblinktype', LinkConstants::WEBLINK_EXTERNAL); } break; case LinkConstants::LINK_PHONE: if ($settings->getPhonePreview()) { $screen = new Screen('Phone'); $screen->setId('phone' . $this->getId()); $screen->setScroll(false); $screen->setEditable(false); $screen->setBack($settings->getCurrentScreen()); $screen->addClass('phone-screen'); $screen->setHeader(false); $screen->setTabs(false); $top = new LinkElement($this->phoneNumber); $top->addClass('top'); $screen->addChild($top); $end = new LinkElement('End'); $end->addClass('bottom'); $end->setBackLink(); $screen->addChild($end); $screen->getHTMLNode($xml, $settings); $node->setAttribute('data-linktype', LinkConstants::LINK_SCREEN); $node->setAttribute('data-href', $settings->getPrefix() . $screen->getId()); } else { $node->setAttribute('data-linktype', 'web'); $node->setAttribute('data-href', 'tel:' . $this->phoneNumber); $node->setAttribute('data-weblinktype', LinkConstants::WEBLINK_CONFIRM); $node->setAttribute('data-confirm-message', 'Click to make a call to ' . $this->phoneNumber); $node->setAttribute('data-okbtn', 'Call'); } break; case LinkConstants::LINK_BACK: $node->setAttribute('data-linktype', LinkConstants::LINK_BACK); if ($this->backScreenId) { $node->setAttribute('data-href', $this->backScreenId); } break; case LinkConstants::LINK_IOT: $node->setAttribute('data-linktype', LinkConstants::LINK_IOT); $node->setAttribute('data-href', $this->iotPinName); $node->setAttribute('data-value', $this->iotValue); break; } if ($node->hasAttribute('data-linktype')) { $xml->addClass($node, 'link'); if ($this->linkArrow === true) { $node->appendChild($xml->createElement('div', 'link-arrow')); } else { if ($this->linkArrow === false) { $xml->addClass($node, 'link-no-arrow'); } } $node->setAttribute('x-blackberry-focusable', 'true'); } }
<?php require __DIR__ . '/../vendor/autoload.php'; use AppShed\Remote\Element\Screen\Screen; use AppShed\Remote\Element\Item\Text; use AppShed\Remote\Element\Item\Link; use AppShed\Remote\HTML\Remote; if (Remote::isOptionsRequest()) { Remote::getCORSResponseHeaders(); } $screenTwo = new Screen('My Screen 2'); $screenTwo->addChild(new Text('Hi there again')); $screen = new Screen('My Screen'); $screen->addChild(new Text('Hi there')); $link = new Link('The link'); $screen->addChild($link); $link->setScreenLink($screenTwo); $remote = new Remote($screen); $remote->getResponse();