public function code($params = null) { if (!is_array($params)) { // This is a GET for a dir or file. -- cwells if (is_null($params)) { $params = ''; $path = '.'; } else { $path = $params; } require_once \CWA\LIB_PATH . 'cwa/io/FileManager.php'; $fileManager = new \CWA\IO\FileManager('.'); if (!$fileManager->exists($params)) { throw new InvalidArgumentException('The specified file does not exist within this application.', 400); } else { if ($fileManager->isFile($params)) { $this->loadView('code-file'); $this->view->setData(array('FileContents' => file_get_contents($path), 'FilePath' => $path, 'ReadOnly' => !is_writable($path))); } else { if ($fileManager->isDirectory($params)) { $this->loadView('code-dir'); $this->view->setData(array('DirectoryPath' => $path, 'Directory' => $fileManager->getDirectoryListing($params), 'PathPrefix' => "{$this->pathInURL}/code/" . (empty($params) ? '' : "{$params}/"))); } else { throw new InvalidArgumentException('You must specify a valid file or directory path.', 400); } } } } else { // This is a POST with the contents of a file. -- cwells if (!isset($params['file-path']) || empty($params['file-path'])) { throw new InvalidArgumentException('You must specify a file path.', 400); } else { if (strpos(realpath($params['file-path']), realpath('.')) !== 0) { throw new InvalidArgumentException('The specified file does not exist within this application.', 400); } else { if (!is_file($params['file-path'])) { throw new InvalidArgumentException('You must specify a valid file path.', 400); } else { if (file_put_contents($params['file-path'], utf8_encode($params['file-contents'])) === false) { $this->loadView('code-file'); $this->view->setStatus('Failed to update the specified file.', 500); $this->view->setData(array('FileContents' => $params['file-contents'], 'FilePath' => $params['file-path'])); } else { $this->loadView('code-file-save'); $this->view->setData('FilePath', $params['file-path']); } } } } } }
public function save(array &$properties) { if (empty($properties) || !is_array($properties)) { throw new InvalidArgumentException('You must provide the values to update.', 400); } // Use IsPublic to determine whether to set or clear the Published datetime. -- cwells if (empty($properties['IsPublic'])) { // Not published. $properties['Published'] = null; } else { if ($properties['IsPublic'] === '1' && empty($properties['Published'])) { // New publish. $properties['Published'] = date(\CWA\DB\DATETIME_PHP_TO_DB); } } unset($properties['IsPublic']); // Since it's not a real property on the object. // The Summary should be plain text with no double quotes. -- cwells $properties['Summary'] = str_replace('"', "'", strip_tags($properties['Summary'])); // If this is an existing blog post and the slug changed, move associated images. -- cwells if (!empty($properties['ID']) && $properties['OldSlug'] !== $properties['Slug']) { require_once \CWA\LIB_PATH . 'cwa/io/FileManager.php'; $fileManager = new \CWA\IO\FileManager("../public/images{$this->pathInURL}"); $oldPath = $properties['OldSlug'][0] . '/' . $properties['OldSlug']; $newPath = $properties['Slug'][0] . '/' . $properties['Slug']; if ($fileManager->isDirectory($oldPath)) { if (!$fileManager->isDirectory(dirname($newPath))) { $fileManager->mkdir(dirname($newPath)); // Error check happens below. -- cwells } if (!$fileManager->rename($oldPath, $newPath)) { throw new InvalidArgumentException('Failed to rename the image directory.', 500); } // Update any URLs that refer to the old path in the content. -- cwells $properties['Body'] = str_replace("/images{$this->pathInURL}/{$oldPath}/", "/images{$this->pathInURL}/{$newPath}/", $properties['Body']); } } unset($properties['OldSlug']); parent::save($properties); }