]> git.mxchange.org Git - friendica.git/blob - mod/display.php
Merge pull request #872 from annando/master
[friendica.git] / mod / display.php
1 <?php
2
3
4 function display_init(&$a) {
5
6         if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
7                 return;
8         }
9
10         $nick = (($a->argc > 1) ? $a->argv[1] : '');
11         profile_load($a,$nick);
12
13 }
14
15
16 function display_content(&$a, $update = 0) {
17
18         if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
19                 notice( t('Public access denied.') . EOL);
20                 return;
21         }
22
23         require_once("include/bbcode.php");
24         require_once('include/security.php');
25         require_once('include/conversation.php');
26         require_once('include/acl_selectors.php');
27
28
29         $o = '';
30
31         $a->page['htmlhead'] .= replace_macros(get_markup_template('display-head.tpl'), array());
32
33
34         if($update) {
35                 $nick = $_REQUEST['nick'];
36         }
37         else {
38                 $nick = (($a->argc > 1) ? $a->argv[1] : '');
39         }
40
41         if($update) {
42                 $item_id = $_REQUEST['item_id'];
43                 $a->profile = array('uid' => intval($update), 'profile_uid' => intval($update));
44         }
45         else {
46                 $item_id = (($a->argc > 2) ? $a->argv[2] : 0);
47         }
48
49         if(! $item_id) {
50                 $a->error = 404;
51                 notice( t('Item not found.') . EOL);
52                 return;
53         }
54
55         $groups = array();
56
57         $contact = null;
58         $remote_contact = false;
59
60         $contact_id = 0;
61
62         if(is_array($_SESSION['remote'])) {
63                 foreach($_SESSION['remote'] as $v) {
64                         if($v['uid'] == $a->profile['uid']) {
65                                 $contact_id = $v['cid'];
66                                 break;
67                         }
68                 }
69         }
70
71         if($contact_id) {
72                 $groups = init_groups_visitor($contact_id);
73                 $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
74                         intval($contact_id),
75                         intval($a->profile['uid'])
76                 );
77                 if(count($r)) {
78                         $contact = $r[0];
79                         $remote_contact = true;
80                 }
81         }
82
83         if(! $remote_contact) {
84                 if(local_user()) {
85                         $contact_id = $_SESSION['cid'];
86                         $contact = $a->contact;
87                 }
88         }
89
90         $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
91                 intval($a->profile['uid'])
92         );
93         if(count($r))
94                 $a->page_contact = $r[0];
95
96         $is_owner = ((local_user()) && (local_user() == $a->profile['profile_uid']) ? true : false);
97
98         if($a->profile['hidewall'] && (! $is_owner) && (! $remote_contact)) {
99                 notice( t('Access to this profile has been restricted.') . EOL);
100                 return;
101         }
102         
103         if ($is_owner) {
104                 $celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
105
106                 $x = array(
107                         'is_owner' => true,
108                         'allow_location' => $a->user['allow_location'],
109                         'default_location' => $a->user['default-location'],
110                         'nickname' => $a->user['nickname'],
111                         'lockstate' => ( (is_array($a->user)) && ((strlen($a->user['allow_cid'])) || (strlen($a->user['allow_gid'])) || (strlen($a->user['deny_cid'])) || (strlen($a->user['deny_gid']))) ? 'lock' : 'unlock'),
112                         'acl' => populate_acl($a->user, $celeb),
113                         'bang' => '',
114                         'visitor' => 'block',
115                         'profile_uid' => local_user(),
116                         'acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
117                 );
118                 $o .= status_editor($a,$x,0,true);
119         }
120
121         $sql_extra = item_permissions_sql($a->profile['uid'],$remote_contact,$groups);
122
123         if($update) {
124
125                 $r = q("SELECT id FROM item WHERE item.uid = %d
126                         AND `item`.`parent` = ( SELECT `parent` FROM `item` FORCE INDEX (PRIMARY, `uri`) WHERE ( `id` = '%s' OR `uri` = '%s' ))
127                         $sql_extra AND unseen = 1",
128                         intval($a->profile['uid']),
129                         dbesc($item_id),
130                         dbesc($item_id) 
131                 );
132
133                 if(!$r)
134                         return '';
135         }
136
137         $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,  `item`.`network` AS `item_network`,
138                 `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
139                 `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, 
140                 `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
141                 FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
142                 WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
143                 and `item`.`moderated` = 0
144                 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
145                 AND `item`.`parent` = ( SELECT `parent` FROM `item` FORCE INDEX (PRIMARY, `uri`) WHERE ( `id` = '%s' OR `uri` = '%s' )
146                 AND uid = %d )
147                 $sql_extra
148                 ORDER BY `parent` DESC, `gravity` ASC, `id` ASC ",
149                 intval($a->profile['uid']),
150                 dbesc($item_id),
151                 dbesc($item_id),
152                 intval($a->profile['uid'])
153         );
154
155         if(!$r && local_user()) {
156                 // Check if this is another person's link to a post that we have
157                 $r = q("SELECT `item`.uri FROM `item`
158                         WHERE (`item`.`id` = '%s' OR `item`.`uri` = '%s' )
159                         LIMIT 1",
160                         dbesc($item_id),
161                         dbesc($item_id)
162                 );
163                 if($r) {
164                         $item_uri = $r[0]['uri'];
165
166                         $r = q("SELECT `item`.*, `item`.`id` AS `item_id`,  `item`.`network` AS `item_network`,
167                                 `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
168                                 `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, 
169                                 `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`
170                                 FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
171                                 WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
172                                 and `item`.`moderated` = 0
173                                 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
174                                 AND `item`.`parent` = ( SELECT `parent` FROM `item` FORCE INDEX (PRIMARY, `uri`) WHERE `uri` = '%s' AND uid = %d )
175                                 ORDER BY `parent` DESC, `gravity` ASC, `id` ASC ",
176                                 intval(local_user()),
177                                 dbesc($item_uri),
178                                 intval(local_user())
179                         );
180                 }
181         }
182
183
184         if($r) {
185
186                 if((local_user()) && (local_user() == $a->profile['uid'])) {
187                         q("UPDATE `item` SET `unseen` = 0 
188                                 WHERE `parent` = %d AND `unseen` = 1",
189                                 intval($r[0]['parent'])
190                         );
191                 }
192
193                 $items = conv_sort($r,"`commented`");
194
195                 if(!$update)
196                         $o .= "<script> var netargs = '?f=&nick=" . $nick . "&item_id=" . $item_id . "'; </script>";
197                 $o .= conversation($a,$items,'display', $update);
198
199                 // Preparing the meta header
200                 require_once('include/bbcode.php');
201                 require_once("include/html2plain.php");
202                 $description = trim(html2plain(bbcode($r[0]["body"], false, false), 0, true));
203                 $title = trim(html2plain(bbcode($r[0]["title"], false, false), 0, true));
204                 $author_name = $r[0]["author-name"];
205
206                 if ($title == "")
207                         $title = $author_name;
208
209                 $description = htmlspecialchars($description, ENT_COMPAT, 'UTF-8', true); // allow double encoding here
210                 $title = htmlspecialchars($title, ENT_COMPAT, 'UTF-8', true); // allow double encoding here
211                 $author_name = htmlspecialchars($author_name, ENT_COMPAT, 'UTF-8', true); // allow double encoding here
212
213                 //<meta name="keywords" content="">
214                 $a->page['htmlhead'] .= '<meta name="author" content="'.$author_name.'" />'."\n";
215                 $a->page['htmlhead'] .= '<meta name="title" content="'.$title.'" />'."\n";
216                 $a->page['htmlhead'] .= '<meta name="fulltitle" content="'.$title.'" />'."\n";
217                 $a->page['htmlhead'] .= '<meta name="description" content="'.$description.'" />'."\n";
218
219                 $a->page['htmlhead'] .= '<meta name="DC.title" content="'.$title.'" />'."\n";
220                 $a->page['htmlhead'] .= '<meta name="DC.description" content="'.$description.'" />'."\n";
221
222                 $a->page['htmlhead'] .= '<meta property="og:type" content="website" />'."\n";
223                 $a->page['htmlhead'] .= '<meta property="og:title" content="'.$title.'" />'."\n";
224                 //<meta property="og:image" content="" />
225                 $a->page['htmlhead'] .= '<meta property="og:url" content="'.$r[0]["plink"].'" />'."\n";
226                 $a->page['htmlhead'] .= '<meta property="og:description" content="'.$description.'" />'."\n";
227                 $a->page['htmlhead'] .= '<meta name="og:article:author" content="'.$author_name.'" />'."\n";
228                 // article:tag
229
230                 return $o;
231         }
232
233         $r = q("SELECT `id`,`deleted` FROM `item` WHERE `id` = '%s' OR `uri` = '%s' LIMIT 1",
234                 dbesc($item_id),
235                 dbesc($item_id)
236         );
237         if($r) {
238                 if($r[0]['deleted']) {
239                         notice( t('Item has been removed.') . EOL );
240                 }
241                 else {  
242                         notice( t('Permission denied.') . EOL ); 
243                 }
244         }
245         else {
246                 notice( t('Item not found.') . EOL );
247         }
248
249         return $o;
250 }
251