PK's MovieDB Release.V2.0 (Dynamic PHP View)

If you made a template for printing or HTML export, you can offer it to the others here. You can also ask here for help about these templates
Post Reply
mjs7231
Posts: 60
Joined: 2005-07-27 23:17:15

PK's MovieDB Release.V2.0 (Dynamic PHP View)

Post by mjs7231 »

So here is the released PK's MovieDB V2.0.

VERSION 3.0 is released and includes many major updates. Please read about it here: viewtopic.php?t=3429

Here is the script I fixed up last night and today. I don't expect this to be considered the best by any means. In fact I kept it quite simple on purpose, I personally like to follow the KISS method of designing.

- Dynamically browse and view your movies in a simple and organized manner.
- VERY EASY integration to your existing website.
- ALL style done through CSS making it easier to modify.
- Will only show relavent category views.
- Easily search your database for names or titles.
- Sort by Title, Rating, Year, Most Resent.
- Non-Intrusive to other scripts on your site that may also use _GET variables.
- Plus more! :)

This is the first public release, this surley means there may be a few kinks to work out, please let me know if you find anything! There was a version 1.0 but it was never released (in case your were wondering).

BASIC EXAMPLE: http://pkwebstudio.com/apps/moviedb/example.php
INTEGRATION EXAMPLE: http://pkwebstudio.com/apps/moviedb/
DOWNLOAD V2.2: http://pkwebstudio.com/apps/moviedb/rel ... b_v2.2.zip

This is release on my new development server, so the main site is quite sparse. Please Visit http://pk-designs.com to get in touch with me.

Copyright © 2005-2006 PK-Designs, Some Rights Reserved. This work is licensed under a "Creative Commons License" The below is a human-readable summary of the full Legal Code found at: http://creativecommons.org/licenses/by/2.5

CHANGELOG - VERSION 2.2 (April 22, 2006)
+ Language File support! :)
+ Added "set.." functions to the class, making it easier to tweak. See documentation.
+ Now displays which Sort option is selected.
+ Clicking the movie cover loads the details page.
+ Scriptpath is now auto detected, no need to edit that.
+ BUGFIX: "Length" text was incorrect.
+ BUGFIX: Multible names in director field were not seperated.
+ BUGFIX: Clicking a category did not reset page number to 1.

Image
Last edited by mjs7231 on 2007-01-06 08:43:22, edited 2 times in total.
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

Good template ;)
A little translation in french of "moviedb.inc"

Code: Select all

<?
/** ===============================================================================================
 * Create a dynamic view of ANT's movie database.
 *
 * <b> REQUIREMENTS </b>
 *
 * 1. PHP4+
 * 2. MySQL Server 4.1+
 * 3. ANT Movie Catalog export to a MySQL Database
 * 4. At least some knowledge of standard HTML and PHP processes.
 *
 * <b> INSTRUCTIONS </b>
 *
 * 1. Download ANT Movie Catalog to build your movie database.
 * 2. Export your Movie Database as SQL, inclue images as well.
 * 3. Import the SQL into your MySQL Database on the server, and upload to the server.
 * 4. Update the TWO variables in the constructor of this class to point to the images
 *    and resource directories on your server.  You may also want to change the title
 *    within the constructor as well.  Everything else in this file should be left alone
 *    unless you know what you are doing.
 * 5. Add the following code to the page you want this script to be displayed.  Don't
 *    forget to also include the style sheet within the header of your HTML file.
 *
 *    $db = new mysql_db("<DB_SERVER>", "<DB_USERNAME>", "<DB_PASSWORD>");
 *    $moviedb = new Moviedb($db, "<DATABASE_NAME>", "<TABLE_NAME>");
 *    print $moviedb->get_html();
 *
 * <b> LICENSE </b>
 *
 * Copyright © 2005-2006 PK-Designs, Some Rights Reserved.  This work is licensed under
 * a "Creative Commons License" The below is a human-readable summary of the full Legal Code
 * found at: http://creativecommons.org/licenses/by/2.5/legalcode
 *
 * - <b>You are free..</b>
 * - to copy, distribute, display, and perform the work
 * - to make derivative works
 * - to make commercial use of the work
 *
 * - <b>Under the following conditions..</b>
 * - Attribution. You must attribute the work in the manner specified by the author or licensor.
 * - For any reuse or distribution, you must make clear to others the license terms of this work.
 * - Any of these conditions can be waived if you get permission from the copyright holder.
 *
 * <b> ATTRIBUTION </b>
 *
 * If you plan to use this code on any site you own or help create, you must site the author
 * M. Shepanski along with a link back to PK-Designs.com.  Like most designers, I too do not like
 * to include random links to someone's site when I use their script.  Because of this I do not
 * require that you include this link right near where the script is used on your page, but rather
 * just mentioned on your site someplace; perhaps the disclaimer, or about page.
 *
 * This is not required, but it is always nice to hear from people who find my work useful to them.
 * If you wish, drop me a line so I can see how you implemented this script on your site.
 *
 * @author          Michael Shepanski <mshepanski@pk-designs.com>
 * @copyright       Copyright © 2005-2006, Michael Shepanski
 * @package         PK-Designs
 * @version         Version 1.4 (2006.03.07)
 *=============================================================================================== */
require_once('mysql_db.inc');

class Moviedb {
    # Public Variables
    var $db;                        // Mysql_db Object
    var $dbname;                    // Database Name
    var $tbname;                    // Table Name
    var $img_folder;                // Path to movie images folder
    var $res_folder;                // Path to MovieDB resource folder
    var $moviedb_title;             // MovieDB Title to be displayed
    var $min_cat_num;               // Minimum number of matches for a category to get its own option

