コード例 #1
0
 public function getContent()
 {
     $content = '';
     // TODO simplify the architecture
     $content .= '<div class="title">' . $this->title . '</div>';
     $content .= '<div class="text">';
     $content .= Format::convertTextToHtml(Format::truncateText($this->text, 150));
     $content .= '</div>';
     return $content;
 }
コード例 #2
0
 public function __construct(Dossier $dossier)
 {
     $this->setClass('dossier');
     $this->addComponent(new Title($dossier->getTitle(), 2));
     $author = $dossier->getAuthor();
     if ($author instanceof TeamMember) {
         $author = $author->getPseudo();
     }
     $timestamp = strftime("%d/%m/%Y", $dossier->getTimestamp());
     $subtitle = $timestamp . " par " . $author;
     $this->addComponent(new Title($subtitle, 4));
     $content = new SimpleBlockComponent();
     $content->setClass('content');
     $content->setContent(Format::convertTextToHtml($dossier->getContent()));
     $content->setContentPinned(true);
     $this->addComponent($content);
     $id = $dossier->getCommentID();
     $comment = new SimpleTextComponent();
     $comment->setClass('comment');
     $comment->setContent('~ <a href="http://commentaires.zerofansub.net/t' . $id . '.htm" target="_blank">Commentaires</a> - <a href="http://commentaires.zerofansub.net/posting.php?mode=reply&t=' . $id . '" target="_blank">Ajouter un commentaire</a> ~');
     $this->addComponent($comment);
 }
コード例 #3
0
 public function __construct(Release $release, $forceDisplay = false)
 {
     $this->addComponent(new Anchor($release->getID()));
     $link = new Link(null, $release->getCompleteName());
     $title = new Title($link);
     $title->setClass("title");
     $this->addComponent($title);
     if ($release->isReleased() || $forceDisplay) {
         $this->setClass("released");
         $link->setUrl(new Url());
         $link->setOnClick("show('" . $release->getID() . "');return(false)");
         $releaseContent = new SimpleBlockComponent();
         $releaseContent->setID($release->getID());
         $releaseContent->setClass("content");
         $this->addComponent($releaseContent);
         $previewImage = null;
         if ($release->getPreviewUrl() !== null) {
             try {
                 $pUrl = $release->getPreviewUrl()->toString();
                 $previewImage = new AutoFloatImage($pUrl);
                 $previewImage->setClass("previewImage");
                 $description = getimagesize($pUrl);
                 $width = $description[0];
                 if ($width < 150) {
                     $previewImage->makeRightFloating();
                 }
             } catch (ErrorException $ex) {
                 $previewImage = Debug::createWarningTag("Preview introuvable");
             }
         }
         $releaseContent->addComponent($previewImage);
         $localizedName = new SimpleBlockComponent();
         $localizedName->setClass("localizedName");
         if ($release->getLocalizedTitle() !== null) {
             $localizedName->addComponent(new Title("Nom de l'épisode FR"));
             $localizedName->addComponent($release->getLocalizedTitle());
         }
         $releaseContent->addComponent($localizedName);
         $originalName = new SimpleBlockComponent();
         $originalName->setClass("originalName");
         if ($release->getOriginalTitle() !== null) {
             $originalName->addComponent(new Title("Nom original"));
             $originalName->addComponent($release->getOriginalTitle());
         }
         $releaseContent->addComponent($originalName);
         $synopsis = new SimpleBlockComponent();
         $synopsis->setClass("synopsis");
         if ($release->getSynopsis() !== null) {
             $synopsis->addComponent(new Title("Synopsis"));
             $synopsis->addComponent(Format::convertTextToHtml($release->getSynopsis()));
         }
         $releaseContent->addComponent($synopsis);
         $comment = new SimpleBlockComponent();
         $comment->setClass("comment");
         if ($release->getComment() !== null) {
             $comment->addComponent($release->getComment());
         }
         $releaseContent->addComponent($comment);
         $staff = new SimpleBlockComponent();
         $staff->setClass("staff");
         $members = $release->getStaffMembers();
         if (!empty($members)) {
             $staff->addComponent(new Title("Staff"));
             $strings = array();
             foreach ($members as $member) {
                 $string = $member->getPseudo();
                 $roles = $release->getAssignmentFor($member->getID())->getRoles();
                 if (!empty($roles)) {
                     $strings2 = array();
                     foreach ($roles as $role) {
                         $strings2[] = $role->getName();
                     }
                     $string .= " : " . Format::arrayToString($strings2);
                 }
                 $strings[] = $string;
             }
             $staff->addComponent(format::arrayToString($strings, " | "));
         }
         $releaseContent->addComponent($staff);
         if ($release->isLicensed()) {
             $this->fillWithLicenseData($releaseContent, $release);
         } else {
             $this->fillWithDownloadData($releaseContent, $release);
         }
         $releaseContent->addComponent(new Pin());
         $url = new Url();
         $vars = $url->getQueryVars();
         if (!isset($vars['show']) || !(strcmp($vars['show'], "*") == 0 || preg_match("#(,|^)" . preg_quote($release->getID()) . "(,|\$)#", $vars['show']) > 0)) {
             $releaseContent->addComponent("<script type='text/javascript'>show('" . $release->getID() . "');</script>");
         }
     } else {
         $this->setClass("notReleased");
         $link->setUrl(new Url());
         $link->addComponent(" - Non disponible");
     }
 }
