00001 <?php
00002
00011 abstract class TKSnapPreview extends TKNullBox {
00012 protected $version;
00013 protected $mode;
00014
00015 const MODE_DEFAULT = 0;
00016 const MODE_BASIC = 1;
00017
00025 public function __construct($version, $mode = self::MODE_DEFAULT) {
00026 parent::__construct();
00027
00028 $this->version = $version;
00029 $this->mode = $mode;
00030
00031 $this->showInfoInt();
00032 $this->previewVersion();
00033 }
00034
00036 private function showInfoInt() {
00037 if($this->mode != self::MODE_DEFAULT)
00038 return;
00039
00040 $version = $this->version;
00041
00042 $obj = $this->showAdditionalInfo();
00043 if($obj != null) {
00044 $this->addText("<br /><h3>Additional Info</h3>");
00045 $this->add($obj);
00046 $this->addText("<br /><br />\n");
00047 }
00048 }
00049
00051 private function previewVersion() {
00052 $version = $this->version;
00053
00054 $contentType = $version->getResource()->getContentType();
00055 if($contentType == SnapResource::TYPE_HTML || $contentType == SnapResource::TYPE_STDXML
00056 || $contentType == SnapResource::TYPE_INTERACTIVATE_LESSON
00057 || $contentType == SnapResource::TYPE_INTERACTIVATE_INSTRUCTOR
00058 || $contentType == SnapResource::TYPE_LESSONPLAN)
00059 {
00060 $ss = $version->getResource()->getStylesheets();
00061 if(count($ss) > 0) {
00062 foreach($ss as $s) {
00063 if(!$s->getActiveVersion())
00064 $GLOBALS['prm']->flash('NOTICE: No active version for stylesheet \'' . $s->getCanonicalPath() . '\'');
00065 else
00066 $GLOBALS['prm']->includeCSS($s->getActiveVersion()->getContentModule()->getLinkURL(), null);
00067 }
00068 }
00069 }
00070
00071 $type = $version->getResource()->getContentType();
00072 $translators = $this->getTranslators();
00073 $ids = array();
00074
00075 $i = 0;
00076 $myId = $this->getId();
00077 foreach($translators as $name => $t) {
00078 $ids[$name] = "{$myId}_preview_$i";
00079 $i++;
00080 }
00081
00082
00083 $transSelect = new TKSelect('trans');
00084 $i = 0;
00085 foreach($translators as $name => $t) {
00086 $transSelect->addOption("$ids[$name]", "$name ($t)");
00087 $evt = "onselect$i";
00088 $evt2 = "ondeselect$i";
00089 $transSelect->setAction($evt, "document.getElementById('$ids[$name]').style.display='block'");
00090 $transSelect->setAction($evt2, "document.getElementById('$ids[$name]').style.display='none'");
00091 $i++;
00092 if($this->mode == self::MODE_BASIC)
00093 break;
00094 }
00095
00096 if($this->mode == self::MODE_DEFAULT) {
00097 $transSelect->addOption('raw', 'Formatted Source');
00098 $transSelect->addOption('raw2', 'Raw Source');
00099 $evt = "onselect$i";
00100 $evt2 = "ondeselect$i";
00101 $transSelect->setAction($evt, "document.getElementById('{$myId}_rawDisplay').style.display='block'");
00102 $transSelect->setAction($evt2, "document.getElementById('{$myId}_rawDisplay').style.display='none'");
00103 $i++;
00104 $evt = "onselect$i";
00105 $evt2 = "ondeselect$i";
00106 $transSelect->setAction($evt, "document.getElementById('{$myId}_rawDisplay2').style.display='block'");
00107 $transSelect->setAction($evt2, "document.getElementById('{$myId}_rawDisplay2').style.display='none'");
00108
00109 $curStatus = isset($_REQUEST['curStatus']) ? $_REQUEST['curStatus'] : 'none';
00110 $basePath = preg_replace("/curStatus=[a-zA-Z]*&whichSite=(viewDev|viewProd)/", "", $_SERVER['REQUEST_URI']);
00111 if(strpos($basePath, "?") === false)
00112 $basePath .= "?";
00113 else if(substr($basePath, -1) != '?')
00114 $basePath .= "&";
00115 $whichSite = new TKSelect('whichSite');
00116 $whichSite->addOption('viewDev', 'Dev');
00117 $whichSite->addOption('viewProd', 'Live');
00118 switch($this->version->getStatus()) {
00119 case SnapVersion::STATUS_PRIVATE:
00120 $newStatus = 'private';
00121 $defaultView = 'viewDev';
00122 break;
00123 case SnapVersion::STATUS_PENDING:
00124 $newStatus = 'pending';
00125 $defaultView = 'viewDev';
00126 break;
00127 case SnapVersion::STATUS_DEV:
00128 $newStatus = 'dev';
00129 $defaultView = 'viewDev';
00130 break;
00131 case SnapVersion::STATUS_DEFUNCT:
00132 $newStatus = 'defunct';
00133 $defaultView = 'viewDev';
00134 break;
00135 case SnapVersion::STATUS_LIVE:
00136 $newStatus = 'live';
00137 $defaultView = 'viewProd';
00138 break;
00139 }
00140 if($curStatus != $newStatus)
00141 $_REQUEST['whichSite'] = $defaultView;
00142 $whichSite->selected = (isset($_REQUEST['whichSite']) ? $_REQUEST['whichSite'] : $defaultView);
00143 $whichSite->setAction('onselect0', new TKLinkAction("${basePath}curStatus=$newStatus&whichSite=viewDev"));
00144 $whichSite->setAction('onselect1', new TKLinkAction("${basePath}curStatus=$newStatus&whichSite=viewProd"));
00145
00146 switch($whichSite->selected[0]) {
00147 case 'viewDev':
00148 $serverClass = 'dev';
00149 break;
00150 case 'viewProd':
00151 default:
00152 $serverClass = 'prod';
00153 break;
00154 }
00155
00156 $this->addText("<h3>Content Preview</h3><br />Use translator: ");
00157 $this->add($transSelect);
00158 $this->addText("<br />View ");
00159 $this->add($whichSite);
00160 $this->addText(" versions of media (images, applets, etc.)");
00161
00162 $collect = "<br /><br /><h4>Preview</h4>\n";
00163 }
00164 else
00165 $collect = '';
00166
00167
00168 $first = true;
00169 $temp_prm = new PageRender2();
00170 if($this->mode == self::MODE_DEFAULT) {
00171 $oldServerClass = SConfig::getOption('common.serverClass');
00172 SConfig::setDefault('common.serverClass', $serverClass);
00173 }
00174 $oldMode = SObject::setXmlErrorMode(SObject::XML_ERROR_MODE_REDIRECT);
00175 foreach($translators as $name => $t) {
00176 if(!$first)
00177 $disp = " style=\"display:none\"";
00178 else {
00179 $disp = "";
00180 $first = false;
00181 }
00182 $collect .= "<div id=\"$ids[$name]\" class=\"previewFrame\"$disp>\n";
00183 $transClass = $temp_prm->getClassInstance($t);
00184 $if = $transClass->getInFormat();
00185 $pms = array('inFormat' => $if, "translator_$if" => $t, 'trans_target' => 'HiddenTempSlot',
00186 'trans_mode' => 'setSlot');
00187 $pms = array_merge($pms, $this->getParameters($name));
00188 $temp_prm->load($version, $pms);
00189 $collect .= $temp_prm->getPage()->getSlot('HiddenTempSlot');
00190 $collect .= "</div>\n";
00191 if($this->mode == self::MODE_BASIC)
00192 break;
00193 }
00194 SObject::setXmlErrorMode($oldMode);
00195 if($this->mode == self::MODE_DEFAULT) {
00196 SConfig::setDefault('common.serverClass', $oldServerClass);
00197
00198 if(count($translators) == 0)
00199 $noFormDisplay = '';
00200 else
00201 $noFormDisplay = ' style="display:none"';
00202
00203 $collect .= "<div id=\"{$myId}_rawDisplay\" class=\"previewFrame\"$noFormDisplay>\n";
00204 $collect .= $this->getFormattedSource();
00205 $collect .= "</div>\n";
00206 $collect .= "<div id=\"{$myId}_rawDisplay2\" class=\"previewFrame\" style=\"display:none\"><tt><pre>"
00207 . htmlspecialchars($version->getContent()) . "</pre></tt></div>\n";
00208 }
00209
00210 $this->addText($collect);
00211 }
00212
00221 protected abstract function getTranslators();
00222
00233 protected abstract function getFormattedSource();
00234
00244 protected function showAdditionalInfo() {
00245 return null;
00246 }
00247
00257 protected function getParameters($name) {
00258 return array();
00259 }
00260 }
00261
00262 ?>