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; }
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); */
<?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 ></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')); }