コード例 #4
0
ファイル: rss.php プロジェクト: KasaiDot/Zero-Fansub-website
$website = Url::getCurrentDirUrl()->toFullString();
$selector = new NewsSelector($url->hasQueryVar('select') ? $url->getQueryVar('select') : NEWSSELECTOR_ALL, $url->hasQueryVar('h'));
$newsList = News::getAllNews($selector);
usort($newsList, array('News', 'timestampSorter'));
$limit = 50;
$default = 10;
$remaining = $url->hasQueryVar("count") ? min($limit, intval($url->getQueryVar("count"))) : $default;
$items = array();
foreach ($newsList as $news) {
    $remaining--;
    if ($remaining < 0) {
        break;
    }
    $title = $news->getTitle();
    $link = $news->getUrl()->toFullString();
    $message = Format::convertTextToHtml($news->getMessage());
    $description = Format::truncateText(strip_tags($message), 300);
    $timestamp = $news->getPublicationTime();
    $item = '';
    $item .= '<title>' . htmlspecialchars($title) . '</title>';
    $item .= '<link>' . htmlspecialchars($link) . '</link>';
    $item .= '<guid isPermaLink="true">' . htmlspecialchars($link) . '</guid>';
    $item .= '<description>' . htmlspecialchars($description) . '</description>';
    $item .= '<pubDate>' . strftime('%a, %d %b %G %H:%M:%S GMT', $timestamp) . '</pubDate>';
    $items[] = '<item>' . $item . '</item>';
}
$rss = '';
$rss .= '<?xml version="1.0" encoding="UTF-8"?>';
$rss .= '<rss version="2.0">';
$rss .= '<channel>';
$rss .= '<title>Zéro Fansub</title>';
コード例 #5
0
 public function testConvertTextToHtml()
 {
     $this->assertEquals("", Format::convertTextToHtml(""));
     $this->assertEquals("test", Format::convertTextToHtml("test"));
     $this->assertEquals("&lt;script&gt;...&lt;/script&gt;", Format::convertTextToHtml("<script>...</script>"));
 }
