Support https in blog URLs
[dotclear.git] / widget.post.perms.php
CommitLineData
8c39c698
FB
1<?php
2
3class xorgPostPermsWidget {
4 public static function behavior_adminPostFormSidebar($post) {
5 $choices = array('public' => array('text' => 'Visible par tous',
6 'selected' => false),
7 'auth' => array('text' => 'Visible par les X',
8 'selected' => false));
9 $pos = 'public';
dc51645d 10 global $core;
9921376e 11 $type = $core->blog->settings->xorgauth->get('xorg_blog_type');
dc51645d
FB
12 if ($type == 'group-admin' || $type == 'group-member') {
13 $choices['group'] = array('text' => 'Visible par les membres du groupe',
14 'selected' => false);
15 }
8c39c698
FB
16 if (!is_null($post)) {
17 $metas = unserialize($post->field('post_meta'));
18 if (isset($metas['post_xorg_perms'])) {
19 $pos = $metas['post_xorg_perms'];
20 }
21 } else {
8c39c698
FB
22 $pos = $core->auth->getOption('post_xorg_perms');
23 if ($pos && !isset($choices[$pos])) {
24 $pos = 'auth';
25 }
26 }
27 $choices[$pos]['selected'] = true;
6e7207b1
FB
28 ?>
29 <p>
30 <label>
31 Visibilité du billet&nbsp;:
32 <select name="post_xorg_perms">
33 <?php
8c39c698
FB
34 foreach ($choices as $val => $fields) {
35 echo '<option value="' . $val . '"' . ($fields['selected'] ? ' selected="selected"' : '') . '>'
36 . $fields['text'] . '</option>';
37 }
6e7207b1
FB
38 ?>
39 </select>
40 </label>
41 </p>
42 <?php
8c39c698
FB
43 }
44
3b8da081 45 private static function setPermsMeta($cur) {
8c39c698
FB
46 $meta = $cur->getField('post_meta');
47 if (is_string($meta)) {
48 $meta = unserialize($meta);
49 }
50 if (!is_array($meta)) {
51 $meta = array();
52 }
53 $meta['post_xorg_perms'] = $_POST['post_xorg_perms'];
54 $cur->setField('post_meta', serialize($meta));
55 }
56
3b8da081 57 public static function behavior_adminBeforePostCreate($cur) {
8c39c698
FB
58 self::setPermsMeta($cur);
59 }
60
3b8da081 61 public static function behavior_adminBeforePostUpdate($cur, $post_id) {
8c39c698
FB
62 self::setPermsMeta($cur);
63 }
64
65
66 public static function behavior_adminPreferencesForm($core) {
67 $levels = array('public' => array('text' => 'Visible par tous',
68 'selected' => false),
69 'auth' => array('text' => 'Visible par les X',
70 'selected' => false),
71 'group' => array('text' => 'Visible par les membres du groupe (1)',
72 'selected' => false));
73 $pos = $core->auth->getOption('post_xorg_perms');
74 if (!$pos || !isset($levels[$pos])) {
75 $pos = 'public';
76 }
77 $levels[$pos]['selected'] = true;
6e7207b1
FB
78 ?>
79 <p>
80 <label>
81 Visibilité nouveaux billets par défaut&nbsp;:
82 <select name="post_xorg_perms">
83 <?php
8c39c698
FB
84 foreach ($levels as $key => $fields) {
85 echo '<option value="' . $key . '"' . ($fields['selected'] ? ' selected="selected"' : '') . '>'
86 . $fields['text'] . '</option>';
87 }
6e7207b1
FB
88 ?>
89 </select>
90 (1) Ne concerne que les blogs de groupes X. Equivaut à "Visible par les X" sur les autres blogs"
91 </label>
92 </p>
93 <?php
8c39c698
FB
94 }
95
3b8da081 96 public static function behavior_adminBeforeUserUpdate($cur, $user_id) {
8c39c698
FB
97 $opts = $cur->getField('user_options');
98 $opts['post_xorg_perms'] = $_POST['post_xorg_perms'];
99 $cur->setField('user_options', $opts);
100 }
d387689d 101
3b8da081 102 public static function behavior_coreBlogGetPosts($rs) {
d387689d
FB
103 $rs->extend('xorgPostPermsFilter');
104 }
105
3b8da081 106/* public static function behavior_coreBlogGetComments($rs) {
d387689d
FB
107 $rs->extends('xorgCommentPermsFilter');
108 }*/
109}
110
111if (class_exists('rsExtPostPublic')) {
112
113class xorgPostPermsFilter extends rsExtPostPublic {
3b8da081 114 private static function canRead($rs) {
d387689d
FB
115 $metas = unserialize($rs->field('post_meta'));
116 global $core;
117 if (!isset($metas['post_xorg_perms'])) {
118 return true;
119 } elseif ($metas['post_xorg_perms'] == 'public') {
120 return true;
c76d6205 121 } elseif ($metas['post_xorg_perms'] == 'auth' && $core->auth->checkPassword()) {
d387689d
FB
122 return true;
123 } elseif ($metas['post_xorg_perms'] == 'group' && $core->auth->getInfo('xorg_group_member')) {
124 return true;
125 }
126 return false;
127 }
128
3b8da081 129 private static function showMessage($rs) {
f4aeade7
FB
130 $metas = unserialize($rs->field('post_meta'));
131 global $core;
132 $str = '<p class="error">'
c76d6205
RB
133 . 'Vous n\'avez pas les droits suffisants pour lire ce billet&nbsp;:<br />';
134 if (!$core->auth->checkPassword()) {
f4737a5a 135 $str .= 'Vous devez vous <a href="' . $core->blog->url . 'auth/Xorg?path=' . $_SERVER['PATH_INFO'] .'">authentifier</a>';
f4aeade7
FB
136 } else {
137 $str .= 'Tu dois être membre du groupe pour lire ce message';
138 }
139 return $str . '</p>';
140 }
141
9921376e 142 public static function getContent($rs, $absolute_urls = false) {
d387689d 143 if (self::canRead($rs)) {
3b8da081 144 return parent::getContent($rs, $absolute_urls);
d387689d 145 } else if (!self::isExtended($rs)) {
f4aeade7 146 return self::showMessage($rs);
d387689d
FB
147 } else {
148 return null;
149 }
150 }
151
9921376e 152 public static function getExcerpt($rs, $absolute_urls = false) {
d387689d 153 if (self::canRead($rs)) {
3b8da081 154 return parent::getExcerpt($rs, $absolute_urls);
d387689d 155 } else if (self::isExtended($rs)) {
f4aeade7 156 return self::showMessage($rs);
d387689d
FB
157 } else {
158 return null;
159 }
160 }
161
9921376e 162 public static function commentsActive($rs) {
d387689d
FB
163 return self::canRead($rs) && parent::commentsActive($rs);
164 }
165
9921376e 166 public static function trackbacksActive($rs) {
d387689d
FB
167 return self::canRead($rs) && parent::trackbacksActive($rs);
168 }
169
9921376e 170 public static function hasComments($rs) {
d387689d
FB
171 return self::canRead($rs) && parent::hasComments($rs);
172 }
173}
8c39c698
FB
174}
175?>