public function getGroupedDateTimesByDay()
 {
     $all_times = $this->DateTimes();
     $grouped = new GroupedList($all_times);
     $grouped->GroupedBy("getTokenEventStartEnd", "Times");
     return $grouped;
 }
Example #2
0
 public function GroupedCalendarEventsByDate()
 {
     $view = $this->getRequest()->getVar('view');
     if ($view == "thisweek") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= DATE_ADD(CURDATE(), INTERVAL (0 - WEEKDAY(CURDATE())) DAY) AND `Date` < DATE_ADD(CURDATE(), INTERVAL (7 - WEEKDAY(CURDATE())) DAY) ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "nextweek") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= DATE_ADD(CURDATE(), INTERVAL (0 - WEEKDAY(CURDATE()) + 7) DAY) AND `Date` < DATE_ADD(CURDATE(), INTERVAL (7 - WEEKDAY(CURDATE()) + 7) DAY) ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "thismonth") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CONCAT(DATE_FORMAT(LAST_DAY(CURDATE()),'%Y-%m-'), '01') AND `Date` <= LAST_DAY(CURDATE()) ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "nextmonth") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CONCAT(DATE_FORMAT(LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)), '%Y-%m-'), '01') AND `Date` <= LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)) ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "thisyear") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CONCAT(YEAR(CURDATE()), '-01-01') AND `Date` <= CONCAT(YEAR(CURDATE()), '-12-31') ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "nextyear") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CONCAT(YEAR(CURDATE()) + 1, '-01-01') AND `Date` <= CONCAT(YEAR(CURDATE()) + 1, '-12-31') ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "all") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CURDATE() ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } elseif ($view == "events") {
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     } else {
         // Default to the next 14 days
         $sql = "SELECT `CalendarEvent`.*, `CalendarEventDate`.`Date`, DATE_FORMAT(`CalendarEventDate`.`Date`, '%W %e %M %Y') AS `FormattedDate` FROM `CalendarEvent` INNER JOIN `CalendarEventDate` ON `CalendarEventDate`.`CalendarEventID` = `CalendarEvent`.`ID` WHERE `Date` >= CURDATE() AND `Date` <= DATE_ADD(CURDATE(), INTERVAL 14 DAY) ORDER BY `CalendarEventDate`.`Date`, `CalendarEvent`.`StartTime`, `CalendarEvent`.`EndTime`";
     }
     $records = DB::query($sql);
     foreach ($records as $record) {
         $objects[] = new $record['ClassName']($record);
     }
     if (isset($objects)) {
         $arrayList = new ArrayList($objects);
     } else {
         $arrayList = new ArrayList();
     }
     return GroupedList::create($arrayList);
 }
 public function talks($day)
 {
     $talks = Talk::get()->filter(array('Day' => $day))->sort('Start ASC');
     if ($day === 'Sat') {
         $talks = GroupedList::create($talks->sort('Start ASC, Room ASC'));
     }
     return $talks;
 }
 /**
  * If we are in list mode then group items by event date
  *
  * @param \ArrayList|\DataList $items
  * @param $mode
  */
 public function layoutGridListItems(&$items, $mode)
 {
     if ($groupField = $this()->{static::SingleFieldName}) {
         $modes = $this->config()->get('confine_to_modes') ?: [];
         if (isset($modes[$mode]) || !$modes) {
             $items = \GroupedList::create($items->Sort($groupField));
         }
     }
 }
 /**
  * Similar to {@link groupBy()}, but returns
  * the data in a format which is suitable for usage in templates.
  *
  * @param  string $index
  * @param  string $children Name of the control under which children can be iterated on
  * @return ArrayList
  */
 public function GroupedBy($index, $children = 'Children')
 {
     $grouped = $this->groupBy($index);
     $result = new ArrayList();
     foreach ($grouped as $indVal => $list) {
         $list = GroupedList::create($list);
         $result->push(new ArrayData(array($index => $indVal, $children => $list)));
     }
     return $result;
 }
Example #6
0
 public function getGroupedGames()
 {
     // show all if in draft mode
     $mode = Versioned::get_reading_mode();
     if ($mode == 'Stage.Stage') {
         $items = GroupedList::create(Game::get()->filter(array('ParentID' => $this->getCurrentEvent()->ID))->sort('Session'));
     } else {
         $items = GroupedList::create(Game::get()->filter(array('ParentID' => $this->getCurrentEvent()->ID, 'Status' => true))->sort('Session'));
     }
     return $items;
 }
