public function form()
 {
     Loader::model('page_list');
     $pl = new PageList();
     $lastParent = '';
     $selected = $_REQUEST['akID'][$this->getAttributeKey()->getAttributeKeyID()]['value'];
     if (!$selected && $this->getAttributeValueID() > 0) {
         $selected = $this->getValue()->cID;
     }
     $selectString = "<select id='{$this->field('value')}' name='{$this->field('value')}' ><option value=''>--</option>";
     $pl->filterByCollectionTypeHandle('city');
     $pages = $pl->get();
     uasort($pages, function ($a, $b) {
         $ap = $a->getCollectionParentID();
         $bp = $b->getCollectionParentID();
         return $ap === $bp ? 0 : strcmp(Page::getByID($ap)->getCollectionName(), Page::getByID($bp)->getCollectionName());
     });
     foreach ($pages as $page) {
         $parent = Page::getByID($page->getCollectionParentID())->getCollectionName();
         if ($lastParent != $parent) {
             if ($lastParent !== '') {
                 $selectString .= '</optgroup>';
             }
             $selectString .= "<optgroup label='{$parent}'>";
             $lastParent = $parent;
         }
         $selectedAttributeVal = '';
         if ($selected === $page->cID) {
             $selectedAttributeVal = ' selected="selected"';
         }
         $selectString .= "<option value=\"{$page->getCollectionID()}\"" . $selectedAttributeVal . ">{$page->getCollectionName()}</option>";
     }
     $selectString .= '</select>';
     echo $selectString;
 }
Beispiel #2
0
 public function view()
 {
     parent::view();
     $bg = $this->city->fullbg;
     if ($bg) {
         $this->bodyData['bg'] = $bg->getURL();
     }
     $this->bodyData['classes'][] = 'city-page';
     $this->bodyData['pageViewName'] = 'CityPageView';
     $this->set('bodyData', $this->bodyData);
     $this->set('pageType', 'city-page');
     $this->set('isCityOrganizer', (new User())->getUserID() === $this->city->cityOrganizer->getUserID());
     $this->set('isLoggedIn', (bool) Loader::helper('concrete/dashboard')->canRead());
     $this->set('isCampaignActive', false);
     // Is the donations campaign running?
     $this->set('canEdit', is_object(ComposerPage::getByID($this->c->getCollectionID())));
     $this->set('city', $this->city);
     // Make JSON available
     $this->addToJanesWalk(['city' => $this->city]);
     // Are there blog entries for this city?
     $blog = new PageList();
     $blog->filterByCollectionTypeHandle('city_blog');
     $blog->filterByParentID($this->c->getCollectionID());
     $this->set('blog', $blog->get(1)[0]);
 }
 public function run()
 {
     $js = Loader::helper('json');
     $pl = new PageList();
     $pl->filterByCollectionTypeHandle('city');
     $pages = $pl->get();
     $updated = 0;
     $not = 0;
     echo "Loading city coordinates.. \n";
     foreach ($pages as $page) {
         if (!trim($page->getAttribute('latlng')) || trim($page->getAttribute('latlng')) === ',') {
             $parent = Page::getByID($page->getCollectionParentID());
             $city = "{$page->getCollectionName()}, {$parent->getCollectionName()}";
             $cityLocation = file_get_contents("https://maps.google.com/maps/api/geocode/json?address=" . urlencode($city) . "&sensor=false&key=AIzaSyAvsH_wiFHJCuMPPuVifJ7QgaRCStKTdZM");
             $responseObj = $js->decode($cityLocation);
             if ($responseObj->status != 'ZERO_RESULTS') {
                 $page->setAttribute('latlng', $responseObj->results[0]->geometry->location->lat . "," . $responseObj->results[0]->geometry->location->lng);
                 $updated++;
             } else {
                 $not++;
             }
         }
     }
     return t("{$updated} cities geocoded, {$not} cities failed lookup.");
 }
 public function run()
 {
     $pl = new PageList();
     $pl->filterByCollectionTypeHandle('walk');
     $pl->filterByName('', true);
     $pages = $pl->get();
     $pagecount = count($pages);
     foreach ($pages as $page) {
         $page->moveToTrash();
     }
     return $pagecount . ' ' . t2('page', 'pages', $pagecount) . ' moved to the trash';
 }
