/**
  * @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();
 }
Exemple #5
0
 /**
  * Get the html node for this element
  *
  * @param \DOMElement $node
  * @param \AppShed\Remote\XML\DOMDocument $xml
  * @param \AppShed\Remote\HTML\Settings $settings
  */
 protected function getHTMLNodeInner($node, $xml, $settings)
 {
     $this->innerScreen = new GalleryInner($this->title);
     $this->innerScreen->copyStyles($this);
     $this->innerScreen->setId($this->getId());
     $this->innerScreen->setUpdated(false);
     $this->innerScreen->setChildren(array_filter($this->children, function (\AppShed\Remote\Element\Item\GalleryImage $child) {
         return !$child->getDisableInner();
     }));
     $this->innerScreen->setBack($this);
     $this->innerScreen->getHTMLNode($xml, $settings);
     parent::getHTMLNodeInner($node, $xml, $settings);
 }
 /**
  * @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();
 }
 /**
  * Get the html node for this element
  *
  * @param \DOMElement $node
  * @param \AppShed\Remote\XML\DOMDocument $xml
  * @param \AppShed\Remote\HTML\Settings $settings
  * @param CSSDocument $css
  * @param array $javascripts
  */
 protected function getHTMLNodeBase($node, $xml, $settings, $css, &$javascripts)
 {
     $node->setAttribute('data-screentype', static::TYPE);
     if ($this->secure) {
         $xml->addClass($node, 'secured');
     }
     $this->getCSS($css, $settings);
     if ($this->tabs === 'float') {
         $node->setAttribute('data-tabs', 'float');
     } else {
         if (!$this->tabs) {
             $node->setAttribute('data-tabs', 'hide');
         }
     }
     if ($this->header === 'float') {
         $xml->addClass($node, 'float-header');
     } else {
         if (!$this->header) {
             $xml->addClass($node, 'hide-header');
         }
     }
     if ($this->statusBarStyle === 'float') {
         $node->setAttribute('data-status', 'float');
     } else {
         if ($this->statusBarStyle === 'black') {
             $node->setAttribute('data-status', 'black');
         }
     }
     if ($this->tab) {
         $node->setAttribute('data-tab', $this->tab);
     }
     if ($settings->getFetchId()) {
         $node->setAttribute('data-fetch-id', $settings->getPrefix() . $settings->getFetchId());
     }
     if ($settings->getFetchUrl()) {
         $node->setAttribute('data-fetch-url', $settings->getFetchUrl());
     }
     if ($settings->getDirect()) {
         $node->setAttribute('data-fetch-direct', 'direct');
     }
     $node->appendChild($navbar = $xml->createElement('div', 'header'));
     $navbar->setAttribute('x-blackberry-focusable', 'true');
     $navbar->appendChild($xml->createElement('div', 'background'));
     if ($this->back !== false) {
         $navbar->appendChild($back = $xml->createElement('div', ['class' => 'back', 'data-linktype' => 'back', 'text' => 'Back']));
         if ($this->back instanceof Screen) {
             $this->back->getHTMLNode($xml, $settings);
             $back->setAttribute('data-href', $settings->getPrefix() . $this->back->getId());
         } else {
             if ($this->back !== true) {
                 $back->setAttribute('data-href', $settings->getPrefix() . $this->back);
             }
         }
         $back->setAttribute('x-blackberry-focusable', 'true');
     }
     $navbar->appendChild($title = $xml->createElement('div', 'title'));
     $title->appendChild($xml->createElement('span', ['text' => $this->title]));
     $items = $xml->createElement('div', 'items' . ($this->scroll ? ' scrolling' : ''));
     $node->appendChild($items);
     $headButtons = $this->addHTMLChildren($items, $xml, $settings, $css, $javascripts);
     foreach ($headButtons as $b) {
         $c = $b->getHTMLNode($xml, $settings);
         if ($c) {
             $navbar->appendChild($c);
         }
     }
 }
 /**
  * @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();
     }
 }
Exemple #9
0
<?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();
Exemple #10
0
 /**
  * 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');
     }
 }
Exemple #11
0
<?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();
Exemple #12
0
 public function __construct($title, $columns = 3)
 {
     parent::__construct($title);
     $this->columns = $columns;
 }