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 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