function parseRecord($s_id, $s_name, $s_container, $s_position, $s_created, $s_updated, $l_id, $l_url, $l_comment, $l_created, $l_updated, $l_accessed) { global $sections; global $count; $index = 0; while ($index < $count && $sections[$index]->getId() !== $s_id) { $index++; } if ($index === $count) { $sections[$count] = new Section(); $sections[$count]->setId($s_id)->setName($s_name)->setPosition($s_position)->setCreated($s_created)->setUpdated($s_updated); for ($i = 0; $i < $count; $i++) { if ($sections[$i]->getContainer() != null && $sections[$i]->getContainer()->getId() === $s_id) { $sections[$i]->setContainer($sections[$count]); $sections[$count]->addSection($sections[$i]); } } if ($s_container != null) { $i = 0; while ($i < $count) { if ($sections[$i]->getId() === $s_container) { $sections[$count]->setContainer($sections[$i]); $sections[$i]->addSection($sections[$count]); break; } $i++; } if ($i === $count) { $aux = new Section(); $aux->setId($s_container); $sections[$count]->setContainer($aux); } } $count++; } if ($l_id != null) { $link = new Link(); $link->setId($l_id)->setUrl($l_url)->setComment($l_comment)->setCreated($l_created)->setUpdated($l_updated)->setAccessed($l_accessed)->setSection($sections[$index]); $sections[$index]->addLink($link); } }
/** * Internal function to return a Section object from a row. * @param $row array * @return Section */ function &_returnSectionFromRow(&$row) { $section = new Section(); $section->setId($row['section_id']); $section->setJournalId($row['journal_id']); $section->setReviewFormId($row['review_form_id']); $section->setSequence($row['seq']); $section->setMetaIndexed($row['meta_indexed']); $section->setMetaReviewed($row['meta_reviewed']); $section->setAbstractsNotRequired($row['abstracts_not_required']); $section->setEditorRestricted($row['editor_restricted']); $section->setHideTitle($row['hide_title']); $section->setHideAuthor($row['hide_author']); $section->setHideAbout($row['hide_about']); $section->setDisableComments($row['disable_comments']); $section->setAbstractWordCount($row['abstract_word_count']); $this->getDataObjectSettings('section_settings', 'section_id', $row['section_id'], $section); HookRegistry::call('SectionDAO::_returnSectionFromRow', array(&$section, &$row)); return $section; }
function handleSectionNode(&$journal, &$sectionNode, &$issue, &$errors, &$user, $isCommandLine, &$dependentItems, $sectionIndex = null) { $sectionDao =& DAORegistry::getDAO('SectionDAO'); $errors = array(); $journalSupportedLocales = array_keys($journal->getSupportedLocaleNames()); // => journal locales must be set up before $journalPrimaryLocale = $journal->getPrimaryLocale(); // The following page or two is responsible for locating an // existing section based on title and/or abbrev, or, if none // can be found, creating a new one. $titles = array(); for ($index = 0; $node = $sectionNode->getChildByName('title', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.sectionTitleLocaleUnsupported', array('sectionTitle' => $node->getValue(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; // or ignore this error? } $titles[$locale] = $node->getValue(); } if (empty($titles)) { $errors[] = array('plugins.importexport.native.import.error.sectionTitleMissing', array('issueTitle' => $issue->getIssueIdentification())); return false; } $abbrevs = array(); for ($index = 0; $node = $sectionNode->getChildByName('abbrev', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.sectionAbbrevLocaleUnsupported', array('sectionAbbrev' => $node->getValue(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; // or ignore this error? } $abbrevs[$locale] = $node->getValue(); } $identifyTypes = array(); for ($index = 0; $node = $sectionNode->getChildByName('identify_type', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.sectionIdentifyTypeLocaleUnsupported', array('sectionIdentifyType' => $node->getValue(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; // or ignore this error? } $identifyTypes[$locale] = $node->getValue(); } $policies = array(); for ($index = 0; $node = $sectionNode->getChildByName('policy', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.sectionPolicyLocaleUnsupported', array('sectionPolicy' => $node->getValue(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; // or ignore this error? } $policies[$locale] = $node->getValue(); } // $title and, optionally, $abbrev contain information that can // be used to locate an existing section. Otherwise, we'll // create a new one. If $title and $abbrev each match an // existing section, but not the same section, throw an error. $section = null; $foundSectionId = $foundSectionTitle = null; $index = 0; foreach ($titles as $locale => $title) { $section = $sectionDao->getSectionByTitle($title, $journal->getId()); if ($section) { $sectionId = $section->getId(); if ($foundSectionId) { if ($foundSectionId != $sectionId) { // Mismatching sections found. Throw an error. $errors[] = array('plugins.importexport.native.import.error.sectionTitleMismatch', array('section1Title' => $title, 'section2Title' => $foundSectionTitle, 'issueTitle' => $issue->getIssueIdentification())); return false; } } else { if ($index > 0) { // the current title matches, but the prev titles didn't => error $errors[] = array('plugins.importexport.native.import.error.sectionTitleMatch', array('sectionTitle' => $title, 'issueTitle' => $issue->getIssueIdentification())); return false; } } $foundSectionId = $sectionId; $foundSectionTitle = $title; } else { if ($foundSectionId) { // a prev title matched, but the current doesn't => error $errors[] = array('plugins.importexport.native.import.error.sectionTitleMatch', array('sectionTitle' => $foundSectionTitle, 'issueTitle' => $issue->getIssueIdentification())); return false; } } $index++; } // check abbrevs: $abbrevSection = null; $foundSectionId = $foundSectionAbbrev = null; $index = 0; foreach ($abbrevs as $locale => $abbrev) { $abbrevSection = $sectionDao->getSectionByAbbrev($abbrev, $journal->getId()); if ($abbrevSection) { $sectionId = $abbrevSection->getId(); if ($foundSectionId) { if ($foundSectionId != $sectionId) { // Mismatching sections found. Throw an error. $errors[] = array('plugins.importexport.native.import.error.sectionAbbrevMismatch', array('section1Abbrev' => $abbrev, 'section2Abbrev' => $foundSectionAbbrev, 'issueTitle' => $issue->getIssueIdentification())); return false; } } else { if ($index > 0) { // the current abbrev matches, but the prev abbrevs didn't => error $errors[] = array('plugins.importexport.native.import.error.sectionAbbrevMatch', array('sectionAbbrev' => $sectionAbbrev, 'issueTitle' => $issue->getIssueIdentification())); return false; } } $foundSectionId = $sectionId; $foundSectionAbbrev = $abbrev; } else { if ($foundSectionId) { // a prev abbrev matched, but the current doesn't => error $errors[] = array('plugins.importexport.native.import.error.sectionAbbrevMatch', array('sectionAbbrev' => $foundSectionAbbrev, 'issueTitle' => $issue->getIssueIdentification())); return false; } } $index++; } if (!$section && !$abbrevSection) { // The section was not matched. Create one. // Note that because sections are global-ish, // we're not maintaining a list of created // sections to delete in case the import fails. unset($section); $section = new Section(); $section->setTitle($titles, null); $section->setAbbrev($abbrevs, null); $section->setIdentifyType($identifyTypes, null); $section->setPolicy($policies, null); $section->setJournalId($journal->getId()); $section->setSequence(REALLY_BIG_NUMBER); $section->setMetaIndexed(1); $section->setEditorRestricted(1); $section->setId($sectionDao->insertSection($section)); $sectionDao->resequenceSections($journal->getId()); } if (!$section && $abbrevSection) { unset($section); $section =& $abbrevSection; } // $section *must* now contain a valid section, whether it was // found amongst existing sections or created anew. // Handle custom ordering, if necessary. if ($sectionIndex !== null) { $sectionDao->insertCustomSectionOrder($issue->getId(), $section->getId(), $sectionIndex); } $hasErrors = false; for ($index = 0; $node = $sectionNode->getChildByName('article', $index); $index++) { if (!NativeImportDom::handleArticleNode($journal, $node, $issue, $section, $article, $publishedArticle, $articleErrors, $user, $isCommandLine, $dependentItems)) { $errors = array_merge($errors, $articleErrors); $hasErrors = true; } } if ($hasErrors) { return false; } return true; }
public function addSection($title) { $section = new Section($this->addSubElement("section")); $section->setId("section_" . $this->getNewSectionId()); $section->setTitle($title); $section->setPublished(false); $this->saveDOM(); return $section; }
function getAllSection() { $key = 'section'; $collection = CacheManager::get($key, TRUE); if ($collection) { return $collection; } $collection = new Collection(); $this->connect(); $result = $this->conn->query("CALL sp_get_all_section()"); if ($result) { //$row = $result->fetch_assoc(); while ($obj = $result->fetch_object()) { $section = new Section(); $section->setId($obj->Section_id); $section->setName($obj->Section_name); $collection->addItem($section, $obj->Section_id); } $result->close(); // for fetch_object() } //$result->free_result(); // for fetch_assoc() $this->close(); CacheManager::set($key, $collection, TRUE); return $collection; }