コード例 #1
0
ファイル: SimpleToDoAction.php プロジェクト: jbzdak/wikidot
 public function saveEvent($runData)
 {
     $site = $runData->getTemp("site");
     $pl = $runData->getParameterList();
     $pageId = $pl->getParameterValue("pageId");
     if (!is_numeric($pageId)) {
         throw new ProcessException(_("Page does not exist."));
     }
     $page = DB_PagePeer::instance()->selectByPrimaryKey($pageId);
     if (!$page) {
         throw new ProcessException(_("Page does not exist."));
     }
     // check permissions
     $category = $page->getCategory();
     WDPermissionManager::instance()->hasPagePermission('edit', $runData->getUser(), $category, $page);
     $data = $pl->getParameterValue("data");
     $json = new JSONService();
     $listData = $json->decode($data);
     //it's time to do some checking
     $listData->label = trim($listData->label);
     if (!$listData->label) {
         throw new ProcessException(_('The SimpleTodo module must have an id (e.g. id="list1").'));
     }
     $dataArray['label'] = $listData->label;
     $listData->title = trim($listData->title);
     if (!$listData->title) {
         throw new ProcessException(_('Your title field is empty, please correct that.'));
     }
     $dataArray['title'] = $listData->title;
     for ($i = 0; $i < count($listData->data); $i++) {
         $listData->data[$i]->text = trim($listData->data[$i]->text);
         $listData->data[$i]->link = trim($listData->data[$i]->link);
         if (!is_bool($listData->data[$i]->checked)) {
             throw new ProcessException(_('Something is wrong witch checkbox (it is not a boolean value).'));
         }
         if (empty($listData->data[$i]->text)) {
             throw new ProcessException(_('One of your text fields is empty, please correct that.'));
         }
         $dataArray['data'][$i]['text'] = $listData->data[$i]->text;
         $dataArray['data'][$i]['link'] = $listData->data[$i]->link;
         $dataArray['data'][$i]['checked'] = $listData->data[$i]->checked;
     }
     $c = new Criteria();
     $c->add('label', $listData->label);
     $c->add('site_id', $site->getSiteId());
     $list = DB_SimpletodoListPeer::instance()->selectOne($c);
     if (!$list) {
         $list = new DB_SimpletodoList();
         $list->setSiteId($site->getSiteId());
         $list->setLabel($dataArray['label']);
     }
     $list->setTitle($dataArray['title']);
     $itemData = $json->encode($dataArray['data']);
     $list->setData($itemData);
     $list->save();
 }
コード例 #2
0
ファイル: SimpleToDoModule.php プロジェクト: jbzdak/wikidot
 public function build($runData)
 {
     $user = $runData->getUser();
     if (self::$_counter == 0) {
         // check permissions
         $page = $runData->getTemp("page");
         if ($page) {
             $category = $page->getCategory();
             //s$runData->getTemp("category");
             try {
                 WDPermissionManager::instance()->hasPagePermission('create', $user, $category);
                 self::$_canEdit = true;
             } catch (Exception $e) {
             }
         }
     }
     $runData->contextAdd('canEdit', self::$_canEdit);
     $runData->contextAdd('listCounter', self::$_counter);
     self::$_counter++;
     $pl = $runData->getParameterList();
     $label = $pl->getParameterValue("id");
     $label = trim($label);
     if (!$label) {
         throw new ProcessException(_('The SimpleTodo module must have an id.'));
     }
     if (!in_array($label, self::$_labelArray)) {
         array_push(self::$_labelArray, $label);
     } else {
         throw new ProcessException(_('The id attribute sholud be unique.'));
     }
     $runData->contextAdd("label", $label);
     $site = $runData->getTemp("site");
     $c = new Criteria();
     $c->add('label', $label);
     $c->add('site_id', $site->getSiteId());
     $list = DB_SimpletodoListPeer::instance()->selectOne($c);
     if ($list) {
         $json = new JSONService();
         $listData = $json->decode($list->getData());
         $runData->contextAdd("title", $list->getTitle());
         $runData->contextAdd("data", $listData);
     }
 }
コード例 #3
0
ファイル: quickmodule.php プロジェクト: jbzdak/wikidot
 * @package Wikidot_Web
 * @version $Id$
 * @copyright Copyright (c) 2008, Wikidot Inc.
 * @license http://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License
 */
