Showing stats on click page

Forum
Last Post
Threads / Messages

Hwona

Member
Member
Joined
Mar 1, 2013
Messages
620
Points
0
Mysidian Dollar
31,589
Hello! Sorry for yet another nuisance, but I've been trying to find a way to display an adoptable's stats on its levelup page after someone has viewed it more than once. I was thinking about having the stats displayed on the second view and adding a link after the first click, but I can't seem to get anything to work. I'm currently using version 1.3.3. Would anyone mind helping me?
PHP:
<?php

class LevelupController extends AppController{

    const PARAM = "aid";
    private $view;
	private $subController;
	private $adopt;

    public function __construct(){
        parent::__construct();
		$mysidia = Registry::get("mysidia");
		if($mysidia->input->action() == "click" or $mysidia->input->action() == "siggy") $this->adopt = new OwnedAdoptable($mysidia->input->get("aid"));
		if($mysidia->user instanceof Member){
		    $status = $mysidia->user->getstatus();   
			if($status->canlevel == "no") throw new InvalidActionException($mysidia->lang->banned);
		}	
    }
	
	public function index(){
	    $mysidia = Registry::get("mysidia");
		throw new InvalidActionException($mysidia->lang->global_action);
	}
	
	public function click(){
	    $mysidia = Registry::get("mysidia");
		$document = $mysidia->frame->getDocument();		
		$date = new DateTime;
		$ip = secure($_SERVER['REMOTE_ADDR']);
		$gender = $mysidia -> db -> select ("owned_adoptables", array("gender"), "aid='{$adopt->aid}'") -> fetchColumn();
		$adoptablename = $mysidia -> db -> select ("owned_adoptables", array("name"), "aid='{$adopt->aid}'") -> fetchColumn();
		$species = $mysidia -> db -> select ("owned_adoptables", array("type"), "aid='{$adopt->aid}'") -> fetchColumn();
		$totalclicks = $mysidia -> db -> select ("owned_adoptables", array("name"), "aid='{$adopt->aid}'") -> fetchColumn();
		$tradestatus = $mysidia -> db -> select ("owned_adoptables", array("tradestatus"), "aid='{$adopt->aid}'") -> fetchColumn();
		
		
	
	
        if($this->adopt->hasVoter($mysidia->user, $date)){
	        // The user has leveled up this adoptable today, show error message
	        $message = 'Name:' . $adoptablename . 'Species:' . $species . 'Gender:' . $gender . 'Total Clicks:' . $totalclicks . 'Trade Status:' . $tradestatus;
		    $message = ($mysidia->user instanceof Member)?$mysidia->lang->already_leveled_member:$mysidia->lang->already_leveled_guest;
		    $document->setTitle($mysidia->lang->already_leveled_title);
	        $document->addLangvar($message);
	    }
		elseif($this->adopt->isFrozen() == "yes"){
		    $document->setTitle($mysidia->lang->frozen_title);
	        $document->addLangvar($mysidia->lang->frozen);
		}
		else{
		    $newClicks = $this->adopt->getTotalClicks() + 1;
			$this->adopt->setTotalClicks($newClicks, "update");
	        $mysidia->db->insert("vote_voters", array("void" => NULL, "date" => $date->format('Y-m-d'), "username" => $mysidia->user->username, "ip" => $ip, "adoptableid" => $mysidia->input->get("aid")));		 
			
			if($this->adopt->hasNextLevel()){
                // A higher level does exist, so we see if it is time to level up
	            $nextLevel = $this->adopt->getNextLevel();
				$requiredClicks = $nextLevel->getRequiredClicks();
	            if($requiredClicks and $newClicks >= $requiredClicks) $this->adopt->setCurrentLevel($nextLevel->getLevel(), "update");
	        }
			
			$document->setTitle("{$mysidia->lang->gave} {$this->adopt->getName()} one {$mysidia->lang->unit}");
			$reward = $mysidia->user->clickreward($mysidia->settings->rewardmoney);
		    $mysidia->user->changecash($reward);			
	        $image = $this->adopt->getImage("gui");        
			$image->setLineBreak(TRUE);	
			
		    $summary = new Division;
			$summary->setAlign(new Align("center"));
            $summary->add($image);	
            $summary->add(new Comment("{$mysidia->lang->gave}{$this->adopt->getName()} one {$mysidia->lang->unit}."));
            $summary->add(new Comment($mysidia->lang->encourage));
            $summary->add(new Comment("<br>"));
            $summary->add(new Comment(" You have earned {$reward} {$mysidia->settings->cost} for leveling up this adoptable. "));
            $summary->add(new Comment("You now have {$mysidia->user->getcash()} {$mysidia->settings->cost}"));
            $document->add($summary);			
		}
	}