コード例 #6
0
    // all green, just continue
}
unset($criticalDataFile);
// security: we forget the source of critical information
// other critical configs (which need to be done as soon as possible)
date_default_timezone_set("Europe/Paris");
/**********************************\
         STRANGE URL CHECK
\**********************************/
$url = Url::getCurrentUrl();
if ($url->isStrangeUrl()) {
    $currentAddress = $url->toFullString();
    $url->cleanStrangeParts();
    $cleanAddress = $url->toFullString();
    if (TEST_MODE_ACTIVATED) {
        throw new Exception(Format::convertTextToHtml("Strange url ([url]" . $currentAddress . "[/url]), maybe expected this one : [url]" . $cleanAddress . "[/url]? In not testing mode, redirection will be done."));
    } else {
        if ($url->isStrangeUrl()) {
            header('Location: ' . $_SERVER['SCRIPT_NAME']);
            exit;
        } else {
            header('Location: ' . $cleanAddress);
            exit;
        }
    }
}
/**********************************\
          OTHER CONSTANTS
\**********************************/
define('WEBSITE_VERSION', exec('git tag'));
define('MODE_H', 'modeH');
コード例 #7
0
    public function __construct(News $news)
    {
        $this->setClass("news");
        $title = new Title($news->getTitle(), 2);
        $title->setClass("title");
        $newsUrl = $news->getUrl();
        $this->addComponent(new Link($newsUrl, $title));
        $subtitle = new Title(null, 4);
        $subtitle->setClass("subtitle");
        $time = "Préparée";
        $timestamp = $news->getPublicationTime();
        if ($timestamp !== null) {
            $time = strftime("%d/%m/%Y", $timestamp);
        }
        $subtitle->addComponent($time);
        if (count($news->getAuthors()) > 0) {
            $s = "";
            foreach ($news->getAuthors() as $author) {
                $s .= ", " . $author;
            }
            $subtitle->addComponent(" par " . substr($s, 2));
        }
        $this->addComponent($subtitle);
        $message = new SimpleTextComponent(Format::convertTextToHtml($news->getMessage()));
        $message->setClass("message");
        $message->setContentPinned(true);
        $this->addComponent($message);
        if ($news->isReleasing()) {
            $releases = array();
            foreach ($news->getReleasing() as $release) {
                if ($release instanceof Project) {
                    $pid = $release->getID();
                    if (!array_key_exists($pid, $releases)) {
                        $releases[$pid] = array();
                    } else {
                        // project already listed
                    }
                } else {
                    if ($release instanceof Release) {
                        $pid = $release->getProject()->getID();
                        if (!array_key_exists($pid, $releases)) {
                            $releases[$pid] = array();
                        } else {
                            // array already exists, continue
                        }
                        array_push($releases[$pid], $release->getID());
                    } else {
                        throw new Exception($release . " is not a release nor a project.");
                    }
                }
            }
            $content = '';
            foreach ($releases as $pid => $ids) {
                if (empty($ids)) {
                    $content .= '[release=' . $pid . '|*][/release]';
                } else {
                    $content .= '[release=' . $pid . '|' . implode(",", $ids) . '][/release]';
                }
                $content .= "\n";
            }
            $releasing = new SimpleTextComponent(Format::convertTextToHtml($content));
            $releasing->setLegend('Sorties');
            $releasing->setClass("releases");
            $this->addComponent($releasing);
        }
        $commentId = $news->getCommentID();
        if ($commentId !== null) {
            $commentAccess = new SimpleTextComponent();
            $commentAccess->setClass("comment");
            $commentAccess->addComponent("~ ");
            $commentAccess->addComponent(Link::newWindowLink(new Url("http://commentaires.zerofansub.net/t" . $commentId . ".htm"), "Commentaires"));
            $commentAccess->addComponent(" - ");
            $commentAccess->addComponent(Link::newWindowLink(new Url("http://commentaires.zerofansub.net/posting.php?mode=reply&t=" . $commentId), "Ajouter un commentaire"));
            $commentAccess->addComponent(" ~");
            $this->addComponent($commentAccess);
        }
        $twitterTitle = $news->getTwitterTitle();
        if ($twitterTitle == null) {
            $twitterTitle = "[Zero] " . $news->getTitle();
        }
        $twitterPart = new SimpleTextComponent();
        $twitterPart->setClass("twitter");
        $twitterButton = '<a href="https://twitter.com/share" class="twitter-share-button" data-url="' . $newsUrl->toFullString() . '" data-text="' . $twitterTitle . '" data-via="zero_fansub" data-lang="fr">Tweeter</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>';
        $twitterPart->addComponent($twitterButton);
        $this->addComponent($twitterPart);
        $googlePart = new SimpleTextComponent();
        $googlePart->setClass("google");
        $googleButton = '<div class="g-plusone" data-href="' . $newsUrl->toFullString() . '" data-size="medium"></div>';
        $googlePart->addComponent($googleButton);
        $this->addComponent($googlePart);
        $this->setMetaData('itemscope');
        $this->setMetaData('itemtype', 'http://schema.org/Product');
        $title->setMetaData('itemprop', 'name');
        $message->setMetaData('itemprop', 'description');
        $c = $message->getComponent(0);
        $c = preg_replace('#<img #', '<img itemprop="image"', $c);
        $message->setComponent(0, $c);
        $facebookPart = new SimpleTextComponent();
        $facebookPart->setClass("facebook");
        $facebookButton = '<div class="fb-like" data-href="' . $newsUrl->toFullString() . '" data-send="false" data-layout="button_count" data-width="90" data-show-faces="true"></div>';
        $facebookPart->addComponent($facebookButton);
        $this->addComponent($facebookPart);
    }
