]> git.mxchange.org Git - friendica.git/blob - include/quoteconvert.php
Merge pull request #2486 from rabuzarus/2704_xml
[friendica.git] / include / quoteconvert.php
1 <?php
2 function convertquote($body, $reply)
3 {
4         // Convert Quotes
5         $arrbody = explode("\n", trim($body));
6         $arrlevel = array();
7
8         for ($i = 0; $i < count($arrbody); $i++) {
9                 $quotelevel = 0;
10                 $quoteline = $arrbody[$i];
11
12                 while ((strlen($quoteline)>0) and ((substr($quoteline, 0, 1) == '>')
13                         or (substr($quoteline, 0, 1) == ' '))) {
14                         if (substr($quoteline, 0, 1) == '>')
15                                 $quotelevel++;
16
17                         $quoteline = ltrim(substr($quoteline, 1));
18                 }
19
20                 //echo $quotelevel.'*'.$quoteline."\r\n";
21
22                 $arrlevel[$i] = $quotelevel;
23                 $arrbody[$i] = $quoteline;
24         }
25
26         $quotelevel = 0;
27         $previousquote = 0;
28         $arrbodyquoted = array();
29
30         for ($i = 0; $i < count($arrbody); $i++) {
31
32                 $previousquote = $quotelevel;
33                 $quotelevel = $arrlevel[$i];
34                 $currline = $arrbody[$i];
35
36                 while ($previousquote < $quotelevel) {
37                         if ($sender != '') {
38                                 $quote = "[quote title=$sender]";
39                                 $sender = '';
40                         } else
41                                 $quote = "[quote]";
42
43                         $arrbody[$i] = $quote.$arrbody[$i];
44                         $previousquote++;
45                 }
46
47                 while ($previousquote > $quotelevel) {
48                         $arrbody[$i] = '[/quote]'.$arrbody[$i];
49                         $previousquote--;
50                 }
51
52                 $arrbodyquoted[] = $arrbody[$i];
53         }
54         while ($quotelevel > 0) {
55                 $arrbodyquoted[] = '[/quote]';
56                 $quotelevel--;
57         }
58
59         $body = implode("\n", $arrbodyquoted);
60
61         if (strlen($body) > 0)
62                 $body = $body."\n\n";
63
64         if ($reply)
65                 $body = removetofu($body);
66
67         return($body);
68 }
69
70 function removetofu($message)
71 {
72         $message = trim($message);
73
74         do {
75                 $oldmessage = $message;
76                 $message = preg_replace('=\[/quote\][\s](.*?)\[quote\]=i', '$1', $message);
77                 $message = str_replace("[/quote][quote]", "", $message);
78         } while ($message != $oldmessage);
79
80         $quotes = array();
81
82         $startquotes = 0;
83
84         $start = 0;
85
86         while(($pos = strpos($message, '[quote', $start)) > 0) {
87                 $quotes[$pos] = -1;
88                 $start = $pos + 7;
89                 $startquotes++;
90         }
91
92         $endquotes = 0;
93         $start = 0;
94
95         while(($pos = strpos($message, '[/quote]', $start)) > 0) {
96                 $start = $pos + 7;
97                 $endquotes++;
98         }
99
100         while ($endquotes < $startquotes) {
101                 $message .= '[/quote]';
102                 ++$endquotes;
103         }
104
105         $start = 0;
106
107         while(($pos = strpos($message, '[/quote]', $start)) > 0) {
108                 $quotes[$pos] = 1;
109                 $start = $pos + 7;
110         }
111
112         if (strtolower(substr($message, -8)) != '[/quote]')
113                 return($message);
114
115         krsort($quotes);
116
117         $quotelevel = 0;
118         $quotestart = 0;
119         foreach ($quotes as $index => $quote) {
120                 $quotelevel += $quote;
121
122                 if (($quotelevel == 0) and ($quotestart == 0))
123                         $quotestart = $index;
124         }
125
126         if ($quotestart != 0) {
127                 $message = trim(substr($message, 0, $quotestart))."\n[spoiler]".substr($message, $quotestart+7, -8).'[/spoiler]';
128         }
129
130         return($message);
131 }
132 ?>