Example #7
0
	public function testGroupedBy() {
		$list = new GroupedList(new ArrayList(array(
			array('Name' => 'AAA'),
			array('Name' => 'AAA'),
			array('Name' => 'BBB'),
			array('Name' => 'BBB'),
			array('Name' => 'AAA'),
			array('Name' => 'BBB'),
			array('Name' => 'CCC'),
			array('Name' => 'CCC')
		)));

		$grouped = $list->GroupedBy('Name');
		$first   = $grouped->first();
		$last    = $grouped->last();

		$this->assertEquals(3, count($first->Children));
		$this->assertEquals('AAA', $first->Name);
		$this->assertEquals(2, count($last->Children));
		$this->assertEquals('CCC', $last->Name);
	}
 /**
  * Create a grouped list for presentation in a table
  * @return GroupedList
  */
 public function getGroupedProductsByModel()
 {
     $list = $this->owner->ProductsShowable();
     $sortedList = new ArrayList();
     foreach ($this->owner->ProductModels()->sort('Sort') as $model) {
         foreach ($list as $product) {
             if ($product->Model == $model->Title) {
                 $sortedList->push($product);
             }
         }
     }
     return GroupedList::create($sortedList);
 }
 /**
  * @return ArrayList
  */
 public function GroupedMainMenu()
 {
     $items = $this->owner->MainMenu();
     $result = ArrayList::create();
     $groupSettings = Config::inst()->get('LeftAndMain', 'menu_groups');
     $itemsToGroup = array();
     $groupSort = 0;
     $itemSort = 0;
     foreach ($groupSettings as $groupName => $menuItems) {
         if (count($menuItems)) {
             foreach ($menuItems as $key => $menuItem) {
                 if (is_numeric($key)) {
                     $itemsToGroup[$menuItem] = array('Group' => $groupName, 'Priority' => array_key_exists('priority', $groupSettings[$groupName]) ? $groupSettings[$groupName]['priority'] : $groupSort, 'SortOrder' => $itemSort);
                 }
                 $itemSort++;
             }
             $groupSort--;
         }
     }
     foreach ($items as $item) {
         $code = $item->Code->XML();
         if (array_key_exists($code, $itemsToGroup)) {
             $item->Group = $itemsToGroup[$code]['Group'];
             $item->Priority = $itemsToGroup[$code]['Priority'];
             $item->SortOrder = $itemsToGroup[$code]['SortOrder'];
         } else {
             $item->Group = $code;
             $item->Priority = is_numeric($item->MenuItem->priority) ? $item->MenuItem->priority : -1;
             $item->SortOrder = 0;
         }
     }
     foreach (GroupedList::create($items->sort(array('Priority' => 'DESC')))->groupBy('Group') as $group => $children) {
         if (count($children) > 1) {
             $active = false;
             foreach ($children as $child) {
                 if ($child->LinkingMode == 'current') {
                     $active = true;
                 }
             }
             $icon = array_key_exists('icon', $groupSettings[$group]) ? $groupSettings[$group]['icon'] : false;
             $code = str_replace(' ', '_', $group);
             $result->push(ArrayData::create(array('Title' => _t('GroupedCmsMenuLabel.' . $code, $group), 'Code' => DBField::create_field('Text', $code), 'Link' => $children->First()->Link, 'Icon' => $icon, 'LinkingMode' => $active ? 'current' : '', 'Children' => $children->sort('SortOrder'))));
         } else {
             $result->push($children->First());
         }
     }
     return $result;
 }
 /**
  * @param string $index
  * @return array
  */
 public function groupBy($index)
 {
     if (strpos($index, '.') === false) {
         return parent::groupBy($index);
     }
     $list = $this->getList();
     if (!$list instanceof DataList) {
         throw new Exception("I don't know how to traverse relations on instances of " . get_class($list) . " :(");
     }
     $result = array();
     $relations = explode('.', $index);
     foreach ($list as $item) {
         $this->extractInto($result, $item, $item, $relations);
     }
     return $result;
 }
 public function send()
 {
     if (!$this->records) {
         $this->setRecords(ContentNotifierQueue::get_unnotified());
     }
     ContentNotifierExtension::disable_filtering();
     $total = $this->records->count();
     $grouped = GroupedList::create($this->records->limit($this->config()->items_limit))->GroupedBy('Category');
     $this->emailer->populateTemplate(array('Headline' => $this->config()->headline, 'GroupedItems' => $grouped, 'Total' => $total, 'Link' => Controller::join_links(Director::absoluteBaseURL(), 'admin', 'content-notifications')));
     $this->emailer->send();
     foreach ($this->records as $record) {
         $record->HasNotified = true;
         $record->write();
     }
     ContentNotifierExtension::enable_filtering(true);
 }
