We gaan trouwen

Een kampongbruiloft op Java...

Een fragment uit mijn reisdagboek:

Al pratend komen we in een 'voorkampong' van Bandung aan. Daar maken we kennis met een zeer traditionele Sundanese Kampong moslimbruiloft. Dat gaat ongeveer als volgt.

Je bouwt een tent over de straat en daar zet je allemaal stoelen neer. In een deel van de tent hang je grote bossen met schitterende bloemen. Je haalt bij de lokale operette vereniging het decor van hun laatste uitvoering 'het gouden paleis van de prins' en zet dat onder de bloemen. Dan zet je een soort melkbus met een gleuf op een strategische plek neer. Daar 'moeten' de gasten hun envelop met geld (gemiddeld 25.000 roepia = 2,25 euro) in deponeren. Dan zet je een podium boven een rijstveld. Je huurt een enorme geluidsinstallatie en laat de achterkleinkinderen van de Blue Diamonds zingen.

Vervolgens laat je een visagist komen met een grote bak poeder. Die duwt het hoofd van de bruid een aantal maal in die bak met poeder (goed aandrukken!). De ogen worden voorzien van enorme lagen oogschaduw (in dit verband is het beter te spreken van oogklepjes). Je behangt haar helemaal met bloemen en zet haar in de kamer met de gouden banken onder de bloemen. De bruidegom trekt een traditioneel Sundanees pak aan en het feest kan beginnen!

Dat feest bestaat eruit dat het bruidspaar 's morgens door een Iman in de echt wordt verbonden. Daar is alleen de familie bij aanwezig. Om tien uur gaat het bruidspaar naar de 'gouden kamer' waar ze al hun gasten ontvangen. Die kamer is klein en bloedheet. Het is een soort receptie. De gasten komen dan ook alleen maar langs, schudden de hand (of worden zeer hartelijk omhelsd zoals bij goede vrienden - zoals wij zijn natuurlijk - het geval is). De gasten lopen door naar de volgende ruimte. Daar staat de catering klaar om een bordje met eten te overhandigen. Vervolgens krijg je een glas - veilig - water en dan mag je buiten in de tent plaatsnemen op de stoelen om te genieten van de achterkleinkinderen van de Blue Diamonds. Alles wordt natuurlijk vastgelegd door een professioneel camerateam. Ondertussen gaat het leven bij de buren gewoon door en rijden er brommers met vee en andere goederen achterop tussen de stoelen en de gasten door (dan moet je die tent maar niet op de weg bouwen).

Dit ritueel gaat door tot drie uur 's middags. Dan zal de bruid wel in de lokale rivier worden afgespoeld om weer door haar kersverse man te worden herkend.

Tot zover de wellicht 'iets' te Westerse beschrijving van dit uiteraard zeer boeiende en voor de familie en het bruidspaar zeer belangrijke ritueel (Wat zullen zij wel niet denken van die bruiden in Nederland die zich in dwaze, slecht zittende witte jurken hijsen, zich op/in allerlei foute vervoermiddelen door de collega's van manlief door het dorp laten rijden en onder een boom - of achter de kassa bij een Aldi filiaal - een serie foto's laten maken, zodat ze nog eens kunnen terugkijken op de mooiste dag van hun leven?). We hadden dit absoluut niet willen missen! Diana vertelt dat het eigenlijk een zeer sobere plechtigheid is. Een bruiloft voor de arme mensen. Voor onze begrippen is er erg veel werk verzet om het tot een mooi feest te maken.

Wat Corine en mij ook nu weer opviel - en dit is serieus - is dat het bruidspaar helemaal geen vreugde uitstraalt. Het is een gearrangeerd huwelijk en op één of andere manier straalt dat er vanaf. Op de foto's van het bruidspaar staan twee dodelijk serieus kijkende mensen. Of dat nou de spanning van de omstandigheden is of dat het een reële waarneming is van ons, zijn we tot op heden nog niet achter. We hebben al vaker gearrangeerde bruiloften meegemaakt in Turkije en India en daar valt het ook telkens op.

En dat ziet er als volgt uit:

Het bruidspaar


Het bruidspaar in de 'gouden kamer'


Die treurige blikken...


Groepsportret met het bruidspaar (in welke camera moeten we kijken?)


Gezelligheid in de tent over de weg


Ondertussen gaat het leven in de kampong gewoon door


De buurvrouwen en kinderen kijken toe


De achterkleinkinderen van de Blue Diamonds


Alles wordt professioneel vastgelegd

© Harold Makaske 6 februari 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