Example #1
0
 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, '/');
 }
Example #2
0
 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;
 }