コード例 #8
0
<?php

$page = PageContent::getInstance();
$page->addComponent(new SimpleTextComponent(Format::convertTextToHtml("[title=1]Entrer dans l'équipe[/title]\n\n[left]\n[title=2|number]Prendre connaissance des engagements[/title]\n\n    * Avoir au moins 18 ans (ou pas loin)\n    * Avoir lu les [url=http://forum.zerofansub.net/t552-Les-regles-d-Or-de-chez-Zero.htm]règles d'Or[/url]\n    * Se tenir aux engagements qu'on aura précisé dans sa candidature\n    * Ne pas mentir ou gonfler/réduire ses exploits dans sa candidature\n    * Accepter dans la bonne humeur le résultat de la candidature, qu'elle soit acceptée ou refusée\n    * Être actif ou faire savoir dès que possible quand on pense s'absenter un certain temps\n    * Favoriser la qualité à la rapidité (mieux vaut avoir un travail en retard plutôt qu'à refaire)\n    * Favoriser le respect entre chacun et être ouvert aux critiques\n    * Ne pas demander de rémunération : le fansub est une activité enrichissante mais bénévole\n\n\n[title=2|number]Choisir son rôle[/title]\n\n[b]Traducteur anglais :[/b] traduit depuis l'anglais. ([url=http://forum.zerofansub.net/f221-Cours-br.htm]cours[/url])\n[b]Traducteur japonais :[/b] traduit depuis le japonais ou vérifie une traduction. ([url=http://forum.zerofansub.net/f212-Cours-br.htm]cours[/url])\n[b]Adapt : [/b]reformule les phrases en un français correct, simple et intelligible.\n[b]Check ortho : [/b]débusque et corrige les fautes d'ortho. ([url=http://forum.zerofansub.net/f192-Cours.htm]cours[/url])\n[b]Timeur :[/b] découpe les phrases, décide le moment d'apparition et la durée de chaque phrase. ([url=http://forum.zerofansub.net/f197-Cours.htm]cours Aegisub[/url])\n[b]Edit :[/b] positionne les sous-titres, choisit la taille, la \"police\" de caractère, crée des effets. ([url=http://forum.zerofansub.net/f197-Cours.htm]cours Aegisub[/url], [url=http://forum.zerofansub.net/f198-Cours.htm]cours After Effect[/url])\n[b]Karamaker :[/b] time le karaoké depuis le roumaji et crée des effets. ([url=http://forum.zerofansub.net/f197-Cours.htm]cours Aegisub[/url], [url=http://forum.zerofansub.net/f198-Cours.htm]cours After Effect[/url])\n[b]Encodeur :[/b]  trouve les raw, les retravaille et y intègre les sous-titres. ([url=http://forum.zerofansub.net/f202-Cours-br.htm]cours[/url])\n[b]Contrôle Qualité :[/b] vérifie que tout a bien été effectué : time, édit, ortho, adapt, etc. ([url=http://forum.zerofansub.net/f192-Cours.htm]cours[/url])\n[b]Programmeur Web :[/b] gère le site web, connais PHP, CSS, (X)HTML et si possible JSP. ([url=https://github.com/Sazaju/Zero-Fansub-website]site sur GitHub[/url])\n[b]Programmeur Logiciel :[/b] automatise les tâches nécessaires et améliore le support des tâches manuelles, de préférence en Java ou PHP.\n\n[title=2|number]Poster sa fiche de candidature[/title]\nElle se poste [url=http://forum.zerofansub.net/f21-RECRUTEMENT-Entrer-dans-la-team-de-fansub.htm]sur le forum[/url] (créer un [url=http://forum.zerofansub.net/posting.php?mode=newtopic&f=21]nouveau sujet[/url]). Elle doit être correctement remplie.\n\n[code][b]Nom :[/b][/code] [i]si je veux mieux me faire connaître[/i]\n[code][b]Âge :[/b][/code] [i]si je veux mieux me faire connaître[/i]\n[code][b]Lieu :[/b][/code] [i]si je veux mieux me faire connaître[/i]\n[code][b]Rôle :[/b][/code] [i]le ou les rôles ci-dessus que je veux faire[/i]\n[code][b]Motivation :[/b][/code] [i]pourquoi je veux faire ce rôle et pourquoi chez vous[/i]\n[code][b]Expérience fansub :[/b][/code] [i]ce que j'ai déjà fait dans une team de fansub en rapport avec ce rôle[/i]\n[code][b]Expérience hors fansub  :[/b][/code] [i]ce que j'ai déjà fait dans la vie qui peut m'aider à faire ce rôle[/i]\n[code][b]Indisponibilités :[/b][/code] [i]périodes pendant lesquelles je pense ne pas être disponible[/i]\n[code][b]Si ça arrive :[/b][/code] [i]ce que je m'engage à faire si je suis indisponible[/i]\n[code][b]Déjà membres d'autre équipe :[/b][/code] [i]si oui lesquelles[/i]\n[code][b]Autre chose à dire :[/b][/code] [i]si je pense que ça peut permettre à la team de mieux juger si ce poste est fait pour moi[/i]\n\n[justify]\nNotre but est de savoir avant tout ce que vous voulez faire, comment vous pensez le faire et de voir si on peut bosser ensemble. Si vous avez des conditions à poser, faites-le dès que vous candidatez. Si vous ne savez pas quelque chose et pensez que ça peut avoir une influence, faites-le savoir. Si votre profil ne correspond pas à notre façon de faire, on ne vous acceptera pas, mais c'est toujours mieux que de perdre notre temps à former quelqu'un qui ne reste pas et surtout de vous faire perdre votre temps alors que vous pourriez postuler dans une team qui vous correspond mieux.\n[/justify]\n\n[title=2|number]Effectuer un test[/title]\n[justify]\nUn test peut être mis à votre  disposition afin d'évaluer un peu votre niveau, à moins qu'on vous lance directement sur un projet, cela dépend un peu du rôle ou si vous avez déjà de l'expérience, etc.\n[/justify]\n\n[title=2|number]Attendre la réponse des membres de l'équipe[/title]\n[justify]\nLes membres de l'équipe et les administrateurs observeront la fiche et le test et jugeront de l'acceptation ou pas. Rien n'est dit en privé. Toutes les discussions à propos de la candidature seront visibles sur le topic de recrutement, donc pas d'inquiétude :). L'acceptation définitive est normalement donnée par celui qui prendra en charge la formation.\n[/justify]\n[b]En cas de refus[/b]\n[justify]\nCela peut être pour un niveau insuffisant, pour un manque de disponibilité, etc. Ce n'est pas la peine de s'énerver ! Nous expliquons toujours les raisons d'un refus et il n'y a pas de limite de demande. Nous répondrons à toutes les questions, et vous pourrez revenir postuler si vous sentez que votre niveau s'est amélioré.\n[/justify]\n[b]En cas d'acceptation[/b]\n\n- S'il n'est pas déjà donné, réclamer l'accès à la partie privée. \n- S'il n'est pas déjà donné, réclamer l'accès à la série sur laquelle vous allez travailler. \n- Lire les tuto qui vous concernent directement ou indirectement et les appliquer. \n- Créer (et suivre) son topic dans la partie \"Messages privés-publics\".\n- Suivre les topics principaux et ceux qui vous concernent directement.\n- Commencer à faire son boulot. Ne pas hésiter à poser moult questions !\n\n[title=2]Trucs et astuces pour être bien vu[/title]\n[justify]\nPlus la fiche de candidature est soignée, plus vous montrerez que vous n'êtes pas là juste pour tuer le temps. L'orthographe, c'est très important. La façon de parler aussi. Plus votre candidature sera longue, complète et argumentée, mieux ce sera. Nous prendrons le temps de tout lire !\n[/justify]\n[/left]\n")));
コード例 #9
0
        // TODO create a link to access the old websites (clone in temp if not yet there)
        $desc = new VersionDescriptor($version, $output);
        $versions[] = $desc;
    }
}
/***********************\
	         DISPLAY
	\***********************/
