All pastes #909124 Raw Edit

Stuff

public text v1 · immutable
·published 2008-02-18 22:50 UTC
rendered paste body
/**
 * Get HTML for an image block
 *
 * @param array $params ('blocks' => string, 'show' => string, (optional)'heading' => int,
 *        (optional)'itemId' => int, (optional)'maxSize' => int, (optional)'exactSize' => int,
 *        (optional)'itemFrame' => frameId, (optional)'albumFrame' => frameId)
 * 'blocks' is a pipe (|) separated list, of one or more possible blocks which are:
 * randomImage|recentImage|viewedImage|randomAlbum|recentAlbum|viewedAlbum|specificItem
 * dailyImage|weeklyImage|monthlyImage|dailyAlbum|weeklyAlbum|monthlyAlbum
 * 'show' is a pipe (|) separated list of one or more possible choices which are:
 * title|date|views|owner|heading|fullSize or just 'none'
 * If you choose 'blocks' => 'specificItem', you must specify 'itemId' too.
 * example: GalleryEmbed::getImageBlock(array('blocks' => 'randomImage',
 *                                            'show' => 'title|date'));
 * itemFrame/albumFrame may require CSS to be displayed.
 * See Image Block Site Admin page for info on optional parameters.
 * @return array object GalleryStatus
 *               string html content
 *               string head content or null if none required
 */
function g2_getLightImageBlock($params,$size=null,$cssclass=null) {

	// Get WPG2 Option Settings
	$wpg2_option = get_option('wpg2_options');

	// Initialize Gallery
		if (!defined('G2INIT')) {
		$ret = g2_login();
		if ($ret) {
		echo '<h2>' . __('Fatal G2 error', 'wpg2') . '</h2> ' . __("Here's the error from G2: ", 'wpg2') . $ret->getAsHtml();
		exit;
		}
	}

	global $gallery;
	$moduleId = 'imageblock';
	$blockHtml = $headHtml = null;

	$session =& $gallery->getSession();
	$ret = $session->start();
	if ($ret) {
		return array($ret, null, null, null);
	}
	$session->doNotUseTempId();

	/* Load the module list */
	list ($ret, $moduleStatus) = GalleryCoreApi::fetchPluginStatus('module');
	if ($ret) {
		return array($ret, null, null, null);
	}

	if (isset($moduleStatus[$moduleId]) && !empty($moduleStatus[$moduleId]['active'])
		&& $moduleStatus[$moduleId]['active']) {
		/* Load the G2 templating engine */
		GalleryCoreApi::requireOnce('modules/core/classes/GalleryTemplate.class');

		$template = new GalleryTemplate(dirname(__FILE__));
		$template->setVariable('l10Domain', 'modules_' . $moduleId);

		if (!isset($params['maxSize'])) {
		$params['maxSize'] = null;
		}

		/* Generate the imageblock */
		GalleryCoreApi::requireOnce(
			'modules/imageblock/classes/ImageBlockHelper.class');
		$ret = ImageBlockHelper::loadImageBlocks($template, $params);
		if ($ret) {
			return array($ret, null, null, null);
		}

		if ($template->hasVariable('ImageBlockData')) {
			$ImageBlockData =& $template->getVariableByReference('ImageBlockData');
			$ImageBlockData['forceFullUrl'] = 1;
			$ImageBlockData['divClass'] = $cssclass;
			$g2_isalbum = NULL;

			if ($size) {
				foreach ($ImageBlockData['blocks'] as $blockid => $className) {
					if (!$ImageBlockData['blocks'][$blockid]['item']['canContainChildren']) {
						$g2_isalbum = NULL;
						$g2_link = NULL;
						list ($ret, $ImageBlockData['blocks'][$blockid]['lightboxid'], $isViewable) = g2_lightboxgetItemUrls($ImageBlockData['blocks'][$blockid]['id'],$size);
						if ($ret) {
							return array($ret, null, null, null);
						} else {
							if ($isViewable === FALSE)
								$g2_isalbum = true;
						}
					} else
						$g2_isalbum = true;
				}
			}

			$tpl = 'templates/wpg2imageblock.tpl';

			/* Render and get the imageblock html */
			list ($ret, $blockHtml) = $template->fetch("gallery:$tpl");
			if ($ret) {
				return array($ret, null, null, null);
			}

		}
	} else {
		return array(GalleryCoreApi::error(ERROR_CONFIGURATION_REQUIRED), null, null, null);
	}
	return array(null, $blockHtml, $headHtml, $g2_isalbum);
}

