replace xml::simple with xml::libxml

git-svn-id: http://yolanda.mister-muffin.de/svn@319 7eef14d0-6ed0-489d-bf55-20463b2d70db
This commit is contained in:
josch 2008-04-27 00:42:15 +00:00
parent bdfef043e0
commit dfd08fd2dd
8 changed files with 473 additions and 320 deletions

View file

@ -86,12 +86,5 @@ if($query->param('id'))
} }
else else
{ {
@userinfo = get_userinfo_from_sid($session->id); print $query->redirect("index.pl?error=error_202c");
@page = get_page_array(@userinfo);
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_202c";
print output_page();
} }

View file

@ -26,17 +26,18 @@ sub get_page_array
#get parameters #get parameters
my (@userinfo) = @_; my (@userinfo) = @_;
($page->{'locale'}) = $query->http('HTTP_ACCEPT_LANGUAGE') =~ /^([^,]+),.*$/; my $root = XML::LibXML::Element->new( "page" );
if (!$page->{'locale'})
{
$page->{'locale'} = "en_us";
}
$page->{'username'} = $userinfo->{'username'}; my ($locale) = $query->http('HTTP_ACCEPT_LANGUAGE') =~ /^([^,]+),.*$/;
$page->{'xmlns:dc'} = $config->{"xml_namespace_dc"}; $root->setAttribute( "locale", $locale ? $locale : "en_us" );
$page->{'xmlns:cc'} = $config->{"xml_namespace_cc"};
$page->{'xmlns:rdf'} = $config->{"xml_namespace_rdf"};
$root->setAttribute( "username", $userinfo->{'username'} );
$root->setNamespace("http://www.w3.org/1999/xhtml", "xhtml", 0);
$root->setNamespace("http://web.resource.org/cc/", "cc", 0);
$root->setNamespace("http://purl.org/dc/elements/1.1/", "dc", 0);
$root->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
return $root;
} }
# index.pl (display custom search) # index.pl (display custom search)
@ -46,6 +47,8 @@ sub fill_results
{ {
my ($dbquery, @args) = @_; my ($dbquery, @args) = @_;
my $results = XML::LibXML::Element->new( "results" );
#prepare query #prepare query
my $sth = $dbh->prepare($dbquery) or die $dbh->errstr; my $sth = $dbh->prepare($dbquery) or die $dbh->errstr;
@ -72,10 +75,10 @@ sub fill_results
#execute it #execute it
$sth->execute(@args) or die $dbquery; $sth->execute(@args) or die $dbquery;
$page->{'results'}->{'lastpage'} = $lastpage; $results->setAttribute('lastpage', $lastpage);
$page->{'results'}->{'currentpage'} = $currentpage; $results->setAttribute('currentpage', $currentpage);
$page->{'results'}->{'resultcount'} = $resultcount eq '0E0' ? 0 : $resultcount; $results->setAttribute('resultcount', $resultcount eq '0E0' ? 0 : $resultcount);
$page->{'results'}->{'pagesize'} = $pagesize; $results->setAttribute('pagesize', $pagesize);
#get every returned value #get every returned value
while (my ($id, $title, $description, $publisher, $timestamp, $creator, while (my ($id, $title, $description, $publisher, $timestamp, $creator,
@ -83,40 +86,92 @@ sub fill_results
$license, $filesize, $duration, $width, $height, $fps, $viewcount, $license, $filesize, $duration, $width, $height, $fps, $viewcount,
$downloadcount) = $sth->fetchrow_array()) $downloadcount) = $sth->fetchrow_array())
{ {
#before code cleanup, this was a really obfuscated array/hash creation my $result = XML::LibXML::Element->new( "result" );
push @{ $page->{'results'}->{'result'} }, $result->setAttribute( "thumbnail", $config->{"url_root"}."/video-stills/thumbnails/$id" );
{ $result->setAttribute( "preview", $config->{"url_root"}."/video-stills/previews/$id" );
'thumbnail' => $config->{"url_root"}."/video-stills/thumbnails/$id", $result->setAttribute( "duration", $duration );
'preview' => $config->{"url_root"}."/video-stills/previews/$id", $result->setAttribute( "viewcount", $viewcount );
'duration' => $duration,
'viewcount' => $viewcount, my $rdf = XML::LibXML::Element->new( "RDF" );
'rdf:RDF' => $rdf->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf");
{
'cc:Work' => my $work = XML::LibXML::Element->new( "Work" );
{ $work->setNamespace( "http://web.resource.org/cc/", "cc");
'rdf:about' => $config->{"url_root"}."/download/$id/", $work->setNamespace( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
'dc:title' => [$title], $work->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", $config->{"url_root"}."/download/$id/" );
'dc:creator' => [$creator],
'dc:subject' => [$subject], $node = XML::LibXML::Element->new( "coverage" );
'dc:description' => [$description], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:publisher' => [$publisher], $node->appendText($coverage);
'dc:date' => [$timestamp], $work->appendChild($node);
'dc:identifier' => [$config->{"url_root"}."/video/".urlencode($title)."/$id/"],
'dc:source' => [$source], $node = XML::LibXML::Element->new( "creator" );
'dc:language' => [$language], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:coverage' => [$coverage], $node->appendText($creator);
'dc:rights' => [$rights] $work->appendChild($node);
},
'cc:License' => $node = XML::LibXML::Element->new( "date" );
{ $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'rdf:about' => 'http://creativecommons.org/licenses/GPL/2.0/' $node->appendText($date);
} $work->appendChild($node);
}
}; $node = XML::LibXML::Element->new( "description" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($description);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "identifier" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($config->{"url_root"}."/video/".urlencode($title)."/$id/");
$work->appendChild($node);
$node = XML::LibXML::Element->new( "language" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($language);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "publisher" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($publisher);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "rights" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($rights);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "source" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($source);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "subject" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($subjcet);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "title" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($title);
$work->appendChild($node);
my $license = XML::LibXML::Element->new( "License" );
$license->setNamespace("http://web.resource.org/cc/", "cc");
$license->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
$license->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", "http://creativecommons.org/licenses/GPL/2.0/" );
$rdf->appendChild($work);
$rdf->appendChild($license);
$result->appendChild($rdf);
$results->appendChild($result);
} }
#finish query #finish query
$sth->finish() or die $dbh->errstr; $sth->finish() or die $dbh->errstr;
return $results;
} }
sub get_sqlquery sub get_sqlquery
@ -226,6 +281,7 @@ sub urlencode
sub output_page sub output_page
{ {
my $doc = shift;
my $parser = XML::LibXML->new(); my $parser = XML::LibXML->new();
my $xslt = XML::LibXSLT->new(); my $xslt = XML::LibXSLT->new();
@ -233,68 +289,45 @@ sub output_page
my $param_xslt = $query->param('xslt'); my $param_xslt = $query->param('xslt');
$param_xslt =~ s/[^\w]//gi; $param_xslt =~ s/[^\w]//gi;
# "null" is a debuggin option, make it so that this doesn't show up in the final product if( -f "$root/xsl/$param_xslt.xsl")
if($param_xslt eq "null")
{ {
return $session->header( $xsltpath = "$root/xsl/$param_xslt.xsl"
-type=>'application/xml',
-charset=>'UTF-8',
),
XMLout(
$page,
KeyAttr => {},
RootName => 'page'
);
} }
else else
{ {
if( -f "$root/xsl/$param_xslt.xsl") $xsltpath = "$root/xsl/xhtml.xsl";
{ }
$xsltpath = "$root/xsl/$param_xslt.xsl"
}
else
{
$xsltpath = "$root/xsl/xhtml.xsl";
}
my $stylesheet = $xslt->parse_stylesheet($parser->parse_file($xsltpath)); #TODO: preload xslt stylesheet
my $stylesheet = $xslt->parse_stylesheet($parser->parse_file($xsltpath));
$output = $stylesheet->transform( $output = $stylesheet->transform($doc);
$parser->parse_string(
XMLout(
$page,
KeyAttr => {},
RootName => 'page'
)
)
);
if($param_xslt eq "xspf") if($param_xslt eq "xspf")
{ {
return $session->header( return $session->header(
-type=>$stylesheet->media_type, -type=>$stylesheet->media_type,
-charset=>$stylesheet->output_encoding, -charset=>$stylesheet->output_encoding,
-attachment=>$query->param('query').".xspf", -attachment=>$query->param('query').".xspf",
), ),
$output->toString; $output->toString;
#$stylesheet->output_as_bytes($output); <= for future use with XML::LibXSLT (>= 1.62) #$stylesheet->output_as_bytes($output); <= for future use with XML::LibXSLT (>= 1.62)
} }
elsif($param_xslt eq "pr0n") elsif($param_xslt eq "pr0n")
{ {
return $session->header( return $session->header(
-status=>'402 Payment required', -status=>'402 Payment required',
-cost=>'$9001.00', # OVER NEIN THOUSAND -cost=>'$9001.00', # OVER NEIN THOUSAND
) )
} }
else else
{ {
return $session->header( return $session->header(
-type=>$stylesheet->media_type, -type=>$stylesheet->media_type,
-charset=>$stylesheet->output_encoding, -charset=>$stylesheet->output_encoding,
"x-pingback"=>$config->{"url_root"}."/pingback.pl" "x-pingback"=>$config->{"url_root"}."/pingback.pl"
), ),
$output->toString; print $output->toString;
#$stylesheet->output_as_bytes($output); <= for future use with XML::LibXSLT (>= 1.62) #$stylesheet->output_as_bytes($output); <= for future use with XML::LibXSLT (>= 1.62)
}
} }
} }

View file

@ -7,29 +7,38 @@ $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); @userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo); my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
$page->{frontpage} = ['']; my $root = get_page_array(@userinfo);
$root->appendChild(XML::LibXML::Element->new( "frontpage" ));
if($query->param('information')) if($query->param('information'))
{ {
$page->{'message'}->{'type'} = "information"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = $query->param('information'); $message->setAttribute("type", "information");
$page->{'message'}->{'value'} = $query->param('value'); $message->setAttribute("text", $query->param('information'));
$message->setAttribute("value",$query->param('value'));
$root->appendChild($message);
} }
elsif($query->param('error')) elsif($query->param('error'))
{ {
$page->{'message'}->{'type'} = "error"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = $query->param('error'); $message->setAttribute("type", "error");
$page->{'message'}->{'value'} = $query->param('value'); $message->setAttribute("text", $query->param('error'));
$message->setAttribute("value",$query->param('value'));
$root->appendChild($message);
} }
elsif($query->param('warning')) elsif($query->param('warning'))
{ {
$page->{'message'}->{'type'} = "warning"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = $query->param('warning'); $message->setAttribute("type", "warning");
$page->{'message'}->{'value'} = $query->param('value'); $message->setAttribute("text", $query->param('warning'));
$message->setAttribute("value",$query->param('value'));
$root->appendChild($message);
} }
my $tagcloud = XML::LibXML::Element->new( "tagcloud" );
#prepare query #prepare query
my $sth = $dbh->prepare(qq{select text, count from tagcloud }) or die $dbh->errstr; my $sth = $dbh->prepare(qq{select text, count from tagcloud }) or die $dbh->errstr;
@ -40,20 +49,25 @@ $sth->execute() or die $dbh->errstr;
#get every returned value #get every returned value
while (my ($text, $count) = $sth->fetchrow_array()) while (my ($text, $count) = $sth->fetchrow_array())
{ {
#push the new value to the $page->tagcloud array my $tag = XML::LibXML::Element->new( "tag" );
push @{ $page->{tagcloud}->{tag} }, { text => [$text =~ / / ? "\"$text\"" : $text], count => [$count] }; $tag->appendTextChild("text", $text);
$tag->appendTextChild("count", $count);
$tagcloud->appendChild($tag);
} }
#finish query #finish query
$sth->finish() or die $dbh->errstr; $sth->finish() or die $dbh->errstr;
$root->appendChild($tagcloud);
#TODO: make this configureable #TODO: make this configureable
@querystrings = ("* orderby:timestamp sort:descending", "*", "*"); @querystrings = ("* orderby:timestamp sort:descending", "*", "*");
foreach $strquery (@querystrings) foreach $strquery (@querystrings)
{ {
#new results block #new results block
push @{$page->{'results'} }, { "query" => $strquery }; my $results = XML::LibXML::Element->new( "results" );
$results->setAttribute( "query", $strquery );
#get query string and args #get query string and args
my ($dbquery, @args) = get_sqlquery($strquery); my ($dbquery, @args) = get_sqlquery($strquery);
@ -71,36 +85,90 @@ foreach $strquery (@querystrings)
$license, $filesize, $duration, $width, $height, $fps, $viewcount, $license, $filesize, $duration, $width, $height, $fps, $viewcount,
$downloadcount) = $sth->fetchrow_array()) $downloadcount) = $sth->fetchrow_array())
{ {
push @{$page->{'results'}[$#{$page->{'results'} }]->{'result'}}, my $result = XML::LibXML::Element->new( "result" );
{ $result->setAttribute( "thumbnail", $config->{"url_root"}."/video-stills/thumbnails/$id" );
'thumbnail' => $config->{"url_root"}."/video-stills/thumbnails/$id", $result->setAttribute( "preview", $config->{"url_root"}."/video-stills/previews/$id" );
'preview' => $config->{"url_root"}."/video-stills/previews/$id", $result->setAttribute( "duration", $duration );
'duration' => $duration, $result->setAttribute( "viewcount", $viewcount );
'viewcount' => $viewcount,
'rdf:RDF' => my $rdf = XML::LibXML::Element->new( "RDF" );
{ $rdf->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf");
'cc:Work' =>
{ my $work = XML::LibXML::Element->new( "Work" );
'rdf:about' => $config->{"url_root"}."/download/$id/", $work->setNamespace( "http://web.resource.org/cc/", "cc");
'dc:title' => [$title], $work->setNamespace( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
'dc:creator' => [$creator], $work->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", $config->{"url_root"}."/download/$id/" );
'dc:subject' => [$subject],
'dc:description' => [$description], $node = XML::LibXML::Element->new( "coverage" );
'dc:publisher' => [$publisher], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:date' => [$timestamp], $node->appendText($coverage);
'dc:identifier' => [$config->{"url_root"}."/video/".urlencode($title)."/$id/"], $work->appendChild($node);
'dc:source' => [$source],
'dc:language' => [$language], $node = XML::LibXML::Element->new( "creator" );
'dc:coverage' => [$coverage], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:rights' => [$rights] $node->appendText($creator);
}, $work->appendChild($node);
'cc:License' =>
{ $node = XML::LibXML::Element->new( "date" );
'rdf:about' => 'http://creativecommons.org/licenses/GPL/2.0/' $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
} $node->appendText($date);
} $work->appendChild($node);
};
$node = XML::LibXML::Element->new( "description" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($description);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "identifier" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($config->{"url_root"}."/video/".urlencode($title)."/$id/");
$work->appendChild($node);
$node = XML::LibXML::Element->new( "language" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($language);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "publisher" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($publisher);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "rights" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($rights);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "source" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($source);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "subject" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($subjcet);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "title" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($title);
$work->appendChild($node);
my $license = XML::LibXML::Element->new( "License" );
$license->setNamespace("http://web.resource.org/cc/", "cc");
$license->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
$license->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", "http://creativecommons.org/licenses/GPL/2.0/" );
$rdf->appendChild($work);
$rdf->appendChild($license);
$result->appendChild($rdf);
$results->appendChild($result);
} }
$root->appendChild($results);
} }
print output_page(); $doc->setDocumentElement($root);
output_page($doc);

View file

@ -7,7 +7,9 @@ $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); @userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo); my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
my $root = get_page_array(@userinfo);
if($query->param('action') eq "logout") if($query->param('action') eq "logout")
{ {
@ -20,10 +22,7 @@ if($query->param('action') eq "logout")
#check if user is logged in #check if user is logged in
elsif($userinfo->{'username'}) elsif($userinfo->{'username'})
{ {
$page->{'message'}->{'type'} = "error"; print $query->redirect("/index.pl?error=error_already_logged_in");
$page->{'message'}->{'text'} = "error_already_logged_in";
print output_page();
} }
#if password is empty and username begins with http:// then it's an openid login #if password is empty and username begins with http:// then it's an openid login
elsif($query->param('pass') eq '' and $query->param('user')=~m/^http:\/\//) elsif($query->param('pass') eq '' and $query->param('user')=~m/^http:\/\//)
@ -36,32 +35,21 @@ elsif($query->param('pass') eq '' and $query->param('user')=~m/^http:\/\//)
consumer_secret => $session->id, #is this save? don't know... consumer_secret => $session->id, #is this save? don't know...
required_root => $config->{"url_root"} ); required_root => $config->{"url_root"} );
#is an openid passed? #claim identity
if($query->param('user')) $claimed = $con->claimed_identity($query->param('user'));
if(!defined($claimed))
{ {
#claim identity print $query->redirect("/index.pl?error=error_openid_".$con->errcode);
$claimed = $con->claimed_identity($query->param('user'));
if(!defined($claimed))
{
print $query->redirect("/index.pl?error=error_openid_".$con->errcode);
}
else
{
#try to set the check_url
$check_url = $claimed->check_url(
return_to => $config->{"url_root"}."login.pl?action=openid", #on success return to this address
trust_root => $config->{"url_root"}); #this is the string the user will be asked to trust
#redirect to openid server to check claim
print $query->redirect($check_url);
}
} }
else else
{ {
#if not, print login form #try to set the check_url
$page->{'loginform'} = ['']; $check_url = $claimed->check_url(
return_to => $config->{"url_root"}."login.pl?action=openid", #on success return to this address
trust_root => $config->{"url_root"}); #this is the string the user will be asked to trust
print output_page(); #redirect to openid server to check claim
print $query->redirect($check_url);
} }
} }
#we return from an identity check #we return from an identity check
@ -132,17 +120,10 @@ elsif($query->param('pass') ne '' and $query->param('user')!~m/^http:\/\// and $
} }
else else
{ {
#if not, print error print $query->redirect("index.pl?error=error_username_password_do_not_match");
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_username_password_do_not_match";
print output_page();
} }
} }
else else
{ {
#if not, print login form print $query->redirect("index.pl");
$page->{'loginform'} = [''];
print output_page();
} }

