|
|
Met een gebroken politieke rug
blijft Verdonk op het pluche...
Na eindeloos vergaderen is het kabinet eruit. Het CDA komt de Kamer tegemoet door een deel van de groep mensen die onder de regeling terugkeer vallen niet uit te zetten. De VVD distantieert zich van dat besluit, maar blijft wel in het kabinet. En Rita Verdonk raakt de portefeuille Vreemdelingenbeleid kwijt. De staatsrechtelijke chaos is kompleet en het roept een groot aantal vragen op.
Het belangrijkste is dat er een beetje hoop komt voor de mensen die hier al langer dan vijf jaar verblijven (sommigen zelfs al meer dan tien jaar). Dat is de grote winst. Als Zalm dat afdoet als een ´zwarte dag in de Nederlandse politiek´ en ´het opereren als burgemeester in oorlogstijd´ is hij het predikaat liberaal volstrekt onwaardig. Liberalen horen op te komen voor burgers die door overheidshandelen in het nauw komen.
Maar de politieke chaos is compleet. In de afgelopen weken hield Verdonk de Kamer voor dat de groep niet is af te bakenen. Nu blijkt dat wel te kunnen... sterker nog: de groep wordt zelfs nog kleiner gemaakt dan waar de Kamer voor pleitte. Dat kan nu in één keer dus wel?
Hoe is het mogelijk dat een kabinet, dat geacht wordt met één mond te spreken (eenheid van kabinetsbeleid), nu plotsklaps naar buiten treedt met twee vleugels? Dat is werkelijk een hele interessante amendering van ons staatsrecht.
Zalm stelt dat het landsbelang de VVD bewindslieden dwingt om te blijven. Hij wees daarbij met name op de positie van minister Kamp. Dat is een merkwaardig argument, want kon Kamp vorige week nog wel opstappen als hij Kamervoorzitter zou zijn geworden?
De Kamer heeft een motie van afkeuring tegen Verdonk aangenomen. Het staande beleid was dat zo'n motie leidt tot het aftreden van de betreffende minister. Die regel ligt nu blijkbaar ook in de prullenbak. Dat is interessant, want dan komt er eindelijk formeel duidelijkheid tussen een motie van wantrouwen en een motie van afkeuring.
Als het landsbelang zo zwaar telt voor de VVD dan had Verdonk de eer aan haarzelf moeten houden door haar nederlaag te erkennen en zelf op te stappen. De andere VVD-ministers konden dan blijven zitten en hadden zich eventueel alsnog kunnen distantiëren van de koerswijziging van het kabinet. Verdonk maakt er echter een prestigekwestie van door te blijven zitten.
En zo ontstaat deze idiote situatie. De VVD-ministers kunnen namelijk wel zeggen dat ze tegen het nieuwe beleid zijn, maar door in het kabinet te blijven, dragen ze nog steeds expliciet de verantwoordelijk. Je kunt niet met je kleren aan in het water springen en droogblijven. Ik begrijp de VVD niet. Ze hebben Geert Wilders vrijspel gegeven om te schieten.
Verdonk heeft enerzijds de slag gewonnen. Ze blijft gewoon zitten en kan een lange neus trekken naar de Kamer. Anderzijds is haar aanzien en geloofwaardigheid verdwenen. Door haar portefeuille kwijt te raken, is haar politieke ruggengraat gebroken. Ook haar geloofwaardigheid is weg. Als ze werkelijk tegen de beleidswijziging zou zijn dan had ze de consequenties moeten nemen door op te stappen. Nu blijft ze volledig verantwoordelijk voor de beleidswijziging.
Overall moet worden gezegd dat de uitkomst voor het CDA interessant is. De VVD lijdt enorm gezichtsverlies. Het CDA kan opschuiven en zo een opening voor de kabinetsformatie te creëren. De vraag is wel of ze later nog verder gaat opschuiven door mee te werken aan een echte pardonregeling. Als dat gebeurt, komt ook de geloofwaardigheid van Balkenende in het geding. Hij heeft dan iets uit te leggen, want tot het laatste toe steunde hij het beleid Verdonk in de Kamer.
Het wordt een interessant debat in de Kamer... Wordt vervolgd om half 12... live op televisie.
© Harold Makaske 14 december 2006
/*
History:
v1.1
- add getTableList
v1.2
- use sql_table
- Added silent mode (configure via option) to support NP_MostViews
- Added Cleanup upon uninstall option
- Added "just number" minimalist mode
- Added supportsFeature
V1.2a
- Added min version support
V1.3
- Replaced doSkinVar with DoTemplateVar
V1.3a
- Added repeat views ignore function aka repeat F5s from those bored and lonely one
V1.3b
- Fixed counting off by 1 bug
V1.3c
- Added <%Views(skipCount)%> to allow skipping count when used in template (ie to not count on click in main page)
V1.4
- Fixed ignoe same IP count problem
V1.5
- Added views_log table and changed plugin performance to check for unique visits by IP address. [gRegor]
- Added option to set the length of time before re-counting hits from the same IP address (default: 2 hours) [gRegor]
V1.6
- Added plugin menu to display all view count, w/ counter reset function
- Delete view counter and log for deleted item
V1.7
- use sql_query
V1.8
- Admin page enhancement to preserve order and sort info
v1.9
- Added item title in admin menu
v1.9.1
- ignore draft in admin menu
*/
class NP_Views extends NucleusPlugin {
// Note: I never run this plugin on 2.0 and have no idea whether it
// wil work on <2.5. A user can simply chnage it to return
// '200' and see if it works (likely will). I will gladly
// change the min version to 2.0 and add the sql_table fix
// upon such report. 8)
function getMinNucleusVersion() {
return '250';
}
function getName() {
return 'Views';
}
function getAuthor() {
return 'Rodrigo Moraes | Edmond Hui (admun) | gRegor Morrill';
}
function getURL() {
return 'http://www.tipos.com.br';
}
function getVersion() {
return '1.9.1';
}
function getDescription() {
return 'This plugin counts how many times an entry has been displayed.';
}
function getEventList() {
return array('PostAddItem', 'QuickMenu', 'PostDeleteItem');
}
function supportsFeature($what) {
switch($what) {
case 'SqlTablePrefix':
return 1;
default:
return 0;
}
}
function getTableList() {
return array( sql_table('plugin_views'), sql_table('plugin_views_log') );
}
function install() {
sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views') . ' (id int(11) NOT NULL default "0", views int(15) NOT NULL default "0")');
sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views_log') . ' (id int(11) NOT NULL auto_increment, ip varchar(20) NOT NULL default "", itemid int(11) NOT NULL default "0", viewtime varchar(32) NOT NULL default "", PRIMARY KEY (id)
)');
$this->createOption('silent','Silent mode - No #Display shown in Item (still need to add the skinVar, for use with MostViewed)','yesno','no');
$this->createOption('deletetables','Delete this plugin\'s table and data when uninstalling?','yesno','yes');
$this->createOption('timespan', 'Hours to wait before re-counting visitors', 'text', '2');
}
function unInstall() {
if ($this->getOption('deletetables') == 'yes') {
sql_query('DROP TABLE ' . sql_table('plugin_views') );
sql_query('DROP TABLE ' . sql_table('plugin_views_log') );
}
}
function hasAdminArea() {
return 1;
}
/**
* Adds an entry to the 'Quick Menu' on the Nucleus administration pages.
* The entry will link to the commentcontrol admin page
*/
function event_QuickMenu(&$data) {
global $member;
if (!($member->isLoggedIn() && $member->isAdmin())) return;
array_push(
$data['options'],
array(
'title' => 'View Counts',
'url' => $this->getAdminURL(),
'tooltip' => 'See the view count of all items'
)
);
}
function doTemplateVar(&$item, $input) {
$itemid = $item->itemid;
$remote_ip = ServerVar('REMOTE_ADDR');
$timespan = $this->getOption('timespan') * 3600;
$now = time();
// get the current Views count
$query = "SELECT views FROM " . sql_table('plugin_views') . " WHERE id=" . $itemid;
$result = sql_query($query);
$row = mysql_fetch_object($result);
$views = intval($row->views);
// Only do count updates if "skipcount" is not set
if ($input != 'skipcount')
{
// This takes care of previous items
if (mysql_num_rows($result) == 0)
{
$query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '1')";
sql_query($query);
//$views = 0;
} // end if
// Check the views_log table to see if this IP has a viewtime for this item
$query = "SELECT viewtime FROM " . sql_table('plugin_views_log') . " WHERE ip='" . $remote_ip . "' AND itemid=" . $itemid;
$result = sql_query($query);
// No views from this IP in the past X hours, so update the Views count
if (mysql_num_rows($result) == 0)
{
$views++;
$this->_updateViewsCount($itemid, $views);
$this->_addViewsLog($itemid, $remote_ip, $now);
} // end if
else
{
$viewtime = mysql_result($result, 0, 'viewtime');
// It's been longer than X hours, so recount
if (($now - $timespan) > $viewtime)
{
$views++;
$this->_updateViewsCount($itemid, $views);
$this->_updateViewsLog($itemid, $remote_ip, $now);
}
} // end else
} // end if
// Clear logs that are more than X hours old
$time = $now - $timespan;
$query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE (viewtime < $time)";
sql_query($query);
if ($this->getOption('silent') == 'no') {
echo $views;
} // end if
}
function event_PostAddItem($data) {
$itemid = $data['itemid'];
$query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '0')";
sql_query($query);
}
function event_PostDeleteItem($data) {
$itemid = $data['itemid'];
$query = "DELETE FROM " . sql_table('plugin_views') . " WHERE id=". $itemid;
sql_query($query);
$query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE itemid=". $itemid;
sql_query($query);
}
function _updateViewsCount($itemid, $views) {
// update the Views table with the new count
$query = "UPDATE " . sql_table('plugin_views') . " SET views='$views' WHERE id=$itemid";
sql_query($query);
}
function _addViewsLog($itemid, $ip, $time) {
// add IP and itemid to views_log table so it won't be recounted for X hours
$query = "INSERT INTO " . sql_table('plugin_views_log') . " (ip, itemid, viewtime) VALUES ('$ip', '$itemid', '$time')";
sql_query($query);
}
function _updateViewsLog($itemid, $ip, $time) {
// update the views_log viewtime so it won't be recounted for X hours
$query = "UPDATE " . sql_table('plugin_views_log') . " SET viewtime='$time' WHERE ip='$ip'";
sql_query($query);
}
function doAction($actionType) {
global $CONF, $member;
if (!($member->isLoggedIn() && $member->isAdmin())) return 'Sorry. not allowed';
if ($actionType == 'resetview'){
$id = requestVar('id');
$query = "UPDATE " . sql_table('plugin_views') . " SET views=0 WHERE id=$id";
sql_query($query);
} else if ($actionType == 'resetallview') {
$query = "UPDATE " . sql_table('plugin_views') . " SET views=0";
sql_query($query);
}
$order = requestVar('order');
$sort = requestVar('sort');
header('Location: ' . $CONF['PluginURL'] . 'views/index.php?sort=' . $sort . '&order='.$order);
}
}
?>
-
Hoofdstuk: 5. Losse gedachten
|