From 9a1de07513e9d5a8e94c5539131da89403321313 Mon Sep 17 00:00:00 2001 From: josch Date: Mon, 29 Oct 2007 15:00:40 +0000 Subject: [PATCH] improved speed by significantly reducing mysql queries on each request and optimized xml generation git-svn-id: http://yolanda.mister-muffin.de/svn@155 7eef14d0-6ed0-489d-bf55-20463b2d70db --- trunk/account.pl | 15 ++-- trunk/download.pl | 24 ++----- trunk/functions.pl | 49 ++++++------- trunk/images/yolanda-big.png | Bin 29260 -> 30726 bytes trunk/images/yolanda.svg | 4 +- trunk/index.pl | 10 ++- trunk/locale/en-US.xml | 129 ----------------------------------- trunk/login.pl | 17 ++--- trunk/register.pl | 17 ++--- trunk/search.pl | 15 ++-- trunk/upload.pl | 16 ++--- trunk/uploader.pl | 16 ++--- trunk/video.pl | 15 ++-- trunk/xsl/xhtml.xsl | 19 ++---- trunk/xsl/xhtml/results.xsl | 2 - trunk/xsl/xhtml/video.xsl | 3 - 16 files changed, 72 insertions(+), 279 deletions(-) delete mode 100755 trunk/locale/en-US.xml diff --git a/trunk/account.pl b/trunk/account.pl index 155c142..8c6c232 100644 --- a/trunk/account.pl +++ b/trunk/account.pl @@ -7,18 +7,11 @@ CGI::Session->name($session_name); $query = new CGI; $session = new CGI::Session; -$username = get_username_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); - -$page->{'username'} = $username; -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); -if($username) +if($userinfo->{'username'}) { if($query->param('show') eq 'settings') { @@ -113,7 +106,7 @@ if($username) 'thumbnail' => $duration == 0 ? "/images/tango/video-x-generic.png" : "/video-stills/$id", 'duration' => $duration, 'viewcount' => $viewcount, - 'edit' => $username eq $publisher ? "true" : "false", + 'edit' => $userinfo->{'username'} eq $publisher ? "true" : "false", 'rdf:RDF' => { 'cc:Work' => diff --git a/trunk/download.pl b/trunk/download.pl index da7a7a9..58324e4 100644 --- a/trunk/download.pl +++ b/trunk/download.pl @@ -67,15 +67,9 @@ if($query->param('id')) } else { - #there is no video with this id - %page = (); - - $page->{'username'} = get_username_from_sid($session->id); - $page->{'locale'} = $locale; - $page->{'stylesheet'} = $stylesheet; - $page->{'xmlns:dc'} = $xmlns_dc; - $page->{'xmlns:cc'} = $xmlns_cc; - $page->{'xmlns:rdf'} = $xmlns_rdf; + @userinfo = get_userinfo_from_sid($session->id); + + @page = get_page_array(@userinfo); $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_202c"; @@ -92,15 +86,9 @@ if($query->param('id')) } else { - %page = (); - - #if a username is associated with session id, username is nonempty - $page->{'username'} = get_username_from_sid($session->id); - $page->{'locale'} = $locale; - $page->{'stylesheet'} = $stylesheet; - $page->{'xmlns:dc'} = $xmlns_dc; - $page->{'xmlns:cc'} = $xmlns_cc; - $page->{'xmlns:rdf'} = $xmlns_rdf; + @userinfo = get_userinfo_from_sid($session->id); + + @page = get_page_array(@userinfo); $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_202c"; diff --git a/trunk/functions.pl b/trunk/functions.pl index 496b731..b72450e 100644 --- a/trunk/functions.pl +++ b/trunk/functions.pl @@ -27,8 +27,7 @@ sub fill_tagcloud $dbh->disconnect() or die $dbh->errstr; } -#return a username from passed session id -sub get_username_from_sid +sub get_userinfo_from_sid { #get parameters my ($sid) = @_; @@ -37,13 +36,13 @@ sub get_username_from_sid my $dbh = DBI->connect("DBI:mysql:$database:$dbhost", $dbuser, $dbpass) or die $dbh->errstr; #prepare query - my $sth = $dbh->prepare(qq{select username from users where sid = ?}) or die $dbh->errstr; + my $sth = $dbh->prepare(qq{select id, username, locale, pagesize, cortado from users where sid = ?}) or die $dbh->errstr; #execute it $sth->execute($sid) or die $dbh->errstr; #save the resulting username - my ($username) = $sth->fetchrow_array(); + ($userinfo->{'id'}, $userinfo->{'username'}, $userinfo->{'locale'}, $userinfo->{'pagesize'}, $userinfo->{'cortado'}) = $sth->fetchrow_array(); #finish query $sth->finish() or die $dbh->errstr; @@ -52,33 +51,27 @@ sub get_username_from_sid $dbh->disconnect() or die $dbh->errstr; #return - return $username; + return @userinfo; } -#return a username from passed session id -sub get_userid_from_sid +sub get_page_array { #get parameters - my ($sid) = @_; + my (@userinfo) = @_; - #connect to db - my $dbh = DBI->connect("DBI:mysql:$database:$dbhost", $dbuser, $dbpass) or die $dbh->errstr; - - #prepare query - my $sth = $dbh->prepare(qq{select id from users where sid = ?}) or die $dbh->errstr; - - #execute it - $sth->execute($sid) or die $dbh->errstr; - - #save the resulting username - my ($username) = $sth->fetchrow_array(); - - #finish query - $sth->finish() or die $dbh->errstr; - - #close db - $dbh->disconnect() or die $dbh->errstr; - - #return - return $username; + $page->{'username'} = $userinfo->{'username'}; + #if user is logged in, use his locale setting + if($userinfo->{'locale'}) + { + $page->{'locale'} = $userinfo->{'locale'}; + } + #else get the locale from the http server variable + else + { + ($page->{'locale'}) = $query->http('HTTP_ACCEPT_LANGUAGE') =~ /^([^,]+),.*$/; + } + $page->{stylesheet} = $stylesheet; + $page->{'xmlns:dc'} = $xmlns_dc; + $page->{'xmlns:cc'} = $xmlns_cc; + $page->{'xmlns:rdf'} = $xmlns_rdf; } diff --git a/trunk/images/yolanda-big.png b/trunk/images/yolanda-big.png index cf98766ad8554e7c969da75c0853b047171ea621..1bddbb6b013e3bdd59ef9599867245da15ace159 100644 GIT binary patch literal 30726 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 Xa7M*xK7!xug_4m}d{-fE81(-Dg>j95 literal 29260 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�#8+c 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 diff --git a/trunk/images/yolanda.svg b/trunk/images/yolanda.svg index 456e207..28e385e 100644 --- a/trunk/images/yolanda.svg +++ b/trunk/images/yolanda.svg @@ -176,7 +176,9 @@ x="452.15411" y="450.49475" id="text7102" - transform="scale(1.0438982,0.9579479)">name($session_name); $query = new CGI; my $session = new CGI::Session; -%page = (); +@userinfo = get_userinfo_from_sid($session->id); -#if a username is associated with session id, username is nonempty -$page->{username} = get_username_from_sid($session->id); -$page->{locale} = $locale; -$page->{stylesheet} = $stylesheet; -$page->{frontpage} = ['']; +@page = get_page_array(@userinfo); + +$page->{frontpage} = ['']; if($query->param('information')) { diff --git a/trunk/locale/en-US.xml b/trunk/locale/en-US.xml deleted file mode 100755 index a806752..0000000 --- a/trunk/locale/en-US.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - | - - - to upload videos, log in first. - - register - login - login with OpenID - - upload video - bookmarks - account details - - logged in as - logout - - - © 2007 GNUtube team - license - download source code - - - Find - Instant Access - - latest additions - most downloads - best rated - - - Error 202c - Access forbidden by government. - You did not supply a file. - You did not supply a title. - You did not supply a creator. - You did not supply any keywords. - You did not supply a description. - You did not supply a publisher. - You did not supply a title. - You did not supply a source. - You did not supply a language. - You did not supply a coverage. - You did not supply a rights holder. - You seem to be already registered. Please log out to create a new account. - You seem to be already logged in. Please log out to log in again. - Username and password do not match. - - - - - - You are now logged in. - You are now logged out. - To put the video into context, additional metainformation is needed. - - Your comment has been created. - You successfully created yourself an account - You succcessfully uploaded your file - - - - - results for query - ordered by - ascending - descending - results on - pages - relevance - duration - filesize - viewcount - downloadcount - timestamp - - - search - - - username - password - register - login - - - file - next page - upload - Specify the file you want to upload. - State the title of the video. - Specify the creator of the video. - State some keywords, separated by commas. - Describe the video in natural language. - Specify the source, preferably by URL. - State the language of the video. - Specify the time and location covered. - This is page 1 of 3. - This is page 2 of 3. - This is page 3 of 3. - - - download video - license conditions - Flamewar area below. Proceed with Caution. - post comment - - - title - author - subject - description - uploader - contributor - date - source - language - coverage - righs holder - - duration - viewcount - - - - diff --git a/trunk/login.pl b/trunk/login.pl index 44ff9e7..8a4e21e 100644 --- a/trunk/login.pl +++ b/trunk/login.pl @@ -7,16 +7,9 @@ CGI::Session->name($session_name); $query = new CGI; $session = new CGI::Session; -$username = get_username_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); - -$page->{'username'} = $username; -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); #check if action is set if($query->param('action')) @@ -28,12 +21,12 @@ if($query->param('action')) { #if logout is requested #remove sid from database - $dbh->do(qq{update users set sid = '' where username = ?}, undef, get_username_from_sid($session->id)) or die $dbh->errstr; + $dbh->do(qq{update users set sid = '' where id = ?}, undef, $userinfo->{'id'}) or die $dbh->errstr; $session->delete(); print $query->redirect("index.pl?information=information_logged_out"); } #check if user is logged in - elsif($username) + elsif($userinfo->{'username'}) { $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_already_logged_in"; @@ -169,7 +162,7 @@ if($query->param('action')) $dbh->disconnect(); } #check if user is logged in -elsif($username) +elsif($userinfo->{'username'}) { $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_already_logged_in"; diff --git a/trunk/register.pl b/trunk/register.pl index 390f81b..cadcbe7 100644 --- a/trunk/register.pl +++ b/trunk/register.pl @@ -7,16 +7,9 @@ CGI::Session->name($session_name); $query = new CGI; $session = new CGI::Session; -$username = get_username_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); - -$page->{'username'} = $username; -($page->{'locale'}) = $query->http('HTTP_ACCEPT_LANGUAGE') =~ /^([^,]+),.*$/; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); #check if user is logged in if($username) @@ -50,19 +43,19 @@ elsif($query->param('user') and $query->param('pass') and $query->param('pass_re $page->{'message'}->{'text'} = "error_passwords_do_not_match"; } } -elsif(not $query->param('user')) +elsif(not $query->param('user') and ($query->param('pass') or $query->param('pass_repeat'))) { $page->{'registerform'} = ['']; $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_insert_username"; } -elsif(not $query->param('pass')) +elsif(not $query->param('pass') and ($query->param('user') or $query->param('pass_repeat'))) { $page->{'registerform'} = ['']; $page->{'message'}->{'type'} = "error"; $page->{'message'}->{'text'} = "error_insert_password"; } -elsif(not $query->param('pass_repeat')) +elsif(not $query->param('pass_repeat') and ($query->param('user') or $query->param('pass'))) { $page->{'registerform'} = ['']; $page->{'message'}->{'type'} = "error"; diff --git a/trunk/search.pl b/trunk/search.pl index cd1835c..56d6356 100644 --- a/trunk/search.pl +++ b/trunk/search.pl @@ -6,16 +6,9 @@ CGI::Session->name($session_name); $query = new CGI; $session = new CGI::Session; -$username = get_username_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); - -$page->{'username'} = $username; -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); #check if query is set if($query->param('query') or $query->param('orderby')) @@ -111,7 +104,7 @@ if($query->param('query') or $query->param('orderby')) $page->{'results'}->{'lastpage'} = $lastpage; $page->{'results'}->{'currentpage'} = $currentpage; - $page->{'results'}->{'resultcount'} = $resultcount; + $page->{'results'}->{'resultcount'} = $resultcount eq '0E0' ? 0 : $resultcount; $page->{'results'}->{'pagesize'} = $pagesize; #get every returned value @@ -123,7 +116,7 @@ if($query->param('query') or $query->param('orderby')) 'thumbnail' => "./video-stills/$id", 'duration' => $duration, 'viewcount' => $viewcount, - 'edit' => $username eq $publisher ? "true" : "false", + 'edit' => $userinfo->{'username'} eq $publisher ? "true" : "false", 'rdf:RDF' => { 'cc:Work' => diff --git a/trunk/upload.pl b/trunk/upload.pl index f215d8a..2bc9fd2 100644 --- a/trunk/upload.pl +++ b/trunk/upload.pl @@ -6,21 +6,13 @@ require "functions.pl"; CGI::Session->name($session_name); my $session = new CGI::Session; -my $username = get_username_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); +@page = get_page_array(@userinfo); -#if a username is associated with session id, username is nonempty -$page->{'username'} = $username; -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; - -if($username) +if($userinfo->{'username'}) { - $page->{uploadform} = {'page' => '2'}; + $page->{uploadform} = {'page' => '1'}; } else { diff --git a/trunk/uploader.pl b/trunk/uploader.pl index 6ef7583..f5fca25 100644 --- a/trunk/uploader.pl +++ b/trunk/uploader.pl @@ -18,19 +18,11 @@ sub hook #close TEMP; } -my $userid = get_userid_from_sid($session->id); +@userinfo = get_userinfo_from_sid($session->id); -%page = (); - -#if a username is associated with session id, username is nonempty -$page->{'username'} = get_username_from_sid($session->id); -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); -if($userid) +if($userinfo->{'id'}) { #connect to db my $dbh = DBI->connect("DBI:mysql:$database:$host", $dbuser, $dbpass) or die $dbh->errstr; @@ -40,7 +32,7 @@ if($userid) $dbh->do(qq{insert into uploaded (title, description, userid, timestamp, creator, subject, contributor, source, language, coverage, rights) values ( ?, ?, ?, unix_timestamp(), ?, ?, ?, ?, ?, ?, ? )}, undef, - $query->param("DC.Title"), $query->param("DC.Description"), $userid, + $query->param("DC.Title"), $query->param("DC.Description"), $userinfo->{'id'}, $query->param("DC.Creator"), $query->param("DC.Subject"), '', $query->param("DC.Source"), $query->param("DC.Language"), $query->param("DC.Coverage"), '') or die $dbh->errstr; diff --git a/trunk/video.pl b/trunk/video.pl index 4f7f9ec..f5af415 100644 --- a/trunk/video.pl +++ b/trunk/video.pl @@ -6,15 +6,9 @@ CGI::Session->name($session_name); $query = new CGI; $session = new CGI::Session; -%page = (); +@userinfo = get_userinfo_from_sid($session->id); -#if a username is associated with session id, username is nonempty -$page->{'username'} = get_username_from_sid($session->id); -$page->{'locale'} = $locale; -$page->{'stylesheet'} = $stylesheet; -$page->{'xmlns:dc'} = $xmlns_dc; -$page->{'xmlns:cc'} = $xmlns_cc; -$page->{'xmlns:rdf'} = $xmlns_rdf; +@page = get_page_array(@userinfo); if($query->url_param('edit') eq 'true' and $query->url_param('id')) { @@ -79,7 +73,7 @@ elsif($query->url_param('title') or $query->url_param('id')) $sth->finish() or die $dbh->errstr; #if user is logged in - if($userid = get_userid_from_sid($session->id)) + if($userinfo->{'username'}) { #check if a comment is about to be created if($query->param('comment')) @@ -89,7 +83,8 @@ elsif($query->url_param('title') or $query->url_param('id')) $page->{'message'}->{'text'} = "information_comment_created"; #add to database - $dbh->do(qq{insert into comments (userid, videoid, text, timestamp) values (?, ?, ?, unix_timestamp())}, undef, $userid, $id, $query->param('comment')) or die $dbh->errstr; + $dbh->do(qq{insert into comments (userid, videoid, text, timestamp) values (?, ?, ?, unix_timestamp())}, undef, + $userinfo->{'id'}, $id, $query->param('comment')) or die $dbh->errstr; } } diff --git a/trunk/xsl/xhtml.xsl b/trunk/xsl/xhtml.xsl index ae4db16..70644d0 100755 --- a/trunk/xsl/xhtml.xsl +++ b/trunk/xsl/xhtml.xsl @@ -144,7 +144,11 @@
- + + + + + @@ -323,9 +327,6 @@ - - -
@@ -358,9 +359,6 @@ - - -
@@ -427,13 +425,10 @@ - - -
- + @@ -464,7 +459,7 @@ - +
diff --git a/trunk/xsl/xhtml/results.xsl b/trunk/xsl/xhtml/results.xsl index b588e74..58a782d 100644 --- a/trunk/xsl/xhtml/results.xsl +++ b/trunk/xsl/xhtml/results.xsl @@ -7,8 +7,6 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" > - -
diff --git a/trunk/xsl/xhtml/video.xsl b/trunk/xsl/xhtml/video.xsl index d964eb4..d88a6f3 100644 --- a/trunk/xsl/xhtml/video.xsl +++ b/trunk/xsl/xhtml/video.xsl @@ -8,9 +8,6 @@ > - - -