|
|
Spook incasso's
Let op uw financiële saeck...
Ik kijk werkelijk nooit naar de bankafschriften. Bij ons is het heel makkelijk geregeld:
- Corine brengt het geld binnen en doet de administratie.
- Ik geef het geld uit.
Toen echter een maand geleden mijn oog viel op een incasso van 70,20 Euro van de Planet Media Groep, was ik even in verwarring. Dat bedrag kon ik niet rijmen met mijn ADSL abonnement, dus maar weer eens gebeld naar Planet want ik heb al vaker problemen gehad met die club. Dat bleek een incasso te zijn voor een geheel andere meneer of mevrouw. Toen maar even verder gekeken...
Sinds een paar maanden blijk ik geconfronteerd te worden met automatische afschrijvingen van mijn girorekening. Zo blijk ik een internet inbelabonnement van Planet Internet te hebben - Planet klopt, maar ik surf met ADSL - en heb ik volgens Essent Energie en Intergas N.V. een tweede optrekje aan de Beukenlaan 17 in Alphen Noord-Brabant.
Er wordt dus gezellig geplunderd van mijn rekening en van mijn geld zit een stel Brabo's bij een lekkere warme kachel leuk te internetten. Na de zoveelste afschrijving heb ik vandaag maar eens gebeld met een mevrouw van de Postbank om te vragen hoe dat nu zit en dat ik het zat ben om steeds de bedragen terug te vorderen.
Ik vraag dus aan die - overigens zeer aardige - Postbankmevrouw of het normaal is dat de bank blijkbaar geen naam-nummercontrole uitvoert? "Nee, daar kunnen we niet aan beginnen. Dat zijn er veel te veel. Daar kunnen we niet aan beginnen. We hebben contracten met die bedrijven en als dat te vaak misgaat dan zeggen we de contracten op." Na even hard gelachen te hebben, hielp ik de mevrouw maar even uit de droom en verzekerde haar dat zij eerder weggereorganiseerd zou zijn, dan dat de Postbank contracten met het grote bedrijfsleven gaat opzeggen. Dat hoopte ze uiteraard niet.
Maar... ondertussen ben ik dus geen steek verder en blijken grote bedrijven simpelweg geld van je rekening te kunnen halen zonder dat je het weet. Dat merk je pas achteraf en dan moet de rekeninghouder maar gaan piepen. Omdat er één of andere cijferblinde Brabo rondloopt, wordt mijn girorekening geplunderd.
Omdat dit al langer aan de hand is dan dat we wisten, moest ik een brief sturen naar de Postbank om ook nog oude incasso's terug te vorderen. Op de e-mails naar de klantenservice van de verschillende plunderaars heb ik overigens nooit antwoord gekregen. Die zijn waarschijnlijk te druk met het tellen van mijn geld.
Ik ga ook maar zo'n contract aanvragen met mijn mega-store. Schrijf ik 100.000 keer 25 euro af van willekeurige rekeningen. Omdat 20% niet reageert (lijkt me reële inschatting), kan ik fijn met heen half miljoen Euri vakantie gaan houden op de bahama's. Of... laat ik het nog iets groter en beter aanpakken. Ik sluis het geld direct door naar een bankrekening op een tropisch eiland, daar kan ik me dan prima vermaken met 2,5 miljoen Euro... dan denk ik nooit meer aan oud papier!
Maar laat ik klein beginnen... ik haal bij de bejaarden hier in de straat de portemonnee uit de tas en haal daar 2,50 uit. Als ze niets zeggen, krijgen ze het ook niet terug. Wedden dat ik binnen één dag op het politiebureau zit en dat ik daarvoor ook nog wordt vervolgd?
Dat is toch raar, want ik weet zeker dat een aangifte tegen Essent, de Planet Media Groep of Intergas N.V. niet eens door de politie in behandeling wordt genomen. Misschien dat ik dat volgende week maar eens ga proberen.
Moraal van dit verhaal: houd je bankafschriften goed in de gaten, want het groot kapitaal blijkt dus zonder enige controle of overeenkomst simpelweg geld van je rekening te kunnen halen.
© Harold Makaske 10 december 2004
/*
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: 1. Belevenissen
|