/** * Display the recent changes list for the given form. * @return boolean */ protected function actionRecent() { $form = array_shift($this->request_remainder); $form_config = I2CE::getConfig()->traverse("/modules/forms/forms"); if (!$form_config->is_parent($form) || !I2CE::getConfig()->is_parent("/modules/RecentForm/forms/{$form}")) { return $this->actionMenu(); } $page_size = 25; $days = "today"; $user = false; if (count($this->request_remainder) > 0) { $days = array_shift($this->request_remainder); } $user_list = false; if (count($this->request_remainder) > 0) { $user_list = array_shift($this->request_remainder); $user = explode(',', $user_list); foreach ($user as $key => $uid) { if ($uid == "me") { $uobj = new I2CE_User(); $user[$key] = $uobj->getId(); } } $user = array_filter($user, "is_numeric"); if (count($user) == 0) { $user = false; } elseif (count($user) == 1) { $user = array_pop($user); } } switch ($days) { case "yesterday": $mod_time = mktime(0, 0, 0, date("n"), date("j") - 1); break; case "week": $mod_time = mktime(0, 0, 0, date("n"), date("j") - 7); break; default: $mod_time = mktime(0, 0, 0); break; } $form_name = $form; $form_config->setIfIsSet($form_name, "{$form}/display"); $user_link = ""; if ($user_list) { $user_link = "/" . $user_list; } $this->template->setDisplayDataImmediate("display_form_name", ": " . $form_name); $header = $this->template->appendFileById("recent_display.html", "div", "recent_forms"); $this->template->setDisplayDataImmediate("recent_name", $form_name, $header); $this->template->setDisplayDataImmediate("recent_date", date("d M Y", $mod_time), $header); $this->template->setDisplayDataImmediate("recent_today_link", array("href" => "recent/{$form}/today" . $user_link), $header); $this->template->setDisplayDataImmediate("recent_yesterday_link", array("href" => "recent/{$form}/yesterday" . $user_link), $header); $this->template->setDisplayDataImmediate("recent_week_link", array("href" => "recent/{$form}/week" . $user_link), $header); $this->template->setDisplayDataImmediate("recent_me_link", array("href" => "recent/{$form}/{$days}/me"), $header); $this->template->setDisplayDataImmediate("recent_all_link", array("href" => "recent/{$form}/{$days}"), $header); $recent_form_config = I2CE::getConfig()->traverse("/modules/RecentForm/forms/{$form}", true); $fields = $recent_form_config->fields->getAsArray(); ksort($fields); if (!is_array($fields)) { $fields = array(); } $display = implode(" ", array_fill(0, count($fields), "%s")); $recent_form_config->setIfIsSet($display, "display"); $link = "recent"; $recent_form_config->setIfIsSet($link, "link"); $parent = false; $recent_form_config->setIfIsSet($parent, "parent"); if ($parent) { $parent = true; } $order = $fields; array_unshift($order, "-last_modified"); if ($this->request_exists("page")) { $limit_start = ((int) $this->request("page") - 1) * $page_size; } else { $limit_start = 0; } $results = I2CE_FormStorage::listDisplayFields($form, $fields, $parent, array(), $order, array($limit_start, $page_size), $mod_time, false, $user); $num_found = I2CE_FormStorage::getLastListCount($form); $this->template->setDisplayDataImmediate("recent_found", $num_found, $header); foreach ($results as $id => $data) { $record = $this->template->appendFileById("recent_display_form.html", "li", "recent_list"); if ($parent) { $this->template->setDisplayDataImmediate("form_link", array("href" => $link . $data['parent']), $record); } else { $this->template->setDisplayDataImmediate("form_link", array("href" => $link . $form . "|" . $id), $record); } $extra_display = I2CE_ModuleFactory::callHooks("recent_form_{$form}_display", $data); array_unshift($extra_display, vsprintf($display, $data)); $this->template->setDisplayDataImmediate("record_display", implode(' ', $extra_display), $record); } if ($this->module == "I2CE") { $url = $this->page . "/" . $form . "/" . $days; } else { $url = $this->module . "/" . $this->page . "/" . $form . "/" . $days; } $total_pages = max(1, ceil($num_found / $page_size)); if ($total_pages > 1) { $page_num = (int) $this->request('page'); $page_num = min(max(1, $page_num), $total_pages); $this->makeJumper("recent", $page_num, $total_pages, $url, array()); } }
/** * Save a form object into magicdata * @param I2CE_Form $form * @param I2CE_User $user * @param boolean $transact */ public function save($form, $user, $transact) { $form_id = $form->getId(); if (!$form_id) { $form_id = $this->getNextAvailableId($form->getName()); } if (!$form_id) { return false; } $form->setId($form_id); $form_config = $this->getFormConfig($form, true); if (!$form_config instanceof I2CE_MagicDataNode) { return false; } $form_config->last_modified = I2CE_Date::now(I2CE_Date::DATE_TIME)->dbFormat(); $form_config->who = $user->getId(); $parent = $form->getParent(); if ($parent != "") { /* Does this need to be here? the parent node may be new and doesn't exist... if ($form_config->is_parent('parent')) { return false; } */ $form_config->parent = $parent; } return parent::save($form, $user, $transact); }