PDA

View Full Version : Mys 1.3.4 Public Profile Mod


KatFennec
05-12-2017, 02:59 AM
The following is a mod that extends the functionality of levelup.php to create a profile for each pet, viewable by other users.

http://orig02.deviantart.net/cfcd/f/2017/132/7/e/profile_by_katherinefennec-db8xoon.png

This mod is heavily based on code provided by Kyttias (http://mysidiaadoptables.com/forum/showpost.php?p=33218&postcount=2)

To get started, open levelup.php and change if($mysidia->input->action() == "click" or $mysidia->input->action() == "siggy" $this->adopt = new OwnedAdoptable($mysidia->input->get("aid")); to if($mysidia->input->action() == "click" or $mysidia->input->action() == "siggy" or $mysidia->input->action() == "publicprofile") $this->adopt = new OwnedAdoptable($mysidia->input->get("aid"));, t
at the bottom paste the following:
public function publicprofile(){
#begin profile code
$mysidia = Registry::get("mysidia");
$date = new DateTime;
$this->setField("adopt", $this->adopt);
$ip = secure($_SERVER['REMOTE_ADDR']);

Next, open levelupview.php, found in your views folder.
again, scroll down to the bottom and paste:
public function publicprofile(){
$mysidia = Registry::get("mysidia");
$adopt = $this->getField("adopt");
$adoptcurrentlevel = $adopt->currentlevel;
$document = $this->document;
$document->setTitle("Viewing {$adopt->getName()}'s profile");
if($adopt->hasNextLevel()){
$nextLevel = $adopt->getNextLevel();
#$requiredClicks = $nextLevel->getRequiredClicks();
$thisisauniqueid = new OwnedAdoptable($adopt->getAdoptID());
$gender_lookup = $mysidia->db->select("owned_adoptables", array("gender"), "aid = '{$adopt->getAdoptID()}'")->fetchColumn();
if ($gender_lookup == "m") { $gender = "Male"; $pronoun = "him"; } else { $gender = "Female"; $pronoun = "her"; }
$alternates_lookup = $mysidia->db->select("owned_adoptables", array("usealternates"), "aid = '{$adopt->getAdoptID()}'")->fetchColumn();
if ($mysidia->user->username == $adopt->getOwner()){ $manage_btn = "<a class='btn btn-sm btn-info' href='../../myadopts/manage/{$adopt->getAdoptID()}'><i class='fa fa-gear'></i> Manage</a>"; } else { $manage_btn = ""; }

if($adopt->hasNextLevel()){
$level = $adopt->getNextLevel();
$levelupClicks = $adopt->getLevelupClicks();
$document->add(new Comment("(LVL ".$level->getLevel()." in ".$levelupClicks." more EXP)"));
}
else { $document->add(new Comment("(MAX)")); }

if($adopt->getTradeStatus() == "fortrade") { $tradestatus = "<b>For Trade</b>"; }
else { $tradestatus = "<b>Not For Trade</b>"; }



// If you've already seen the pet today:
if ($adopt->hasVoter($mysidia->user, $date)){
$document->add(new Comment("<a class='btn btn-sm btn-info disabled' href='../../levelup/click/{$adopt->getAdoptID()}'><i class='fa fa-paw'></i> Already Fed</a>"));
}
// If you haven't seen the pet today:
else {
$document->add(new Comment("<a class='btn btn-sm btn-info' href='../../levelup/click/{$adopt->getAdoptID()}'><i class='fa fa-paw'></i> Feed</a>"));
};
}
$document->add(new Comment("{$manage_btn}
<br> <br>
<img src='{$thisisauniqueid->getImage()}'><br>"));
$adoptabletype = $mysidia->db->select("adoptables", array(), "type='{$adopt->getType()}'")->fetchObject();
$diet = $adoptabletype->Diet;
$level = $adopt->getCurrentLevel();
$document->add(new Comment("<ul>
<li>Lives With: <a href='/profile/view/{$adopt->getOwner()}'>{$adopt->getOwner()}</a></li>
<li>Species: {$adopt->getType()}</li>
<li>Gender: {$gender}</li>

<li>LVL: {$adopt->getCurrentLevel()} {$toNext}</li>
<li>Total EXP: {$adopt->getTotalClicks()}</li>
<li>Trade Status: {$tradestatus}</li>

"));
}

This essentially creates a new page under levelup, yoursite.com/levelup/publicprofile/(adoptable ID number), but there isn't anything that links to it yet! We'll fix that next. Open myadoptsview.php and under the line reading $document->add(new Link("levelup/click/{$aid}", " LevelUp {$name}", TRUE));,
add $document->add(new Link("levelup/publicprofile/{$aid}", " View {$name}'s Profile", TRUE));.

Now you can view your pets' profiles. But what about other people? If you want them to see the pet's info, go back to levelup.php and replace $message = ($mysidia->user instanceof Member)?"already_leveled_member":"already_leveled_guest";
with $message .= "You already clicked this adoptable today. Try again tomorrow. <br>
<a class='btn btn-sm btn-info' href='../../levelup/publicprofile/{$this->adopt->getAdoptID()}'><i class='fa fa-chevron-left'></i> Back to Profile</a>";

Finally, open class_adoptablehelper.php, in your classes folder, and replace public function getLevelupLink(OwnedAdoptable $adopt){
return new Link("levelup/click/{$adopt->getAdoptID()}", $adopt->getImage("gui")); with public function getLevelupLink(OwnedAdoptable $adopt){
return new Link("levelup/publicprofile/{$adopt->getAdoptID()}", $adopt->getImage("gui"));
And you're done~!

KatFennec
05-15-2017, 12:24 AM
Just noticed I forgot something: Go into classes/class_ownedadoptable and change all of the protected variables to public.

Hall of Famer
05-15-2017, 03:47 PM
Oh so this is a pet profile mod? It looks interesting, adoptables profile is among the next few things I will add for Mysidia's next release. Your mod will be especially helpful for those who cannot upgrade to newer script due to heavily customized scripts, I am sure a lot of users will appreciate this. ^^

KatFennec
05-15-2017, 09:28 PM
It's especially helpful for sites that want a nonstandard experience/level system, as it doesn't depend on exceptions to operate. Hopefully, folks get some good use out of it.

kristhasirah
05-16-2017, 11:49 AM
you can also create a new page well 2 pages, the petprofile.php and the petprofilelview.php, that's how i made the profile for my site =), but i think this can also be added to the profile.php and profileview.php instead of the levelup pages.
Still thanks for sharing how you manage to make it work in the levelup page ^^... i must say that i tried to do that but never manage to make it work, that's why i ended making a new page.

Fox
05-23-2017, 05:48 AM
I'm having an issue with this code I believe. All pets at level 2 (final level at this point) don't show their tradestatus or gender.

Any ideas why?

KatFennec
05-23-2017, 07:34 PM
I'm having an issue with this code I believe. All pets at level 2 (final level at this point) don't show their tradestatus or gender.

Any ideas why?

Can you post a copy of your levelupview.php?

Fox
05-24-2017, 06:04 AM
?php

use Resource\Collection\ArrayList;
use Resource\Utility\Curl;

class LevelupView extends View{

public function click(){
$mysidia = Registry::get("mysidia");
$document = $this->document;
$adopt = $this->getField("adopt");
$reward = $this->getField("reward")->getValue();
$document->setTitle("{$this->lang->gave} {$adopt->getName()} one {$this->lang->unit}");

$image = $adopt->getImage("gui");
$image->setLineBreak(TRUE);
$summary = new Division;
$summary->setAlign(new Align("center"));
$summary->add($image);
$summary->add(new Comment("{$this->lang->gave}{$adopt->getName()} one {$this->lang->unit}."));
$summary->add(new Comment($this->lang->encourage));
$summary->add(new Comment("<br> 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(){

}

public function daycare(){
$mysidia = Registry::get("mysidia");
$document = $this->document;
$document->setTitle($this->lang->daycare_title);
$document->addLangvar($this->lang->daycare, TRUE);

$daycare = $this->getField("daycare");
$adopts = $daycare->getAdopts();
$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]);
$cell = new ArrayList;
$cell->add(new Link("levelup/click/{$adopt->getAdoptID()}", $adopt->getImage("gui"), TRUE));
$cell->add(new Comment($daycare->getStats($adopt)));
$daycareCell = new TCell($cell, "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());
}
public function publicprofile(){
$mysidia = Registry::get("mysidia");
$adopt = $this->getField("adopt");
$adoptcurrentlevel = $adopt->currentlevel;
$document = $this->document;
$document->setTitle("Viewing {$adopt->getName()}'s profile");
if($adopt->hasNextLevel()){
$nextLevel = $adopt->getNextLevel();
#$requiredClicks = $nextLevel->getRequiredClicks();
$gender_lookup = $mysidia->db->select("owned_adoptables", array("gender"), "aid = '{$adopt->getAdoptID()}'")->fetchColumn();
if ($gender_lookup == "m") { $gender = "Male"; $pronoun = "him"; } else { $gender = "Female"; $pronoun = "her"; }
$alternates_lookup = $mysidia->db->select("owned_adoptables", array("usealternates"), "aid = '{$adopt->getAdoptID()}'")->fetchColumn();
if ($mysidia->user->username == $adopt->getOwner()){ $manage_btn = "<a class='btn btn-sm btn-info' href='../../myadopts/manage/{$adopt->getAdoptID()}'><i class='fa fa-gear'></i> Manage</a>"; } else { $manage_btn = ""; }

if($adopt->hasNextLevel()){
$level = $adopt->getNextLevel();
$levelupClicks = $adopt->getLevelupClicks();
$document->add(new Comment("(LVL ".$level->getLevel()." in ".$levelupClicks." more EXP)"));
}
else { $document->add(new Comment("(MAX)")); }

if($adopt->getTradeStatus() == "fortrade") { $tradestatus = "<b>For Trade</b>"; }
else { $tradestatus = "<b>Not For Trade</b>"; }



// If you've already seen the pet today:
if ($adopt->hasVoter($mysidia->user, $date)){
$document->add(new Comment("<a class='btn btn-sm btn-info disabled' href='../../levelup/click/{$adopt->getAdoptID()}'><i class='fa fa-paw'></i> Already Fed</a>"));
}
// If you haven't seen the pet today:
else {
$document->add(new Comment("<a class='btn btn-sm btn-info' href='../../levelup/click/{$adopt->getAdoptID()}'><i class='fa fa-paw'></i> Feed</a>"));
};
}
$document->add(new Link("myadopts", $adopt->getImage("gui")));
$adoptabletype = $mysidia->db->select("adoptables", array(), "type='{$adopt->getType()}'")->fetchObject();
$level = $adopt->getCurrentLevel();
$bio = $adopt->getPetbio();
$document->add(new Comment("<ul>
<li>Lives With: <a href='/profile/view/{$adopt->getOwner()}'>{$adopt->getOwner()}</a></li>
<li>Species: {$adopt->getType()}</li>
<li>Gender: {$gender}</li>
<li>LVL: {$adopt->getCurrentLevel()} {$toNext}</li>
<li>Total EXP: {$adopt->getTotalClicks()}</li>
<li>Trade Status: {$tradestatus}</li>
<li>Bio: {$bio}</li>
")) ;
}

}

?>

Here it is. I'm also trying to figure out how to put a button in on the lvl up page (you've fed blah blah and earned this much cash) that links to the public profile as well as it's only available if you've already fed them.

KatFennec
05-25-2017, 01:48 AM
Here it is. I'm also trying to figure out how to put a button in on the lvl up page (you've fed blah blah and earned this much cash) that links to the public profile as well as it's only available if you've already fed them.

OK, I found the problem, and it looks like it was a mistake I made in the original.

Where it says
if($adopt->hasNextLevel()){
$nextLevel = $adopt->getNextLevel();
Add a new line after it, and put };
Then go down to where it says:
$document->add(new Comment("<a class='btn btn-sm btn-info' href='../../levelup/click/{$adopt->getAdoptID()}'><i class='fa fa-paw'></i> Feed</a>"));
};
}
And remove the last }
That should fix your problem.

Fox
05-25-2017, 05:52 AM
awesome, thanks :) That works!

Any ideas on a link back to the public profile when they're clicking the pet rather than if they've clicked? (both would be nice)

aquapyrofan
05-25-2017, 06:15 PM
awesome, thanks :) That works!

Any ideas on a link back to the public profile when they're clicking the pet rather than if they've clicked? (both would be nice)

Put
<a class='btn btn-sm btn-info' href='../../levelup/publicprofile/{$adopt->getAdoptID()}'><i class='fa fa-chevron-left'></i> Back to Profile</a>
in the click function, wherever you want it (Kat and my site has it under the display of what you've obtained).

Dinocanid
06-19-2017, 07:27 PM
After installing this, I ran into a "call to member function" error because it couldn't get the image of the pet. I found that using:
<img src='{$adopt->getImage()}'><br>"));
Works just fine rather than using the unique id variable, since $adopt is already defined and the image can be retrieved from there. Just putting this out there for others that might run into it.

NobodysHero
03-30-2018, 10:36 AM
Thanks for the mod and Dino, thanks for the alternative code for the image. I couldn't get it work before. LOVE YOU BOTH!

Micolai
06-11-2020, 10:24 PM
I'm running into this error, how do I fix it?

Fatal error: Call to a member function get() on null in /home/wildhors/public_html/classes/class_view.php on line 166