	public function siggy(){
	    $mysidia = Registry::get("mysidia");
        // The adoptable is available, let's collect its info
	    $usingimage = "no";
	    $image = $this->adopt->getImage(); 
	  
	    $usegd = $mysidia->settings->gdimages;
	    $imageinfo = @getimagesize($image);
	    $imagemime = $imageinfo["mime"]; // Mime type of the image file, should be a .gif file...

	    if(function_exists('imagegif') and $usegd == "yes" and $imagemime == "image/gif"){
	        $usingimage = "yes"; //Turn the template system off
            $type = $this->adopt->getType();
            list($width, $height, $type, $attr) = getimagesize($image); // The size of the original adoptable image

	        // Lets create the new target image, with a size big enough for the text for the adoptable
	        $newheight = $height + 72;
            $newwidth = ($newwidth < 250)?250:$width;
            $img_temp = imagecreatetruecolor($newwidth, $newheight); 
            $alphablending = true;  
		 
    	    // Lets create the image and save its transparency  
            $img_old = @imagecreatefromgif($image);  
            imagealphablending($img_old, true);  
            imagesavealpha($img_old, true);
   
            // Lets copy the old image into the new image with  
            ImageCopyResampled($img_temp, $img_old, 0, 0, 0, 0, $width, $height, $width, $height);    
	        $textheight = $width + 2;
	        $image = $img_temp;
            $bgi = imagecreatetruecolor($newwidth, $newheight);
            $color = imagecolorallocate($bgi, 51, 51, 51);
		 
		    // Build text for siggy
            $str1 = "Name: ".$this->adopt->getName();
            $str2 = "Owner: ".$this->adopt->getOwner();
	        $str3 = "Click Here to Feed Me!";
	        $str4 = "More Adopts at:";
	        $str5 = "www.".constant("DOMAIN");

            // Renger Image
	        imagestring ($image, 12, 0, $textheight,  $str1, $color);
	        imagestring ($image, 12, 0, $textheight + 13,  $str2, $color);
	        imagestring ($image, 12, 0, $textheight + 26,  $str3, $color);
	        imagestring ($image, 12, 0, $textheight + 42,  $str4, $color);
	        imagestring ($image, 12, 0, $textheight + 55,  $str5, $color);
	        $background = imagecolorallocate($image, 0, 0, 0);  
            ImageColorTransparent($image, $background);  
 
            // At the very last, let's clean up temporary files
	        header("Content-Type: image/GIF");
	        ImageGif ($image);
	        imagedestroy($image);
	        imagedestroy($img_temp);
	        imagedestroy($img_old);
	        imagedestroy($bgi);

	    }
	    else{  	
	            // We are going to try and get this image the old fashioned way...
            $extList = array();
	        $extList['gif'] = 'image/gif';
	        $extList['jpg'] = 'image/jpeg';
	        $extList['jpeg'] = 'image/jpeg';
	        $extList['png'] = 'image/png';

	        //Define the output file type
	        $contentType = 'Content-type: '.$extList[ $imageinfo['extension'] ];

	        if($imageinfo['extension'] =! "image/gif" and $imageinfo['extension'] =! "image/jpeg" and $imageinfo['extension'] =! "image/png"){	         
	            throw new InvalidIDException("The file Extension is not allowed!");
	        }
	        else{
                // File type is allowed, so proceed
	            $status = "";
	            header($contentType);
                $curl = new Curl($image);
				$curl->setHeader();
				$curl->exec();
				$curl->close();
	        } 
	    }
	}
	
