@define('PLUGIN_EVENT_ENTRYPROPERTIES_NO_FRONTPAGE', 'Nicht in Artikelübersicht zeigen');
@define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS', 'Leserechte auf Gruppen beschränken');
@define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS_DESC', 'Wenn aktiviert, können Leserechte abhängig von Gruppen vergeben werden. Dies wirkt sich auf die Performance der Artikelübersicht stark aus. Aktivieren Sie die Option daher nur, wenn Sie sie wirklich benötigen.');
+ @define('PLUGIN_EVENT_ENTRYPROPERTIES_USERS', 'Leserechte auf Benutzer beschränken');
+ @define('PLUGIN_EVENT_ENTRYPROPERTIES_USERS_DESC', 'Wenn aktiviert, können Leserechte abhängig von einzelnen Benutzern vergeben werden. Dies wirkt sich auf die Performance der Artikelübersicht stark aus. Aktivieren Sie die Option daher nur, wenn Sie sie wirklich benötigen.');
break;
case 'en':
@define('PLUGIN_EVENT_ENTRYPROPERTIES_NO_FRONTPAGE', 'Hide from article overview / frontpage');
@define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS', 'Use group-based restrictions');
@define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS_DESC', 'If enabled, you can define which users of a usergroup may be able to read entries. This option has a large impact on the performance of your article overview. Only enable this if you are really going to use this feature.');
+ @define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS', 'Use user-based restrictions');
+ @define('PLUGIN_EVENT_ENTRYPROPERTIES_GROUPS_DESC', 'If enabled, you can define which specific users may be able to read entries. This option has a large impact on the performance of your article overview. Only enable this if you are really going to use this feature.');
break;
}
$propbag->add('description', PLUGIN_EVENT_ENTRYPROPERTIES_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
- $propbag->add('version', '1.2');
+ $propbag->add('version', '1.3');
$propbag->add('requirements', array(
'serendipity' => '0.8',
'smarty' => '2.6.7',
'frontend_entryproperties_query' => true
));
$propbag->add('groups', array('BACKEND_EDITOR'));
- $propbag->add('configuration', array('cache', 'use_groups', 'default_read'));
+ $propbag->add('configuration', array('cache', 'use_groups', 'use_users', 'default_read'));
}
function introspect_config_item($name, &$propbag)
$propbag->add('default', 'false');
break;
+ case 'use_users':
+ $propbag->add('type', 'boolean');
+ $propbag->add('name', PLUGIN_EVENT_ENTRYPROPERTIES_USERS);
+ $propbag->add('description', PLUGIN_EVENT_ENTRYPROPERTIES_USERS_DESC);
+ $propbag->add('default', 'false');
+ break;
+
case 'cache':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_EVENT_ENTRYPROPERTIES_CACHE);
}
function getSupportedProperties() {
- static $supported_properties = array('is_sticky', 'access', 'access_groups', 'cache_body', 'cache_extended', 'no_nl2br', 'no_frontpage');
+ static $supported_properties = array('is_sticky', 'access', 'access_groups', 'access_users', 'cache_body', 'cache_extended', 'no_nl2br', 'no_frontpage');
return $supported_properties;
}
global $serendipity;
$hooks = &$bag->get('event_hooks');
- $is_cache = serendipity_db_bool($this->get_config('cache', 'true'));
+ $is_cache = serendipity_db_bool($this->get_config('cache', 'true'));
$use_groups = serendipity_db_bool($this->get_config('use_groups'));
+ $use_users = serendipity_db_bool($this->get_config('use_users'));
if (isset($hooks[$event])) {
switch($event) {
} else {
$access_groups = array();
}
+
+ if (isset($eventData['properties']['ep_access_users'])) {
+ $access_users = explode(';', $eventData['properties']['ep_access_users']);
+ } elseif (isset($serendipity['POST']['properties']['access_users'])) {
+ $access_users = $serendipity['POST']['properties']['access_users'];
+ } else {
+ $access_users = array();
+ }
?>
<fieldset style="margin: 5px">
<legend><?php echo PLUGIN_EVENT_ENTRYPROPERTIES_TITLE; ?></legend>
foreach($my_groups AS $group) {
?>
<option value="<?php echo $group['id']; ?>" <?php echo (in_array($group['id'], $access_groups) ? 'selected="selected"' : ''); ?>><?php echo htmlspecialchars($group['name']); ?></option>
+<?php
+ }
+ echo '</select>';
+ }
+
+ if ($use_users) {
+?>
+ <br /><select onchange="document.getElementById('properties_access_member').checked = true;" style="margin-left: 5px" multiple="multiple" name="serendipity[properties][access_users][]" size="4">
+<?php
+ $users = serendipity_fetchUsers();
+ foreach($users AS $user) {
+?>
+ <option value="<?php echo $user['authorid']; ?>" <?php echo (in_array($user['authorid'], $access_users) ? 'selected="selected"' : ''); ?>><?php echo htmlspecialchars($user['realname']); ?></option>
<?php
}
echo '</select>';
unset($serendipity['POST']['properties']['access_groups']);
}
+ if (is_array($serendipity['POST']['properties']['access_users']) && $serendipity['POST']['properties']['access'] != 'member') {
+ unset($serendipity['POST']['properties']['access_users']);
+ }
+
$this->addProperties($serendipity['POST']['properties'], $eventData);
return true;
$groupcond[] .= "ep_access_groups.value LIKE '%;$mygroup;%'";
}
if (count($groupcond) > 1) {
- $conds[] = " (ep_access_groups.property IS NULL OR ep_access.value = 'member' AND (" . implode(' OR ', $groupcond) . "))";
+ $conds[] = " (ep_access_groups.property IS NULL OR (ep_access.value = 'member' AND (" . implode(' OR ', $groupcond) . ")))";
}
}
+
+ if ($use_users) {
+ $conds[] = " (ep_access_users.property IS NULL OR (ep_access.value = 'member' AND ep_access_users.value LIKE '%;" . (int)$serendipity['authorid'] . ";%' ";
+ }
} else {
$conds[] = " (ep_access.property IS NULL OR ep_access.value = 'public') ";
}
ON (e.id = ep_access_groups.entryid AND ep_access_groups.property = 'ep_access_groups')";
}
+ if ($use_users) {
+ $joins[] = "LEFT OUTER JOIN {$serendipity['dbPrefix']}entryproperties ep_access_users
+ ON (e.id = ep_access_users.entryid AND ep_access_users.property = 'ep_access_users')";
+ }
+
if (!isset($addData['noSticky']) || $addData['noSticky'] !== true) {
$joins[] = "LEFT JOIN {$serendipity['dbPrefix']}entryproperties ep_sticky
ON (e.id = ep_sticky.entryid AND ep_sticky.property = 'ep_is_sticky')";