function links_my_tasks_dropdown() { echo '<li class="header"><a href="' . get_url('links', 'index') . '">' . lang('links') . '</a></li>'; if (ProjectLink::canAdd(logged_user(), active_project())) { echo '<li><a href="' . get_url('links', 'add_link') . '">' . lang('add link') . '</a></li>'; } // if }
<?php trace(__FILE__, 'begin'); set_page_title(lang('project links')); project_tabbed_navigation(PROJECT_TAB_LINKS); project_crumbs(array(array(lang('links'), get_url('links', 'index')), array(lang('index')))); if (ProjectLink::canAdd(logged_user(), active_project())) { add_page_action(lang('add link'), get_url('links', 'add_link')); } // if add_stylesheet_to_page('project/files.css'); $counter = 0; ?> <div id="files"> <?php if (isset($links) && is_array($links) && count($links)) { ?> <div class="filesList"> <?php foreach ($links as $link) { $counter++; ?> <div class="listedFile <?php echo $counter % 2 ? 'even' : 'odd'; ?> "> <div class="fileInfo"> <div class="fileName"><a href="<?php echo $link->asUrl(); ?> " title="<?php
/** * Delete project link * * @param void * @return null */ function delete_link() { $project_link = ProjectLinks::findById(get_id()); if (!ProjectLink::canEdit(logged_user())) { flash_error(lang('no access permissions')); $this->redirectTo('links', 'index'); } // if if (!$project_link instanceof ProjectLink) { flash_error(lang('project link dnx')); $this->redirectTo('links'); } // if try { DB::beginWork(); $project_link->delete(); ApplicationLogs::createLog($project_link, active_project(), ApplicationLogs::ACTION_DELETE); DB::commit(); flash_success(lang('success delete link', $project_link->getTitle())); $this->redirectTo('links'); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try }
/** * @return \yii\db\ActiveQuery */ public function getProjectLinks() { return $this->hasMany(ProjectLink::className(), ['project_id' => 'id']); }
/** * Copy project * * @param void * @return null */ function copy() { trace(__FILE__, "copy():begin"); if (!Project::canAdd(logged_user())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('dashboard')); } // if $this->setTemplate('copy_project'); $this->setLayout('administration'); $project_data = array_var($_POST, 'project'); tpl_assign('project_data', $project_data); // Submitted... if (is_array($project_data)) { $source = Projects::findById($project_data['source']); if (!$source instanceof Project) { flash_error(lang('project dnx')); $this->redirectTo('administration', 'projects'); } // if try { $shift_dates = isset($project_data['shift_dates']) ? $project_data['shift_dates'] == 'checked' : false; $copy_details = isset($project_data['copy_details']) ? $project_data['copy_details'] == 'checked' : false; $copy_tasks = isset($project_data['copy_tasks']) ? $project_data['copy_tasks'] == 'checked' : false; $copy_milestones = isset($project_data['copy_milestones']) ? $project_data['copy_milestones'] == 'checked' : false; $copy_messages = isset($project_data['copy_messages']) ? $project_data['copy_messages'] == 'checked' : false; $copy_links = isset($project_data['copy_links']) ? $project_data['copy_links'] == 'checked' : false; $copy_files = isset($project_data['copy_files']) ? $project_data['copy_files'] == 'checked' : false; $copy_users = isset($project_data['copy_users']) ? $project_data['copy_users'] == 'checked' : false; $copy_pages = isset($project_data['copy_pages']) ? $project_data['copy_pages'] == 'checked' : false; DB::beginWork(); $project = new Project(); $new_name = lang('projects copy new name', $source->getName()); $new_name .= date(' z H:i:s'); $project->setName($new_name); if ($copy_details) { $project->setDescription($source->getDescription()); $project->setPriority($source->getPriority()); $project->setShowDescriptionInOverview($source->getShowDescriptionInOverview()); } $project->save(); $project_id = $project->getId(); $add_seconds = 0; if (isset($project_data['add_days'])) { $add_days = 0 + trim($project_data['add_days']); $add_seconds = $add_days * 24 * 60 * 60; } $source_created_on = $source->getCreatedOn(); //var_dump($source_created_on); $milestone_map = array(0 => 0); // project milestones if ($copy_milestones) { $source_milestones = $source->getAllMilestones(); if (is_array($source_milestones)) { foreach ($source_milestones as $source_milestone) { $milestone = new ProjectMilestone(); //$milestone->copy($source_milestone); $milestone->setName($source_milestone->getName()); $milestone->setDescription($source_milestone->getDescription()); if ($shift_dates) { trace(__FILE__, "copy():shift dates"); $milestone->setDueDate(DateTimeValueLib::now()); $seconds = $source_milestone->getDueDate()->difference($source_created_on); $milestone->getDueDate()->advance($seconds); } else { $milestone->setDueDate($source_milestone->getDueDate()); } $milestone->getDueDate()->advance($add_seconds); $milestone->setIsPrivate($source_milestone->getIsPrivate()); $milestone->setAssignedToUserId($source_milestone->getAssignedToUserId()); $milestone->setAssignedToCompanyId($source_milestone->getAssignedToCompanyId()); $milestone->setProjectId($project_id); $milestone->save(); $milestone_map[$source_milestone->getId()] = $milestone->getId(); } // foreach } // if } // if // project tasks if ($copy_tasks) { $source_task_lists = $source->getAllTaskLists(); if (is_array($source_task_lists)) { foreach ($source_task_lists as $source_task_list) { $task_list = new ProjectTaskList(); //$task_list->copy($source_milestone); $task_list->setName($source_task_list->getName()); $task_list->setPriority($source_task_list->getPriority()); $task_list->setDescription($source_task_list->getDescription()); if ($copy_milestones) { $task_list->setMilestoneId($milestone_map[$source_task_list->getMilestoneId()]); } $task_list->setDueDate($source_task_list->getDueDate()); if ($task_list->getDueDate() instanceof DateTimeValue) { if ($shift_dates) { trace(__FILE__, "copy():task list shift dates"); $task_list->setDueDate(DateTimeValueLib::now()); $seconds = $source_task_list->getDueDate()->difference($source_created_on); $task_list->getDueDate()->advance($seconds); } $task_list->getDueDate()->advance($add_seconds); } $task_list->setIsPrivate($source_task_list->getIsPrivate()); $task_list->setOrder($source_task_list->getOrder()); $task_list->setProjectId($project_id); $task_list->save(); $source_tasks = $source_task_list->getTasks(); if (is_array($source_tasks)) { foreach ($source_tasks as $source_task) { $task = new ProjectTask(); $task->setOrder($source_task->getOrder()); $task->setDueDate($source_task->getDueDate()); if ($task->getDueDate() instanceof DateTimeValue) { if ($shift_dates) { trace(__FILE__, "copy():task shift dates"); $task->setDueDate(DateTimeValueLib::now()); $seconds = $source_task->getDueDate()->difference($source_created_on); $task->getDueDate()->advance($seconds); } $task->getDueDate()->advance($add_seconds); } $task->setText($source_task->getText()); $task->getAssignedToUserId($source_task->getAssignedToUserId()); $task->getAssignedToCompanyId($source_task->getAssignedToCompanyId()); $task_list->attachTask($task); } } } // foreach } // if } // if // project messages if ($copy_messages) { $source_messages = $source->getAllMessages(); if (is_array($source_messages)) { foreach ($source_messages as $source_message) { $message = new ProjectMessage(); //$message->copy($source_message); $message->setTitle($source_message->getTitle()); $message->setText($source_message->getText()); $message->setAdditionalText($source_message->getAdditionalText()); if ($copy_milestones) { $message->setMilestoneId($milestone_map[$source_message->getMilestoneId()]); } $message->setIsImportant($source_message->getIsImportant()); $message->setIsPrivate($source_message->getIsPrivate()); $message->setCommentsEnabled($source_message->getCommentsEnabled()); $message->setAnonymousCommentsEnabled($source_message->getAnonymousCommentsEnabled()); $message->setProjectId($project_id); $message->save(); } // foreach } // if } // if // project links if ($copy_links) { $source_links = ProjectLinks::getAllProjectLinks($source); if (is_array($source_links)) { foreach ($source_links as $source_link) { $link = new ProjectLink(); //$folder->copy($source_link); $link->setTitle($source_link->getTitle()); $link->setUrl($source_link->getUrl()); $link->setProjectId($project_id); $link->save(); } // foreach } // if } // if // project folders & files if ($copy_files) { $folder_map = array(0 => 0); $source_folders = $source->getFolders(); if (is_array($source_folders)) { foreach ($source_folders as $source_folder) { $folder = new ProjectFolder(); //$folder->copy($source_folder); $folder->setName($source_folder->getName()); $folder->setProjectId($project_id); $folder->save(); $folder_map[$source_folder->getId()] = $folder->getId(); } // foreach } // if $source_files = ProjectFiles::getAllFilesByProject($source); if (is_array($source_files)) { foreach ($source_files as $source_file) { $file = new ProjectFile(); $file->setProjectId($project_id); $file->setFolderId($folder_map[$source_file->getFolderId()]); $file->setFileName($source_file->getFileName()); $file->setDescription($source_file->getDescription()); $file->setIsPrivate($source_file->getIsPrivate()); $file->setIsImportant($source_file->getIsImportant()); $file->setIsLocked($source_file->getIsLocked()); $file->setIsVisible($source_file->getIsVisible()); $file->setExpirationTime($source_file->getExpirationTime()); $file->setCommentsEnabled($source_file->getCommentsEnabled()); $file->setAnonymousCommentsEnabled($source_file->getAnonymousCommentsEnabled()); $file->save(); $source_revision = $source_file->getLastRevision(); if ($source_revision instanceof ProjectFileRevision) { $revision = new ProjectFileRevision(); $revision->setFileId($file->getId()); $revision->setRevisionNumber($source_revision->getRevisionNumber()); $revision->setRepositoryId($source_revision->getRepositoryId()); $revision->setFilesize($source_revision->getFilesize()); $revision->setFilename($source_revision->getFileName()); $revision->setTypeString($source_revision->getTypeString()); $revision->setThumbFilename($source_revision->getThumbFilename()); $revision->setFileTypeId($source_revision->getFileTypeId()); $revision->setComment($source_revision->getComment()); $revision->save(); } } // foreach } // if } // if if ($copy_pages) { $source_pages = Wiki::getAllProjectPages($source); if (is_array($source_pages)) { foreach ($source_pages as $source_page) { $page = new WikiPage(); $page->setProjectId($project_id); $page->setProjectIndex($source_page->getProjectIndex()); $page->setProjectSidebar($source_page->getProjectSidebar()); if (plugin_active('tags')) { //$page->setTags($source_page->getTagNames()); } //Make a new revision of this page $revision = $page->makeRevision(); $source_revision = $source_page->getLatestRevision(); //Set attributes $revision->setName($source_revision->getName()); $revision->setContent($source_revision->getContent()); $revision->setLogMessage($source_revision->getLogMessage()); //Save the page $page->save(); } // foreach } // if } // if if ($copy_users) { $source_companies = ProjectCompanies::instance()->getCompaniesByProject($source); if (is_array($source_companies)) { foreach ($source_companies as $source_company) { $project_company = new ProjectCompany(); $project_company->setCompanyId($source_company->getId()); $project_company->setProjectId($project_id); $project_company->save(); } // foreach } $source_users = ProjectUsers::instance()->getUsersByProject($source); if (is_array($source_users)) { foreach ($source_users as $source_user) { $project_user = new ProjectUser(); $project_user->setUserId($source_user->getId()); $project_user->setProjectId($project_id); $project_user->save(); } // foreach } } /* $permissions = array_keys(PermissionManager::getPermissionsText()); $auto_assign_users = owner_company()->getAutoAssignUsers(); // We are getting the list of auto assign users. If current user is not in the list // add it. He's creating the project after all... if (is_array($auto_assign_users)) { $auto_assign_logged_user = false; foreach ($auto_assign_users as $user) { if ($user->getId() == logged_user()->getId()) { $auto_assign_logged_user = true; } } // if if (!$auto_assign_logged_user) { $auto_assign_users[] = logged_user(); } } else { $auto_assign_users[] = logged_user(); } // if foreach ($auto_assign_users as $user) { $project_user = new ProjectUser(); $project_user->setProjectId($project->getId()); $project_user->setUserId($user->getId()); if (is_array($permissions)) { foreach ($permissions as $permission) { $user = Users::findById($project_user->getUserId()); $user->setProjectPermission($project,$permission,true); } } // if $project_user->save(); } // foreach */ ApplicationLogs::createLog($project, null, ApplicationLogs::ACTION_ADD, false, true); DB::commit(); flash_success(lang('success copy project', $source->getName(), $project->getName())); $this->redirectToUrl($project->getPermissionsUrl()); } catch (Exception $e) { echo $e->getMessage(); tpl_assign('error', $e); DB::rollback(); } // try } // if (submitted) }
public static function parseBBCode($text) { if (Format::$BBCodeParser === null) { Format::$BBCodeParser = new BBCodeParser(); /**********************************\ NO CLOSING TAGS \**********************************/ Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("separator", function ($tag, $parameter, $content) { return Separator::getInstance()->getHtml(); })); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("pin", function ($tag, $parameter, $content) { return Pin::getInstance()->getHtml(); })); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("advert", function ($tag, $parameter, $content) { return "<script src='http://www.blogbang.com/demo/js/blogbang_ad.php?id=6ee3436cd7' type='text/javascript'></script>"; })); /**********************************\ NO PARAMETERED TAGS \**********************************/ $notFormattedContent = function ($tag, $parameter, $content) { return BBCodeDescriptor::contentToString($content); }; $simpleOpenTag = function ($tag, $parameter, $content) { return "<{$tag}>"; }; $simpleCloseTag = function ($tag, $parameter, $content) { return "</{$tag}>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("b", $simpleOpenTag, $simpleCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("i", $simpleOpenTag, $simpleCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("u", $simpleOpenTag, $simpleCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("s", $simpleOpenTag, $simpleCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("code", $simpleOpenTag, $simpleCloseTag, $notFormattedContent)); /**********************************\ TITLE \**********************************/ $titleOpenTag = function ($tag, $parameter, $content) { $level = 1; if ($parameter === null) { // let as is } else { $parameters = preg_split('#\\|#', $parameter); $level = $parameters[0]; } return "<h" . $level . ">"; }; $titleContent = function ($tag, $parameter, $content) { $level = 1; static $lastNumbers = array(); if ($parameter === null) { // let as is } else { $parameters = preg_split('#\\|#', $parameter); $level = $parameters[0]; if (count($parameters) == 2) { if ($parameters[1] == 'number') { if (in_array($level, array_keys($lastNumbers))) { $lastNumbers[$level]++; } else { $lastNumbers[$level] = 1; } $content = $lastNumbers[$level] . ". " . $content; } else { throw new Exception($parameters[1] . " is not a known parameter"); } } else { // do nothing special } } return $content; }; $titleCloseTag = function ($tag, $parameter, $content) { $level = 1; if ($parameter === null) { // let as is } else { $parameters = preg_split('#\\|#', $parameter); $level = $parameters[0]; } return "</h" . $level . ">"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("title", $titleOpenTag, $titleCloseTag, $titleContent)); /**********************************\ SIZE \**********************************/ $sizeOpenTag = function ($tag, $parameter, $content) { $parameter = is_numeric($parameter) ? $parameter . 'em' : $parameter; return "<span style='font-size: " . $parameter . ";'>"; }; $sizeCloseTag = function ($tag, $parameter, $content) { return "</span>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("size", $sizeOpenTag, $sizeCloseTag)); /**********************************\ COLORS \**********************************/ $colorOpenTag = function ($tag, $parameter, $content) { return "<span style='color: {$parameter};'>"; }; $colorCloseTag = function ($tag, $parameter, $content) { return "</span>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("color", $colorOpenTag, $colorCloseTag)); /**********************************\ ALIGNEMENT \**********************************/ $alignOpenTag = function ($tag, $parameter, $content) { if ($tag === 'align') { $tag = empty($parameter) ? 'inherited' : $parameter; } if (in_array($tag, array('left', 'right', 'center', 'justify'))) { return "<div style='text-align: {$tag};'>"; } else { throw new Exception($tag . " is not managed"); } }; $alignCloseTag = function ($tag, $parameter, $content) { return "</div>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("left", $alignOpenTag, $alignCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("right", $alignOpenTag, $alignCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("center", $alignOpenTag, $alignCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("justify", $alignOpenTag, $alignCloseTag)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("align", $alignOpenTag, $alignCloseTag)); /**********************************\ LISTS & LIST ITEMS \**********************************/ $listOpenTag = function ($tag, $parameter, $content) { if ($tag === 'list') { return $parameter === '1' ? '<ol>' : '<ul>'; } else { if ($tag === 'item') { return '<li>'; } else { throw new Exception($tag . " is not managed"); } } }; $listCloseTag = function ($tag, $parameter, $content) { if ($tag === 'list') { return $parameter === '1' ? '</ol>' : '</ul>'; } else { if ($tag === 'item') { return '</li>'; } else { throw new Exception($tag . " is not managed"); } } }; $listContent = function ($tag, $parameter, $content) { if ($tag === 'list') { $content = Format::trimAndCleanArray($content); return BBCodeDescriptor::defaultContentCallback($tag, $parameter, $content); } }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("list", $listOpenTag, $listCloseTag, $listContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("item", $listOpenTag, $listCloseTag)); /**********************************\ IMAGES \**********************************/ $imageOpenTag = function ($tag, $parameter, $content) { if (empty($parameter)) { $parameter = $content; $content = null; } if (empty($parameter)) { throw new Exception("No image given"); } if ($tag === 'img') { $image = new Image($parameter, $content); } else { if (in_array($tag, array('img-left', 'imgl'))) { $image = new Image($parameter, $content); $image->makeLeftFloating(); } else { if (in_array($tag, array('img-right', 'imgr'))) { $image = new Image($parameter, $content); $image->makeRightFloating(); } else { if (in_array($tag, array('img-auto', 'imga'))) { $image = new AutoFloatImage($parameter, $content); } else { if (in_array($tag, array('img-auto-right', 'imgar'))) { $image = new AutoFloatImage($parameter, $content, true); } else { if (in_array($tag, array('img-auto-left', 'imgal'))) { $image = new AutoFloatImage($parameter, $content, false); } else { throw new Exception($tag . " is not managed"); } } } } } } return $image->getCurrentHTML(); }; $imageCloseTag = function ($tag, $parameter, $content) { return ""; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img-right", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("imgr", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img-left", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("imgl", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img-auto", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("imga", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img-auto-left", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("imgal", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("img-auto-right", $imageOpenTag, $imageCloseTag, null)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("imgar", $imageOpenTag, $imageCloseTag, null)); /**********************************\ GENERIC LINKS \**********************************/ $linkOpenTag = function ($tag, $parameter, $content) { if (empty($parameter) && empty($content)) { throw new Exception("no data has been given"); } else { if (empty($content)) { $content = $parameter; } else { if (empty($parameter)) { $parameter = $content; } else { // nothing is empty, so let as is } } } if (in_array($tag, array('url', 'ext'))) { $link = new Link($parameter, $content); if ($tag == 'ext' || $tag == 'url' && !$link->isLocalLink()) { $link->openNewWindow(true); } } else { if ($tag == 'urlk') { $parameter = preg_split('#\\|#', $parameter); $url = null; if (in_array('current', $parameter)) { $url = Url::getCurrentUrl(); } else { if (in_array('referer', $parameter)) { $url = new Url($_SERVER['HTTP_REFERER']); } else { throw new Exception("no address keyword has been given (like 'current' or 'referer')"); } } $full = false; if (in_array('full', $parameter)) { $full = true; } $link = new Link($url, $content, $full); if (!$link->isLocalLink()) { $link->openNewWindow(true); } } else { if ($tag == 'mail') { if (is_numeric($parameter)) { $parameter = TeamMember::getMember(intval($parameter))->getMail(); } $link = new MailLink($parameter, $content); } else { throw new Exception($tag . " is not managed"); } } } return $link->getOpenTag(); }; $linkContent = function ($tag, $parameter, $content) { if ($tag === 'urlk') { if ($content === null) { $parameter = preg_split('#\\|#', $parameter); $url = null; if (in_array('current', $parameter)) { $url = Url::getCurrentUrl(); } else { if (in_array('referer', $parameter)) { $url = new Url($_SERVER['HTTP_REFERER']); } else { throw new Exception("no address keyword has been given (like 'current' or 'referer')"); } } $full = false; if (in_array('full', $parameter)) { $full = true; } $content = $url->toString($full); } } return BBCodeDescriptor::contentToHTML($content); }; $linkCloseTag = function ($tag, $parameter, $content) { return "</a>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("url", $linkOpenTag, $linkCloseTag, $linkContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("urlk", $linkOpenTag, $linkCloseTag, $linkContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("ext", $linkOpenTag, $linkCloseTag, $linkContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("mail", $linkOpenTag, $linkCloseTag, $linkContent)); /**********************************\ SPECIAL LINKS \**********************************/ $releaseOpenTag = function ($tag, $parameter, $content) { $parameter = preg_split('#\\|#', $parameter); if ($parameter[1] === '*') { $parameter[1] = Release::getAllReleasesIDForProject($parameter[0]); } else { $parameter[1] = Format::trimAndCleanArray(preg_split('#,#', $parameter[1])); } $link = new ReleaseLink($parameter[0], $parameter[1], null); return $link->getOpenTag(); }; $releaseContent = function ($tag, $parameter, $content) { if (empty($content)) { $parameter = preg_split('#\\|#', $parameter); if ($parameter[1] === '*') { $parameter[1] = Release::getAllReleasesIDForProject($parameter[0]); } else { $parameter[1] = Format::trimAndCleanArray(preg_split('#,#', $parameter[1])); } $projectName = Project::getProject($parameter[0])->getName(); $numbers = array(); $others = array(); foreach ($parameter[1] as $key => $id) { if (preg_match("#^ep\\d+\$#", $id)) { $numbers[] = substr($id, 2); } else { $others[] = $id; } } sort($numbers); if (!empty($numbers)) { $ref = 0; $last = $numbers[0]; for ($i = 1; $i < count($numbers); $i++) { $current = $numbers[$i]; if ($current == $last + 1) { $numbers[$i] = null; } else { if ($numbers[$ref] != $last) { $numbers[$ref] .= "-" . $last; } $ref = $i; } $last = $current; } if ($numbers[$ref] != $last) { $numbers[$ref] .= "-" . $last; } $numbers = array_filter($numbers); $list = implode(", ", $numbers) . ", "; } foreach ($others as $id) { $list = Release::getRelease($parameter[0], $id)->getName() . ", "; } $list = substr($list, 0, strlen($list) - 2); return $projectName . " " . $list; } else { return BBCodeDescriptor::contentToHTML($content); } }; $partnerOpenTag = function ($tag, $parameter, $content) { if (empty($parameter)) { $parameter = $content; $content = null; } $parameter = preg_split('#\\|#', $parameter); $partner = null; $useImage = false; foreach ($parameter as $param) { try { $partner = Partner::getPartner($param); } catch (Exception $e) { if ($param === 'image') { $useImage = true; } } } if ($partner === null) { $partner = Partner::getPartner($content); $content = null; } $link = new PartnerLink($partner, BBCodeDescriptor::contentToHTML($content)); $link->openNewWindow(true); if ($useImage) { $link->setUseImage(true); } return $link->getOpenTag(); }; $partnerContent = function ($tag, $parameter, $content) { if (empty($parameter)) { $parameter = $content; $content = null; } $parameter = preg_split('#\\|#', $parameter); $partner = null; $useImage = false; foreach ($parameter as $param) { try { $partner = Partner::getPartner($param); } catch (Exception $e) { if ($param === 'image') { $useImage = true; } } } if ($partner === null) { $partner = Partner::getPartner($content); $content = null; } $link = new PartnerLink($partner, BBCodeDescriptor::contentToHTML($content)); $link->openNewWindow(true); if ($useImage) { $link->setUseImage(true); } return $link->getHTMLContent(); }; $projectOpenTag = function ($tag, $parameter, $content) { if (empty($parameter)) { $link = new ProjectLink(Project::getProject($content)); } else { $parameter = preg_split('#\\|#', $parameter); try { $link = new ProjectLink(Project::getProject($parameter[0])); } catch (Exception $e) { $link = new ProjectLink(Project::getProject($content)); } } return $link->getOpenTag(); }; $projectContent = function ($tag, $parameter, $content) { if (empty($parameter)) { $link = new ProjectLink(Project::getProject($content)); } else { $parameter = preg_split('#\\|#', $parameter); try { $link = new ProjectLink(Project::getProject($parameter[0])); if (!empty($content)) { $link->setContent(BBCodeDescriptor::contentToHTML($content)); } } catch (Exception $e) { $link = new ProjectLink(Project::getProject($content)); } if (in_array('image', $parameter)) { $link->useImage(true); } } return $link->getHTMLContent(); }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("release", $releaseOpenTag, $linkCloseTag, $releaseContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("project", $projectOpenTag, $linkCloseTag, $projectContent)); Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("partner", $partnerOpenTag, $linkCloseTag, $partnerContent)); /**********************************\ SPOILER \**********************************/ $spoilerOpenTag = function ($tag, $parameter, $content) { static $id = 0; $id++; $index = 0; while (empty($parameter)) { $parameter = $content[$index]; if (is_string($parameter)) { $parameter = trim($parameter); } $index++; } if ($parameter instanceof BBCodeDescriptor) { $parameter = $parameter->generateHTML(); } // TODO show the spoiler if javascript deactivated return "<a href=\"#\" onclick=\"show('spoiler{$id}');return(false)\">{$parameter}</a><object id=\"spoiler{$id}\" style=\"display: none;\">"; }; $spoilerContent = function ($tag, $parameter, $content) { $index = 0; while (empty($parameter)) { $parameter = $content[$index]; if (is_string($parameter)) { $parameter = trim($parameter); } $index++; } if ($index > 0) { unset($content[$index - 1]); } return BBCodeDescriptor::defaultContentCallback($tag, $parameter, $content); }; $spoilerCloseTag = function ($tag, $parameter, $content) { return '</object>'; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("spoiler", $spoilerOpenTag, $spoilerCloseTag, $spoilerContent)); /**********************************\ VIDEOS \**********************************/ function parseVideoParameter($parameter) { $parameter = preg_split('#\\|#', $parameter); $result = array(); foreach ($parameter as $row) { $row = preg_split('#:#', $row); if (in_array($row[0], array('width', 'height'))) { $result[$row[0]] = $row[1]; } else { throw new Exception($row[0] . " is not managed"); } } if (!isset($result['width']) || $result['width'] <= 0) { throw new Exception("The width of the video is not well defined"); } if ($result['height'] <= 0) { throw new Exception("The height of the video is not well defined"); } return $result; } $videoOpenTag = function ($tag, $parameter, $content) { $parameter = parseVideoParameter($parameter); $width = $parameter['width']; $height = $parameter['height']; return "<object width='{$width}' height='{$height}'><param name='allowfullscreen' value='true' /><param name='allowscriptaccess' value='always' /><param name='movie' value='{$content}' />"; }; $videoContent = function ($tag, $parameter, $content) { $parameter = parseVideoParameter($parameter); $width = $parameter['width']; $height = $parameter['height']; return "<embed src='{$content}' type='application/x-shockwave-flash' allowfullscreen='true' allowscriptaccess='always' width='{$width}' height='{$height}'></embed>"; }; $videoCloseTag = function ($tag, $parameter, $content) { return "</object>"; }; Format::$BBCodeParser->addDescriptor(new BBCodeDescriptor("video", $videoOpenTag, $videoCloseTag, $videoContent)); } return Format::$BBCodeParser->translate($text); }