/** * Load files from translation directory and converts to dot notation * * @return Data */ private function load_translation_files() { $base_path = PerchUtil::file_path(PERCH_PATH . '/' . $this->translation_dir); $dir_iterator = new RecursiveDirectoryIterator($base_path, FilesystemIterator::SKIP_DOTS); $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::CHILD_FIRST); $files = array(); foreach ($iterator as $fileinfo) { if ($fileinfo->getExtension() == 'php') { $file_path = PerchUtil::file_path($fileinfo->getPathname()); if ($fileinfo->isDir()) { $path = array($fileinfo->getFilename() => array()); } else { $path = array(PerchUtil::strip_file_extension($fileinfo->getFilename()) => $this->load_translation_data($file_path)); } for ($depth = $iterator->getDepth() - 1; $depth >= 0; $depth--) { $path = array($iterator->getSubIterator($depth)->current()->getFilename() => $path); } $files = array_merge_recursive($files, $path); } } return new Data($files); }
public function log($app = 'content', $bucket = 'default', $file, $parentID = 0, $resource_key = '', $library_resource = false, $details = false, $AssetMeta = false) { if (isset($details['assetID'])) { $newID = $details['assetID']; } else { $data = array('resourceApp' => $app, 'resourceBucket' => $bucket, 'resourceFile' => $file, 'resourceKey' => $resource_key, 'resourceParentID' => $parentID, 'resourceType' => $this->_get_type($file), 'resourceCreated' => date('Y-m-d H:i:s'), 'resourceInLibrary' => $library_resource ? '1' : '0'); if (PerchUtil::count($details)) { foreach ($details as $key => $val) { switch ($key) { case 'w': $data['resourceWidth'] = $val; break; case 'h': $data['resourceHeight'] = $val; break; case 'target_w': $data['resourceTargetWidth'] = $val; break; case 'target_h': $data['resourceTargetHeight'] = $val; break; case 'crop': $data['resourceCrop'] = $val ? '1' : '0'; break; case 'density': $data['resourceDensity'] = $val; break; case 'size': $data['resourceFileSize'] = $val; break; case 'mime': $data['resourceMimeType'] = $val; break; case 'title': $data['resourceTitle'] = $val; break; } } } if (!isset($data['resourceTitle'])) { if ($AssetMeta) { $data['resourceTitle'] = $AssetMeta->get_title(); } else { $data['resourceTitle'] = PerchUtil::filename(PerchUtil::strip_file_extension($data['resourceFile']), false); } } $newID = $this->db->insert($this->table, $data, true); if ($newID == '0') { $sql = 'SELECT resourceID FROM ' . $this->table . ' WHERE resourceBucket=' . $this->db->pdb($bucket) . ' AND resourceFile=' . $this->db->pdb($file) . ' LIMIT 1'; $newID = $this->db->get_value($sql); } // Tags if ($AssetMeta) { $tags = $AssetMeta->get_tags(); if (PerchUtil::count($tags)) { if (!class_exists('PerchAssets_Tags', false)) { include_once PERCH_CORE . '/apps/assets/PerchAssets_Tags.class.php'; include_once PERCH_CORE . '/apps/assets/PerchAssets_Tag.class.php'; } $Tags = new PerchAssets_Tags(); $Tags->assign_tag_array($newID, $tags, true); } } } PerchResources::$logged[] = $newID; return $newID; }
public function get_meta_data($file_path, $name) { if (!class_exists('PerchAssets_MetaData')) { include_once __DIR__ . '/PerchAssets_MetaData.class.php'; } $MetaData = new PerchAssets_MetaData(); if (is_callable('iptcparse') && is_callable('getimagesize')) { $info = array(); getimagesize($file_path); // once getimagesize($file_path, $info); // twice for luck (aka bugs); if (isset($info['APP13'])) { $iptc = iptcparse($info['APP13']); $MetaData->store_iptc($iptc); } } if (!$MetaData->get_title()) { $title = PerchUtil::filename(PerchUtil::strip_file_extension($name), false); $MetaData->set_title($title); } return $MetaData; }
public function thumbnail_file($file_path, $width = 150, $height = 150, $suffix = 'thumb') { if (class_exists('Imagick')) { $w = $width; $h = $height; $save_as = $this->get_resized_filename($file_path, $w, $h, $suffix, $this->density); $save_as = PerchUtil::strip_file_extension($save_as) . '.png'; return $this->thumbnail_file_with_imagick($file_path, $save_as, $w, $h); } return false; }
//checking for naughty uploading of php files. $target = PerchUtil::file_path($targetDir . '/' . $filename); if (file_exists($target)) { $ext = strrpos($filename, '.'); $fileName_a = substr($filename, 0, $ext); $fileName_b = substr($filename, $ext); $count = 1; while (file_exists(PerchUtil::file_path($targetDir . '/' . $fileName_a . '_' . $count . $fileName_b))) { $count++; } $filename = $fileName_a . '_' . $count . $fileName_b; $target = PerchUtil::file_path($targetDir . '/' . $filename); } } PerchUtil::move_uploaded_file($_FILES['upload']['tmp_name'], $target); $data = array(); $data['imageAlt'] = PerchUtil::strip_file_extension($filename); $data['albumID'] = $albumID; $data['imageStatus'] = 'uploading'; $data['imageBucket'] = $bucket['name']; $Image = $Images->create($data); if (is_object($Image)) { $Image->process_versions($filename, $Template, $bucket); } $Image->update(array('imageStatus' => 'active')); $Album = $Albums->find($albumID); if (is_object($Album)) { $Album->update_image_count(); } } }
public static function get_lang_options() { $Lang = PerchLang::fetch(); $out = array(); // Addons folder if (is_dir(PerchUtil::file_path(PERCH_PATH . '/addons/lang'))) { $lang_dir = PerchUtil::file_path(PERCH_PATH . '/addons/lang'); $files = PerchUtil::get_dir_contents($lang_dir, false); if (is_array($files)) { foreach ($files as $file) { $out[] = PerchUtil::strip_file_extension($file); } } } // Core folder $lang_dir = PerchUtil::file_path(PERCH_CORE . '/lang'); if (is_dir($lang_dir)) { $files = PerchUtil::get_dir_contents($lang_dir, false); if (is_array($files)) { foreach ($files as $file) { $f = PerchUtil::strip_file_extension($file); if (!in_array($f, $out)) { $out[] = $f; } } } } if (PerchUtil::count($out)) { sort($out); return $out; } return false; }
} } else { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } fclose($in); fclose($out); } else { die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } } // If it's the last chunk if ($chunks == 0 || $chunk == $chunks - 1) { $newFileName = str_replace('_uploading_', '', $fileName); rename($targetDir . DIRECTORY_SEPARATOR . $fileName, $targetDir . DIRECTORY_SEPARATOR . $newFileName); $albumID = (int) $_REQUEST["albumID"]; $API = new PerchAPI(1.0, 'perch_gallery'); $Images = new PerchGallery_Images($API); $Template = $API->get('Template'); $Template->set('gallery/image.html', 'gallery'); $data = array(); $data['imageAlt'] = PerchUtil::strip_file_extension($newFileName); $data['albumID'] = $albumID; $Image = $Images->create($data); if (is_object($Image)) { $Image->process_versions($newFileName, $Template); } PerchUtil::set_file_permissions($targetDir . DIRECTORY_SEPARATOR . $newFileName); //file_put_contents(__DIR__.'/log.txt', strip_tags(PerchUtil::output_debug(true))); } // Return JSON-RPC response die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');
/** * Attempt to construct a nice(ish) looking title from the file name * @return [type] [description] */ public function get_title_from_filename() { $s = $this->resourceFile(); $s = PerchUtil::strip_file_extension($s); return PerchUtil::filename($s, false); }
/** * Find newly registered pages, and figure out their position in the tree * * @return void * @author Drew McLellan */ public function order_new_pages($_count = 1) { $sql = 'SELECT *, REPLACE(pagePath, ' . $this->db->pdb('/' . PERCH_DEFAULT_DOC) . ', \'\') as sortPath FROM ' . $this->table . ' WHERE pageNew=1 ORDER BY LENGTH(sortPath)-LENGTH(REPLACE(sortPath, \'/\', \'\')) ASC'; $rows = $this->db->get_rows($sql); if (PerchUtil::count($rows)) { if ($_count > 10) { return; } $pages = $this->return_instances($rows); foreach ($pages as $Page) { $data = array(); if (!$Page->pageDepth()) { $depth = $Page->find_depth(); $data['pageDepth'] = $depth; } else { $depth = (int) $Page->pageDepth(); } $data['pageSortPath'] = PerchUtil::strip_file_extension($Page->sortPath()); if (!$Page->pageParentID()) { if ($depth == 1) { $data['pageParentID'] = 0; } else { // find parent $parts = explode('/', $Page->sortPath()); array_pop($parts); $sections = array(); while (PerchUtil::count($parts)) { $t = implode('/', $parts); if ($t) { $sections[] = $t; } array_pop($parts); } PerchUtil::debug($Page->sortPath()); $sql = 'SELECT pageID, pageDepth, pageTreePosition FROM ' . $this->table . ' WHERE pageDepth<' . $depth . ' AND pageNew=0 AND pageSortPath IN (' . $this->db->implode_for_sql_in($sections) . ') ORDER BY LENGTH(pageSortPath)-LENGTH(REPLACE(pageSortPath, \'/\', \'\')) DESC LIMIT 1'; $parent = $this->db->get_row($sql); if ($parent) { $data['pageParentID'] = $parent['pageID']; $data['pageDepth'] = $parent['pageDepth'] + 1; $depth = $data['pageDepth']; } } } else { $data['pageParentID'] = $Page->pageParentID(); $sql = 'SELECT pageID, pageDepth, pageTreePosition FROM ' . $this->table . ' WHERE pageID=' . $this->db->pdb((int) $Page->pageParentID()) . ' LIMIT 1'; $parent = $this->db->get_row($sql); } if (!isset($data['pageParentID'])) { $data['pageParentID'] = $Page->pageParentID(); $sql = 'SELECT pageID, pageTreePosition FROM ' . $this->table . ' WHERE pageID=' . $this->db->pdb((int) $Page->pageParentID()); $parent = $this->db->get_row($sql); // no parent, so reset depth to show at top of tree. $depth = 1; $data['pageDepth'] = $depth; } if (isset($data['pageParentID'])) { // order $sql = 'SELECT COUNT(*) FROM ' . $this->table . ' WHERE pageNew=0 AND pageParentID=' . $this->db->pdb((int) $data['pageParentID']); $data['pageOrder'] = $this->db->get_count($sql) + 1; // Tree position if ($data['pageParentID'] == 0) { $data['pageTreePosition'] = '000-' . str_pad($data['pageOrder'], 3, '0', STR_PAD_LEFT); $base = '000-'; } else { $data['pageTreePosition'] = $parent['pageTreePosition'] . '-' . str_pad($data['pageOrder'], 3, '0', STR_PAD_LEFT); $base = $parent['pageTreePosition'] . '-'; } $count = (int) $data['pageOrder']; while ($this->db->get_count('SELECT COUNT(*) FROM ' . $this->table . ' WHERE pageTreePosition=' . $this->db->pdb($data['pageTreePosition'])) > 0) { $data['pageTreePosition'] = $base . str_pad($count, 3, '0', STR_PAD_LEFT); $count++; } $data['pageNew'] = 0; $Page->update($data); } } // recurse $this->order_new_pages($_count++); } return false; }
$postvars = array('pagePath', 'pageSubpagePath', 'pageHidden', 'pageAccessTags', 'pageAttributeTemplate'); if (PERCH_RUNWAY) { $postvars[] = 'templateID'; } $data = $Form->receive($postvars); if (!isset($data['pageHidden'])) { $data['pageHidden'] = '0'; } if (!PERCH_RUNWAY) { if (!isset($data['pageSubpagePath'])) { $data['pageSubpagePath'] = false; } $data['pageSubpagePath'] = '/' . ltrim($data['pageSubpagePath'], '/'); $_POST['pageSubpagePath'] = $data['pageSubpagePath']; } else { $data['pageSortPath'] = PerchUtil::strip_file_extension(str_replace(array('/' . PERCH_DEFAULT_DOC), '', $data['pagePath'])); } $data['pageModified'] = date('Y-m-d H:i:s'); if (isset($_POST['collections']) && PerchUtil::count($_POST['collections'])) { $collections = $_POST['collections']; $new_collections = array(); foreach ($collections as $collection) { $collection = trim($collection); $new_collections[] = (int) $collection; } if (PerchUtil::count($new_collections)) { $data['pageCollections'] = implode(',', $new_collections); } } else { $data['pageCollections'] = ''; }