/** * */ function displayList($calendar = false, $time = false) { if ($time) { $time = explode('-', $time); $start = mktime(0, 0, 0, $time[1], 1, $time[0]); $end = mktime(0, 0, 0, $time[1] + 1, 1, $time[0]); } else { $start = $end = false; } $eventIDs = $this->getEventIDs($calendar, $start, $end); $total = count($eventIDs); $pageInfo = Pagination::getRange($this->itemsPerPage, $total); $start = $pageInfo['range']['start']; $stop = $pageInfo['range']['stop']; $r = '<h1>' . __('Calendar') . '</h1><div class="cols spacer"><div class="col eight first"><ul class="events">'; $i = 0; foreach ($eventIDs as $eventID) { if ($start <= $i && $i <= $stop) { $event = $this->getEvent($eventID); $r .= '<li>' . $event->getShort(true) . '</li>'; } $i++; } if ($total > $this->itemsPerPage) { $r .= '<li><div class="cols"><div class="col eight first bordered thinner">' . $pageInfo['links'] . '</div></div></li>'; } $r .= '</ul></div>'; $r .= $this->rightmenu(); return $r; }
function run() { global $Templates, $DB, $Controller; $_REQUEST->setType('item', 'numeric'); $PERPAGE = 5; if ($_REQUEST['item']) { $obj = $Controller->{$_REQUEST['item']}; $content = $obj->display(false, true, true, true); } else { $QUEUE = $this->ID; $COUNT = (int) $DB->flow->count(array('queue~' => $QUEUE), 'id'); $pagination = Pagination::getRange($PERPAGE, $COUNT); $Objects = Flow::retrieve('News', $PERPAGE, false, false, false, $pagination['range']['start']); $content = ''; $first = true; foreach ($Objects as $obj) { $content .= '<li' . ($first ? '' : ' class="cols"') . '>' . $obj->display(false, $first, true) . '</li>'; $first = false; } $content = '<ul>' . $content . '</ul>' . $pagination['links']; } $r = '<h1>FlowView</h1>' . Design::row(array(Design::column('<div class="padded">' . $content . '</div>', 8, true, true, true), Design::column('Möjlighet att följa nyheterna via RSS kommer... ', 4, false, true, true)), true); $this->setContent('main', $r); $this->setContent('menu', $this->submenu()); $Templates->yweb('empty')->render(); }
/** * Overview the spine database table and display the overview page * @return string */ function viewSpine() { global $DB, $Controller; $r = ''; $perpage = 250; $total = $DB->spine->count(); $pager = Pagination::getRange($perpage, $total); $objects = $Controller->get($DB->spine->asList(null, 'id', $pager['range']['start'] . ',' . $perpage), EDIT_PRIVILEGES); $groups = array(); foreach ($objects as $o) { $groups[$o->privilegeGroup][] = $o; } ksort($groups); $r .= '<ul class="list">'; foreach ($groups as $group => $rows) { if ($group == 'hide' || $group == 'hidden') { continue; } $r .= '<li>' . ucwords(__($group)) . '<ul>'; $i = 0; natcasesort($rows); foreach ($rows as $o) { $r .= '<li class="' . ($i % 2 ? 'even' : 'odd') . '"><span class="fixed-width">' . $o . '</span><div class="tools">' . icon('small/key', __('Edit permissions for') . ' "' . strip_tags($o) . '"', url(array("edit" => $o->ID), 'id')) . (is_a($o, 'User') || is_a($o, 'Group') ? icon('small/magnifier', __('Overview permissions for') . ' "' . strip_tags($o) . '"', url(array('view' => $o->ID), 'id')) : '') . (method_exists($o, 'run') ? icon('small/bullet_go', __('Go to') . ' "' . strip_tags($o) . '"', url(array('id' => $o->ID))) : '') . '</div></li>'; $i++; } $r .= '</ul></li>'; } $r .= '</ul>'; return $r . ($total > $perpage ? $pager['links'] : ''); }
/** * Display the results of a user search * @return string */ function userSearchResults() { global $DB, $Controller, $USER; if ($_REQUEST['keyword']) { $results = array_unique(array_merge($DB->users->asList(array('username~' => '%' . $_REQUEST['keyword'] . '%'), 'id', false, false, 'username', 'id'), $DB->userinfo->asList(array('val~' => $_REQUEST['keyword']), 'id', false, false, false, 'id'))); if (count($results) == 0) { return __('No results'); } else { $r = ''; $r .= '<h3>' . __('Search results') . '</h3>'; $r .= '<ul class="list">'; $i = 0; foreach ($results as $id) { if ($id == NOBODY) { continue; } $user = $Controller->{$id}('User', READ); if ($user) { $r .= '<li class="' . ($i % 2 ? 'odd' : 'even') . '"><span class="fixed-width">' . $user . '</span><div class="tools">' . ($id == $USER->ID || $user->memberOf(ADMIN_GROUP) || !$this->may($USER, DELETE) ? '' : icon('small/delete', __('Delete'), url(array('del' => $user->ID), array('id', 'edit')))) . ($this->may($USER, EDIT) ? icon('small/user_edit', __('Edit user'), url(array('edit' => $user->ID), array('id', 'edit'))) : '') . '</div></li>'; $i++; } } $r .= '</ul>'; } } else { $perpage = 100; $total = $DB->users->count(array('id!' => NOBODY)); $pager = Pagination::getRange($perpage, $total); $users = $Controller->get($DB->users->asList(array('id!' => NOBODY), 'id', $pager['range']['start'] . ', ' . $perpage, false, 'username')); natcasesort($users); $r = ''; if (count($users) > 0) { $r = '<ul class="limitheight flul">'; $pre = false; $i = 0; foreach ($users as $user) { $us = (string) $user; if (strlen($us) == 0) { $us = ' '; } if (strtoupper($us[0]) !== $pre) { if ($pre !== false) { $r .= '</ul>'; } $pre = strtoupper($us[0]); $r .= '<li class="fletter">' . $pre . '<ul>'; $i = 0; } $r .= '<li class="' . ($i % 2 ? 'odd' : 'even') . '"><span class="fixed-width">' . $us . '</span><div class="tools">' . ($user->memberOf(ADMIN_GROUP) ? '' : icon('small/delete', __('Delete'), url(array('del' => $user->ID), array('id', 'edit')))) . icon('small/user_edit', __('Edit user'), url(array('edit' => $user->ID), array('id', 'edit'))) . '</div></li>'; $i++; } $r .= '</ul></li></ul>'; if ($total > $perpage) { $r .= $pager['links']; } } } return $r; }
function run() { global $DB, $Templates, $Controller, $CONFIG; $_REQUEST->setType('lfrom', '#\\d\\d-\\d\\d-\\d\\d#'); $_REQUEST->setType('lto', '#\\d\\d-\\d\\d-\\d\\d#'); $_REQUEST->setType('lrh', 'string'); $_REQUEST->setType('luser', 'string'); $_REQUEST->setType('lsource', 'string'); $_REQUEST->setType('llevel', 'numeric'); $ENTRIES = array(); $from = false; $to = false; if ($_REQUEST['lfrom']) { $from = strtotime($_REQUEST['lfrom']); } if (!$from) { $from = mktime(0, 0, 0, date('m') - 1, date('d'), date('Y')); } if ($_REQUEST['lto']) { $to = strtotime($_REQUEST['lto']) + 86400; } if (!$to) { $to = time(); } $ENTRIES = $DB->log->asArray(array('time>=' => date('Y-m-d H:i:s', $from), 'time<=' => date('Y-m-d H:i:s', $to))); if (file_exists(PRIV_PATH . '/log')) { $logfile = file(PRIV_PATH . '/log'); foreach ($logfile as $row => $entryRow) { if (empty($entryRow) || $entryRow == "\n") { continue; } $entry = array(); list($entry['time'], $entry['remote_addr'], $entry['user'], $entry['source'], $entry['level'], $entry['message']) = explode("\t", $entryRow); $t = strtotime($entry['time']); if ($t >= $from && $t <= $to) { $ENTRIES[] = $entry; } } } usort($ENTRIES, create_function('$a,$b', 'return -strcmp($a["time"], $b["time"]);')); $perpage = 250; $total = count($ENTRIES); $pager = Pagination::getRange($perpage, $total); $ENTRIES = array_slice($ENTRIES, $pager['range']['start'], $perpage); $TEXT = ''; $i = 0; foreach ($ENTRIES as $entry) { if ($a = $Controller->{$entry['user']}('User')) { $entry['user'] = $a->link(); } if ($entry['level'] < $_REQUEST['llevel'] || $_REQUEST['luser'] && stristr($entry['user'], $_REQUEST['luser']) === false || $_REQUEST['lrh'] && stristr($entry['remote_addr'], $_REQUEST['lrh']) === false || $_REQUEST['lsource'] && stristr($entry['source'], $_REQUEST['lsource']) === false) { continue; } $entry['message'] = preg_replace_callback('/id=([0-9]+)/', create_function('$matches', 'global $Controller; if ($obj = $Controller->retrieve($matches[1], ANYTHING, false, false)) return $obj->link(); return $matches[0];'), $entry['message']); $entry['source'] = preg_replace_callback('/([0-9]+)/', create_function('$matches', 'global $Controller; if ($obj = $Controller->retrieve($matches[1], ANYTHING, false, false)) return $obj->link(); return $matches[0];'), $entry['source']); $TEXT .= '<tr class="' . (++$i % 2 ? 'even' : 'odd') . '"><td>' . join("</td><td>", $entry) . '</td></tr>'; } $this->setContent('header', __('View log')); JS::loadjQuery(); Head::add('$(function(){$(".Datepicker").Datepicker({ dateFormat: "yy-mm-dd" });});', 'js-raw'); Head::add($CONFIG->UI->jQuery_theme . '/jquery-ui-*', 'css-lib'); $this->setContent('main', '<form action="' . url(null, 'id') . '" method="post"><input type="submit" value="' . __('Filter') . '" /><table class="log">' . '<tr><th>' . __('Time') . "</th><th>" . __('Remote address') . "</th><th>" . __('User') . "</th><th>" . __('Source') . "</th><th>" . __('Level') . "</th><th>" . __('Message') . '</th></tr>' . '<tr><td><input name="lfrom" class="small Datepicker" value="' . $_REQUEST['lfrom'] . '" />-<input name="lto" class="small Datepicker" value="' . $_REQUEST['lto'] . '" /></td><td><input name="lrh" class="small" value="' . $_REQUEST['lrh'] . '" /></td><td><input name="luser" class="small" value="' . $_REQUEST['luser'] . '" /></td><td><input name="lsource" class="small" value="' . $_REQUEST['lsource'] . '" /></td><td><input name="llevel" class="small" value="' . $_REQUEST['llevel'] . '" /></td><td></td></tr>' . $TEXT . '</table></form>' . ($total > $perpage ? $pager['links'] : '')); $Templates->render(); }
/** * Main function for displaying the archive * @return string */ function displayGallery() { global $Controller; $fileList = $this->getDirList($this->getPathLocal()); $total = count($fileList); Head::add('var imgList = [ ' . $this->getLightboxStr($fileList) . ' ]; $(".gallery a.image").lightBox({ txtImage: "' . __('Image') . '", txtOf: "' . __('of') . '", imageArray: imgList });', 'js-raw'); $pageInfo = Pagination::getRange($this->itemsAPage, $total); $start = $pageInfo['range']['start']; $stop = $pageInfo['range']['stop']; $r = $this->getTitle(); if ($total > 0) { $r .= '<p>' . ($start + 1) . ' - ' . ($stop >= $total ? $total : $stop + 1) . ' ' . __('of') . ' ' . $total . ' ' . __('objects') . '</p>'; } $r .= '<hr /><p class="gallery">'; $i = 0; if ($total == 0) { $r .= '<p>' . __('Empty folder') . '</p>'; } else { foreach ($fileList as $file) { if ($start <= $i && $i <= $stop) { $fname = utf8(htmlentities($file[1])); if ($file[0] == 'file') { switch ($this->getMime($this->getPathLocal($file[1]))) { case 'image': $r .= '<a class="image" href="' . $this->galleryDirPublic . str_replace('%2F', '/', rawurlencode($this->ualbumName . ($this->ualbumName ? '/' : '') . $file[1])) . '" title="' . htmlentities($this->getEXIF($file[1])) . '">' . $this->getThumb($file[1]) . '</a>'; break; case 'pdf': $r .= '<a href="' . $this->galleryDirPublic . str_replace('%2F', '/', rawurlencode($this->albumName . ($this->ualbumName ? '/' : '') . $fname)) . '" title="' . $fname . '">' . icon('large/mail_new-64') . '<span class="text">' . $fname . '</span></a>'; break; case 'audio': $r .= '<a href="' . $this->galleryDirPublic . str_replace('%2F', '/', rawurlencode($this->albumName . ($this->albumName ? '/' : '') . $fname)) . '" title="' . $fname . '">' . icon('large/playsound-64') . '<span class="text">' . $fname . '</span></a>'; break; case 'movie': $r .= '<a href="' . $this->galleryDirPublic . str_replace('%2F', '/', rawurlencode($this->albumName . ($this->albumName ? '/' : '') . $fname)) . '" title="' . $fname . '">' . icon('large/camera-64') . '<span class="text">' . $fname . '</span></a>'; break; default: $r .= '<a href="' . $this->galleryDirPublic . str_replace('%2F', '/', rawurlencode($this->albumName . ($this->albumName ? '/' : '') . $fname)) . '" title="' . $fname . '">' . icon('large/attach-64') . '<span class="text">' . $fname . '</span></a>'; } } elseif ($file[0] == 'dir') { $r .= '<a href="' . $this->galleryDirPublic . $this->ualbumName . ($this->ualbumName ? '/' : '') . $fname . '" title="' . $fname . '">' . icon('large/folder-64') . '<span class="text">' . $fname . '</span></a>'; } } $i++; } } $r .= '</p><hr />'; if ($total > $this->itemsAPage) { $r .= $pageInfo['links']; } return $r; }
function groupStatistics() { $_REQUEST->setType('viewMembers', 'any'); $r = ''; $directMembers = $group->memberUsers(true, true); $allMembers = $group->memberUsers(false, true); $statsTable = new Table(new tablerow(__('Direct users') . ': ', count($directMembers)), new tablerow(__('All users') . ': ', $memcount = count($allMembers))); $r .= $statsTable; if ($_REQUEST['viewMembers']) { global $Controller; Base::preload(array_slice($allMembers, 0, 100), false); $pagination = Pagination::getRange(100, $memcount); $Count = 0; $activeMembers = array(); foreach ($allMembers as $member_id) { if ($pagination['range']['start'] > $Count++) { continue; } $u = $Controller->get($member_id, OVERRIDE, false, false); if ($u->isActive()) { $activeMembers[] = $u; } if ($Count >= $pagination['range']['stop']) { break; } } $r .= listify($activeMembers) . $pagination['links']; } else { $r .= '<a href="' . url(array('viewMembers' => '1'), array('edit', 'with', 'stats')) . '">' . __('View members') . '</a>'; } return $r; }
/** * @return string */ private function mainView() { global $USER, $CONFIG, $DB, $Controller; $aList = array(); $total = $DB->getCell("SELECT DISTINCT COUNT(*) FROM updates AS t1 \n LEFT JOIN spine sp ON sp.id = t1.id\n LEFT JOIN updates t2 ON t1.id = t2.id\n AND t1.edited < t2.edited\n WHERE t2.edited IS NULL\n AND sp.class = 'Article'\n ORDER BY t1.edited DESC"); $perpage = 20; $pager = Pagination::getRange($perpage, $total); $r = $DB->query("SELECT DISTINCT sp.id FROM updates AS t1 \n LEFT JOIN spine sp ON sp.id = t1.id\n LEFT JOIN updates t2 ON t1.id = t2.id\n AND t1.edited < t2.edited\n WHERE t2.edited IS NULL\n AND sp.class = 'Article'\n ORDER BY t1.edited DESC\n LIMIT " . $pager['range']['start'] . ", " . $perpage); while (false !== ($article = $DB->fetchAssoc($r))) { $article = $Controller->{$article['id']}; $aList[] = '<li><span class="fixed-width">' . $article->Name . '</span><div class="tools">' . icon('small/eye', __('View'), url(array('id' => $article->ID))) . icon('small/pencil', __('Edit'), url(array('edit' => $article->ID), array('id'))) . icon('small/delete', __('Delete'), url(array('del' => $article->ID), 'id')) . '</div></li>'; } $aList = listify($aList); if ($total > $perpage) { $aList .= $pager['links']; } $form = new Form('newArticle'); $calendarSettings->params = 'collapsible:true,active:false'; return new Tabber('events', __('Article manager'), $aList, __('New article'), $form->collection(new Hidden('asave', 1), new Hidden('edit', $_REQUEST['edit'] ? $_REQUEST['edit'] : 'new'), new Set(new Select(__('Language'), 'lang', google::languages($CONFIG->Site->languages), $USER->settings['language']), new Input(__('Title'), 'atitle'), new Li(new Datepicker(__('Publish'), 'apubd'), new Timepickr(false, 'apubt')), new htmlfield(__('Text'), 'atxt'), new htmlfield(__('Preamble'), 'apre')))); }