	public function daycare(){
		$mysidia = Registry::get("mysidia");
		$document = $mysidia->frame->getDocument();
        $document->setTitle($mysidia->lang->daycare_title);
        $document->addLangvar($mysidia->lang->daycare, TRUE);
		
		try{
		    $daycare = new Daycare;
			$adopts = $daycare->getAdopts();
		}
		catch(DaycareException $dae){
		    $message = $dae->getmessage();
		    $document->addLangvar($mysidia->lang->{$message});
			return;
		}
		
		$daycareTable = new Table("daycare", "", FALSE);
		$daycareTable->setBordered(FALSE);
		$total = $daycare->getTotalAdopts();
        $index = 0;

		for($row = 0; $row < $daycare->getTotalRows(); $row++){
	        $daycareRow = new TRow("row{$row}");
            for($column = 0; $column < $daycare->getTotalColumns(); $column++){
			    $adopt = new OwnedAdoptable($adopts[$index]);
				$image = new Link("levelup/click/{$adopt->getAdoptID()}", $adopt->getImage("gui"), TRUE);
				$stats = new Comment($daycare->getStats($adopt));
				$daycareCell = new TCell(new ArrayObject(array($image, $stats)), "cell{$index}");
                $daycareCell->setAlign(new Align("center", "center"));
				$daycareRow->add($daycareCell);
				$index++;
				if($index == $total) break;
            }
            $daycareTable->add($daycareRow);			
		}
		
        $document->add($daycareTable);
		if($pagination = $daycare->getPagination()) $document->addLangvar($pagination->showPage());
	}
}

?>
All edits have been to the click function section of the script, but I don't think I'm getting or displaying the data correctly? I added a few extra variables and then a message to display them right under "the user has already leveled this adoptable today...".
Thank you so much!
 
Last edited:
PHP:
if($this->adopt->hasVoter($mysidia->user, $date)){
            // The user has leveled up this adoptable today, show error message
            $message = 'Name:' . $adoptablename . 'Species:' . $species . 'Gender:' . $gender . 'Total Clicks:' . $totalclicks . 'Trade Status:' . $tradestatus;
            $message = ($mysidia->user instanceof Member)?$mysidia->lang->already_leveled_member:$mysidia->lang->already_leveled_guest;
            $document->setTitle($mysidia->lang->already_leveled_title);
            $document->addLangvar($message);
        }

Saying message equals something and then message equals something else overwrites the previous value of message. Basically you are saying message = 1; and then message = 2;
I don't quite remember the appending operator, but you can do this:

$message = "Name: {$adoptablename}<br>
Species: {$species}<br>
Gender: {$gender}<br>
Total Clicks: {$totalclicks}<br>
Trade Status: {$tradestatus}<br>";
$message = $message .= (($mysidia->user instanceof Member)?$mysidia->lang->already_leveled_member:$mysidia->lang->already_leveled_guest);

PHP:
        $gender = $mysidia -> db -> select ("owned_adoptables", array("gender"), "aid='{$adopt->aid}'") -> fetchColumn();
        $adoptablename = $mysidia -> db -> select ("owned_adoptables", array("name"), "aid='{$adopt->aid}'") -> fetchColumn();
        $species = $mysidia -> db -> select ("owned_adoptables", array("type"), "aid='{$adopt->aid}'") -> fetchColumn();
        $totalclicks = $mysidia -> db -> select ("owned_adoptables", array("name"), "aid='{$adopt->aid}'") -> fetchColumn();
        $tradestatus = $mysidia -> db -> select ("owned_adoptables", array("tradestatus"), "aid='{$adopt->aid}'") -> fetchColumn();

Also you don't need to do so many database queries. You already have the adoptable as a private variable, it's an object that has all the information you need about it, go to class_ownedadoptable.php to check which functions you can use to get the values. That way you only do one database access, and not 5 or 6. For example to get the gender $this->adopt->getGender() and the tradestatus $this->adopt->getTradeStatus();
 
Re

Thank you so much! It worked! Err, I tried to do the same thing for the situation with a frozen adoptable and then link the click page to itself to refresh, but nothing is appearing.

PHP:
<?php

class LevelupController extends AppController{

