aboutsummaryrefslogtreecommitdiff
path: root/www/inc/photo.class.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/inc/photo.class.inc.php')
-rw-r--r--www/inc/photo.class.inc.php279
1 files changed, 279 insertions, 0 deletions
diff --git a/www/inc/photo.class.inc.php b/www/inc/photo.class.inc.php
new file mode 100644
index 0000000..10b507d
--- /dev/null
+++ b/www/inc/photo.class.inc.php
@@ -0,0 +1,279 @@
+<?php
+/* Photo class for dealing with individual images
+
+*/
+
+class C_photo {
+ var $id;
+ var $preview;
+ var $previewsize;
+ var $mq;
+ var $hq;
+ var $name;
+ var $caption;
+ var $file;
+ var $number;
+ var $counter;
+ var $album;
+ var $comments; //rendered string
+
+ function C_photo($file, $number) {
+ global $root, $gallery_dir, $galerie, $db;
+
+ $this->file = $file;
+ $this->number = $number;
+ $this->album = $galerie;
+ //init from filesystem
+ //preview
+ $this->preview = "$gallery_dir/$galerie/lq/img-" . $this->number . ".jpg";
+ $this->previewsize = getimagesize($this->preview);
+ //MQ
+ if (file_exists("$root/$gallery_dir/$galerie/mq/img-" . $this->number . ".jpg")) {
+ $this->mq = "$gallery_dir/$galerie/mq/img-" . $this->number . ".jpg";
+ }
+ //HQ
+ if (file_exists("$root/$gallery_dir/$galerie/hq/img-" . $this->number . ".jpg")) {
+ $this->hq = "$gallery_dir/$galerie/hq/img-" . $this->number . ".jpg";
+ }
+ if ($GLOBALS['have_sqlite']) { //query just once
+ require_once("$root/inc/db.class.inc.php");
+ $sql = "select * from photo where ";
+ $sql .= "number=" . $this->number . " and ";
+ $sql .= "album='" . $this->album . "'";
+ $db->query($sql);
+ }
+ $this->readCaption();
+ $this->readCounter(); //reads access log number
+ if ($GLOBALS['have_sqlite']) { //need to get photo id first
+ if (!$db->count()) {//no record for this photo, let's update the record
+ //FIXME - if no photo data in db, create a unique index for it
+ //and add number, album, caption and views.
+ $sql = "insert into photo (name, caption, counter, number, album)";
+ $sql .= " values (";
+ $sql .= "\"" . $this->name . "\", ";
+ $sql .= "\"" . $this->caption . "\", ";
+ $sql .= $this->counter . ", ";
+ $sql .= $this->number . ", ";
+ $sql .= "\"" . $this->album . "\"";
+ $sql .= ")";
+ $db->query($sql);
+ print "\n\n<!-- We've moved the data to the database.-->";
+ //now we still need to query for the id
+ $sql = "select id from photo where ";
+ $sql .= "number=" . $this->number . " and ";
+ $sql .= "album='" . $this->album . "'";
+ $db->query($sql);
+ }
+ $db->rewind();
+ $resultarray = sqlite_fetch_array($db->result);
+ $this->id = $resultarray["id"];
+ print "\n\n<!-- image id: " . $this->id . " -->\n";
+ }
+ $this->readComments();
+ }
+
+ function readCaption() {
+ global $have_sqlite, $root, $gallery_dir, $galerie, $db;
+
+ /* reads name and caption of a photo
+ - either from sqlite database or filesystem
+ */
+ if ($have_sqlite) {
+ //try reading from sqlite
+ if ($db->count()) {
+ $result = sqlite_fetch_array($db->result);
+ $this->name = $result["name"];
+ $this->caption = $result["caption"];
+ return; //no need to fallback anymore
+ }
+ }
+
+ //we falback to filesystem
+ $buffer = "";
+ $captionfile = "$root/$gallery_dir/$galerie/comments/" . $this->number . ".txt";
+ $fh = @fopen($captionfile, "r");
+ if ($fh) {
+ while (!feof($fh)) {
+ $buffer .= fgets($fh, 4096);
+ }
+ fclose($fh);
+ } else { // no caption file
+ $this->name = __("Photo ") . $this->number;
+ return;
+ }
+ //parse buffer
+ if(eregi("^<span>(.*)</span>( - )?(.*)", $buffer, $x)) {
+ $this->name = $x[1]; //mostly "Photo"
+ $this->caption = chop($x[3]);
+ } else {
+ $this->caption = $buffer;
+ }
+ }
+
+ function readCounter() {
+ global $log_access, $root, $gallery_dir, $galerie, $db;
+
+ if ($GLOBALS['have_sqlite']) {
+ //try reading from sqlite
+ if ($db->count()) {
+ $db->rewind();
+ $result = sqlite_fetch_array($db->result);
+ $this->counter = $result["counter"];
+ return; //no need to fallback anymore
+ }
+ }
+ //we fallback to filesystem :/
+ if (is_writable("$root/$gallery_dir/$galerie/comments")) { // needs perms
+ $log = "$root/$gallery_dir/$galerie/comments/log_" . $this->number . ".txt";
+ if (file_exists($log)){
+ $fh = @fopen($log, "r");
+ $this->counter = rtrim(fgets($fh));
+ fclose($fh);
+ } else {
+ $this->counter = 0;
+ }
+ } else {
+ //doesn't do anything if no perms
+ print "<!-- ". __('WARNING: comment dir not writable') . "-->\n";
+ return 0; //failure
+ }
+ return 1; //success
+ }
+
+ function readComments() {
+ global $root, $gallery_dir, $galerie, $db;
+
+ if ($GLOBALS['have_sqlite']) {
+ //we have and will use SQLite
+ //FIXME
+ print "\n<!--SQLITE comments FIXME-->\n\n";
+ return 1;
+ } else {
+ //filesystem
+ $comments = "$root/$gallery_dir/$galerie/comments/user_" . $this->number . ".txt";
+ if (file_exists($comments)){
+ $buffer = "";
+ $fh = @fopen($comments, "r");
+ if ($fh) {
+ while (!feof($fh)) {
+ $buffer .= fgets($fh, 4096);
+ }
+ $this->comments = $buffer;
+ fclose($fh);
+ }
+ }
+ }
+ }
+
+ function renderCounter() {
+
+ print "\n<div id=\"log\">\n";
+ print __('This image has been viewed') . " ";
+ print "<strong>" . $this->counter . "</strong>". " " . __('times') . ".";
+ print "</div>\n\n";
+ $this->writeCounter(); //save state
+
+ }
+
+ function writeCounter() {
+ global $log_access, $root, $gallery_dir, $galerie, $page, $db;
+
+ $this->counter++; //we add to counter
+ if ($GLOBALS['have_sqlite']) {
+ //we have SQLite
+ $sql = "update photo set counter=" . $this->counter;
+ $sql .= " where id=" . $this->id;
+ $db->query($sql);
+ return; //no need to fallback anymore
+ }
+ //fallback to filesystem
+ if (is_writable("$root/$gallery_dir/$galerie/comments")) { // needs perms
+ $log = "$root/$gallery_dir/$galerie/comments/log_". $this->number .".txt";
+ if (!is_writable($log)) {
+ print "\n\n\n<!-- cannot open $log. Check permissions.";
+ print "\nAborting counter write -->\n";
+ return 0;
+ }
+ $fh = fopen($log,"w");
+ if (!fwrite($fh, $this->counter . "\n")) {
+ $page->error( __('Could not write to') . $log . "!");
+ $page->footer();
+ exit; //stop everything
+ }
+ fclose($fh);
+ }
+ }
+
+ function renderBigSize() {
+
+ if ($this->mq || $this->hq) {
+ print "<div id=\"mqhq\">";
+ if ($this->mq) {
+ print "<a href=\"" . $this->mq . "\">". __('MQ') . "</a> ";
+ }
+ if ($this->hq) {
+ print "<a href=\"" . $this->hq . "\">" . __('HQ') . "</a>";
+ }
+ print "</div>\n";
+ }
+ }
+
+ function renderPreview() {
+
+ $divheight = $this->previewsize[1] + 10;
+ print "<div id=\"image\" style=\"height: ${divheight}px\">\n"; // extra kludge
+ // because of tall
+ // images
+
+ print "<img id=\"preview\" " . $this->previewsize[3] . " src=\"". $this->file;
+ print "\" alt=\"$snimek\" />\n";
+ }
+
+ function renderCaption() {
+
+ print "<div class=\"comment\">";
+ print "<span>" . $this->name . "</span>";
+ if ($this->caption) {
+ print " &ndash; ";
+ print $this->caption;
+ print "</div>";
+ }
+ }
+
+ function addComment($comment_name, $comment_data) { //adds comment to file or database
+ global $log_access, $root, $gallery_dir, $galerie, $page;
+
+ if ($GLOBALS['have_sqlite']) {
+ //sqlite
+ print "\n<!--SQLITE comments addition FIXME-->\n\n";
+ } else {
+ //filesystem
+ if (is_writable("$root/$gallery_dir/$galerie/comments")) { // needs perms
+ $comment = "$root/$gallery_dir/$galerie/comments/user_";
+ $comment .= $this->number . ".txt";
+ if (file_exists($comment) && !is_writable($comment)) {
+ $page->error("Permission Denied", __('Could not write to') . $comment .
+ "!\n Check permissions.\n");
+ $page->footer();
+ exit; //stop everything
+ }
+
+ $fh = fopen("$comment", "a");
+ if (!$comment_name) {
+ $comment_name = __('Anonymous');
+ }
+ if (!fwrite($fh, "<div class=\"commententry\">\n")) {
+ $page->error("Write Failed", __('Could not write to') . $comment . "!" );
+ $page->footer();
+ exit; //stop everything
+ }
+ fwrite($fh, " <div class=\"name\">" . __('Comment from') . "<em>$comment_name</em></div>\n",90);
+ fwrite($fh, " <div class=\"commentdata\">$comment_data</div>\n",280);
+ fwrite($fh, "</div>\n");
+
+ fclose($fh);
+ }
+ }
+ }
+}
+?>