SHINDIG-1056 by lipeng, BasicRemoteContentTest doesn't depend on static private key...
[shindig.git] / php / src / gadgets / render / GadgetRenderer.php
blobee2209fbbbc1f18739dd3bb39e4fa7a71f85cbd2
1 <?php
2 /**
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
21 /**
22 * base class that all the rendering methods inherit from
25 abstract class GadgetRenderer {
26 protected $context;
28 public function __construct(GadgetContext $context) {
29 $this->context = $context;
32 /**
33 * generates the library string (core:caja:etc.js) including a checksum of all the
34 * javascript content (?v=<md5 of js>) for cache busting
36 * @param string $libs
37 * @param Gadget $gadget
38 * @return string the list of libraries in core:caja:etc.js?v=checksum> format
40 protected function getJsUrl($features) {
41 $ret = '';
42 if (! is_array($features) || ! count($features)) {
43 $ret = 'core';
44 } else {
45 $ret = implode(':', $features);
47 $cache = Cache::createCache(Config::get('feature_cache'), 'FeatureCache');
48 if (($md5 = $cache->get(md5('getJsUrlMD5'))) === false) {
49 $registry = $this->context->getRegistry();
50 $features = $registry->features;
52 // Build a version string from the md5() checksum of all included javascript
53 // to ensure the client always has the right version
54 $inlineJs = '';
55 foreach ($features as $feature => $content) {
56 $inlineJs .= $registry->getFeatureContent($feature, $this->context, true);
58 $md5 = md5($inlineJs);
59 $cache->set(md5('getJsUrlMD5'), $md5);
61 $ret .= ".js?v=" . $md5;
62 return $ret;
65 abstract function renderGadget(Gadget $gadget, $view);