Example #12
0
 function SpeakerList()
 {
     if (isset($_GET['letter'])) {
         $requestedLetter = Convert::raw2xml($_GET['letter']);
         if ($requestedLetter == 'intl') {
             $likeString = "NOT LastName REGEXP '[A-Za-z0-9]'";
         } elseif (ctype_alpha($requestedLetter)) {
             $likeString = "LastName LIKE '" . substr($requestedLetter, 0, 1) . "%'";
         } else {
             $likeString = "LastName LIKE 'a%'";
         }
     } else {
         $likeString = "LastName LIKE 'a%'";
     }
     $list = PresentationSpeaker::get()->where("AvailableForBureau = 1 AND " . $likeString)->sort('LastName');
     return GroupedList::create($list);
 }
Example #13
0
 function MemberList()
 {
     if (isset($_GET['letter'])) {
         $requestedLetter = Convert::raw2xml($_GET['letter']);
         if ($requestedLetter == 'intl') {
             $likeString = "NOT Surname REGEXP '[A-Za-z0-9]'";
         } elseif (ctype_alpha($requestedLetter)) {
             $likeString = "Surname LIKE '" . substr($requestedLetter, 0, 1) . "%'";
         } else {
             $likeString = "Surname LIKE 'a%'";
         }
     } else {
         $likeString = "Surname LIKE 'a%'";
     }
     $list = Member::get()->where("Group_Members.GroupID = 5 AND " . $likeString)->leftJoin('Group_Members', 'Member.ID = Group_Members.MemberID')->sort('Surname');
     return GroupedList::create($list);
 }
 /**
  * @return ArrayList
  */
 public function GroupedMainMenu()
 {
     $items = $this->owner->MainMenu();
     $result = ArrayList::create();
     $groupSettings = Config::inst()->get('LeftAndMain', 'menu_groups');
     $groups = array();
     $position = 0;
     foreach ($groupSettings as $key => $menuItems) {
         $groups[$key] = array('Code' => $key, 'Position' => $position);
         $position++;
         if (count($menuItems)) {
             foreach ($menuItems as $menuItem) {
                 $groups[$menuItem] = array('Code' => $key, 'Position' => $position);
                 $position++;
             }
         }
     }
     foreach ($items as $item) {
         $code = $item->Code->XML();
         if (array_key_exists($code, $groups)) {
             $item->Group = $groups[$code]['Code'];
             $item->Position = $groups[$code]['Position'];
         } else {
             $item->Group = $code;
             $item->Position = 9999;
         }
     }
     foreach (GroupedList::create($items->sort('Position'))->groupBy('Group') as $group => $children) {
         if (count($children) > 1) {
             $active = false;
             foreach ($children as $child) {
                 if ($child->LinkingMode == 'current') {
                     $active = true;
                 }
             }
             $code = str_replace(' ', '_', $group);
             $result->push(ArrayData::create(array('Title' => _t('GroupedCmsMenuLabel.' . $code, $group), 'Code' => DBField::create_field('Text', $code), 'Link' => $children->First()->Link, 'LinkingMode' => $active ? 'current' : '', 'Position' => $position, 'Children' => $children->sort('Position'))));
         } else {
             $result->push($children->First());
         }
     }
     return $result;
 }
 public function testGroupedByChildren()
 {
     $list = GroupedList::create(ArrayList::create(array(ArrayData::create(array('Name' => 'AAA', 'Number' => '111')), ArrayData::create(array('Name' => 'BBB', 'Number' => '111')), ArrayData::create(array('Name' => 'AAA', 'Number' => '222')), ArrayData::create(array('Name' => 'BBB', 'Number' => '111')), ArrayData::create(array('Name' => 'AAA', 'Number' => '111')), ArrayData::create(array('Name' => 'AAA', 'Number' => '333')), ArrayData::create(array('Name' => 'BBB', 'Number' => '222')), ArrayData::create(array('Name' => 'BBB', 'Number' => '333')), ArrayData::create(array('Name' => 'AAA', 'Number' => '111')), ArrayData::create(array('Name' => 'AAA', 'Number' => '333')))));
     $grouped = $list->GroupedBy('Name');
     foreach ($grouped as $group) {
         $children = $group->Children;
         $childGroups = $children->GroupedBy('Number');
         $this->assertEquals(3, count($childGroups));
         $first = $childGroups->first();
         $last = $childGroups->last();
         if ($group->Name == 'AAA') {
             $this->assertEquals(3, count($first->Children));
             $this->assertEquals('111', $first->Number);
             $this->assertEquals(2, count($last->Children));
             $this->assertEquals('333', $last->Number);
         }
         if ($group->Name == 'BBB') {
             $this->assertEquals(2, count($first->Children));
             $this->assertEquals('111', $first->Number);
             $this->assertEquals(1, count($last->Children));
             $this->assertEquals('333', $last->Number);
         }
     }
 }
 function ElectionVoters()
 {
     $MustBeMemberBy = $this->MustBeMemberBy;
     if (isset($_GET['letter'])) {
         $requestedLetter = Convert::raw2xml($_GET['letter']);
         if ($requestedLetter == 'intl') {
             $likeString = "NOT Surname REGEXP '[A-Za-z0-9]'";
         } elseif (ctype_alpha($requestedLetter)) {
             $likeString = "Surname LIKE '" . substr($requestedLetter, 0, 1) . "%'";
         } else {
             $likeString = "Surname LIKE 'a%'";
         }
     } else {
         $likeString = "Surname LIKE 'a%'";
     }
     $MemberList = Member::get()->where($likeString)->innerJoin('Group_Members', '`Member`.`ID` = `Group_Members`.`MemberID` AND Group_Members.GroupID=5')->sort('Surname');
     $VoterList = new ArrayList();
     foreach ($MemberList as $Member) {
         if ($Member->Created <= $MustBeMemberBy) {
             $VoterList->push($Member);
         }
     }
     return GroupedList::create($VoterList);
 }
 public function CurrentScreenings()
 {
     return GroupedList::create($this->CurrentFilm()->Screenings()->filter(array("CinemaID" => $this->CurrentCinema()->ID)));
 }
 function RegionMembers()
 {
     $members = GroupedList::create(LocatableMember::get()->sort('Region')->filter(array('MemberType' => 'FM')));
     //->filter(array('Surname IS NOT NULL'))
     return $members;
 }