defined('C5_EXECUTE') or die("Access Denied.");
$nh = Loader::helper('navigation');
Loader::model('user_list');
/* Set up the KML XML */
// Creates the Document.
$dom = new DOMDocument('1.0', 'UTF-8');
$dnode = $dom->createElement('geography');
$docNode = $dom->appendChild($dnode);
$countries = new PageList();
$countries->filterByCollectionTypeHandle('country');
foreach ($countries->get() as $country) {
    $node = $dom->createElement('country');
    $node->setAttribute('name', $country->getCollectionName());
    $countryNode = $docNode->appendChild($node);
    $cities = new PageList();
    $cities->filterByCollectionTypeHandle('city');
    $cities->filterByParentID($country->getCollectionID());
    foreach ($cities->get() as $city) {
        $node = $dom->createElement('city');
        $node->setAttribute('name', $city->getCollectionName());
        $node->setAttribute('owner_email', UserInfo::getByID($city->getCollectionUserID())->getUserEmail());
        $countryNode->appendChild($node);
    }
}
/*foreach((new UserList())->get(3000) as $user) {
  $ui = UserInfo::getByID($user->getUserID());
  $node = $dom->createElement('User');
  $userNode = $docNode->appendChild($node);

  $node = $dom->createElement('email');
  $cdata = $node->ownerDocument->createCDATASection($user->getUserEmail());
<?php

defined('C5_EXECUTE') or die("Access Denied.");
$pl = new PageList();
$nh = Loader::helper('navigation');
$city = "Toronto, Canada";
$pl->filterByCollectionTypeHandle('City');
$pages = $pl->get();
/* Set up the KML XML */
// Creates the Document.
$dom = new DOMDocument('1.0', 'UTF-8');
// Creates the root KML element and appends it to the root document.
$node = $dom->createElementNS('http://earth.google.com/kml/2.2', 'kml');
$parNode = $dom->appendChild($node);
// Creates a KML Document element and append it to the KML element.
$dnode = $dom->createElement('Document');
$docNode = $parNode->appendChild($dnode);
$nameNode = $dom->createElement('name', "Jane's Walk World");
$docNode->appendChild($nameNode);
// Creates the two Style elements, one for restaurant and one for bar, and append the elements to the Document element.
/*$restStyleNode = $dom->createElement('Style');
$restStyleNode->setAttribute('id', 'jwstyle');
$restIconstyleNode = $dom->createElement('IconStyle');
$restIconstyleNode->setAttribute('id', 'jwIcon');
$restIconNode = $dom->createElement('Icon');
$restHref = $dom->createElement('href', 'http://janeswalk.net/images/orange-dot.png');
$restIconNode->appendChild($restHref);
$restIconstyleNode->appendChild($restIconNode);
$restStyleNode->appendChild($restIconstyleNode);
$docNode->appendChild($restStyleNode);
*/
Beispiel #7
0
<?php