    const PARAM = "aid";
    private $view;
	private $subController;
	private $adopt;

    public function __construct(){
        parent::__construct();
		$mysidia = Registry::get("mysidia");
		if($mysidia->input->action() == "click" or $mysidia->input->action() == "siggy") $this->adopt = new OwnedAdoptable($mysidia->input->get("aid"));
		if($mysidia->user instanceof Member){
		    $status = $mysidia->user->getstatus();   
			if($status->canlevel == "no") throw new InvalidActionException($mysidia->lang->banned);
		}	
    }
	
	public function index(){
	    $mysidia = Registry::get("mysidia");
		throw new InvalidActionException($mysidia->lang->global_action);
	}
	
	public function click(){
	    $mysidia = Registry::get("mysidia");
		$document = $mysidia->frame->getDocument();		
		$date = new DateTime;
		$ip = secure($_SERVER['REMOTE_ADDR']);
		$gender = $this->adopt->getGender($fetchMode = "");
		$owner = $this->adopt->getOwner();
		$adoptablename = $this->adopt->getName();
		$totalclicks = $this->adopt->getTotalClicks();
		$tradestatus = $this->adopt->getTradeStatus();
		$currentlevel = $this->adopt->getCurrentLevel(); 
		$nextlevel = $this->adopt->hasNextLevel();
		$type = $this->adopt->getType();
		$image = $this->adopt->getImage($fetchMode = "");
		$offspring = $this->adopt->getOffsprings();
		$lastbred = $this->adopt->getLastBred($fetchMode = "");
		$levelupclicks = $this->adopt->getLevelupClicks();
		
		
	
	
        if($this->adopt->hasVoter($mysidia->user, $date)){
	        // The user has leveled up this adoptable today, show error message
	        	     
$message = "<img src='{$mysidia->path->getAbsolute()}levelup/siggy/{$this->adopt->getAdoptID()}'><br>
Name: {$adoptablename}<br>
Owner: {$owner}<br>
Species: {$type}<br>
Gender: <img src='{$mysidia->path->getAbsolute()}picuploads/{$gender}.png'><br>
Total Clicks: {$totalclicks}<br>
Current Level: {$currentlevel}<br>
Next Level: {$nextlevel}<br>
Clicks to Next Level: {$levelupclicks}<br>
Trade Status: {$tradestatus}<br>
Number of Offspring: {$offspring}<br>
Last Bred: {$lastbred}<br>";
$message = $message .= (($mysidia->user instanceof Member)?$mysidia->lang->already_leveled_member:$mysidia->lang->already_leveled_guest);
		    $document->setTitle($mysidia->lang->already_leveled_title);
	        $document->addLangvar($message);
	    }
		elseif($this->adopt->isFrozen() == "yes"){
		$message = $message .= "<img src='{$mysidia->path->getAbsolute()}levelup/siggy/{$this->adopt->getAdoptID()}'><br>
Name: {$adoptablename}<br>
Owner: {$owner}<br>
Species: {$type}<br>
Gender: <img src='{$mysidia->path->getAbsolute()}picuploads/{$gender}.png'><br>
Total Clicks: {$totalclicks}<br>
Current Level: {$currentlevel}<br>
Next Level: {$nextlevel}<br>
Clicks to Next Level: {$levelupclicks}<br>
Trade Status: {$tradestatus}<br>
Number of Offspring: {$offspring}<br>
Last Bred: {$lastbred}<br>";
		    $document->setTitle($mysidia->lang->frozen_title);
	        $document->addLangvar($mysidia->lang->frozen);
		}
		else{
		$message = $message .= "<a href='{$mysidia->path->getAbsolute()}levelup/click/{$this->adopt->getAdoptID()}'>Link text</a>";
		    $newClicks = $this->adopt->getTotalClicks() + 1;
			$this->adopt->setTotalClicks($newClicks, "update");
	        $mysidia->db->insert("vote_voters", array("void" => NULL, "date" => $date->format('Y-m-d'), "username" => $mysidia->user->username, "ip" => $ip, "adoptableid" => $mysidia->input->get("aid")));		 
			
			if($this->adopt->hasNextLevel()){
                // A higher level does exist, so we see if it is time to level up
	            $nextLevel = $this->adopt->getNextLevel();
				$requiredClicks = $nextLevel->getRequiredClicks();
	            if($requiredClicks and $newClicks >= $requiredClicks) $this->adopt->setCurrentLevel($nextLevel->getLevel(), "update");
	        }
			
			$document->setTitle("{$mysidia->lang->gave} {$this->adopt->getName()} one {$mysidia->lang->unit}");
			$reward = $mysidia->user->clickreward($mysidia->settings->rewardmoney);
		    $mysidia->user->changecash($reward);			
	        $image = $this->adopt->getImage("gui");        
			$image->setLineBreak(TRUE);	
			
		    $summary = new Division;
			$summary->setAlign(new Align("center"));
            $summary->add($image);	
            $summary->add(new Comment("{$mysidia->lang->gave}{$this->adopt->getName()} one {$mysidia->lang->unit}."));
            $summary->add(new Comment($mysidia->lang->encourage));
            $summary->add(new Comment("<br>"));
            $summary->add(new Comment(" You have earned {$reward} {$mysidia->settings->cost} for leveling up this adoptable. "));
            $summary->add(new Comment("You now have {$mysidia->user->getcash()} {$mysidia->settings->cost}"));
            $document->add($summary);			
		}
	}