$page = PageContent::getInstance();
$page->addComponent(new Title("À propos...", 1));
$page->addComponent(new Title("Historique des versions", 2));
$table = new Table();
$page->addComponent($table);
$row = new TableRow();
$head = new TableHeader("Version");
$head->setClass("version");
$row->addComponent($head);
$head = new TableHeader("Déscription");
$head->setClass("description");
$row->addComponent($head);
$head = new TableHeader("Aperçu");
$head->setClass("preview");
$row->addComponent($head);
$table->addComponent($row);
foreach ($versions as $desc) {
    $row = new TableRow();
    $row->addComponent(preg_match('#^[0-9]+(\\.0+)*$#', $desc->getVersion()) ? '<b>' . $desc->getVersion() . '</b>' : $desc->getVersion());
    $row->addComponent(Format::convertTextToHtml($desc->getComment()));
    $row->addComponent(WEBSITE_VERSION == $desc->getVersion() ? 'Version actuelle !' : $desc->getUrl() == null ? 'Non dispo' : Link::newWindowLink($desc->getUrl(), "Utiliser cette version"));
    $table->addComponent($row);
}
コード例 #10
0
 public function __construct(Project $project, $forceDisplay = false)
 {
     $image = new Image('images/series/' . $project->getID() . '.jpg');
     $image->setClass('projectPicture');
     $this->addComponent($image);
     $this->addComponent(new Title("Informations générales", 2));
     if ($project->hasExternalSource()) {
         $subtitle = new Title("Source : ", 4);
         $subtitle->addComponent($project->getExternalSource());
         $this->addComponent($subtitle);
     }
     $array = array(array("Titre Original", $project->getOriginalName()), array("Site officiel", $project->getOfficialWebsite()), array("Année de production", $project->getAiringYear()), array("Studio", $project->getStudio()), array("Auteur", $project->getAuthor()), array("Genre", $project->getGenre()), array("Synopsis", $project->getSynopsis()), array("Coproduction", $project->getCoproduction()), array("Vosta", $project->getVosta()));
     $infos = new SimpleTextComponent();
     $infos->setClass('projectInfos');
     foreach ($array as $data) {
         if ($data[1] !== null) {
             $text = new SimpleTextComponent("<b>" . $data[0] . "</b> ");
             $text->addComponent($data[1]);
             $infos->addLine($text);
         }
     }
     $this->addComponent($infos);
     if ($project->getComment() !== null) {
         $this->addComponent("<p></p>");
         $this->addComponent(new Title("Commentaire", 2));
         $this->addComponent(Format::convertTextToHtml($project->getComment()));
     }
     $this->addComponent("<p></p>");
     $link = Link::newWindowLink("http://zero.xooit.fr/t471-Liens-morts.htm", "Signaler un lien mort");
     $link->setClass('deadLinks');
     $this->addComponent($link);
     $this->addComponent("<p></p>");
     $this->addComponent(new Title($project->isDoujin() ? "Chapitres" : "Épisodes", 2));
     $releases = Release::getAllReleasesForProject($project->getID());
     usort($releases, array('Release', 'idSorter'));
     $list = new SimpleListComponent();
     $list->setClass("releaseList");
     foreach ($releases as $release) {
         $list->addComponent(new ReleaseComponent($release, $forceDisplay));
     }
     $this->addComponent($list);
     $linkedProjects = Project::getProjectsLinkedTo($project);
     if (!empty($linkedProjects)) {
         $this->addComponent("<p></p>");
         $this->addComponent(new Title("Voir aussi", 2));
         $list = new ProjectList();
         foreach ($linkedProjects as $link) {
             $list->addProject($link);
         }
         $list->sortByNames();
         $list = new ProjectListComponent($list);
         $list->useImage(true);
         $this->addComponent($list);
     }
     foreach ($project->getBonuses() as $bonus) {
         $this->addComponent("<p></p>");
         $this->addComponent(new Title("Bonus : " . $bonus->getTitle(), 2));
         $this->addComponent($bonus->getContent());
     }
     $groups = ProjectGroup::getGroupsForProject($project);
     foreach ($groups as $group) {
         foreach ($group->getBonuses() as $bonus) {
             $this->addComponent("<p></p>");
             $this->addComponent(new Title("Bonus : " . $bonus->getTitle(), 2));
             $this->addComponent($bonus->getContent());
         }
     }
     $this->addComponent("<p></p>");
     $url = $project->getDiscussionUrl();
     if ($url == null) {
         $url = new Url("http://zero.xooit.fr/posting.php?mode=reply&t=120");
     }
     $link = Link::newWindowLink($url, new Image("images/interface/avis.png", "Donne ton avis sur le forum !"));
     $link->setClass('discussionLink');
     $this->addComponent($link);
 }
