php8
[web.mtrack] / MTrackWeb / Snippet.php
1 <?php # vim:ts=2:sw=2:et:
2 /* For licensing and copyright terms, see the file named LICENSE */
3
4 die("snippet needs migrating");
5
6 require_once 'SyntaxHighlight.php';
7
8 MTrackACL::requireAllRights('Snippets', 'read');
9
10 if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['submit'])) {
11   MTrackACL::requireAllRights('Snippets', 'create');
12
13   $snip = new MTrack_Snippet;
14   $snip->snippet = $_POST['code'];
15   $snip->description = $_POST['description'];
16   $snip->lang = $_POST['lang'];
17   $cs = MTrackChangeset::begin("snippet:?", $snip->description);
18   $snip->save($cs);
19   //$cs->setObject("snippet:$snip->snid");
20   $cs->commit();
21   header("Location: {$ABSWEB}snippet.php/$snip->snid");
22   exit;
23 }
24
25 $pi = mtrack_get_pathinfo();
26
27 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
28   $snip = new MTrack_Snippet;
29   $snip->description = $_POST['description'];
30   $snip->lang = $_POST['lang'];
31   $snip->snippet = $_POST['code'];
32 } elseif (strlen($pi)) {
33   $snip = MTrack_Snippet::loadById($pi);
34   if (!$snip) {
35     throw new Exception("Invalid snippet ID");
36   }
37 } else {
38   $snip = null;
39 }
40
41 if ($snip) {
42   $lang = $snip->lang;
43   $code = $snip->snippet;
44   $desc = $snip->description;
45   mtrack_head("Snippet $pi");
46 } else {
47   $lang = '';
48   $code = 'Enter your snippet here';
49   $desc = 'Enter a descriptive message here; you may use wiki syntax';
50   mtrack_head("New Snippet");
51 }
52
53 echo "<table><tr>";
54
55
56 /* collect recent snippets */
57 $recent = MTrackDB::q('select snid, description, who, changedate
58 from snippets
59   left join changes on snippets.updated = changes.cid
60   order by changes.changedate desc
61   limit 10')->fetchAll(PDO::FETCH_OBJ);
62
63 echo <<<HTML
64 <td id='recentsnippets'>
65 <em>Snippets are a way to share text or code fragments</em><br><br>
66 HTML;
67
68 if (MTrackACL::hasAllRights('Snippets', 'create')) {
69   echo <<<HTML
70   <button id='newsnippet'>New Snippet</button><br>
71 <script>
72 \$(document).ready(function () {
73   \$('#newsnippet').click(function () {
74     document.location.href = "{$ABSWEB}snippet.php";
75   });
76 });
77 </script>
78 HTML;
79 }
80
81 echo <<<HTML
82   <b>Recent Snippets</b>
83 HTML;
84
85 foreach ($recent as $s) {
86   $url = "{$ABSWEB}snippet.php/$s->snid";
87   $sum = MTrackWiki::format_to_oneliner($s->description);
88   $who = mtrack_username($s->who, array('no_image' => true));
89   $when = mtrack_date($s->changedate);
90   echo <<<HTML
91   <div class='snippetsummary'>
92     $sum<br>
93     $when by $who<br>
94     <a href='$url'>view snippet</a>
95   </div>
96 HTML;
97 }
98 echo "</td><td>";
99
100 if (MTrackACL::hasAllRights('Snippets', 'create') &&
101     (!$snip || $_SERVER['REQUEST_METHOD'] == 'POST')) {
102   echo "<form method='post' class='snippetform' action='{$ABSWEB}snippet.php'>";
103   echo "<textarea name='description' class='wiki shortwiki'>$desc</textarea>\n";
104   echo MTrack_SyntaxHighlight::getLangSelect('lang', $lang);
105   echo "<br><textarea name='code' class='code' rows='20' cols='78'>";
106   echo htmlentities($code, ENT_QUOTES, 'utf-8');
107   echo "</textarea><br>";
108   echo "<button type='submit' name='preview'>Preview</button>\n";
109   echo "<button type='submit' name='submit'>Submit</button>\n";
110   echo "</form>";
111 }
112
113 if ($snip) {
114   echo "<div class='snippetview'>";
115   echo "<h1>Snippet</h1>";
116   if ($snip->created) {
117     $created = MTrackChangeset::get($snip->created);
118   } else {
119     $created = new stdclass;
120   }
121
122   echo "<span id='snippetmug'>",
123     mtrack_username($created->who, array('no_name' => true, 'size' => 48)),
124     "</span>";
125   echo "<b>Created</b>: ",
126        mtrack_date($created->when),
127        " by ",
128        mtrack_username($created->who, array('no_image' => true)),
129        "<br>\n";
130   echo "<a href='{$ABSWEB}snippet.php/$snip->snid'>Link to this snippet</a><br>";
131
132   echo MTrackWiki::format_to_html($snip->description);
133   echo "<br><br>";
134   echo MTrack_SyntaxHighlight::getSchemeSelect();
135   echo MTrack_SyntaxHighlight::highlightSource($code, $lang, null, true);
136   echo "</div>";
137 } else if (!MTrackACL::hasAllRights('Snippets', 'create')) {
138   echo "<p>You do not have rights to create snippets</p>";
139 }
140
141 echo "</td></tr></table>";
142
143 mtrack_foot();