	public function siggy(){
	    $mysidia = Registry::get("mysidia");
        // The adoptable is available, let's collect its info
	    $usingimage = "no";
	    $image = $this->adopt->getImage(); 
	  
	    $usegd = $mysidia->settings->gdimages;
	    $imageinfo = @getimagesize($image);
	    $imagemime = $imageinfo["mime"]; // Mime type of the image file, should be a .gif file...

	    if(function_exists('imagegif') and $usegd == "yes" and $imagemime == "image/gif"){
	        $usingimage = "yes"; //Turn the template system off
            $type = $this->adopt->getType();
            list($width, $height, $type, $attr) = getimagesize($image); // The size of the original adoptable image

	        // Lets create the new target image, with a size big enough for the text for the adoptable
	        $newheight = $height + 72;
            $newwidth = ($newwidth < 250)?250:$width;
            $img_temp = imagecreatetruecolor($newwidth, $newheight); 
            $alphablending = true;  
		 
    	    // Lets create the image and save its transparency  
            $img_old = @imagecreatefromgif($image);  
            imagealphablending($img_old, true);  
            imagesavealpha($img_old, true);
   
            // Lets copy the old image into the new image with  
            ImageCopyResampled($img_temp, $img_old, 0, 0, 0, 0, $width, $height, $width, $height);    
	        $textheight = $width + 2;
	        $image = $img_temp;
            $bgi = imagecreatetruecolor($newwidth, $newheight);
            $color = imagecolorallocate($bgi, 51, 51, 51);
		 
		    // Build text for siggy
            $str1 = "Name: ".$this->adopt->getName();
            $str2 = "Owner: ".$this->adopt->getOwner();
	        $str3 = "Click Here to Feed Me!";
	        $str4 = "More Adopts at:";
	        $str5 = "www.".constant("DOMAIN");

            // Renger Image
	        imagestring ($image, 12, 0, $textheight,  $str1, $color);
	        imagestring ($image, 12, 0, $textheight + 13,  $str2, $color);
	        imagestring ($image, 12, 0, $textheight + 26,  $str3, $color);
	        imagestring ($image, 12, 0, $textheight + 42,  $str4, $color);
	        imagestring ($image, 12, 0, $textheight + 55,  $str5, $color);
	        $background = imagecolorallocate($image, 0, 0, 0);  
            ImageColorTransparent($image, $background);  
 
            // At the very last, let's clean up temporary files
	        header("Content-Type: image/GIF");
	        ImageGif ($image);
	        imagedestroy($image);
	        imagedestroy($img_temp);
	        imagedestroy($img_old);
	        imagedestroy($bgi);

	    }
	    else{  	
	            // We are going to try and get this image the old fashioned way...
            $extList = array();
	        $extList['gif'] = 'image/gif';
	        $extList['jpg'] = 'image/jpeg';
	        $extList['jpeg'] = 'image/jpeg';
	        $extList['png'] = 'image/png';

	        //Define the output file type
	        $contentType = 'Content-type: '.$extList[ $imageinfo['extension'] ];

	        if($imageinfo['extension'] =! "image/gif" and $imageinfo['extension'] =! "image/jpeg" and $imageinfo['extension'] =! "image/png"){	         
	            throw new InvalidIDException("The file Extension is not allowed!");
	        }
	        else{
                // File type is allowed, so proceed
	            $status = "";
	            header($contentType);
                $curl = new Curl($image);
				$curl->setHeader();
				$curl->exec();
				$curl->close();
	        } 
	    }
	}
	
