示例#1
0
    function viewRevisions($page, $l, $sectionMap = false)
    {
        global $DB, $Controller;
        if (is_numeric($page)) {
            $page = $Controller->{(string) $page}(EDIT);
        }
        $lang = google::languages($l);
        $revisions = array();
        $_REQUEST->setType('rev1', 'numeric', true);
        $_REQUEST->setType('rev2', 'numeric', true);
        //FIXME: Move to CSS
        Head::add('ins {background: lightgreen;}
del {background: pink;}
.revlegend {text-align: right;display:inline;margin: 0 0 0 45px;}
.revlegend ins,.revlegend del {margin: 0 5px;}', 'css-raw');
        $r1 = false;
        $r2 = false;
        $r = $DB->content->get(array('id' => $this->that->ID, 'language' => $l), false, false, 'revision DESC');
        while ($rev = Database::fetchAssoc($r)) {
            $revisions[$rev['section']][$rev['revision']] = strftime('%c', $rev['revision']);
            if ($_REQUEST['rev1'][$rev['section']] === $rev['revision']) {
                $r1[$rev['section']] = $rev;
            }
            if ($_REQUEST['rev2'][$rev['section']] === $rev['revision']) {
                $r2[$rev['section']] = $rev;
            }
        }
        $revArray = array();
        if ($revisions) {
            foreach ($revisions as $sectionName => $sectContent) {
                $revArray[] = new Tab($sectionMap && isset($sectionMap[$sectionName]) ? $sectionMap[$sectionName] : $sectionName, new Li(new Select('View revision', 'rev1[' . $sectionName . ']', $sectContent, $_REQUEST['rev1'][$sectionName], false, __('None')), new Submit('Revert to this', 'revert1[' . $sectionName . ']')), new Li(new Select('Compare to', 'rev2[' . $sectionName . ']', $sectContent, $_REQUEST['rev2'][$sectionName], false, __('None')), new Submit('Revert to this', 'revert2[' . $sectionName . ']')), isset($r1[$sectionName]) ? '<div class="revlegend"><ins>' . strftime('%c', $r1[$sectionName]['revision']) . '</ins>' . (isset($r2[$sectionName]) ? '<del>' . strftime('%c', $r2[$sectionName]['revision']) . '</del></div>' . '<div id="revdiff">' . diff($r2[$sectionName]['content'], $r1[$sectionName]['content']) . '</div>' : '<div id="revdiff">' . strip_tags($r1[$sectionName]['content'], '<p><div>') . '</div>') : null);
            }
            $rForm = new Form('revisionsForm', url(null, array('id', 'edit', 'view', 'lang'), false));
            return '<div class="nav">' . Short::backn() . '</div>' . $rForm->collection(new Hidden('lang', $l), new Tabber('r' . $l, $revArray));
        } else {
            return '<div class="nav">' . Short::backn() . '</div>' . __('There are no saved revisions for this page and language');
        }
    }
示例#2
0
 function selectLanguage()
 {
     global $CONFIG;
     JS::loadjQuery(false);
     JS::raw("\$(function(){\$('#" . idfy('user_settings::language') . "').change(function(e){\$(e.target).closest('form').submit();})});");
     echo Form::quick(url(null, true), false, new Select(false, 'user_settings::language', google::languages($CONFIG->Site->languages), @$_COOKIE['user_settings::language'], false, __('Choose language')));
 }
示例#3
0
 /**
  * @return string
  */
 private function mainView()
 {
     global $USER, $CONFIG, $DB, $Controller;
     $form = new Form('newEvent');
     $calendarSettings = new Accordion(__('Calendar settings'), new Set(new Checkbox(__('Insert into calendar'), 'einscal'), Short::datetime(__('Starts'), 'cstart'), Short::datetime(__('Ends'), 'cend')));
     $calendarSettings->params = 'collapsible:true,active:false';
     return new Tabber('flows', __('New item'), $form->collection($calendarSettings, new Hidden('esave', 1), new Hidden('edit', $_REQUEST['edit'] ? $_REQUEST['edit'] : 'new'), new Set(new Select(__('Language'), 'lang', google::languages($CONFIG->Site->languages), $_POST['lang'] ? $_POST['lang'] : $USER->settings['language']), new Input(__('Title'), 'etitle', $_POST['etitle']), new ImagePicker(__('Image'), 'eimg'), new Li(Short::datetime(__('Publish'), 'estart', $_POST['estart']), $this->mayI(PUBLISH) ? new Minicheck(__('Activate post'), 'activated', true) : null), Short::datetime(__('Hide'), 'eend', $_POST['eend']), new TagInput(__('Flow'), 'flows', Flow::flows(), $_POST['flows'] ? $_POST['flows'] : '', true, false, 'required'), new htmlfield(_('Text'), 'etxt', $_POST['etxt']))), __('Flows'), $this->flowList());
 }
示例#4
0
 /**
  * View the page for editing the user terms
  * @return string
  */
 function changeTerms()
 {
     global $CONFIG, $DB;
     $languages = google::languages((array) $CONFIG->Site->languages);
     $terms = $DB->{'aliases,content'}->asList(array('aliases.alias' => 'Terms', 'content.section' => 'Terms'), 'content.language,content.content', false, true);
     reset($terms);
     $norm = array('lang' => key($terms), 'text' => current($terms));
     $lTabs = array();
     foreach ($languages as $l => $lang) {
         $lTabs[] = new Tab($lang, new htmlfield(__('Terms'), 'terms[' . $l . ']', isset($terms[$l]) ? @$terms[$l] : google::translate(@$norm['text'], @$norm['lang'], $l)));
     }
     $form = new Form('saveTerms');
     return '<div class="nav"><a href="' . url(null, 'id') . '">' . icon('small/arrow_left') . __('Back') . '</a></div>' . $form->collection(new Tabber('tT', $lTabs));
 }
示例#5
0
 function editTab()
 {
     return array(new Hidden('lang', $language), new FormText(__('Language'), google::languages($language)), empty($translation) ? null : '<span class="warning">' . __('Warning - Some of the text has been automatically translated') . '</span>', new Input(__('Title'), 'etitle', $_POST['etitle'] ? $_POST['etitle'] : ($obj->Name ? $obj->Name : @$translation['Name'])), new Li(Short::datetime(__('Publish'), 'estart', $active['start']), $obj->mayI(PUBLISH) ? new Minicheck(__('Activate post'), 'activated', $obj->Activated || $obj->Activated === '' || isset($_POST['activated'])) : null), Short::datetime(__('Hide'), 'eend', $active['stop']), new Checkbox(__('Locked position'), 'elocked', $locked), new ImagePicker(__('Image'), 'eimg', $_POST['eimg'] ? $_POST['eimg'] : $obj->Image), new htmlfield(_('Text'), 'etxt', $_POST['etxt'] ? $_POST['etxt'] : (@$obj->content['Text'] ? @$obj->content['Text'] : @$translation['Text'])), new Checkbox(__('Avoid updating time'), 'eupdate'));
 }
示例#6
0
 /**
  * @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'))));
 }