    # Private Variables
    var $THISPAGE;                  // HTTP Path to this Script
    var $mdb_cat;                   // Current Category
    var $mdb_num;                   // Current Selected Movie
    var $mdb_page;                  // Current Page Number
    var $mdb_npp;                   // Current Num/Page
    var $mdb_search;                // Current Search String
    var $mdb_order;                 // Current Order Displayed
    var $non_moviedb_gets;          // Holds all non-MovieDB GET variables
    var $filtered_movies;           // Array containing ALL movie info
    var $categories;                // Array containing ALL category options
    var $misc_categories;           // All categories to be filed under Miscellaneous
    var $num_matches;               // Number of movie matches made with selected criteria
    var $num_pages;                 // Total number of pages in the filtered view
    var $num_movies;                // Total number of movies in the database
    

    /** -------------------------------------------------------------------------------------------
     * Create or Load an instance of the worldplot database script.
     * @access public
     * ------------------------------------------------------------------------------------------*/
    function Moviedb($mysql_db, $dbname, $tbname) {
        $this->db = $mysql_db;
        $this->dbname = $dbname;
        $this->tbname = $tbname;
        $this->THISPAGE = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        $this->img_folder = "http://pkwebstudio.com/apps/moviedb/images";
        $this->res_folder = "http://pkwebstudio.com/apps/moviedb/resource";
        $this->moviedb_title = "PK's Movie Database";
        $this->min_cat_num = 5;
        $this->fetch_get_vars();
    }