View file

@ -7,15 +7,21 @@ $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); @userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo); my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
my $root = get_page_array(@userinfo);
#check if user is logged in #check if user is logged in
if($username) if($username)
{ {
$page->{'message'}->{'type'} = "error"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = "error_already_registered"; $message->setAttribute("type", "error");
$message->setAttribute("text", "error_already_registered");
$root->appendChild($message);
print output_page(); $doc->setDocumentElement($root);
output_page($doc);
} }
#if username and password are passed put them into the database #if username and password are passed put them into the database
elsif($query->param('user') and $query->param('pass') and $query->param('pass_repeat')) elsif($query->param('user') and $query->param('pass') and $query->param('pass_repeat'))
@ -30,11 +36,16 @@ elsif($query->param('user') and $query->param('pass') and $query->param('pass_re
#if something was returned the selected username already exists #if something was returned the selected username already exists
if($sth->fetchrow_array()) if($sth->fetchrow_array())
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_username_already_registered";
print output_page(); my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "error");
$message->setAttribute("text", "error_username_already_registered");
$root->appendChild($message);
$doc->setDocumentElement($root);
output_page($doc);
} }
else else
{ {
@ -47,40 +58,62 @@ elsif($query->param('user') and $query->param('pass') and $query->param('pass_re
} }
else else
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_passwords_do_not_match";
print output_page(); my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "error");
$message->setAttribute("text", "error_passwords_do_not_match");
$root->appendChild($message);
$doc->setDocumentElement($root);
output_page($doc);
} }
} }
elsif(not $query->param('user') and ($query->param('pass') or $query->param('pass_repeat'))) elsif(not $query->param('user') and ($query->param('pass') or $query->param('pass_repeat')))
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_insert_username";
print output_page(); my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "error");
$message->setAttribute("text", "error_insert_username");
$root->appendChild($message);
$doc->setDocumentElement($root);
output_page($doc);
} }
elsif(not $query->param('pass') and ($query->param('user') or $query->param('pass_repeat'))) elsif(not $query->param('pass') and ($query->param('user') or $query->param('pass_repeat')))
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_insert_password";
print output_page(); my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "error");
$message->setAttribute("text", "error_insert_password");
$root->appendChild($message);
$doc->setDocumentElement($root);
output_page($doc);
} }
elsif(not $query->param('pass_repeat') and ($query->param('user') or $query->param('pass'))) elsif(not $query->param('pass_repeat') and ($query->param('user') or $query->param('pass')))
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
$page->{'message'}->{'type'} = "error";
$page->{'message'}->{'text'} = "error_repeat_password";
print output_page(); my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "error");
$message->setAttribute("text", "error_repeat_password");
$root->appendChild($message);
$doc->setDocumentElement($root);
output_page($doc);
} }
else else
{ {
$page->{'registerform'} = ['']; $root->appendChild(XML::LibXML::Element->new( "registerform" ));
print output_page(); $doc->setDocumentElement($root);
output_page($doc);
} }