	public function daycare(){
		$mysidia = Registry::get("mysidia");
		$document = $mysidia->frame->getDocument();
        $document->setTitle($mysidia->lang->daycare_title);
        $document->addLangvar($mysidia->lang->daycare, TRUE);
		
		try{
		    $daycare = new Daycare;
			$adopts = $daycare->getAdopts();
		}
		catch(DaycareException $dae){
		    $message = $dae->getmessage();
		    $document->addLangvar($mysidia->lang->{$message});
			return;
		}
		
		$daycareTable = new Table("daycare", "", FALSE);
		$daycareTable->setBordered(FALSE);
		$total = $daycare->getTotalAdopts();
        $index = 0;

		for($row = 0; $row < $daycare->getTotalRows(); $row++){
	        $daycareRow = new TRow("row{$row}");
            for($column = 0; $column < $daycare->getTotalColumns(); $column++){
			    $adopt = new OwnedAdoptable($adopts[$index]);
				$image = new Link("levelup/click/{$adopt->getAdoptID()}", $adopt->getImage("gui"), TRUE);
				$stats = new Comment($daycare->getStats($adopt));
				$daycareCell = new TCell(new ArrayObject(array($image, $stats)), "cell{$index}");
                $daycareCell->setAlign(new Align("center", "center"));
				$daycareRow->add($daycareCell);
				$index++;
				if($index == $total) break;
            }
            $daycareTable->add($daycareRow);			
		}
		
        $document->add($daycareTable);
		if($pagination = $daycare->getPagination()) $document->addLangvar($pagination->showPage());
	}
}

?>
 
Glad it worked!

You need to add the message to the document/page, instead of
$document->addLangvar($mysidia->lang->frozen); you need to have $document->addLangvar($message);
 
Re

Okey dokey! Thank you again! Everything is up and running!
By any chance, do you know what the "last bred" numbers mean? :3
 
I believe it's a unix timestamp. You can do this to format it to show a readable date

$dt = new DateTime( "@" . $this->adopt->getLastBred() );
$lastbred = $dt->format('Y-m-d');
 
Re

I think I'm done for now! Thanks again! - I think you've done most of the work for me. XP
 
Re

Oops, one more thing! Now I'm getting an error with the datetime - frozen adoptables only: DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character
Do I need to edit the datetime to show 0 when the adoptable hasn't been bred? I can't seem to find it... XP

Edit: nevermind, I found a way to fix it, but I want to replace 1970-01-01 with 0
 
Last edited:
Oops, one more thing! Now I'm getting an error with the datetime - frozen adoptables only: DateTime::__construct(): Failed to parse time string (@) at position 0 (@): Unexpected character
Do I need to edit the datetime to show 0 when the adoptable hasn't been bred? I can't seem to find it... XP

Edit: nevermind, I found a way to fix it, but I want to replace 1970-01-01 with 0

Sorry didn't test it so didn't think of case 0!

What about
$lastbred = 0;//this way lastbred is always 0 if getLastBred() also returns 0
if($this->adopt->getLastBred() != 0){
$dt = new DateTime( "@" . $this->adopt->getLastBred() );
$lastbred = $dt->format('Y-m-d');
}
 

Similar threads

Users who are viewing this thread

  • Forum Contains New Posts
  • Forum Contains No New Posts

Forum statistics

Threads
4,277
Messages
33,122
Members
1,602
Latest member
BerrieMilk
BETA

Latest Threads

Latest Posts

Top