    /** -------------------------------------------------------------------------------------------
     * Collect and Set all the Default GET variables.  Stores all non-MovieDB GET variables to
     * ensure that we do not forget to include them later.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function fetch_get_vars() {
        $mdb_vars = array("mdb_cat", "mdb_num", "mdb_page", "mdb_npp", "mdb_search", "mdb_order");
        # Populate the non_moviedb_gets to contain all GETS not used in this script.
        $this->non_moviedb_gets = array();
        foreach($_GET as $var => $val) {
            if (!in_array($var, $mdb_vars)) { $this->non_moviedb_gets[$var] = $val; }
        }
        #Set the Default GET values for this script.
        $this->mdb_cat      = (isset($_GET['mdb_cat']) ? $_GET['mdb_cat'] : "");
        $this->mdb_num      = (isset($_GET['mdb_num']) ? $_GET['mdb_num'] : 0);
        $this->mdb_page     = (isset($_GET['mdb_page']) ? $_GET['mdb_page'] : 1);
        $this->mdb_npp      = (isset($_GET['mdb_npp']) ? $_GET['mdb_npp'] : 10);
        $this->mdb_search   = (isset($_GET['mdb_search']) ? $_GET['mdb_search'] : "");
        $this->mdb_order    = (isset($_GET['mdb_order']) ? $_GET['mdb_order'] : "ORIGINALTITLE");
    }

    /** -------------------------------------------------------------------------------------------
     * Convert an associative array to a proper GET string for the address bar.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function array_to_get($array) {
        $str = "";
        foreach($array as $var => $val) {
            if ($str != "") { $str .= "&"; }
            $str .= $var."=".$val;
        }
        return $str;
    }

    /** -------------------------------------------------------------------------------------------
     * Convert an associative array to private form inputs.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function array_to_post($array) {
        $str = "";
        foreach($array as $var => $val) {
            $str .= "<input type='hidden' name='".$var."' value='".$val."' />\n";
        }
        return $str;
    }


    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the movie database to the screen.
     * @access public
     * ------------------------------------------------------------------------------------------*/
    function get_html() {
        $html  = "<div id='mdb_container'>\n";
        $html .= $this->get_header_html();
        if ($this->mdb_num > 0) {
            $html .= $this->get_full_detail_html($this->mdb_num);
        } else {
            $html .= $this->get_default_html();
        }
        $html .= $this->get_footer_html();
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the default movie view to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_default_html() {
        $i = 0;
        $oldchar = "";
        $this->fetch_categories();
        $this->fetch_filtered_movies();
        $this->num_matches = sizeof($this->filtered_movies);
        $this->num_pages = ceil($this->num_matches / $this->mdb_npp);
        $html  = "<div id='mdb_content'>\n";
        $html .= "  <div class='panel'>\n";
        $html .= $this->get_categories_html();
        $html .= $this->get_search_html();
        $html .= $this->get_alphabet_html();
        $html .= "  </div>\n";
        $html .= "  <div class='mdb_filter_page'>\n";
        $html .=      $this->get_filter_header_html();
        while (($i < $this->mdb_npp) && ((($this->mdb_page-1)*$this->mdb_npp)+$i < $this->num_matches)) {
            $newchar = strtolower(substr($this->filtered_movies[(($this->mdb_page-1)*$this->mdb_npp)+$i]['ORIGINALTITLE'], 0, 1));
            if ($newchar != $oldchar) {
                $oldchar = $newchar;
                $html .= "    <a name='".$newchar."'>\n";
            }
            $html .= $this->get_short_description_html($this->filtered_movies[(($this->mdb_page-1)*$this->mdb_npp)+$i]);
            $i++;
        }
        $html .=      $this->get_filter_footer_html();
        $html .= "  </div>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the short movie description to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_short_description_html($movieinfo) {
        $i = 0;
        $actors_string = "";
        # Get the Non-MDB Gets
        $non_mdb_gets = $this->array_to_get($this->non_moviedb_gets);
        $non_mdb_gets = ((strlen($non_mdb_gets) > 0) ? "&".$non_mdb_gets : "");
        # Trim the Description if needed
        if (strlen($movieinfo['DESCRIPTION']) > 500) {
            $movieinfo['DESCRIPTION'] = substr($movieinfo['DESCRIPTION'], 0, 400);
            $movieinfo['DESCRIPTION'] = substr($movieinfo['DESCRIPTION'], 0, strrpos($movieinfo['DESCRIPTION'], " "));
            $movieinfo['DESCRIPTION'] = trim($movieinfo['DESCRIPTION']).".. <a href='".$this->THISPAGE."?mdb_page=1&mdb_num=".$movieinfo['NUM']."mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets."'>Plus</a>";
        }
        # Fix the Rating
        if($movieinfo['RATING'] == "") { $movieinfo['RATING'] = "na"; }
        # Turn the actors list into links
        $actors = $this->get_actors($movieinfo['ACTORS'], 0);
        $i=0;
        foreach($actors as $actor => $role) {
            if ($i == 3) { break; }
            if ($i > 0) { $actors_string .= ", "; }
            $actors_string .= "<a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$actor.$non_mdb_gets."'>".$actor."</a>";
            $i++;
        }
        if (sizeof($actors) > 3) { $actors_string .= ", <a href='".$this->THISPAGE."?mdb_page=1&mdb_num=".$movieinfo['NUM']."mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets."'>...</a>"; }
        # Create the HTML
        $html  = "<div class='short_detail'>\n";
        $html .= "  <img class='cover' src='".$this->img_folder."/".$movieinfo['PICTURENAME']."' alt='".$movieinfo['ORIGINALTITLE']."' />\n";
        $html .= "  <div class='title'>\n";
        $html .= "    <a href='".$this->THISPAGE."?mdb_num=".$movieinfo['NUM']."&mdb_page=".$this->mdb_page."&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets."'>".$movieinfo['ORIGINALTITLE']."</a>\n";
        $html .= "  </div>\n";
        $html .= "  <div class='quickinfo'>\n";
        $html .= "    <div class='imdb'><a href='".$movieinfo['URL']."'><img src='".$this->res_folder."/".$movieinfo['RATING'].".jpg' border=0></a></div>\n";
        $html .= "    <div class='info'>\n";
        $html .= "      <span>Année:</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['YEAR'].$non_mdb_gets."'>".$movieinfo['YEAR']."</a>\n";
        $html .= "      <br /><span>Réalisateur:</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['DIRECTOR'].$non_mdb_gets."'>".$movieinfo['DIRECTOR']."</a>\n";
        $html .= "      <br /><span>Catégorie:</span> <a href='".$this->THISPAGE."?mdb_cat=".$movieinfo['CATEGORY']."&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order.$non_mdb_gets."'>".$movieinfo['CATEGORY']."</a>\n";
        $html .= "    </div>\n";
        $html .= "  </div>\n";
        $html .= "  <div class='short_description'>\n";
        $html .=      $movieinfo['DESCRIPTION'];
        $html .= "  </div>\n";
        $html .= "  <div class='stars'>\n";
        $html .= "    <span>Distribution:</span>\n";
        $html .=      $actors_string;
        $html .= "  </div>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the full description to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_full_detail_html($num) {
        $count = 0;
        $actors_string = "";
        # Get the Non-MDB Gets
        $non_mdb_gets = $this->array_to_get($this->non_moviedb_gets);
        $non_mdb_gets = ((strlen($non_mdb_gets) > 0) ? "&".$non_mdb_gets : "");
        $res = $this->db->query("SELECT * FROM `".$this->dbname."`.`".$this->tbname."` WHERE NUM='".$this->mdb_num."'");
        $movieinfo = $res->fetch_assoc();
        if($movieinfo['RATING'] == "") { $movieinfo['RATING'] = "na"; }
        $actors = $this->get_actors($movieinfo['ACTORS'], 0);
        foreach ($actors as $actor => $roll) {
            if ($count > 0) { $actors_string .= ", "; }
            $actors_string .= "<a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$actor.$non_mdb_gets."'>".$actor."</a>".$roll;
            $count++;
        }
        $html  = "<div id='mdb_full_detail'>\n";
        $html .= "  <a href='".$this->img_folder."/".$movieinfo['PICTURENAME']."'><img class='cover' src='".$this->img_folder."/".$movieinfo['PICTURENAME']."' alt='".$movieinfo['ORIGINALTITLE']."' /></a>\n";
        $html .= "  <div class='title'>".$movieinfo['ORIGINALTITLE']."</div>\n";
        $html .= "  <div class='quickinfo'>\n";
        $html .= "    <div class='imdb'><a href='".$movieinfo['URL']."'><img src='".$this->res_folder."/".$movieinfo['RATING'].".jpg' border=0></a></div>\n";
        $html .= "    <div class='info'>\n";
        $html .= "      <span>Année:</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['YEAR'].$non_mdb_gets."'>".$movieinfo['YEAR']."</a>\n";
        $html .= "      <br /><span>Pays:</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['COUNTRY'].$non_mdb_gets."'>".$movieinfo['COUNTRY']."</a>\n";
        $html .= "      <br /><span>Réalisateur:</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['DIRECTOR'].$non_mdb_gets."'>".$movieinfo['DIRECTOR']."</a>\n";
        $html .= "      <br /><span>Catégorie:</span> <a href='".$this->THISPAGE."?mdb_cat=".$movieinfo['CATEGORY']."&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order.$non_mdb_gets."'>".$movieinfo['CATEGORY']."</a>\n";
        $html .= "      <br /><span>Durée:</span> ".$movieinfo['LENGTH']." min\n";
        $html .= "    </div>\n";
        $html .= "  </div>\n";
        $html .= "  <div class='description'>\n";
        $html .= "    <span>Description:</span><br />\n";
        $html .=      $movieinfo['DESCRIPTION'];
        $html .= "  </div>\n";
        $html .= "  <div class='comments'>\n";
        $html .= "    <span>Commentaires:</span><br />\n";
        $html .=      $movieinfo['COMMENTS'];
        $html .= "  </div>\n";
        $html .= "  <div class='stars'>\n";
        $html .= "    <span>Distribution:</span>\n";
        $html .=      $actors_string;
        $html .= "  </div>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Returns a list containing the first $num actors on the roster. A $num of 0 will return
     * all actors.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_actors($actor_string, $num) {
        $rtnval = array();
        $actors = split(",", $actor_string);
        if ($num == 0) { $num = 10000; }
        $count = 0;
        while(($count < sizeof($actors)) && ($count < $num)) {
            $actor = trim($actors[$count]);
            $role = "";
            if (strpos($actor, "(") > 0) {
                $role = " ".trim(substr($actor, strpos($actor, "("), strrpos($actor, ")")));
                $actor = trim(substr($actor, 0, strpos($actor, "(")-1));
            }
            $rtnval[$actor] = $role;
            #array_push($rtnval, $actor);
            $count++;
        }
        return $rtnval;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the Filter Header to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_filter_header_html($footer=FALSE) {
        $divid = ($footer ? "mdb_filter_footer" : "mdb_filter_header");
        $showing_min = (($this->mdb_page-1) * $this->mdb_npp) + 1;
        $showing_max = (((($showing_min+$this->mdb_npp)-1) > $this->num_matches) ? $this->num_matches : ($showing_min+$this->mdb_npp)-1);
        $non_mdb_gets = $this->array_to_get($this->non_moviedb_gets);
        $non_mdb_gets = ((strlen($non_mdb_gets) > 0) ? "&".$non_mdb_gets : "");
        $prev_html = "";
        $next_html = "";
        if ($this->mdb_page > 1) {
            $prev_page = $this->mdb_page-1;
            $prev_link = $this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=".$prev_page."&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=".$this->mdb_order.$non_mdb_gets;
            $prev_html = "« <a href='".$prev_link."'>Prev</a> |";
        }
        if ($this->mdb_page < $this->num_pages) {
            $next_page = $this->mdb_page + 1;
            $next_link = $this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=".$next_page."&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=".$this->mdb_order.$non_mdb_gets;;
            $next_html = "| <a href='$next_link'>Suivant</a> »";
        }
        $html  = "<div id='".$divid."'>\n";
        $html .= "  <div class='pages'>".$prev_html." <span>Page:</span> ".$this->mdb_page." of ".$this->num_pages." ".$next_html."</div>\n";
        $html .= "  <div class='showing'><span>Montrer:</span> ".$showing_min."-".$showing_max." of ".$this->num_matches."</div>\n";
        if (!$footer) { 
            $html .= "  <div class='sort'>\n";
            $html .= "    <span>Trier par:</span>\n";
            $html .= "    <a href='".$this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=ORIGINALTITLE".$non_mdb_gets."'>Titre</a> |\n";
            $html .= "    <a href='".$this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=YEAR".$non_mdb_gets."'>Année</a> | \n";
            $html .= "    <a href='".$this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=RATING".$non_mdb_gets."'>Note</a> | \n";
            $html .= "    <a href='".$this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_num=&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_search=".$this->mdb_search."&mdb_order=DATEADD".$non_mdb_gets."'>Récents</a>\n";
            $html .= "  </div>\n";
        }
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the Filter Header to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_filter_footer_html() {
        return $this->get_filter_header_html(TRUE);
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the category selector to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_categories_html() {
        $selected = (($this->mdb_cat == "") ? " selected" : "");
        $non_mdb_gets = $this->array_to_get($this->non_moviedb_gets);
        $non_mdb_gets = ((strlen($non_mdb_gets) > 0) ? "&".$non_mdb_gets : "");
        $cat_link = $this->THISPAGE."?mdb_num=".$this->mdb_num."&mdb_page=".$this->mdb_page."&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets;
        $html  = "<div id='mdb_categories' class='mdb_menu'>\n";
        $html .= "  <h4>Catégories</h4>\n";
        $html .= "  <table class='cat_list' cellpadding='0' cellspacing='0'>\n";
        $html .= "    <tr>\n";
        $html .= "      <td class='cat_title".$selected."'><a href='".$cat_link."'>Toutes Catégories</a></td>\n";
        $html .= "      <td class='cat_num".$selected."'>".$this->num_movies."</td>\n";
        $html .= "    </tr>\n";
        foreach($this->categories as $mycat => $mynum) {
            $selected = (($this->mdb_cat == $mycat) ? " selected" : "");
            $cat_link = $this->THISPAGE."?mdb_cat=".$mycat."&mdb_num=".$this->mdb_num."&mdb_page=".$this->mdb_page."&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets;
            $html .= "    <tr>\n";
            $html .= "      <td class='cat_title".$selected."'><a href='".$cat_link."'>".$mycat."</a></td>\n";
            $html .= "      <td class='cat_num".$selected."'>".$mynum."</td>\n";
            $html .= "    </tr>\n";
        }
        $html .= "  </table>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the Search Box to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_search_html() {
        $html  = "<div id='mdb_search' class='mdb_menu'>\n";
        $html .= "  <h4>Recherche</h4>\n";
        $html .= "  <form method='get' action='".$this->THISPAGE."'>\n";
        $html .= "    <input type='hidden' name='mdb_cat'  value='".$this->mdb_cat."' />\n";
        $html .= "    <input type='hidden' name='mdb_page' value='1' />\n";
        $html .= "    <input type='hidden' name='mdb_npp' value='".$this->mdb_npp."' />\n";
        $html .= "    <input type='hidden' name='mdb_order' value='".$this->mdb_order."' />\n";
        $html .= "    <input type='input' name='mdb_search' value='".$this->mdb_search."' />\n";
        $html .=      $this->array_to_post($this->non_moviedb_gets);
        $html .= "  </form>\n";
        $html .= "</div>\n";
        return $html;
    }


    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the Alphabet Box to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_alphabet_html() {
        $modval = 8;
        $non_mdb_gets = $this->array_to_get($this->non_moviedb_gets);
        $non_mdb_gets = ((strlen($non_mdb_gets) > 0) ? "&".$non_mdb_gets : "");
        $char_link = $this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=ORIGINALTITLE&mdb_search=".$this->mdb_search.$non_mdb_gets;
        $html  = "<div id='mdb_alphabet' class='mdb_menu'>\n";
        $html .= "  <h4>Aller à</h4>\n";
        $html .= "  <table class='char_list' cellpadding='0' cellspacing='0'><tr>\n";
        $html .= "    <td><a href='".$char_link."'>#</a></td>\n";
        $charnum = 1;
        while ($charnum <= 26) {
            $char = chr($charnum+96);
            $alphapage = $this->get_char_page($char);
            $char_link = $this->THISPAGE."?mdb_cat=".$this->mdb_cat."&mdb_page=".$alphapage."&mdb_npp=".$this->mdb_npp."&mdb_order=ORIGINALTITLE&mdb_search=".$this->mdb_search.$non_mdb_gets."#".$char;
            $html .= "    <td><A href='".$char_link."'>$char</A></td>\n";
            $charnum++;
            if($charnum % $modval == 0) { $html .= "  </tr><tr>\n"; }
        }
        while($charnum % $modval != 0) { $html .= "    <td> </td>\n"; $charnum++; }
        $html .= "  </tr></table>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Returns the Page Number that the Character Starts ats
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_char_page($char) {
        $alphapage = 0;
        $i = 0;
        while(($alphapage == 0) && ($i < sizeof($this->filtered_movies))) {
            if (strtolower(substr($this->filtered_movies[$i]['ORIGINALTITLE'], 0, 1)) >= $char) {
                $alphapage = ceil(($i+1) / $this->mdb_npp);
            }
            $i++;
        }
        return $alphapage;
    }

    /** -------------------------------------------------------------------------------------------
     * Populates the two variables $categories and $misc_categories to be used when displaying
     * the category options.  Array structure is array(name => number) of all categories. If
     * there is less movies than displayed in $this->min_cat_num, the movies will be filed to
     * category other.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function fetch_categories() {
        $this->categories = array();
        $this->misc_categories = array();
        $this->num_movies = 0;
        $misc_count = 0;
        $res = $this->db->query("SELECT category,count(*) FROM `".$this->dbname."`.`".$this->tbname."` GROUP BY category");
        while ($row = $res->fetch_assoc()) {
            if (($row['count(*)'] >= $this->min_cat_num) && (trim($row['category']) != "")) {
                $this->categories[$row['category']] = $row['count(*)'];
            } else {
                $misc_count += $row['count(*)'];
                array_push($this->misc_categories, $row['category']);
            }
            $this->num_movies += $row['count(*)'];
        }
        if ($misc_count > 0) {
            $this->categories['Other'] = $misc_count;
        }
    }

    /** -------------------------------------------------------------------------------------------
     * Returns array of an array of movie information based on the selections made for $mdb_cat, 
     * $mdb_page, $mdb_npp, $mdb_search.  It's a nasty function, I know. :(
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function fetch_filtered_movies() {
        $this->filtered_movies = array();
        $query = "SELECT * from `".$this->dbname."`.`".$this->tbname."`";
        if (($this->mdb_cat != "") || ($this->mdb_search != ""))   { $query .= " WHERE"; }
        if (($this->mdb_cat != "") && ($this->mdb_cat != "Other")) { $query .= " CATEGORY = '".$this->mdb_cat."'"; }
        if ($this->mdb_cat == "Other") {
            $i=0;
            while ($i < sizeof($this->misc_categories)) {
                if ($i==0) { $query .= " (CATEGORY = '".$this->misc_categories[$i]."'"; }
                else { $query .= " OR CATEGORY = '".$this->misc_categories[$i]."'"; }
                $i++;
            }
            $query .= ")";
        }
        if ($this->mdb_search != "") {
            if ($this->mdb_cat != "") { $query .= " AND"; }
            $query .= " (MEDIA LIKE '%".$this->mdb_search."%'";
            $query .= " OR MEDIATYPE LIKE '%".$this->mdb_search."%'";
            $query .= " OR SOURCE LIKE '%".$this->mdb_search."%'";
            $query .= " OR ORIGINALTITLE LIKE '%".$this->mdb_search."%'";
            $query .= " OR TRANSLATEDTITLE LIKE '%".$this->mdb_search."%'";
            $query .= " OR DIRECTOR LIKE '%".$this->mdb_search."%'";
            $query .= " OR PRODUCER LIKE '%".$this->mdb_search."%'";
            $query .= " OR COUNTRY LIKE '%".$this->mdb_search."%'";
            $query .= " OR CATEGORY LIKE '%".$this->mdb_search."%'";
            $query .= " OR YEAR LIKE '%".$this->mdb_search."%'";
            $query .= " OR ACTORS LIKE '%".$this->mdb_search."%'";
            $query .= " OR DESCRIPTION LIKE '%".$this->mdb_search."%'";
            $query .= " OR COMMENTS LIKE '%".$this->mdb_search."%'";
            $query .= " OR VIDEOFORMAT LIKE '%".$this->mdb_search."%'";
            $query .= " OR VIDEOBITRATE LIKE '%".$this->mdb_search."%'";
            $query .= " OR AUDIOFORMAT LIKE '%".$this->mdb_search."%'";
            $query .= " OR AUDIOBITRATE LIKE '%".$this->mdb_search."%'";
            $query .= " OR RESOLUTION LIKE '%".$this->mdb_search."%'";
            $query .= " OR FRAMERATE LIKE '%".$this->mdb_search."%'";
            $query .= " OR LANGUAGES LIKE '%".$this->mdb_search."%')";
        }
        $query .= " ORDER BY ".$this->mdb_order." ";
        if (($this->mdb_order == "YEAR") || ($this->mdb_order == "RATING")) { $query .= " DESC"; }
        $res = $this->db->query($query);
        while($row = $res->fetch_assoc()) {
            array_push($this->filtered_movies, $row);
        }
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the movie database HEADER to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_header_html() {
        $html  = "<div id='mdb_header'>\n";
        $html .= "  <h3><span>".$this->moviedb_title."</span></h3>\n";
        $html .= "</div>\n";
        return $html;
    }

    /** -------------------------------------------------------------------------------------------
     * Return the HTML to print the movie database FOOTER to the screen.
     * @access private
     * ------------------------------------------------------------------------------------------*/
    function get_footer_html() {
        $html  = "<div id='moviedb_footer'>\n";
        $html .= "  <div class='copyright'>PK's Movie Database - © 2006 <a href='http://pk-designs.com'>PK-Designs.com</a>.</div>\n";
        $html .= "</div>\n";
        return $html;
    }

}
[/code]
mjs7231
Posts: 60
Joined: 2005-07-27 23:17:15

Post by mjs7231 »

There are actually not too many words that would need to be taken out to make a language file, making it much easier to translate. I will look into this in the next few days. :)

I am glad you like the template.

---------
EDIT: VERSION 2.2 is now release. This includes a seperated language file as mentioned above! See the top post for changelog and downloading.

* If you create a language file, please post it here so it can be included in any future releases. Thanks.
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

I have an error with version 2.2 :

Code: Select all

Warning: post_setup_envirnment(/home/.sites/56/site60/web/~xbirdtrip/liste2/resource/language/lang-french.inc): failed to open stream: No such file or directory in /home/.sites/56/site60/.users/44/xbirdtrip/web/liste2/moviedb.inc on line 134

Fatal error: post_setup_envirnment(): Failed opening required '/home/.sites/56/site60/web/~xbirdtrip/liste2/resource/language/lang-french.inc' (include_path='.:/usr/local/lib/php') in /home/.sites/56/site60/.users/44/xbirdtrip/web/liste2/moviedb.inc on line 134
mjs7231
Posts: 60
Joined: 2005-07-27 23:17:15

Post by mjs7231 »

perhaps I need to still allow the option to specify where the resource directory is. Is your main file in the same direcotry as moviedb and the resource dir?

---
EDIT: I think I found a work around.. before I put this in and release a new version, try this:

CHANGE LINE 134 TO:

require_once(realpath(dirname(__FILE__)."/resource/language/".$this->lang_file));
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

mjs7231 wrote:EDIT: I think I found a work around.. before I put this in and release a new version, try this:

CHANGE LINE 134 TO:

require_once(realpath(dirname(__FILE__)."/resource/language/".$this->lang_file));
It's ok :grinking:
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

I make a little modification in "moviedb.inc"

Line 443 :

Code: Select all

$html .= "      <td class='cat_title".$selected."'><a href='".$cat_link."'>".$this->lang['All_Categories']."</a></td>\n";
Line 285 :

Code: Select all

$html .= "    <a href='".$this->THISPAGE."?mdb_num=".$movieinfo['NUM']."&mdb_page=".$this->mdb_page."&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$this->mdb_search.$non_mdb_gets."'>".$movieinfo['TRANSLATEDTITLE']."</a>\n";
Line 327 :

Code: Select all

$html .= "  <div class='title'>".$movieinfo['TRANSLATEDTITLE']." (".$movieinfo['ORIGINALTITLE'].")</div>\n";
And between lines 335 and 336 i add :

Code: Select all

		  $html .= "    <br>\n";
        $html .= "      <br /><span>".$this->lang['dateadd'].":</span> ".$movieinfo['DATEADD']." \n";
        $html .= "      <br /><span>".$this->lang['source'].":</span> ".$movieinfo['SOURCE']." \n";
        $html .= "    <br>\n";
        $html .= "      <br /><span>".$this->lang['label'].":</span> ".$movieinfo['MEDIA']." \n";
For "lang-french.inc" :

Code: Select all

<?
/** ===============================================================================================
 * FRENCH Language file for MovieDB by PK-Designs.com
 * @author: M. Shepanski
 *=============================================================================================== */
$this->lang['categories']     = "Catégories";
$this->lang['category']       = "Catégorie";
$this->lang['comments']       = "Commentaires";
$this->lang['country']        = "Pays";
$this->lang['description']    = "Description";
$this->lang['director']       = "Réalisateur";
$this->lang['jump_to']        = "Aller à";
$this->lang['length']         = "Durée";
$this->lang['more']           = "plus";
$this->lang['most_recent']    = "Récents";
$this->lang['next']           = "Suivant";
$this->lang['of']             = "de";
$this->lang['page']           = "Page";
$this->lang['previous']       = "Précédent";
$this->lang['rating']         = "Note";
$this->lang['search']         = "Recherche";
$this->lang['showing']        = "Montrer";
$this->lang['sort_by']        = "Trier par";
$this->lang['starring']       = "Distribution";
$this->lang['title']          = "Titre";
$this->lang['year']           = "Année";

$this->lang['All_Categories']           = "Tout";

$this->lang['dateadd']           = "Date d'ajout";
$this->lang['source']           = "Source";
$this->lang['label']           = "Position";
And for "lang-english.inc" :

Code: Select all

<?
/** ===============================================================================================
 * ENGLISH Language file for MovieDB by PK-Designs.com
 * @author: M. Shepanski
 *=============================================================================================== */
$this->lang['categories']     = "Categories";
$this->lang['category']       = "Category";
$this->lang['comments']       = "Comments";
$this->lang['country']        = "Country";
$this->lang['description']    = "Description";
$this->lang['director']       = "Director";
$this->lang['jump_to']        = "Jump To";
$this->lang['length']         = "Length";
$this->lang['more']           = "more";
$this->lang['most_recent']    = "Most Recent";
$this->lang['next']           = "Next";
$this->lang['of']             = "of";
$this->lang['page']           = "Page";
$this->lang['previous']       = "Prev";
$this->lang['rating']         = "Rating";
$this->lang['search']         = "Search";
$this->lang['showing']        = "Showing";
$this->lang['sort_by']        = "Sort By";
$this->lang['starring']       = "Starring";
$this->lang['title']          = "Title";
$this->lang['year']           = "Year";

$this->lang['All_Categories']           = "All Categories";

$this->lang['dateadd']           = "Add's Date";
$this->lang['source']           = "Source";
$this->lang['label']           = "Label";
mjs7231
Posts: 60
Joined: 2005-07-27 23:17:15

Post by mjs7231 »

Awesome, xbirdtrip,

I will put these into the release for version 2.3. Sorry, you unofficially became the beta tester. :)

Thanks alot for the help, I really appreciate it.
MCVampire
Posts: 30
Joined: 2006-04-05 02:26:01

Post by MCVampire »

Awesome !!! I finally found it ! :grinking: It's the best template since "divxtheque" I have ever seen.

Maybe 3 suggestions:

1- Empty the "search box" after a result. We must to clear the search box each time after. :/

2- Add a Administration (control) panel where we can choose what display or not. Ex: I want to remove IMBd rating and Comments and add some field like Audio/Video Format, Size of file, etc. To resume ... a panel to manage all fields dislplayed in "movie full page".

3- Add a "back" button somewhere (maybe at the bottom?) to return to the previous page (or home) when we are in "movie full page".

Very Good Work !! :D :grinking:

PS: Sorry for my bad english
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

A little modification for "lang-french.inc"

Replace :

Code: Select all

$this->lang['most_recent']    = "Récents";
By :

Code: Select all

$this->lang['most_recent']    = "Date d'insertion";
It's a better translation in my opinion :)
MCVampire
Posts: 30
Joined: 2006-04-05 02:26:01

Post by MCVampire »

I think "Date d'ajout" are better ;)
xbirdtrip
Posts: 38
Joined: 2003-05-01 19:00:04
Contact:

Post by xbirdtrip »

How personalized the page full_detail ? i want open it in a popup and to obtain a page like this one (i realize that with Template PHP v3.20):

Image[/code]
antp
Site Admin
Posts: 9629
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Funny, it's the movie that I am watching right now :lol:
kazgor
Posts: 175
Joined: 2006-05-08 13:13:52
Contact:

Post by kazgor »

First i have to say this Template is excellent, just what i've been after for ages. Hopefully you will continue to support and update this (please).

For now im testing this out with some free PHP sites (awardspace) and got a similar error to Xbird.. unfortuantley the fix does not work because `realpath` was disabled.

However i was able to make a tweak and workout the resources folder in the sameway you worked out where the Images folder is.. ie

changed in function post_setup_envirnment()

Code: Select all

require_once($this->UNIXPATH."/resource/language/".$this->lang_file);

to be

if (!isset($this->res_folder))      { $this->res_folder = $this->HTTPPATH."/resource/language/"; }
require_once($this->res_folder.$this->lang_file);
In Moviedb added

Code: Select all

var $res_folder;		    // Resources folder
finally added

Code: Select all

function set_res_folder($http_path)         { $this->res_folder = $http_path; }

`Most Recent` does not sort most recent first should be sorted descending rather than ascending (well thats how i like it anyway)

function fetch_filtered_movies()

Code: Select all

if (($this->mdb_order == "YEAR") || ($this->mdb_order == "RATING")) { $query .= " DESC"; }

to

if (($this->mdb_order == "YEAR") || ($this->mdb_order == "RATING") || ($this->mdb_order == "DATEADD")) { $query .= " DESC"; }

Lastly i wanted by default to Sort by Most Recent when they first visit the page.. so changed this line.

function fetch_get_vars()

Code: Select all

$this->mdb_order    = (isset($_GET['mdb_order']) ? $_GET['mdb_order'] : "ORIGINALTITLE");

to

$this->mdb_order    = (isset($_GET['mdb_order']) ? $_GET['mdb_order'] : "DATEADD");

Few things i'd like to see though (may attempt it myself)

add quick jump to pages rather than having to use NEXT several times.. also add a [First] .... [Last]

Clear Search results.

should do for now ;)
mjs7231
Posts: 60
Joined: 2005-07-27 23:17:15

Post by mjs7231 »

kazgor, I like all your ideas.. :)
The way you worked out the $res_folder is actually the exact way it was done in the first release. I thought I could simplify the setup a bit.. lets see if simply removing the realpath() function fixes it. If not, then I suppose its best to resort back to this old way, which non-PHP programmers are sure to make mistakes.

MCVampire, I am taking to two simple ideas right now. Sadly, the admin panel will not happen because the settings are not stored in a DB. However, I will definetly think about other ways someone can more easily display or hide information on the Movie page. Right now I am thinking a of a set_view($field, $boolean) function which you can call from the wrapper script.

Fixes so far:
+ Sort by 'Most Recent' was backwards, this is fixed.
+ the realpath() function call is not actually needed, I removed it.

TODO: Add clear button in the next version, or just manually clear it.
TODO: Add Back Button on Movie page.
TODO: Add Page Selection to the bottom navigation.
TODO: Add more detail to the Movie Page.
TODO: Default Sort by 'Most Recent'.
TODO: Think about the best method for someone to display or hide information on the Movie page.
TODO: Add a list view? (still deciding)
TODO: Rename 'Search' to 'Filter'? It more clearly respresents the function it provides..

I should have another release by this weekend (May14).
kazgor
Posts: 175
Joined: 2006-05-08 13:13:52
Contact:

Post by kazgor »

Hi MJS,

Strangley my changes to work out the RES_FOLDER works fine when uploading to AWARDSPACE but when i try and use it on my Windows PHP setup i get errors in finding the LANG variables.. so have to swith to using the original method ie with UNIXPATH..

I like the changes you have planned, I've added the DATE ADDED field to appear under the YEAR detail has i like to know when i added the film to my archive and so other people can see when i got new films in.

1: Number of Movies per page: 5 | 10 | 15 | 20 | ALL
2: Date Added
3: Filter movies: This Month, Last Month, 3 Months (based on Date Added, sorted most recent first) :)

look forward to the next update.. cheers :)