require '../php/setup.php';
// to avoid caching
header("Cache-Control: no-cache, must-revalidate");
// HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// Date in the past
// all the parameters are stored in the POST body.
$data = file_get_contents('php://input');
if ($data != null && $data !== '') {
    $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
    $parsedData = $json->decode($data);
}
// find quickmodule name
$moduleName = $_GET['module'];
// check if exists
$modulePath = WIKIDOT_ROOT . "/php/quickmodules/" . $moduleName . ".php";
if (file_exists($modulePath)) {
    require_once $modulePath;
    $module = new $moduleName();
    $response = $module->process($parsedData);
    if ($parsedData['callbackIndex'] !== null) {
        $response['callbackIndex'] = $parsedData['callbackIndex'];
    }
    if ($response != null) {
        if (!$json) {
            $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
コード例 #4
0
 public function sendEmailInvitationsEvent($runData)
 {
     $pl = $runData->getParameterList();
     $user = $runData->getUser();
     $site = $runData->getTemp("site");
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $addresses = $json->decode($pl->getParameterValue("addresses"));
     $message = $pl->getParameterValue("message");
     // check if data is valid
     if (count($addresses) > 200) {
         throw new ProcessException(_("You should not send more than 200 invitations at once."));
     }
     foreach ($addresses as $address) {
         $email = trim($address[0]);
         $name = trim($address[1]);
         if (!preg_match("/^[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)+\$/", $email) || strlen($email) > 70 || strlen($email) == 0) {
             throw new ProcessException(sprintf(_('Email "%s" is not valid.'), htmlspecialchars($email)), "bad_email");
         }
         if (preg_match(';://;', $name) || preg_match(';\\.www;i', $name) || strlen8($name) > 50 || strlen8($name) == 0) {
             throw new ProcessException(sprintf(_('Recipient\'s name "%s" is not valid.'), htmlspecialchars($name)), "bad_name");
         }
         //check if "email" is not already a member of this site...
         $q = " SELECT * FROM member, ozone_user WHERE member.site_id='" . $site->getSiteId() . "' AND ozone_user.name='" . db_escape_string($email) . "' AND member.user_id = ozone_user.user_id LIMIT 1";
         $c = new Criteria();
         $c->setExplicitQuery($q);
         $m = DB_MemberPeer::instance()->selectOne($c);
         if ($m) {
             throw new ProcessException(sprintf(_('User with the email address "%s" is already a member of this Site. Remove him from the list and send invitations again.'), htmlspecialchars($email)), 'aleady_member');
         }
         // check if not sent already to this address.
         $c = new Criteria();
         $c->add("email", $email);
         $c->add("site_id", $site->getSiteId());
         $ii = DB_EmailInvitationPeer::instance()->selectOne($c);
         if ($ii) {
             throw new ProcessException(sprintf(_('User with the email address "%s" has been already invited to this Site. Remove him from the list and send invitations again. If you want to resend an invitation please rather look at the history of sent invitations.'), htmlspecialchars($email)), 'aleady_member');
         }
     }
     if (preg_match(';://;', $message) || preg_match(';www\\.;i', $message)) {
         throw new ProcessException(_('The message should not contain any links to websites.'), "bad_message");
     }
     if ($message != "" && strlen($message) > 1000) {
         throw new ProcessException(_('The message seems to be too long. Max 1000 characters are allowed.'), "bad_message");
     }
     // now prepare invitation and send!
     $db = Database::connection();
     foreach ($addresses as $address) {
         $email = trim($address[0]);
         $name = trim($address[1]);
         $db->begin();
         // each invitation makes a separate transaction
         $hash = substr(md5($name . $email) . time(), 0, 20);
         $inv = new DB_EmailInvitation();
         $inv->setHash($hash);
         $inv->setEmail($email);
         $inv->setName($name);
         $inv->setUserId($user->getUserId());
         $inv->setSiteId($site->getSiteId());
         $inv->setMessage($message);
         $inv->setDate(new ODate());
         if ($address[2]) {
             $inv->setToContacts(true);
         }
         // prepare and send email
         $profile = $user->getProfile();
         $oe = new OzoneEmail();
         $oe->addAddress($email);
         $oe->setSubject(sprintf(_("[%s] %s invites you to join!"), GlobalProperties::$SERVICE_NAME, $user->getNickName()));
         $oe->contextAdd('user', $user);
         $oe->contextAdd('profile', $profile);
         $oe->contextAdd('hash', $hash);
         $oe->contextAdd("site", $site);
         $oe->contextAdd("message", $message);
         $oe->contextAdd('name', $name);
         $oe->setBodyTemplate('MembershipEmailInvitation');
         if (!$oe->Send()) {
             $inv->setDelivered(false);
         } else {
             $inv->setDelivered(true);
         }
         $inv->save();
         $db->commit();
     }
 }
コード例 #5
0
 public function build($runData)
 {
     // select recent revisions...
     $site = $runData->getTemp("site");
     $pl = $runData->getParameterList();
     // get options
     $pageNumber = $pl->getParameterValue("page");
     $op = $pl->getParameterValue("options");
     if ($pageNumber === null) {
         $pageNumber = 1;
     }
     if ($op) {
         $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
         $o = $json->decode($op);
     }
     if (count($o) == 0) {
         $o['all'] == true;
     }
     $perPage = $pl->getParameterValue("perpage");
     if ($perPage == null) {
         $perPage = 20;
     }
     $offset = ($pageNumber - 1) * $perPage;
     $count = $perPage * 2 + 1;
     $c = new Criteria();
     $c->add("page_revision.site_id", $site->getSiteId());
     if (!$o['all'] && count($o) > 0) {
         $c2 = new Criteria();
         if ($o['new']) {
             $c2->addOr("flag_new", true);
         }
         if ($o['source']) {
             $c2->addOr("flag_text", true);
         }
         if ($o['title']) {
             $c2->addOr("flag_title", true);
         }
         if ($o['move']) {
             $c2->addOr("flag_rename", true);
         }
         if ($o['meta']) {
             $c2->addOr("flag_meta", true);
         }
         if ($o['files']) {
             $c2->addOr("flag_file", true);
         }
         $c->addCriteriaAnd($c2);
     }
     $categoryId = $pl->getParameterValue("categoryId");
     if ($categoryId && is_numeric($categoryId)) {
         $c->add("page.category_id", $categoryId);
     }
     $c->addJoin("page_id", "page.page_id");
     $c->addJoin("user_id", "ozone_user.user_id");
     $c->addOrderDescending("page_revision.revision_id");
     $c->setLimit($count, $offset);
     $revisions = DB_PageRevisionPeer::instance()->select($c);
     $counted = count($revisions);
     $pagerData = array();
     $pagerData['currentPage'] = $pageNumber;
     if ($counted > $perPage * 2) {
         $knownPages = $pageNumber + 2;
         $pagerData['knownPages'] = $knownPages;
     } elseif ($counted > $perPage) {
         $knownPages = $pageNumber + 1;
         $pagerData['totalPages'] = $knownPages;
     } else {
         $totalPages = $pageNumber;
         $pagerData['totalPages'] = $totalPages;
     }
     $revisions = array_slice($revisions, 0, $perPage);
     $runData->contextAdd("pagerData", $pagerData);
     $runData->contextAdd("revisions", $revisions);
     $runData->contextAdd("revisionsCount", count($revisions));
 }
コード例 #6
0
 public function build($runData)
 {
     $site = $runData->getTemp("site");
     $pl = $runData->getParameterList();
     $pageId = $pl->getParameterValue("page_id");
     $pageNumber = $pl->getParameterValue("page");
     $perPage = $pl->getParameterValue("perpage");
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $o = $json->decode($pl->getParameterValue("options"));
     $offset = ($pageNumber - 1) * $perPage;
     $count = $perPage * 2 + 1;
     // get the page
     $page = DB_PagePeer::instance()->selectByPrimaryKey($pageId);
     if ($page == null || $page->getSiteId() !== $site->getSiteId()) {
         throw new ProcessException(_("Error selecting the page."), "no_page");
     }
     $c = new Criteria();
     $c->add('page_id', $pageId);
     // check options
     if (!$o['all'] && count($o) > 0) {
         $c2 = new Criteria();
         if ($o['new']) {
             $c2->addOr("flag_new", true);
         }
         if ($o['source']) {
             $c2->addOr("flag_text", true);
         }
         if ($o['title']) {
             $c2->addOr("flag_title", true);
         }
         if ($o['move']) {
             $c2->addOr("flag_rename", true);
         }
         if ($o['meta']) {
             $c2->addOr("flag_meta", true);
         }
         if ($o['files']) {
             $c2->addOr("flag_file", true);
         }
         $c->addCriteriaAnd($c2);
     }
     $c->addJoin("user_id", "ozone_user.user_id");
     $c->addOrderDescending('revision_id');
     $c->setLimit($count, $offset);
     $pr = DB_PageRevisionPeer::instance()->select($c);
     // now see if number of selected is equal $perPage + 1. If so -
     // there is at least 1 more page to show...
     $counted = count($pr);
     $pagerData = array();
     $pagerData['current_page'] = $pageNumber;
     if ($counted > $perPage * 2) {
         $knownPages = $pageNumber + 2;
         $pagerData['known_pages'] = $knownPages;
     } elseif ($counted > $perPage) {
         $knownPages = $pageNumber + 1;
         $pagerData['total_pages'] = $knownPages;
     } else {
         $totalPages = $pageNumber;
         $pagerData['total_pages'] = $totalPages;
     }
     $pr = array_slice($pr, 0, $perPage);
     $runData->contextAdd("pagerData", $pagerData);
     $runData->contextAdd("page", $page);
     $runData->contextAdd("currentRevision", $page->getCurrentRevision());
     $runData->contextAdd("revisions", $pr);
 }
コード例 #7
0
 public function saveOpenIDEvent($runData)
 {
     $pl = $runData->getParameterList();
     $site = $runData->getTemp("site");
     $settings = $site->getSettings();
     $openIdEnabled = $pl->getParameterValue("enableOpenID") == "true";
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $vals = $json->decode($pl->getParameterValue("vals"));
     $affectedPages = array();
     $outdater = new Outdater();
     $db = Database::connection();
     $db->begin();
     $settings->setOpenidEnabled($openIdEnabled);
     $settings->save();
     // get the already assigned openids
     $c = new Criteria();
     $c->add("site_id", $site->getSiteId());
     $oldOpenIDs = DB_OpenidEntryPeer::instance()->select($c);
     $rootProcessed = false;
     $oldOpenIDs2 = $oldOpenIDs;
     foreach ($vals as $val) {
         $pageId = null;
         $page = null;
         if ($val['page']) {
             // not a root page
             $page = DB_PagePeer::instance()->selectByName($site->getSiteId(), $val['page']);
             if (!$page) {
                 throw new ProcessException(sprintf(_("The page %s can not be found"), $vals['page']));
             }
             $pageId = $page->getPageId();
         } elseif (!$rootProcessed) {
             $rootProcessed = true;
         } elseif ($rootProcessed) {
             continue;
         }
         // validate the data
         $url = $val['identityUrl'];
         $serverUrl = $val['serverUrl'];
         if (!$url) {
             continue;
         }
         if (!preg_match(';^[a-z0-9\\-\\./#]+$;i', $url)) {
             throw new ProcessException(sprintf("Identity URL %s is not valid.", $url));
         }
         if (!preg_match(';^https?://[a-z0-9\\-\\./#]+$;i', $serverUrl)) {
             throw new ProcessException(sprintf("Server URL %s is not valid.", $serverUrl));
         }
         // check if the entry already exists
         $entry = null;
         foreach ($oldOpenIDs as $oo) {
             if ($oo->getPageId() === $pageId) {
                 $entry = $oo;
                 foreach ($oldOpenIDs2 as $oo2key => &$oo2) {
                     if ($oo2->getPageId() === $pageId) {
                         $ookey = $oo2key;
                         break;
                     }
                 }
                 unset($oldOpenIDs2[$ookey]);
                 break;
             }
         }
         if (!$entry) {
             $entry = new DB_OpenidEntry();
             $entry->setSiteId($site->getSiteId());
             $entry->setPageId($pageId);
         }
         $entry->setUrl('http://' . $url);
         $entry->setServerUrl($serverUrl);
         // save the entry
         $entry->save();
         // outdate caches
         if ($page) {
             $outdater->outdatePageCache($page);
         } else {
             $outdater->outdatePageCache($site->getDefaultPage());
         }
     }
     // remove unused entries
     foreach ($oldOpenIDs2 as $oo) {
         DB_OpenidEntryPeer::instance()->deleteByPrimaryKey($oo->getOpenidId());
         // outdate caches
         $pageId = $oo->getPageId();
         if ($pageId) {
             $page = DB_PagePeer::instance()->selectByPrimaryKey($pageId);
         } else {
             $page = $site->getDefaultPage();
         }
         $outdater->outdatePageCache($page);
     }
     $db->commit();
 }
コード例 #8
0
ファイル: MailFormAction.php プロジェクト: jbzdak/wikidot
 public function sendFormEvent($runData)
 {
     $pl = $runData->getParameterList();
     $values = $pl->getParameterValue("formdata");
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $values = $json->decode($values);
     $site = $runData->getTemp("site");
     $fkey = trim($pl->getParameterValue("formdef"));
     $data = DatabaseStorage::instance()->get($fkey);
     if (!$data) {
         throw new ProcessException(_("No form definition found."));
     }
     $fields = $data['fields'];
     $email = $data['email'];
     $title = $data['title'];
     $format = strtolower(trim($data['format']));
     if (!in_array($format, array('csv'))) {
         $format = null;
     }
     // parse and validate!
     $errors = array();
     foreach ($fields as &$field) {
         $name = $field['name'];
         $value = $values[$field['name']];
         $field['value'] = $value;
         // check if need to validate. any rules?
         // first, if select, can not be empty
         if ($field['type'] == "select") {
             if (!$value) {
                 $errors[$name] = _('Please select an option');
                 continue;
             }
         }
         if ($field['rules'] && is_array($field['rules'])) {
             foreach ($field['rules'] as $ruleName => $ruleValue) {
                 switch ($ruleName) {
                     case 'required':
                         if ($value == "") {
                             $errors[$name] = _('Please enter this information');
                             break 2;
                         }
                         break;
                     case 'minLength':
                         if (strlen8($value) < $ruleValue) {
                             $errors[$name] = _('Value is too short');
                             break 2;
                         }
                         break;
                     case 'maxLength':
                         if (strlen8($value) > $ruleValue) {
                             $errors[$name] = _('Value is too long');
                             break 2;
                         }
                         break;
                     case 'match':
                         if (!preg_match($ruleValue, $value)) {
                             $errors[$name] = _('Value is not valid');
                             break 2;
                         }
                         break;
                     case 'number':
                         if (!is_numeric($value)) {
                             $errors[$name] = _('Value is not numeric');
                             break 2;
                         }
                         break;
                     case 'minValue':
                         if (!is_numeric($value) || 1 * $value < 1 * $ruleValue) {
                             $errors[$name] = _('Value is too small');
                             break 2;
                         }
                         break;
                     case 'maxValue':
                         if (!is_numeric($value) || 1 * $value > 1 * $ruleValue) {
                             $errors[$name] = _('Value is too large');
                             break 2;
                         }
                         break;
                 }
             }
         }
         // fix checkboxes
         if ($field['type'] == "checkbox") {
             if (!$value) {
                 $field['value'] = _('No');
             } else {
                 $field['value'] = _('Yes');
             }
         }
     }
     if (count($errors)) {
         // "sir, we have some errors here. shit."
         $runData->ajaxResponseAdd("errors", $errors);
         throw new ProcessException("Form errors.", "form_errors");
     }
     $title = $title ? $title : sprintf(_("[%s] MailForm form data"), GlobalProperties::$SERVICE_NAME);
     $oe = new OzoneEmail();
     $oe->addAddress($email);
     $oe->setSubject($title);
     $oe->contextAdd('fields', $fields);
     $oe->contextAdd('values', $values);
     switch ($format) {
         case 'csv':
             $emailTemplate = 'wiki/mailform/MailFormCSV';
             // fix the values (escape)
             foreach ($fields as &$field) {
                 $value = $field['value'];
                 if (preg_match("/[,\"\n]/", $value)) {
                     $value = str_replace('"', '""', $value);
                     $value = '"' . $value . '"';
                     $field['value'] = $value;
                 }
             }
             break;
         default:
             $emailTemplate = 'wiki/mailform/MailForm';
             break;
     }
     $oe->setBodyTemplate($emailTemplate);
     if (!$oe->Send()) {
         throw new ProcessException(_("The form data could not be sent to the specified email address."), "email_failed");
     }
     // ok, is there any success page?
     $successPage = $data['successPage'];
     if ($successPage) {
         $successPage = WDStringUtils::toUnixName($successPage);
         $page = DB_PagePeer::instance()->selectByName($site->getSiteId(), $successPage);
         if ($page) {
             $runData->ajaxResponseAdd("successPage", $successPage);
         }
     }
     if (GlobalProperties::$UI_SLEEP) {
         sleep(1);
     }
 }
コード例 #9
0
ファイル: ManageSiteAction.php プロジェクト: jbzdak/wikidot
 public function savePageRateSettingsEvent($runData)
 {
     $pl = $runData->getParameterList();
     $site = $runData->getTemp("site");
     $siteId = $site->getSiteId();
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $cats0 = $json->decode($pl->getParameterValue("categories"));
     $db = Database::connection();
     $db->begin();
     $outdater = new Outdater();
     foreach ($cats0 as $category) {
         $categoryId = $category['category_id'];
         $c = new Criteria();
         $c->add("category_id", $categoryId);
         $c->add("site_id", $siteId);
         // for sure ;-)
         $dCategory = DB_CategoryPeer::instance()->selectOne($c);
         // now compare
         $changed = false;
         if ($category['rating'] !== $dCategory->getRating()) {
             $dCategory->setRating($category['rating']);
             $changed = true;
         }
         if ($changed) {
             $dCategory->save();
             // outdate category too
             $outdater->categoryEvent("category_save", $dCategory);
         }
     }
     $db->commit();
     if (GlobalProperties::$UI_SLEEP) {
         sleep(1);
     }
 }
コード例 #10
0
 public function build($runData)
 {
     // select recent revisions...
     $site = $runData->getTemp("site");
     $pl = $runData->getParameterList();
     $userId = $pl->getParameterValue("userId");
     if ($runData->getUser() && $userId == $runData->getUser()->getUserId()) {
         $own = true;
     }
     // get user
     //if($userId
     $user = DB_OzoneUserPeer::instance()->selectByPrimaryKey($userId);
     if ($user == null) {
         throw new ProcessException(_("Error selecting user."), "no_user");
     }
     // get options
     $pageNumber = $pl->getParameterValue("page");
     $op = $pl->getParameterValue("options");
     if ($pageNumber === null) {
         $pageNumber = 1;
     }
     if ($op) {
         $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
         $o = $json->decode($op);
     }
     if (count($o) == 0) {
         $o['all'] == true;
     }
     $perPage = $pl->getParameterValue("perpage");
     if ($perPage == null) {
         $perPage = 20;
     }
     $offset = ($pageNumber - 1) * $perPage;
     $count = $perPage * 2 + 1;
     $c = new Criteria();
     $c->add("page_revision.user_id", $user->getUserId());
     if (!$own) {
         $c->add("site.private", false);
     }
     if (!$o['all'] && count($o) > 0) {
         $c2 = new Criteria();
         if ($o['new']) {
             $c2->addOr("flag_new", true);
         }
         if ($o['source']) {
             $c2->addOr("flag_text", true);
         }
         if ($o['title']) {
             $c2->addOr("flag_title", true);
         }
         if ($o['move']) {
             $c2->addOr("flag_rename", true);
         }
         if ($o['meta']) {
             $c2->addOr("flag_meta", true);
         }
         if ($o['files']) {
             $c2->addOr("flag_file", true);
         }
         $c->addCriteriaAnd($c2);
     }
     $c->addJoin("page_revision.page_id", "page.page_id");
     $c->addJoin("page.site_id", "site.site_id");
     $c->add("site.deleted", false);
     $c->addOrderDescending("page_revision.revision_id");
     $c->setLimit($count, $offset);
     $revisions = DB_PageRevisionPeer::instance()->select($c);
     $counted = count($revisions);
     $pagerData = array();
     $pagerData['currentPage'] = $pageNumber;
     if ($counted > $perPage * 2) {
         $knownPages = $pageNumber + 2;
         $pagerData['knownPages'] = $knownPages;
     } elseif ($counted > $perPage) {
         $knownPages = $pageNumber + 1;
         $pagerData['totalPages'] = $knownPages;
     } else {
         $totalPages = $pageNumber;
         $pagerData['totalPages'] = $totalPages;
     }
     $revisions = array_slice($revisions, 0, $perPage);
     $runData->contextAdd("pagerData", $pagerData);
     $runData->contextAdd("revisions", $revisions);
     $runData->contextAdd("revisionsCount", count($revisions));
 }
コード例 #11
0
ファイル: PMAction.php プロジェクト: jbzdak/wikidot
 public function removeSelectedDraftsEvent($runData)
 {
     $userId = $runData->getUserId();
     $c = new Criteria();
     $c->add("from_user_id", $userId);
     $c->add("flag", 2);
     $selected = $runData->getParameterList()->getParameterValue("selected");
     $json = new JSONService(SERVICES_JSON_LOOSE_TYPE);
     $selected = $json->decode($selected);
     $db = Database::connection();
     $db->begin();
     $c2 = new Criteria();
     foreach ($selected as $s) {
         $c2->addOr("message_id", $s);
     }
     $c->addCriteriaAnd($c2);
     DB_PrivateMessagePeer::instance()->delete($c);
     $db->commit();
 }