View file

@ -7,30 +7,35 @@ $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); @userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo); my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
my $root = get_page_array(@userinfo);
#check if query is set #check if query is set
if($query->param('query')) if($query->param('query'))
{ {
$page->{'results'}->{'query'} = $query->param('query');
my ($dbquery, @args) = get_sqlquery($query->param('query')); my ($dbquery, @args) = get_sqlquery($query->param('query'));
if($dbquery) if($dbquery)
{ {
fill_results($dbquery, @args); $root->appendChild(fill_results($dbquery, @args));
$root->setAttribute('query', $query->param('query'));
if(@{$page->{'results'}->{'result'}} == 0) $doc->setDocumentElement($root);
my @results = $doc->findnodes( "//results/result" );
if($#results == -1)
{ {
print $query->redirect("index.pl?warning=warning_no_results"); print $query->redirect("index.pl?warning=warning_no_results");
} }
elsif((@{$page->{'results'}->{'result'}} == 1) and (not $query->param('page') or $query->param('page') == 1)) elsif(($#results == 0) and (not $query->param('page') or $query->param('page') == 1))
{ {
print $query->redirect($page->{'results'}->{'result'}[0]->{'rdf:RDF'}->{'cc:Work'}->{'dc:identifier'}[0]); print $query->redirect(@{$doc->findnodes( "//results/result/rdf:RDF/cc:Work/dc:identifier/text()" )}[0]->data);
} }
else else
{ {
print output_page(); output_page($doc);
} }
} }
else else

View file

@ -5,7 +5,11 @@ CGI::Session->name($config->{"page_cookie_name"});
$query = new CGI; $query = new CGI;
$session = new CGI::Session; $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); my @userinfo = get_userinfo_from_sid($session->id);
my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
my $root = get_page_array(@userinfo);
if($userinfo->{'username'}) if($userinfo->{'username'})
{ {
@ -13,23 +17,32 @@ if($userinfo->{'username'})
{ {
$dbh->do(qq{update users set pagesize = ? where id = ?}, undef, $query->param('pagesize'), $userinfo->{'id'} ) or die $dbh->errstr; $dbh->do(qq{update users set pagesize = ? where id = ?}, undef, $query->param('pagesize'), $userinfo->{'id'} ) or die $dbh->errstr;
$page->{'message'}->{'type'} = "information"; @userinfo = get_userinfo_from_sid($session->id);
$page->{'message'}->{'text'} = "information_settings_changed";
$root = get_page_array(@userinfo);
my $message = XML::LibXML::Element->new( "message" );
$message->setAttribute("type", "information");
$message->setAttribute("text", "information_settings_changed");
$root->appendChild($message);
} }
} }
@userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo);
if($userinfo->{'username'}) if($userinfo->{'username'})
{ {
$page->{'settings'}->{'pagesize'} = $userinfo->{'pagesize'}; my $settings = XML::LibXML::Element->new( "settings" );
$settings->setAttribute("pagesize", $userinfo->{'pagesize'});
$root->appendChild($settings);
} }
else else
{ {
$page->{'message'}->{'type'} = "error"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = "error_202c"; $message->setAttribute("type", "error");
$message->setAttribute("text", "error_202c");
$root->appendChild($message);
} }
print output_page(); $doc->setDocumentElement($root);
output_page($doc);

View file

@ -7,7 +7,9 @@ $session = new CGI::Session;
@userinfo = get_userinfo_from_sid($session->id); @userinfo = get_userinfo_from_sid($session->id);
@page = get_page_array(@userinfo); my $doc = XML::LibXML::Document->new( "1.0", "UTF-8" );
my $root = get_page_array(@userinfo);
#check if id or title is passed #check if id or title is passed
if($query->url_param('id')) if($query->url_param('id'))
@ -52,11 +54,11 @@ if($query->url_param('id'))
{ {
if($query->param('embed') eq "video") if($query->param('embed') eq "video")
{ {
$page->{'embed'} = "video"; $root->setAttribute( "embed", "video" );
} }
elsif($query->param('embed') eq "preview") elsif($query->param('embed') eq "preview")
{ {
$page->{'embed'} = "preview"; $root->setAttribute( "embed", "preview" );
} }
#if there was a single result, display the video #if there was a single result, display the video
@ -74,8 +76,10 @@ if($query->url_param('id'))
if($query->param('comment')) if($query->param('comment'))
{ {
#output infobox #output infobox
$page->{'message'}->{'type'} = "information"; my $message = XML::LibXML::Element->new( "message" );
$page->{'message'}->{'text'} = "information_comment_created"; $message->setAttribute("type", "information");
$message->setAttribute("text", "information_comment_created");
$root->appendChild($message);
#add to database #add to database
$dbh->do(qq{insert into comments (userid, videoid, text, timestamp) values (?, ?, ?, unix_timestamp())}, undef, $dbh->do(qq{insert into comments (userid, videoid, text, timestamp) values (?, ?, ?, unix_timestamp())}, undef,
@ -148,94 +152,117 @@ if($query->url_param('id'))
} }
} }
#before code cleanup, this was a really obfuscated array/hash creation my $video = XML::LibXML::Element->new( "video" );
push @{ $page->{'video'} }, $video->setAttribute('thumbnail', $config->{"url_root"}."/video-stills/thumbnails/$id");
{ $video->setAttribute('preview', $config->{"url_root"}."/video-stills/previews/$id");
'thumbnail' => $config->{"url_root"}."/video-stills/thumbnails/$id", $video->setAttribute('filesize', $filesize);
'preview' => $config->{"url_root"}."/video-stills/previews/$id", $video->setAttribute('duration', $duration);
'filesize' => $filesize, $video->setAttribute('width', $width);
'duration' => $duration, $video->setAttribute('height', $height);
'width' => $width, $video->setAttribute('fps', $fps);
'height' => $height, $video->setAttribute('viewcount', $viewcount);
'fps' => $fps, $video->setAttribute('downloadcount', $downloadcount);
'viewcount' => $viewcount,
'downloadcount' => $downloadcount, my $rdf = XML::LibXML::Element->new( "RDF" );
'rdf:RDF' => $rdf->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf");
{
'cc:Work' => my $work = XML::LibXML::Element->new( "Work" );
{ $work->setNamespace( "http://web.resource.org/cc/", "cc");
'rdf:about' => $config->{"url_root"}."/download/$id/", $work->setNamespace( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
'dc:title' => [$title], $work->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", $config->{"url_root"}."/download/$id/" );
'dc:creator' => [$creator],
'dc:subject' => [$subject], $node = XML::LibXML::Element->new( "coverage" );
'dc:description' => [$description], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:publisher' => [$publisher], $node->appendText($coverage);
'dc:date' => [$timestamp], $work->appendChild($node);
'dc:identifier' => [$config->{"url_root"}."/video/".urlencode($title)."/$id/"],
'dc:source' => [$source], $node = XML::LibXML::Element->new( "creator" );
'dc:language' => [$language], $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'dc:coverage' => [$coverage], $node->appendText($creator);
'dc:rights' => [$rights] $work->appendChild($node);
},
'cc:License' => $node = XML::LibXML::Element->new( "date" );
{ $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'rdf:about' => $license, $node->appendText($date);
# ↓↓ dummy code because josch is too lazy for DOIN IT RITE ↓↓ $work->appendChild($node);
'cc:permits' =>
{ $node = XML::LibXML::Element->new( "description" );
'rdf:resource' => "http://web.resource.org/cc/Reproduction" $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
}, $node->appendText($description);
'cc:permits' => $work->appendChild($node);
{
'rdf:resource' => "http://web.resource.org/cc/Distribution" $node = XML::LibXML::Element->new( "identifier" );
}, $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'cc:permits' => $node->appendText($config->{"url_root"}."/video/".urlencode($title)."/$id/");
{ $work->appendChild($node);
'rdf:resource' => "http://web.resource.org/cc/DerivativeWorks"
}, $node = XML::LibXML::Element->new( "language" );
'cc:requires' => $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
{ $node->appendText($language);
'rdf:resource' => "http://web.resource.org/cc/Notice" $work->appendChild($node);
},
'cc:requires' => $node = XML::LibXML::Element->new( "publisher" );
{ $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
'rdf:resource' => "http://web.resource.org/cc/ShareAlike" $node->appendText($publisher);
}, $work->appendChild($node);
'cc:prohibits' =>
{ $node = XML::LibXML::Element->new( "rights" );
'rdf:resource' => "http://web.resource.org/cc/CommercialUse" $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
}, $node->appendText($rights);
'cc:prohibits' => $work->appendChild($node);
{
'rdf:resource' => "http://web.resource.org/cc/DerivativeWorks" $node = XML::LibXML::Element->new( "source" );
} $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
# ↑↑ dummy code because josch is too lazy for DOIN IT RITE ↑↑ $node->appendText($source);
# sadly, i dunno how to add multiple tags with the same name $work->appendChild($node);
}
} $node = XML::LibXML::Element->new( "subject" );
}; $node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($subjcet);
$work->appendChild($node);
$node = XML::LibXML::Element->new( "title" );
$node->setNamespace( "http://purl.org/dc/elements/1.1/", "dc" );
$node->appendText($title);
$work->appendChild($node);
my $license = XML::LibXML::Element->new( "License" );
$license->setNamespace("http://web.resource.org/cc/", "cc");
$license->setNamespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", 0);
$license->setAttributeNS( "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "about", "http://creativecommons.org/licenses/GPL/2.0/" );
$rdf->appendChild($work);
$rdf->appendChild($license);
$video->appendChild($rdf);
$root->appendChild($video);
#get comments #get comments
my $comments = XML::LibXML::Element->new( "comments" );
$sth = $dbh->prepare(qq{select comments.id, comments.text, users.username, from_unixtime( comments.timestamp ) $sth = $dbh->prepare(qq{select comments.id, comments.text, users.username, from_unixtime( comments.timestamp )
from comments, users where from comments, users where
comments.videoid=? and users.id=comments.userid}) or die $dbh->errstr; comments.videoid=? and users.id=comments.userid}) or die $dbh->errstr;
$sth->execute($id) or die $dbh->errstr; $sth->execute($id) or die $dbh->errstr;
while (my ($commentid, $text, $username, $timestamp) = $sth->fetchrow_array()) while (my ($commentid, $text, $username, $timestamp) = $sth->fetchrow_array())
{ {
push @{ $page->{'comments'}->{'comment'} }, { my $comment = XML::LibXML::Element->new( "comment" );
'text' => [$text], $comment->setAttribute('username', $username);
'username' => $username, $comment->setAttribute('timestamp', $timestamp);
'timestamp' => $timestamp, $comment->setAttribute('id', $commentid);
'id' => $commentid $comment->appendTextChild("text", $text);
}; $comments->appendChild($comment);
} }
print output_page(); $root->appendChild($comments);
$doc->setDocumentElement($root);
output_page($doc);
} }
} }
else else
{ {
$page->{'message'}->{'type'} = "error"; print $query->redirect("index.pl?error=error_202c");
$page->{'message'}->{'text'} = "error_202c";
print output_page();
} }