Example #19
0
 public function getGroupedGames()
 {
     return GroupedList::create(Game::get()->filter(array('ParentID' => $this->getCurrentEvent()->ID, 'Status' => true))->sort('Session'));
 }
 /**
  * Get the NewsItems as groupedList for global archive-listing.
  * @todo obey translatable maybe? I think it's supported by default, but I could be wrong
  * @return GroupedList of NewsItems.
  */
 public function getArchiveList()
 {
     $NewsGroups = GroupedList::create(News::get());
     return $NewsGroups;
 }
Example #21
0
 public function testTotalItems()
 {
     $list = GroupedList::create(ArrayList::create(array(ArrayData::create(array('Name' => 'AAA', 'Number' => '111')), ArrayData::create(array('Name' => 'BBB', 'Number' => '111')), ArrayData::create(array('Name' => 'AAA', 'Number' => '222')), ArrayData::create(array('Name' => 'BBB', 'Number' => '111')))));
     $this->assertEquals(4, $list->TotalItems());
 }
 public function getProjects()
 {
     return GroupedList::create(Driver::get()->sort('Project'))->GroupedBy('Project');
 }
 public function getGroupedQuestions()
 {
     return GroupedList::create($this->Questions()->sort('Order'));
 }
 public function getAllGroupedCalendarEntries()
 {
     $entries = GroupedList::create(CalendarEntry::get()->Sort('Date, Time'));
     return $entries;
 }
 public function getGroupedPlayerGames()
 {
     $reg = $this->getCurrentRegistration();
     if (!$reg) {
         return false;
     }
     $playergames = $reg->PlayerGames();
     $games = new ArrayList();
     foreach ($playergames as $playergame) {
         $games->push(new ArrayData(array("Game" => $playergame->Game(), "Preference" => $playergame->Preference, "Favourite" => $playergame->Favourite, "Status" => $playergame->Status, "Session" => $playergame->Game()->Session)));
     }
     $result = $games->sort(array('Session' => 'ASC', 'Preference' => 'ASC'));
     return GroupedList::create($result);
 }
 /**
  * @return CompositeField
  */
 protected function getProductOptionSet()
 {
     $assignAvailable = function ($self) {
         $this->extend('updateFoxyStripePurchaseForm', $form);
         $self->Available = $self->getAvailability() ? true : false;
     };
     $options = $this->product->ProductOptions();
     $groupedOptions = new GroupedList($options);
     $groupedBy = $groupedOptions->groupBy('ProductOptionGroupID');
     $optionsSet = CompositeField::create();
     foreach ($groupedBy as $id => $set) {
         $group = OptionGroup::get()->byID($id);
         $title = $group->Title;
         $name = preg_replace('/\\s/', '_', $title);
         $set->each($assignAvailable);
         $disabled = array();
         $fullOptions = array();
         foreach ($set as $item) {
             $fullOptions[ProductPage::getGeneratedValue($this->product->Code, $group->Title, $item->getGeneratedValue(), 'value')] = $item->getGeneratedTitle();
             if (!$item->Availability) {
                 array_push($disabled, ProductPage::getGeneratedValue($this->product->Code, $group->Title, $item->getGeneratedValue(), 'value'));
             }
         }
         $optionsSet->push($dropdown = DropdownField::create($name, $title, $fullOptions)->setTitle($title));
         $dropdown->setDisabledItems($disabled);
     }
     $optionsSet->addExtraClass('foxycartOptionsContainer');
     return $optionsSet;
 }
 public function GroupedPresentations()
 {
     return GroupedList::create($this->Presentations()->sort('StartTime'));
 }