defined('C5_EXECUTE') or die("Access Denied.");
$pl = new PageList();
$nh = Loader::helper('navigation');
$pl->filterByCollectionTypeHandle('walk');
$pages = $pl->get();
$walks = array();
foreach ($pages as $page) {
    // Creates a coordinates element and gives it the value of the lng and lat columns from the results.
    $gmap = json_decode($page->getAttribute('gmap'), true);
    $coordinates = false;
    $name = $page->getCollectionName();
    if (!($name && isset($gmap['markers']))) {
        continue;
    }
    // Don't bother if there's no coordinates or name; blank walk
    $city = Page::getByID($page->getCollectionParentID());
    $country = Page::getByID($city->getCollectionParentID());
    // Since we're generating csv, set keys here to enforce ordering
    $walk = array('id' => $page->getCollectionID(), 'map_id' => $page->getCollectionID(), 'title' => '"' . htmlspecialchars($name) . '"', 'description' => '"' . htmlspecialchars($page->getAttribute('shortdescription') . '<br />' . "<a target=\"__blank\" href='{$nh->getCollectionURL($page)}'>Go to walk &gt;</a>") . '"', 'link' => $nh->getCollectionURL($page), 'icon' => '', 'lat' => '', 'lng' => '');
    foreach ((array) $gmap['markers'] as $marker) {
        // To avoid errors on empty/malformed maps
        $walk['lat'] = $marker['lat'];
        $walk['lng'] = $marker['lng'];
        break;
    }
    $walks[] = $walk;
}
header('Content-type: text/csv');
if (count($walks)) {
 /**
  * Call model data needed by view
  *
  * @param int $userID The user ID of who we're viewing
  * @return null
  */
 public function view($userID = 0)
 {
     // Load helpers
     Loader::model('page_list');
     $nh = Loader::helper('navigation');
     $ah = Loader::helper('concrete/avatar');
     $th = Loader::helper('text');
     $ih = Loader::helper('image');
     // Set helpers for view
     // Set the page view first
     $this->set('bodyData', ['pageViewName' => 'ProfilePageView']);
     parent::view($userID);
     // Load the current user
     $u = new User();
     $ui = UserInfo::getByID($u->getUserID());
     $profile = $this->get('profile');
     // Basic flags identifying the type of user
     // Whether or not the logged in user is viewing their own "profile"
     $userIsViewingSelf = $u->getUserID() === $profile->getUserID();
     // User is a CO
     $userIsCityOrganizer = in_array('City Organizers', $profile->getUserObject()->getUserGroups());
     /**
      * New dashboard variables
      *
      */
     // Remaining variables/logic only needed for "self viewing"
     if ($userIsViewingSelf) {
         /**
          * Helper
          *
          */
         $html = Loader::helper('html');
         $this->addHeaderItem($html->javascript('swfobject.js'));
         /**
          * User data
          *
          */
         // Whether the logged in user has set their first and last name
         $this->set('userHasSetName', (bool) trim($ui->getAttribute('first_name') . ' ' . $ui->getAttribute('last_name')));
         // The home city for the logged in user (false otherwise)
         $userHomeCity = $ui->getAttribute('home_city');
         $this->set('userHomeCity', $userHomeCity);
         // Whether the logged in user has chosen an avatar/display picture
         $this->set('userPicture', $ah->getImagePath($ui));
         // Walks owned by user
         $pl = new PageList();
         $pl->filterByCollectionTypeHandle('walk');
         $pl->filterByUserID($u->getUserID());
         // Include the names of draft walks, not last published
         $pl->displayUnapprovedPages();
         $this->set('userWalks', $pl->get());
         // Whether the logged in user has created any blog posts
         $pl = new PageList();
         $pl->filterByCollectionTypeHandle(['walk_blog_entry', 'city_blog_entry']);
         $pl->filterByUserID($u->getUserID());
         $this->set('userBlogPosts', $pl->get());
         /**
          * User city data
          *
          */
         if ($userHomeCity) {
             // Set the city
             $city = $ui->getAttribute('home_city');
             // Load organizer user for this city
             $cityOrganizer = UserInfo::getByID($userHomeCity->getCollectionUserID());
             if ($cityOrganizer) {
                 // The email address of the city organizer for the logged in user's
                 // home city
                 $cityOrganizerEmailAddress = $cityOrganizer->getUserEmail();
                 $this->set('cityOrganizerEmailAddress', $cityOrganizerEmailAddress);
             }
             // Whether the city has a blog page set up for it
             $pl = new PageList();
             $pl->filterByCollectionTypeHandle('blog');
             $pl->filterByParentID($userHomeCity->getCollectionID());
             $cityHasBlogSetup = (bool) $pl->getTotal();
             $this->set('cityHasBlogSetup', $cityHasBlogSetup);
             // List of basic data for three walks we want to highlight to city
             // organizers/walk leaders that showcase creative/unique walks
             $pl = new PageList();
             $pl->filterByCollectionTypeHandle('walk');
             $pl->filter(false, 'p1.uID !=' . $u->getUserID());
             $pl->filterByAttribute('exclude_page_list', false);
             $pl->sortBy('RAND()');
             // Load this list of featured walks
             $featuredWalkData = array_map(function ($page) use($nh, $ih) {
                 $_city = Page::getByID($page->getCollectionParentID());
                 $_country = Page::getByID($_city->getCollectionParentID());
                 $_thumb = $page->getAttribute('thumbnail');
                 $countryName = $_country->getCollectionName();
                 if ($countryName === 'United States') {
                     $countryName = 'United States of America';
                 }
                 $countryName = str_replace(' ', '_', $countryName);
                 $walkImage = $_thumb ? $ih->getThumbnail($_thumb, 800, 800)->src : '';
                 return ['walkImagePath' => $walkImage, 'countryName' => $countryName, 'cityName' => $_city->getCollectionName(), 'walkTitle' => $page->getCollectionName(), 'walkPath' => $nh->getLinkToCollection($page)];
             }, (array) $pl->get(3));
             // Whether the city has any walks posted to it
             // Whether the city has a blog page set up for it
             $pl = new PageList();
             $pl->filterByCollectionTypeHandle('walk');
             $pl->filterByParentID($userHomeCity->getCollectionID());
             $pl->filterByAttribute('exclude_page_list', false);
             $cityWalks = $pl->get();
             // Export to view
             $this->set('cityWalks', $cityWalks);
             $this->set('cityHasWalks', !empty($cityWalks));
             $this->set('city', $city);
             $this->set('featuredWalkData', $featuredWalkData);
             // If the user is a city organizer
             if ($userIsCityOrganizer === true) {
                 // Whether the city organizer's city has its header info set
                 $cityHeaderInfo = $userHomeCity->getCollectionDescription();
                 $cityHeaderInfoIsEmpty = !trim($cityHeaderInfo);
                 if ($cityHeaderInfoIsEmpty === false) {
                     $cityHeaderInfo = $th->shorten($cityHeaderInfo, 150);
                 }
                 $this->set('cityHeaderInfoIsEmpty', $cityHeaderInfoIsEmpty);
                 $this->set('cityHeaderInfo', $cityHeaderInfo);
                 // Whether the city organizer's city has its short description
                 // set
                 $cityDescription = $userHomeCity->getAttribute('longdescription');
                 $cityDescriptionIsEmpty = !trim($cityDescription);
                 if ($cityDescriptionIsEmpty === false) {
                     $cityDescription = $th->shorten($cityDescription, 150);
                 }
                 $this->set('cityDescriptionIsEmpty', $cityDescriptionIsEmpty);
                 $this->set('cityDescription', $cityDescription);
                 // Whether the city organizer's city has its background photo
                 // set
                 $cityBackgroundPhotoAttribute = $userHomeCity->getAttribute('full_bg');
                 $cityBackgroundPhotoIsEmpty = !$cityBackgroundPhotoAttribute;
                 $this->set('cityBackgroundPhotoIsEmpty', $cityBackgroundPhotoIsEmpty);
                 if (!$cityBackgroundPhotoIsEmpty) {
                     $this->set('cityBackgroundPhoto', $cityBackgroundPhotoAttribute->getURL());
                 }
                 // Whether the header, description and photo are set for the
                 // city organizer's home city
                 $cityHasFullDetails = !($cityHeaderInfoIsEmpty || $cityDescriptionIsEmpty || $cityBackgroundPhotoIsEmpty);
                 $this->set('cityHasFullDetails', $cityHasFullDetails);
                 // Load the cities this CO organizes
                 $pl = new PageList();
                 $pl->filterByCollectionTypeHandle('city');
                 $pl->ignoreAliases();
                 $pl->filterByUserID($u->getUserID());
                 $cityUsers = [];
                 foreach ($pl->get() as $city) {
                     // Load the user list for this city
                     $ul = new UserList();
                     $ul->filterByHomeCity($city->getCollectionID());
                     foreach ($ul->get(65535) as $user) {
                         $cityUsers[] = ['id' => $user->getUserID(), 'firstName' => $user->getAttribute('first_name'), 'lastName' => $user->getAttribute('last_name')];
                     }
                 }
                 // Sort the users -- needed here for multi-city COs
                 usort($cityUsers, function ($a, $b) {
                     return strcmp(strtoupper($a['first-name']), strtoupper($b['first-name']));
                 });
                 $this->set('cityUsers', $cityUsers);
                 // Link to city-editor
                 $this->set('cityComposerURL', View::url('/dashboard/composer/write/-/edit/' . $city->getCollectionID()));
             }
         }
         // Resources
         $resources = ['showCityOrganizers' => false, 'showGlobalWalks' => true, 'showTips' => true, 'showFiles' => false];
         if ($userIsCityOrganizer === true) {
             $resources['showCityOrganizers'] = true;
             $resources['showFiles'] = true;
             // List of basic details for three city organizers that can be
             // recommended to other city organizers
             // TODO add an attribute to select 'featured' cities, so we
             // don't simply grab all cities. Expand this out into a
             // smart way to recommend other cities.
             $pl = new PageList();
             $pl->filterByCollectionTypeHandle('city');
             $pl->filter(false, 'p1.uID !=' . $u->getUserID());
             $pl->filterByAttribute('exclude_page_list', false);
             $pl->sortBy('RAND()');
             $recommendedCities = $pl->get(3);
             $cityOrganizerData = array_map(function ($page) use($ah) {
                 $_co = UserInfo::getByID($page->getCollectionUserID());
                 return ['cityName' => $page->getCollectionName(), 'organizerImagePath' => $ah->getImagePath($_co), 'organizerName' => trim($_co->getAttribute('first_name') . ' ' . $_co->getAttribute('last_name')), 'organizerEmail' => $_co->getUserEmail()];
             }, $pl->get(3));
             $this->set('cityOrganizerData', $cityOrganizerData);
         }
         $this->set('resources', $resources);
     }
     $this->set('nh', $nh);
     $this->set('u', $u);
     $this->set('newWalkForm', Page::getByPath('/walk/form'));
     $this->set('userIsCityOrganizer', $userIsCityOrganizer);
     $this->set('userIsViewingSelf', $userIsViewingSelf);
     // Validation helper for form tokens
     $this->set('valt', Loader::helper('validation/token'));
 }