From ebc1c6ce120fb7142a24c5d41e9bc0969f69bfa2 Mon Sep 17 00:00:00 2001 From: Alexander O'Neill Date: Wed, 26 Jan 2011 14:47:30 -0400 Subject: [PATCH] Moved renderCollection to CollectionClass.inc --- CollectionClass.inc | 83 +++++++++++++++++- ObjectHelper.inc | 2 +- ...8px-Crystal_Clear_app_download_manager.png | Bin 0 -> 4049 bytes images/Crystal_Clear_app_download_manager.png | Bin 0 -> 11019 bytes 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 images/48px-Crystal_Clear_app_download_manager.png create mode 100644 images/Crystal_Clear_app_download_manager.png diff --git a/CollectionClass.inc b/CollectionClass.inc index 266f04e1..ad736e65 100644 --- a/CollectionClass.inc +++ b/CollectionClass.inc @@ -397,6 +397,20 @@ class CollectionClass { return TRUE; } + /** + * Queries a collection object for an xslt to format how the + * collection of objects is displayed. + */ + function getXslContent($pid, $path, $canUseDefault = TRUE) { + module_load_include('inc', 'fedora_repository', 'CollectionClass'); + $collectionClass = new CollectionClass(); + $xslContent = $collectionClass->getCollectionViewStream($pid); + if (!$xslContent && $canUseDefault) { //no xslt so we will use the default sent with the module + $xslContent = file_get_contents($path . '/xsl/sparql_to_html.xsl'); + } + return $xslContent; + } + function showFieldSets($page_number) { global $base_url; @@ -411,7 +425,7 @@ class CollectionClass { $objectHelper = new ObjectHelper(); $results = $this->getRelatedItems($this->pid, NULL); - $collection_items = $objectHelper->renderCollection($results, $this->pid, NULL, NULL, $page_number ); + $collection_items = $this->renderCollection($results, $this->pid, NULL, NULL, $page_number ); $collection_item = new Fedora_Item($this->pid); // Check the form post to see if we are in the middle of an ingest operation. $show_ingest_tab = (!empty($_POST['form_id']) && $_POST['form_id'] == 'fedora_repository_ingest_form'); @@ -484,5 +498,72 @@ class CollectionClass { return $ingestObject; } + + function renderCollection($content, $pid, $dsId, $collection, $pageNumber = NULL) { + $path = drupal_get_path('module', 'fedora_repository'); + global $base_url; + $collection_pid = $pid; //we will be changing the pid later maybe + //module_load_include('php', ''Fedora_Repository'', 'ObjectHelper'); + $objectHelper = new ObjectHelper(); + $parsedContent = NULL; + $contentModels = $objectHelper->get_content_models_list($pid); + $isCollection = FALSE; + //if this is a collection object store the $pid in the session as it will come in handy + //after a purge or ingest to return to the correct collection. + + $fedoraItem = NULL; + + + + $collectionName = $collection; + if (!$pageNumber) { + $pageNumber = 1; + } + + if (!isset($collectionName)) { + $collectionName = variable_get('fedora_repository_name', 'Collection'); + } + $xslContent = $this->getXslContent($pid, $path); + + //get collection list and display using xslt------------------------------------------- + $objectList = ''; + if (isset($content) && $content != FALSE) { + $input = new DomDocument(); + $input->loadXML(trim($content)); + $results = $input->getElementsByTagName('result'); + if ($results->length > 0) { + try { + $proc = new XsltProcessor(); + $proc->setParameter('', 'collectionPid', $collection_pid); + $proc->setParameter('', 'collectionTitle', $collectionName); + $proc->setParameter('', 'baseUrl', $base_url); + $proc->setParameter('', 'path', $base_url . '/' . $path); + $proc->setParameter('', 'hitPage', $pageNumber); + $proc->registerPHPFunctions(); + $xsl = new DomDocument(); + $xsl->loadXML($xslContent); + // php xsl does not seem to work with namespaces so removing it below + // I may have just been being stupid here + // $content = str_ireplace('xmlns="http://www.w3.org/2001/sw/DataAccess/rf1/result"', '', $content); + + $xsl = $proc->importStylesheet($xsl); + $newdom = $proc->transformToDoc($input); + + $objectList = $newdom->saveXML(); //is the xml transformed to html as defined in the xslt associated with the collection object + + if (!$objectList) { + throw new Exception("Invalid XML."); + } + } catch (Exception $e) { + drupal_set_message(t('!e', array('!e' => $e->getMessage())), 'error'); + return ''; + } + } + } else { + drupal_set_message(t("No Objects in this collection or bad query.")); + } + return $objectList; + } + } diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 6cf3a715..3276fc9f 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -783,7 +783,7 @@ class ObjectHelper { $xslContent = $this->getXslContent($pid, $path); //get collection list and display using xslt------------------------------------------- - + $objectList = ''; if (isset($content) && $content != FALSE) { $input = new DomDocument(); $input->loadXML(trim($content)); diff --git a/images/48px-Crystal_Clear_app_download_manager.png b/images/48px-Crystal_Clear_app_download_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..d2fc764b6e4a5ba619b4875fdf968428f060d454 GIT binary patch literal 4049 zcmV;?4=(VDP)Dk{6Ltn!w0rGe1?g@#(}^xAZaDE zf?a7>tJ%5wtnRKO(+|}%JG(n84U)rTM@Dsbbya=8{J!s>UuFwlX}bsLqV1x6*f#8a znask}rDQ$>2l!EUyN;LM3ko)A@<;q7-{AE)9(`qI1h3ToXeuI&(zl#=!-?O!^Nu?w z=gmArKcw&aq%OrfUm9HOGQI%e1-)U9ub=)pPk#5w6<*Id{+1tbfdAii^ovJ{J{o=I z(~o}IH(k^JwC!upea+WDTkrEaJ`AW=YKMHK7dGC}KsXVOg<}|D$b3fTGg6;k-rd!` z@CEbnJk_u&$*8>=fZ)}7qVNTYOORgTa5(R9xH8t^>LVbLw9_`;`^&!nnE~`%4;&N} zrxPpRS(ZhSc6GpkuFIS=~6iFg!XYCSH?ELco z7U0B%pf^fOQL^pC!^e}LD$ z?k)~2E-|;T_~w(Zz2%Q@IDYI%s6(Lxfs%qyhXg8M{A@rW3VOarR%AOenz`(f(Zv-2 zt^{bOZHzU+BOiR^?vt~xy*tY@@;s;4&*=7tblRQ#zrXX{fBE*e{{0hgfBXA?@>2n5 zt@*pJd^vpRLmz+m_B(DrI@y>);90xy0)s)HTD`{d@)A?YBnfLIMZ&Nc()WE5mz48B z;V;ww-S4HBw6hjM!P4>p4lk|n!^fYb-R>|kIYncBo;)uCf%xTTpLyzipZnZz{Q;2g z8^F1o`I)6?VsiXQT&>^=M;Iu)_ZV#uLXZ~)&U>~)sPFsqT#ugXF)W5<2o+r29f(5E zPCGa}c~OvN8F)b$8X{v5LX!EM$;PCNEAdT0O)0fi6vh4ky!Y71YGZ6wNk!^X9)024 zyf`>R?sLSdfQz1|TTgKOh9e|Cp;z?i7G1ioOW*bJ`N#wLE)NvtXW;~$tV7=={OMy~ z;47#83ZpgNd7>od#`@25bo?f?F=(wPfw)?o*lM-b_XiLJAyHhZX`^GM6#w zb1T>=sz{;j_1E9d>C=zx55Pv2Jc}#Z7%PROs>gZq;wfetv$Tsg-J(n45|W|}ox~+{ zU6*!I0(6UR8A3UbT@4^I0R{NXlME6rG%s*|<2-|803NEQ#&kT35P~R<;~)s_SHJo> zg!uga0E~{vqO2O~&;r~({WkvTi9g5bg5w8YL$heoEShwR4jtE_>$-G{E}f!7t7y^5 zJC^{qdscRzd9pO4-|y4xHEDL64Ew_!jWOEt-s?ZWvB{gkK@`PN5QJ6;v40sg){y0< zVzkj7&vZ1)1IHfbFHU`t&3ua^2ahmt1Gb7S*7J2X^UX4piY+#aO}crv9OVpr>T#JP zPjj+iMmk6t3bvG)WR8=s_~ zbSJgZ(&G_8)i?N+*=yq)iJcCDvLUYFh*L1lY5jK6vOTQmF}Jjlcs!P`H9QyTE-* zAK{5pr}^P?KPYcGYGU-kQ_cO*v&N;&`H`Jc`c9(1m`d-8tnoqdp4S3n5710f_)6r;7q112)UXft-L zRohhni;KqqbQp&9APn%{6GbtN=@}f7EXz5xyiBMAro%aYHTnSZbi~@)I@glAJ&hl~ zpL=H>B$OIsG(n(1N~RjqOi$0EwFd98#uAnQ!M*^(P%~CNWP%{r@qh=s2ZZFN6DOFQ znnEgt6OL&;$NQoWGxltQ)>@O7bA(PccUSM{-o}F%Y4P4usZ>~5K8TGXDwQfyNu(@q z6oeth*cuS-D+iPc8K0Oi#+bU2YNRlbWjWP2W@2IjA)r#J(Cu~@4Ejv?2Dh)?Ns{*Y z(cvFL?HX#+4Y*6*!+WP5#7KiwifXk&eQXRVC7WAK@**ct0ZPhIT^10>@ihUi@_>|z zIId`IOl3PHJfNgxtX@S(fs~Rcj%iF!)0m#Y3uvfmK2rN6H=er{w)O~{#PE*n-MlHk zlPHLYt5s&^W|?d>(7Ftv$XcB9BRfh355fQ&#Z@5OD@6D3K!CB4G1gS2x^#iH2CYL1 z+(@KL*h;m^^728(YIR&*@R9zf5EtP)lm7wH$oP)tJ?cK*Gk+g8D8Zw+f|NUg4+vsw z%Vfr*q(I;a!vJG#1+a5-hq!Rz$1m*xAp~I<){QkrN{J8xAs`GxChIknQiz@J%X7vW zR#uide*7>uA3Vt?XMUTvw(g|5R%3E=iu=P4^2njz=@9NqZy)()Pvb8CjYfh>Q#V?01?HMQ8Xw%Nju!a~VXiM*FYQ50!yqW<9Odgv;ETD?x54{KV7 zI{@2KwBGDcjWtWN<6Ky8GZ^MOVRQ)uyz>;!QEZ3EC@BSE$777n#WrNT8nfBz(N9x^ zD3e!8ffN!iA&O%ghB|s#8Ld{w85^IVpLFZmXtiBbZ4)@>IeTG~MK{5L>2cb<0j=%; z=iC(_Vw6u@HUQhRwE)6EQLkD|7_h$8q1_wot_%@EB9*|Gi<(fIy(`kol6YojnV-Ak zjRavZZmby@aVcRD0_Q#FR=4=c`E_)lSezMSdZJ2fHDRETBiENBIO$A9?i32O~P3X*o0 zq}v4{m}pF)0)+>f-9FuZO1)y4sK-pyBBU(6R5-UY(%a#nq(llq;T*{zauvdaQ*_K$Vdh$p)pKM zPHZm`aL&{0^l5bmgn`290BZtt7!at^VCOwW;mC@DG%d*TazAM&YhHXnF+mbm7DX}{n#HHyvG@7M@2k;KG3DH`U6%K2y9L>fr?SUW&0hEoR@h}Vt zlw^9g@sh>a_DHfzVRj^PH^eo6Cw4fLfR#h#QdJ5;GR$ykj*Tov+c6*zLgKyK8(?Z` zk+s#n9jjHUD+^Q9s?okn{JrWFvBw*+=e2Of`V>JKqJ{S`NU+w_0WGDXD6RouZOmk& z5k)4f{P@iCY&P2nA+P?6<>hg9T_bjmME zHsh9qr#Hm;ub`A7jw@Vu-BDVtEe;>Po{fz)uDk9CLcr4U zJQL&Nq*(z72E&BM&pgT?O*nqwRvJ@t03^MHEKRe$QtdK;PG^(#^%q+>w-Fn2Sk!Cu zdTshi!ra^vv$ONmYIUr&Xst2El;yP$rFX(|VRGouQ5F}M2?9l}R%dzn5S>norKJ@% zHr82Qz78QI2NtIptJN3`Go+BL_0DqchEw>uL;lEfD0(kQ$kU8|(%l4xy4YI)7t*oj4AF6e)9}D5O@a5yut6FhB@70tgAifIPpRMq>u0B$Jb4 zOi#~I6vvpIo#FWLV=OGpVT__NJ%*`N2*V74*+cdi&bu0{zdAwDoAKzaF_rL*H%}*pLBcgI(+yLAN}=@A*Dx(-HRBBRB~tZw*_)r4i6t$L`t(f z%$aBYb2v=?6?k#K0OhtNG=MSSX9fTafpws@R}B0wre@PkbRI?M00000NkvXXu0mjf Dd||DW literal 0 HcmV?d00001 diff --git a/images/Crystal_Clear_app_download_manager.png b/images/Crystal_Clear_app_download_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..77a1b8778d4e20027d225cbf0e7b18ad7f4b4986 GIT binary patch literal 11019 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