/** * Given a picnik token and a remote file, downloads and processes the remote image, updating and cleaning up local data as required, and sets up template data for displaying to the browser * * @param array $token * @param string $remoteFile * @return bool True on success, false on error - on error, a template variable named 'PicnikError' will be assigned as non-false */ public function receivePicnik($token, $remoteFile) { $this->template->assign('PicnikError', false); $sourceFile = $this->getSourceFileForImage($token['imagetype'], $token['imageid']); if (!$sourceFile) { $this->template->assign('PicnikError', GetLang('PicnikError_NoSourceFile')); return false; } $errorType = null; if (!$this->downloadToFile($remoteFile, $sourceFile, $errorType)) { if ($errorType == 1) { $this->template->assign('PicnikError', GetLang('PicnikError_NoWrite')); } else { $this->template->assign('PicnikError', GetLang('PicnikError_NoDownload')); } return false; } $imageSize = @getimagesize($sourceFile); if (!$imageSize) { $this->template->assign('PicnikError', GetLang('PicnikError_Invalid')); return false; } $callbackData = array(); // the source file has been replaced, now regenerate other files based on it if necessary switch ($token['imagetype']) { case ISC_PICNIK_TYPE_PRODUCTIMAGE: $image = new ISC_PRODUCT_IMAGE((int)$token['imageid']); $image->removeResizedFiles(); $image->saveToDatabase(true); $callbackData['thumbnail'] = $image->getResizedUrl(ISC_PRODUCT_IMAGE_SIZE_THUMBNAIL, true); $callbackData['zoom'] = $image->getResizedUrl(ISC_PRODUCT_IMAGE_SIZE_ZOOM, true); break; case ISC_PICNIK_TYPE_IMAGEMANAGER: $callbackData['name'] = basename($sourceFile); $callbackData['size'] = Store_Number::niceSize(filesize($sourceFile)); $callbackData['url'] = GetConfig('ShopPathSSL') . '/' . GetConfig('ImageDirectory') . '/uploaded_images/' . $callbackData['name']; $callbackData['dimensions'] = $imageSize[0] . ' x ' . $imageSize[1]; $callbackData['id'] = md5($callbackData['name']); $callbackData['displaywidth'] = $imageSize[0]; $callbackData['displayheight'] = $imageSize[1]; if ($callbackData['displaywidth'] > 200) { $callbackData['displayheight'] = (200 / $callbackData['displaywidth']) * $callbackData['displayheight']; $callbackData['displaywidth']= 200; } if ($callbackData['displayheight'] > 150) { $callbackData['displaywidth'] = (150/$callbackData['displayheight']) * $callbackData['displaywidth']; $callbackData['displayheight'] = 150; } break; } $this->removeToken($token['picniktokenid']); $this->template->assign('PicnikCallbackData', isc_json_encode($callbackData)); return $callbackData; }