コード例 #11
0
ファイル: bug.php プロジェクト: KasaiDot/Zero-Fansub-website
<?php

$page = PageContent::getInstance();
$page->addComponent(new Title("Signaler un bug", 1));
$admin = TeamMember::getMemberByPseudo("sazaju HITOKAGE");
$serverInfo = function ($id) {
    return isset($_SERVER[$id]) ? $_SERVER[$id] : 'inconnue';
};
$text = "\n\n\nLe site étant en plein raffinage, il est possible que vous tombiez sur des bogues (ou bug) au cours de votre navigation. Si tel est le cas, vous retomberez généralement sur cette page. Par conséquent, si vous vous trouvez ici sans trop savoir pourquoi, c'est probablement parce que vous venez de tomber sur un de ces bogues. Pour nous le signaler, plusieurs moyens sont à votre disposition :\n\n[url=https://github.com/Sazaju/Zero-Fansub-website/issues]Enregistrer un bug sur GitHub[/url]\n\n[mail=" . $admin->getMail() . "]Envoyer un mail à l'administrateur Web[/mail]\n\nLa première solution est de loin la meilleure, car en plus d'avertir les administrateurs, le problème est enregistré et peut donc être suivi efficacement. Néanmoins, si vous ne savez pas comment utiliser ce système, la seconde option vous permet d'envoyer directement un mail aux admins. De préférence utilisez la première solution, n'utilisez la seconde que si vraiment vous avez des soucis avec la première.\n\nSoyez sûrs de donner le maximum de détails, en particulier l'adresse actuelle de la page, la page ou vous étiez juste avant le bogue, votre navigateur et sa version (ou au moins dire si vous l'avez mis à jour récemment), et les plugins ou programmes que vous auriez installé qui vous semble être une cause potentielle du problème (gestionnaire de scripts, antivirus, ...).\n\nEn voici quelques unes, vous pouvez les recopier et les compléter :\n[left][list]\n[item]adresse actuelle : [urlk=current|full][/urlk][/item]\n[item]adresse précédente : [urlk=referer|full][/urlk][/item]\n[item]infos navigateur : " . $serverInfo('HTTP_USER_AGENT') . "[/item]\n[/list][/left]";
$content = new SimpleTextComponent();
$content->setClass("bug");
$content->setContent(Format::convertTextToHtml($text));
$page->addComponent($content);
?>