** edit **

when filtering by YEAR, RATING, Most RECENT i then wanted an additional sorting within the return results so it didnt just look random.

So settled on being in film title order.. so eg, lots of films in 2006, then
they will be alphatised by title.

Code: Select all

        if (($this->mdb_order == "YEAR") || ($this->mdb_order == "RATING") || ($this->mdb_order == "DATEADD")) { $query .= "DESC , ORIGINALTITLE"; } 
kazgor
Posts: 175
Joined: 2006-05-08 13:13:52
Contact:

Post by kazgor »

Couple more suggestions pls :) hope you dont mind me asking.. just love this script!

I could decide if i was going to have two sites up, one for my DVD and one for just my XVid films.. but i think it better to have just the one site, so i'd still like to be able to tell which type a film is.. so thinking of the following if possible.

1. Based on Media type.. show the DVD logo if its dvd or a XVID logo for Xvid.. maybe even a CAM for well (shhhss.. TS films..)
2. have a NAV bar (like categories) so we can filter on ALL | DVD | XVID | CAMS

It will surely make your script mega useful... so much so i may even get paid hosting to run this script properly.. once i out grow the free php sites.

cheers matey...
Sat_Wolf
Posts: 5
Joined: 2006-05-13 15:53:21

Post by Sat_Wolf »

