public function RewriteURL(&$filters) { $mapped = $this->rewriteMapping; foreach ($mapped as $key => $val) { if (preg_match_all('/{([a-zA-Z0-9_]+)}/', $val, $matches)) { $URLreadable = is_array($this->rewriteURLReadable) ? $this->rewriteURLReadable[$key] : $this->rewriteURLReadable; foreach ($matches[1] as $fieldName) { $newVal = ''; if (array_key_exists($fieldName, $filters)) { $newVal = $filters[$fieldName]; } elseif (array_key_exists('_f_' . $fieldName, $filters)) { $newVal = $filters['_f_' . $fieldName]; } unset($filters[$fieldName]); unset($filters['_f_' . $fieldName]); if ($URLreadable) { $newVal = trim(UrlReadable($newVal), '-'); } $mapped[$key] = str_replace('{' . $fieldName . '}', $newVal, $mapped[$key]); } } if ($mapped[$key] === preg_replace('/{([a-zA-Z0-9_]+)}/', '', $val)) { $mapped[$key] = ''; } $mapped[$key] = rawurlencode($mapped[$key]); } if (isset($filters['uuid'])) { unset($filters['uuid']); } $uuid = $this->GetUUID(); if (is_array($uuid)) { $uuid = reset($uuid); } array_unshift($mapped, $uuid); $newPath = PATH_REL_ROOT . join('/', $mapped); $oldPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); if (strpos($oldPath, '/u/') === 0) { $oldPath = str_replace('/u/', '/', $oldPath); } if ($this->rewritePersistPath && utopia::GetCurrentModule() == get_class($this)) { $newPath .= str_replace($newPath, '', $oldPath); } // DONE: ensure all rewrite segments are accounted for (all '/' are present) return rtrim($newPath, '/'); }
public function UpdateField($fieldAlias, $newValue, &$pkVal = NULL) { if ($fieldAlias == 'cms_id' && !$newValue) { return; } if ($pkVal == NULL && $fieldAlias == 'title') { $this->UpdateField('cms_id', UrlReadable($newValue), $pkVal); } if ($fieldAlias == 'revert') { $rec = $this->LookupRecord($pkVal); $this->UpdateField('content', $rec['content_published'], $pkVal); $this->UpdateFieldRaw('content_published_time', '`content_time`', $pkVal); AjaxEcho('window.location.reload();'); return; } if ($fieldAlias == 'publish') { $rec = $this->LookupRecord($pkVal); $this->UpdateField('content_published', $rec['content'], $pkVal); return; } if ($fieldAlias == 'unpublish') { $this->UpdateField('is_published', 0, $pkVal); $this->UpdateField('content_published_time', null, $pkVal); return; } if ($fieldAlias == 'cms_id') { $newValue = UrlReadable($newValue); // also update children's "parent" to this value if ($pkVal !== NULL) { $dataset = $this->GetDataset(array('parent' => $pkVal), true); while ($child = $dataset->fetch()) { $this->UpdateField('parent', $newValue, $child['cms_id']); } } } if (substr($fieldAlias, 0, 8) == 'content:') { $rec = $this->LookupRecord($pkVal); $contentarr = utopia::jsonTryDecode($rec['content']); if (!is_array($contentarr)) { $contentarr = array('' => $contentarr); } $id = substr($fieldAlias, 8); if (!$id) { $id = ''; } $contentarr[$id] = (string) $newValue; $fieldAlias = 'content'; $newValue = $contentarr; $this->SetFieldType('content_time', ftRAW); $this->UpdateField('content_time', 'NOW()', $pkVal); } if ($fieldAlias == 'content_published') { $this->SetFieldType('content_published_time', ftRAW); $this->UpdateFieldRaw('content_published_time', '`content_time`', $pkVal); $this->UpdateField('is_published', 1, $pkVal); } $oPk = $pkVal; $ret = parent::UpdateField($fieldAlias, $newValue, $pkVal); if ($pkVal !== $oPk) { $o = utopia::GetInstance('uCMS_View'); $url = $o->GetURL(array('cms_id' => $pkVal, 'edit' => 1)); AjaxEcho("window.location.replace('{$url}');"); } // update cms list to reflect published status uCMS_List::RefreshList(); return $ret; }