/**
* Get the thumbnail URL and the URL of the image version that is the closest to the requested size.
*
* @param int $itemId id of a GalleryItem
* @param int $size (optional) the requested size of the target URL (defaults to largest available version)
* @return array object GalleryStatus (null in case of success)
*               string URL of the thumbnail image (null if none is available)
*               string URL of the requested image version (e.g. the largest version) or null if none is available
*/
function g2_lightboxgetItemUrls($itemId, $size=null) {

	if (!defined('G2INIT')) {
		$ret = g2_login();
		if ($ret) {
			echo '<h2>' . __('Fatal G2 error', 'wpg2') . '</h2> ' . __("Here's the error from G2: ", 'wpg2') . $ret->getAsHtml();
			exit;
		}
	}

	global $gallery;
	$urlGenerator =& $gallery->getUrlGenerator();

	$thumbUrl = $targetUrl = null;

	list ($ret, $permissions) = GalleryCoreApi::getPermissions($itemId);
	if ($ret) {
		return array($ret, null, null);
	}

	if (!isset($permissions['core.view'])) {
		return array (null, null, null); // no access
	}

	list ($ret, $thumbnail) = GalleryCoreApi::fetchThumbnailsByItemIds(array($itemId));
	if ($ret) {
		return $ret;
	}

	$targetCandidates = array();
	if (!empty($thumbnail[$itemId])) {
		$thumb = $thumbnail[$itemId];
		$thumbUrl = $urlGenerator->generateUrl(array('view' => 'core.DownloadItem', 'itemId' => $thumb->getId(), 'serialNumber' => $thumb->getSerialNumber()), array('forceFullUrl' => true));

		$targetCandidates[] = $thumb;
	}

	if (isset($permissions['core.viewResizes'])) {
		list ($ret, $resizes) = GalleryCoreApi::fetchResizesByItemIds(array($itemId));
		if ($ret) {
			return array($ret, null, null);
		}

		if (!empty($resizes[$itemId])) {
			foreach ($resizes[$itemId] as $resize) {
				$targetCandidates[] = $resize;
			}
		}
	}

	if (isset($permissions['core.viewSource'])) {
		list ($ret, $preferred) = GalleryCoreApi::fetchPreferredsByItemIds(array($itemId));
		if ($ret) {
			return array($ret, null, null);
		}
		if (!empty($preferred[$itemId])) {
			$preferred = $preferred[$itemId];
			$targetCandidates[] = $preferred;
			$isViewable = $preferred->getMimeType();
		} else {
			list ($ret, $item) = GalleryCoreApi::loadEntitiesById($itemId);
			if ($ret) {
				return array($ret, null, null);
			}
			else {
				$targetCandidates[] = $item;
				$isViewable = $item->getMimeType();
			}
		}
	}

	$isViewable = strpos($isViewable, 'image');
	if ($isViewable !== FALSE) {
		if ($size == null) {
			/* Pick the largest version */
			$size = 99999;
		}

		/* Search the closest match in size */
		$targetid = $itemId;
		$targetdiff = 99999;
		foreach ($targetCandidates as $candidate) {
			$diff = $candidate->getHeight() - $size;
			if ($diff >= 0 && $diff < $targetdiff ) {
				$targetid = $candidate->getId();
				$targetdiff = $diff;
			}
		}
	}

	return array(null, $targetid, $isViewable);
}