It´s a great Template!!! Is it possible to seperate the categorie? In my database i have the categories in following format. (Action/Thriller/...) and i will seperate this to two or more Categories (Action and Thriller).
kazgor
Posts: 175
Joined: 2006-05-08 13:13:52
Contact:

Post by kazgor »

not a biggy but noticed a couple of tags were overlapping when being closed.

Name, the <A name=" tag and the Director tag link output the name twice.


in function get_default_html() - Close the A NAME tag

Code: Select all

before
            if ($newchar != $oldchar) {
                $oldchar = $newchar;
                $html .= "    <a name='".$newchar."'>\n";
            }

after

            if ($newchar != $oldchar) {
                $oldchar = $newchar;
                $html .= "    <a name='".$newchar."'></a>\n";
            }
function get_short_description_html - Fix Director name coming out twice

Code: Select all

Before

  $html .= "      <br /><span>".$this->lang['director'].":</span> <a href='".$this->THISPAGE."?mdb_page=1&mdb_npp=".$this->mdb_npp."&mdb_order=".$this->mdb_order."&mdb_search=".$movieinfo['DIRECTOR'].$non_mdb_gets."'>".$directors_string."</a>\n";

after

  $html .= "      <br /><span>".$this->lang['director'].": </span>\n".$directors_string."\n";
If you check the original source you'll notice the director info is repeated.


Kaz.
kazgor
Posts: 175
Joined: 2006-05-08 13:13:52
Contact:

Post by kazgor »

hmm.. was able to create a Movies Format menu that uses same logic as the categories.. ie uses Mediatype instead and can get it to filter on DVD or XVID.

BUT

if i filter films to show only XVIDS, that works fine, but now if choose a film category eg Action.. i get a SQL error, this is because there are no ACTION films found from the list of Xvid films its brought back

Don't know enough about PHP to fix this :( (yet!)

Hope you dont mind me play.. although rather have your official version if you're still developing the script. :)
Post Reply