Example #28
0
 public function getScoreTypes()
 {
     return GroupedList::create(Score::get()->sort('Title'));
 }
 /**
  * @param Summit $s
  * @return array
  */
 protected function createSummitJSON(Summit $s)
 {
     $page = SummitPage::get()->filter('SummitID', $s->ID)->first();
     $image = null;
     if ($page) {
         $image = $page->SummitImage()->Image();
     }
     $tracks = array_map(function ($t) {
         return ['id' => $t->ID, 'slug' => $t->Slug, 'title' => $t->Title, 'has_videos' => 0];
     }, $s->Categories()->toArray());
     $videos = PresentationVideo::get()->filter(['DisplayOnSite' => true, 'Processed' => true])->sort('DateUploaded', 'DESC')->innerJoin('Presentation', 'Presentation.ID = PresentationMaterial.PresentationID')->innerJoin('SummitEvent', 'SummitEvent.ID = PresentationMaterial.PresentationID')->filter('SummitEvent.SummitID', $s->ID);
     $videos_groupedby_track = GroupedList::create($videos)->groupBy('Track');
     foreach ($tracks as &$track) {
         if (array_key_exists($track['title'], $videos_groupedby_track)) {
             $track['has_videos'] = 1;
         }
     }
     return ['id' => $s->ID, 'title' => $s->Title, 'dates' => $s->getSummitDateRange(), 'videoCount' => PresentationVideo::get()->filter(['DisplayOnSite' => true, 'Processed' => true, 'PresentationID' => $s->Presentations()->column('ID')])->count(), 'imageURL' => $image && $image->exists() && Director::fileExists($image->Filename) ? $image->CroppedImage(263, 148)->URL : 'summit-video-app/production/images/placeholder-image.jpg', 'slug' => $s->Slug, 'tracks' => $tracks];
 }
Example #30
0
    public function TheImpact()
    {
        $ProjID = $this->ID;
        $results = DB::query('SELECT  ip.Title AS ITitle,  ip.ClassName AS IClassName,
(
  select count(Project.ID) from Project 
  LEFT JOIN Project_impacts on Project_impacts.ProjectID = Project.ID 
  where ip.ID = Project_impacts.ImpactID
  and Project.ID = ' . $ProjID . '
) as Impact
FROM Impact ip ORDER by ip.Title');
        $thescore = ArrayList::create();
        for ($i = 0; $i < $results->numRecords(); $i++) {
            $record = $results->nextRecord();
            $thescore->add(new ArrayData(array('ITitle' => $record['ITitle'], 'Impact' => $record['Impact'])));
        }
        return GroupedList::create($thescore);
    }