#!/usr/bin/perl use 5.010; use strict; use warnings; use DBI; use CGI qw/:standard/; use OpenDict::WebUtils; use Encode; my $root = $ENV{DOCUMENT_ROOT}; my $self = OpenDict::WebUtils->header_json(); unless ($self) { print qq!{"error":"Not authenticated."}!; exit; } my $user = $self->{session}->param("username"); my $task = param("task"); my $w = param("wid"); Encode::_utf8_on($w); # HACK HACK HACK HACK my ($wid,$nid) = split /:/, $w; given ($task) { when ("remove") { my $dbh = DBI->connect("dbi:SQLite:dbname=$root/TMP/users.db", "", ""); $dbh->{sqlite_unicode} = 1; my $sth = $dbh->prepare("DELETE FROM fav WHERE username = ? AND word = ? AND n = ?"); $sth->execute($user, $wid, $nid); print count($dbh, $wid, $nid); }; when ("add") { my $dbh = DBI->connect("dbi:SQLite:dbname=$root/TMP/users.db", "", ""); $dbh->{sqlite_unicode} = 1; my $sth = $dbh->prepare("INSERT OR IGNORE INTO fav (username, word, n) VALUES (?,?,?)"); $sth->execute($user, $wid, $nid); print count($dbh, $wid, $nid); }; default { print qq!{"error":"Unkown task [$task]."}!; }; } sub count { my ($dbh, $wid, $nid) = @_; my $sth = $dbh->prepare("SELECT COUNT(username) FROM fav WHERE word = ? AND n = ?"); $sth->execute($wid, $nid); my @row; @row = $sth->fetchrow_array; my $msg = $row[0]==1?"$row[0] favorito":"$row[0] favoritos"; return qq!{"ok":"$msg"}!; }