public function up() { // Start order picking permission $picking = new sfGuardPermission(); $picking->setName('admin_shop_order_picking'); $picking->setDescription('Administrator orders in shop'); $picking->save(); $o_group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_order = new sfGuardGroupPermission(); $group_order->setGroupId($o_group->getId()); $group_order->setPermissionId($picking->getId()); $group_order->save(); // End order picking permission // Start order dispatch permission $dispatch = new sfGuardPermission(); $dispatch->setName('admin_shop_order_dispatch'); $dispatch->setDescription('Administrator promotions in shop'); $dispatch->save(); $p_group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_promotion = new sfGuardGroupPermission(); $group_promotion->setGroupId($p_group->getId()); $group_promotion->setPermissionId($dispatch->getId()); $group_promotion->save(); // End order dispatch permission // Add new column shipping_code to shop order table $this->addColumn('rt_shop_order', 'shipping_code', 'string', '50', array()); }
public function up() { $permission = new sfGuardPermission(); $permission->setName('show_admin_menu'); $permission->setDescription('Administration menu to be displayed'); $permission->save(); $group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_permission = new sfGuardGroupPermission(); $group_permission->setGroupId($group->getId()); $group_permission->setPermissionId($permission->getId()); $group_permission->save(); }
public function up() { $permission = new sfGuardPermission(); $permission->setName('admin_snippet'); $permission->setDescription('Administrator permission for snippets'); $permission->save(); $group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_permission = new sfGuardGroupPermission(); $group_permission->setGroupId($group->getId()); $group_permission->setPermissionId($permission->getId()); $group_permission->save(); }
public function up() { $permission = new sfGuardPermission(); $permission->setName('admin_comment'); $permission->setDescription('Administration menu to be displayed'); $permission->save(); $group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_permission = new sfGuardGroupPermission(); $group_permission->setGroupId($group->getId()); $group_permission->setPermissionId($permission->getId()); $group_permission->save(); $this->createTable('rt_comment', array('id' => array('type' => 'integer', 'length' => '8', 'autoincrement' => '1', 'primary' => '1'), 'is_active' => array('type' => 'boolean', 'length' => '25'), 'model_id' => array('type' => 'integer', 'length' => '8'), 'model' => array('type' => 'string', 'length' => '100'), 'user_id' => array('type' => 'integer', 'length' => '8'), 'comment_id' => array('type' => 'integer', 'length' => '8'), 'author_name' => array('type' => 'string', 'length' => '255'), 'author_email' => array('type' => 'string', 'length' => '255'), 'author_website' => array('type' => 'string', 'extra' => 'link', 'length' => '255'), 'content' => array('type' => 'string', 'length' => ''), 'moderator_note' => array('type' => 'string', 'length' => ''), 'created_at' => array('notnull' => '1', 'type' => 'timestamp', 'length' => '25'), 'updated_at' => array('notnull' => '1', 'type' => 'timestamp', 'length' => '25')), array('primary' => array(0 => 'id'), 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8')); $this->createTable('rt_comment_report', array('id' => array('type' => 'integer', 'length' => '8', 'autoincrement' => '1', 'primary' => '1'), 'reason' => array('type' => 'clob', 'length' => ''), 'referer' => array('type' => 'string', 'length' => '255'), 'status' => array('type' => 'enum', 'values' => array(0 => 'valid', 1 => 'invalid', 2 => 'untreated'), 'default' => 'untreated', 'length' => ''), 'comment_id' => array('type' => 'integer', 'notnull' => '1', 'length' => '8'), 'created_at' => array('notnull' => '1', 'type' => 'timestamp', 'length' => '25'), 'updated_at' => array('notnull' => '1', 'type' => 'timestamp', 'length' => '25')), array('primary' => array(0 => 'id'))); }
public function up() { // Start order permission $order = new sfGuardPermission(); $order->setName('admin_shop_order'); $order->setDescription('Administrator orders in shop'); $order->save(); $o_group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_order = new sfGuardGroupPermission(); $group_order->setGroupId($o_group->getId()); $group_order->setPermissionId($order->getId()); $group_order->save(); // End order permission // Start promotion permission $promotion = new sfGuardPermission(); $promotion->setName('admin_shop_promotion'); $promotion->setDescription('Administrator promotions in shop'); $promotion->save(); $p_group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_promotion = new sfGuardGroupPermission(); $group_promotion->setGroupId($p_group->getId()); $group_promotion->setPermissionId($promotion->getId()); $group_promotion->save(); // End promotion permission // Start voucher permission $voucher = new sfGuardPermission(); $voucher->setName('admin_shop_voucher'); $voucher->setDescription('Administrator vouchers in shop'); $voucher->save(); $v_group = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); $group_voucher = new sfGuardGroupPermission(); $group_voucher->setGroupId($v_group->getId()); $group_voucher->setPermissionId($voucher->getId()); $group_voucher->save(); // End voucher permission }
public function executePermissions(sfWebRequest $request) { $module = 'sfGuardUser'; if (!in_array($module, array_keys(sfPlop::getSafePluginModules()))) { $this->redirect('@sf_plop_dashboard'); } if ($request->isMethod(sfRequest::POST)) { if ($request->isXmlHttpRequest()) { $this->setTemplate('ajaxPermissions'); $this->setLayout(false); } $group_id = $request->getParameter('g'); $user_id = $request->getParameter('u'); $permission_id = $request->getParameter('p'); if ($group_id) { $group_exists = sfPlopGuard::groupExists($group_id); if (!$group_exists && $request->isXmlHttpRequest()) { return sfView::ERROR; } else { if (!$group_exists) { $this->redirect('@sf_plop_dashboard_permissions'); } } } if ($user_id) { $user_exists = sfPlopGuard::userExists($user_id); if (!$user_exists && $request->isXmlHttpRequest()) { return sfView::ERROR; } else { if (!$user_exists) { $this->redirect('@sf_plop_dashboard_permissions'); } } } if (isset($group_exists) && isset($user_exists)) { $user_group = sfGuardUserGroupPeer::retrieveByPK($user_id, $group_id); if ($user_group) { $user_group->delete(); } else { $user_group = new sfGuardUsergroup(); $user_group->setUserId($user_id); $user_group->setGroupId($group_id); $user_group->save(); $this->getResponse()->setStatusCode(201); } } if ($permission_id) { if ($permission_id == 'super') { if (!sfPlopGuard::isLastSuperAdminUser($user_id)) { $user = sfGuardUserPeer::retrieveByPK($user_id); if ($user->getIsSuperAdmin()) { $user->setIsSuperAdmin(false); } else { $user->setIsSuperAdmin(true); } $user->save(); } else { $this->getResponse()->setStatusCode(202); return sfView::ERROR; } } else { if (!is_int($permission_id)) { $permission_exists = sfPlopGuard::permissionExists($permission_id); if (!$permission_exists) { $modules = sfPlop::getSafePluginModules(); if ($request->isXmlHttpRequest() && !isset($modules[$permission_id])) { return sfView::ERROR; } elseif (!isset($modules[$permission_id])) { $this->redirect('@sf_plop_dashboard_permissions'); } else { $module = $modules[$permission_id]; } $permission = new sfGuardPermission(); $permission->setName($permission_id); $permission->setDescription($module['name']); $permission->save(); $permission_id = $permission->getId(); $this->getResponse()->setStatusCode(201); } else { $permission_id = sfPlopGuard::getPermission($permission_id)->getId(); } } else { $permission_exists = sfPlopGuard::permissionExists($permission_id); if (!$permission_exists && $request->isXmlHttpRequest()) { return sfView::ERROR; } else { if (!$permission_exists) { $this->redirect('@sf_plop_dashboard_permissions'); } } } if (isset($user_exists)) { $user_permission = sfGuardUserPermissionPeer::retrieveByPK($user_id, $permission_id); if ($user_permission) { $user_permission->delete(); } else { $user_permission = new sfGuardUserPermission(); $user_permission->setUserId($user_id); $user_permission->setPermissionId($permission_id); $user_permission->save(); $this->getResponse()->setStatusCode(201); } } elseif (isset($group_exists)) { $group_permission = sfGuardGroupPermissionPeer::retrieveByPK($group_id, $permission_id); if ($group_permission) { $group_permission->delete(); } else { $group_permission = new sfGuardGroupPermission(); $group_permission->setGroupId($group_id); $group_permission->setPermissionId($permission_id); $group_permission->save(); $this->getResponse()->setStatusCode(201); } } } } if (!$request->isXmlHttpRequest()) { $this->redirect('@sf_plop_dashboard_permissions'); } } $this->groups = sfPlopGuard::getAllGroups(); $this->users = sfPlopGuard::getAllUsers(); $this->permissions = sfPlopGuard::getAllPermissions(); }
public function createProjectPermission($name, $description) { // TODO: make sure permission does not already exist - what a PITA if (sfGuardPermissionPeer::retrieveByName($this->getUuid() . '-' . $name) != null) { return true; } $permission = new sfGuardPermission(); $permission->setName($this->getUuid() . '-' . $name); $permission->setDescription($description); $permission->save(); }
public static function migrate() { $migrate = new aMigrate(Doctrine_Manager::connection()->getDbh()); $blogIsNew = false; echo "Migrating apostropheBlogPlugin...\n"; if (!$migrate->tableExists('a_blog_item')) { $migrate->sql(array(" CREATE TABLE a_blog_editor (blog_item_id BIGINT, user_id BIGINT, PRIMARY KEY(blog_item_id, user_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;", "CREATE TABLE a_blog_item (id BIGINT AUTO_INCREMENT, author_id BIGINT, page_id BIGINT, title VARCHAR(255) NOT NULL, slug_saved TINYINT(1) DEFAULT '0', excerpt TEXT, status VARCHAR(255) DEFAULT 'draft' NOT NULL, allow_comments TINYINT(1) DEFAULT '0' NOT NULL, template VARCHAR(255) DEFAULT 'singleColumnTemplate', published_at DATETIME, type VARCHAR(255), start_date DATE, start_time TIME, end_date DATE, end_time TIME, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, slug VARCHAR(255), INDEX a_blog_item_type_idx (type), UNIQUE INDEX a_blog_item_sluggable_idx (slug), INDEX author_id_idx (author_id), INDEX page_id_idx (page_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;", " ALTER TABLE a_blog_editor ADD CONSTRAINT a_blog_editor_user_id_sf_guard_user_id FOREIGN KEY (user_id) REFERENCES sf_guard_user(id);", " ALTER TABLE a_blog_editor ADD CONSTRAINT a_blog_editor_blog_item_id_a_blog_item_id FOREIGN KEY (blog_item_id) REFERENCES a_blog_item(id);", " ALTER TABLE a_blog_item ADD CONSTRAINT a_blog_item_page_id_a_page_id FOREIGN KEY (page_id) REFERENCES a_page(id) ON DELETE CASCADE;", " ALTER TABLE a_blog_item ADD CONSTRAINT a_blog_item_author_id_sf_guard_user_id FOREIGN KEY (author_id) REFERENCES sf_guard_user(id) ON DELETE SET NULL;")); } if (!$migrate->columnExists('a_blog_item', 'location')) { $migrate->sql(array('ALTER TABLE a_blog_item ADD COLUMN location varchar(300)')); } if (!$migrate->columnExists('a_blog_item', 'start_time')) { $migrate->sql(array('ALTER TABLE a_blog_item ADD COLUMN start_time TIME', 'ALTER TABLE a_blog_item ADD COLUMN end_time TIME')); } if (!$migrate->tableExists('a_blog_item_to_category')) { $migrate->sql(array("CREATE TABLE a_blog_item_to_category (blog_item_id BIGINT, category_id BIGINT, PRIMARY KEY(blog_item_id, category_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = INNODB;", "ALTER TABLE a_blog_item_to_category ADD CONSTRAINT a_blog_item_to_category_category_id_a_category_id FOREIGN KEY (category_id) REFERENCES a_category(id) ON DELETE CASCADE;", "ALTER TABLE a_blog_item_to_category ADD CONSTRAINT a_blog_item_to_category_blog_item_id_a_blog_item_id FOREIGN KEY (blog_item_id) REFERENCES a_blog_item(id) ON DELETE CASCADE;")); echo "Migrating blog categories to Apostrophe categories...\n"; $oldCategories = array(); if ($migrate->tableExists('a_blog_category')) { $oldCategories = $migrate->query('SELECT * FROM a_blog_category'); } $newCategories = $migrate->query('SELECT * FROM a_category'); $nc = array(); foreach ($newCategories as $newCategory) { $nc[$newCategory['name']] = $newCategory; } $oldIdToNewId = array(); foreach ($oldCategories as $category) { if (isset($nc[$category['name']])) { $oldIdToNewId[$category['id']] = $nc[$category['name']]['id']; } else { // Blog categories didn't have slugs $category['slug'] = aTools::slugify($category['name']); $migrate->query('INSERT INTO a_category (name, description, slug) VALUES (:name, :description, :slug)', $category); $oldIdToNewId[$category['id']] = $migrate->lastInsertId(); } } echo "Migrating from aBlogItemCategory to aBlogItemToCategory...\n"; if ($migrate->tableExists('a_blog_item_category')) { $itemIds = $migrate->query('SELECT id FROM a_blog_item'); $validItemIds = array(); foreach ($itemIds as $row) { $validItemIds[$row['id']] = true; } $oldMappings = $migrate->query('SELECT * FROM a_blog_item_category'); foreach ($oldMappings as $info) { $info['category_id'] = $oldIdToNewId[$info['blog_category_id']]; if (isset($validItemIds[$info['blog_item_id']])) { $migrate->query('INSERT INTO a_blog_item_to_category (blog_item_id, category_id) VALUES (:blog_item_id, :category_id)', $info); } } } if ($migrate->tableExists('a_blog_page_category')) { echo "Associating existing blog engine pages with new category IDs\n"; $itemIds = $migrate->query('SELECT id FROM a_page WHERE engine = "aBlog" OR engine = "aEvent"'); $validItemIds = array(); foreach ($itemIds as $row) { $validItemIds[$row['id']] = true; } $oldMappings = $migrate->query('SELECT * FROM a_blog_page_category'); foreach ($oldMappings as $info) { $info['category_id'] = $oldIdToNewId[$info['blog_category_id']]; if (isset($validItemIds[$info['page_id']])) { $migrate->query('INSERT INTO a_page_to_category (page_id, category_id) VALUES (:page_id, :category_id)', $info); } } } echo "Associating existing blog slots with new category IDs\n"; $blogSlots = $migrate->query('SELECT id, value FROM a_slot WHERE type = "aBlog" OR type = "aEvent"'); foreach ($blogSlots as $blogSlot) { $value = $blogSlot['value']; $info = @unserialize($value); if (isset($info['categories_list'])) { $new = array(); foreach ($info['categories_list'] as $categoryId) { if (isset($oldIdToNewId[$categoryId])) { $new[] = $oldIdToNewId[$categoryId]; } } $info['categories_list'] = $new; $blogSlot['value'] = serialize($info); $migrate->query('UPDATE a_slot SET value = :value WHERE id = :id', $blogSlot); } } // permissions regime for blogs $blogAdmin = new sfGuardPermission(); $blogAdmin->setName('blog_admin'); $blogAdmin->setDescription('Blog administration'); $blogAdmin->save(); $blogAuthor = new sfGuardPermission(); $blogAuthor->setName('blog_author'); $blogAuthor->setDescription('Blog post authoring'); $blogAuthor->save(); // Grant the expected access to the admin and editor groups if they are there $adminGroup = Doctrine::getTable('sfGuardGroup')->findOneByName('admin'); if ($adminGroup) { $adminGroup->Permissions[] = $blogAdmin; $adminGroup->save(); } $editorGroup = Doctrine::getTable('sfGuardGroup')->findOneByName('editor'); if ($editorGroup) { $editorGroup->Permissions[] = $blogAuthor; $editorGroup->save(); } } // Older updates may not have categories on the virtual page $blogPagesById = array(); $blogPageIdInfos = $migrate->query("SELECT id, page_id FROM a_blog_item"); foreach ($blogPageIdInfos as $info) { $blogPagesById[$info['id']] = $info['page_id']; } $blogToCategories = $migrate->query("SELECT * FROM a_blog_item_to_category"); foreach ($blogToCategories as $toCategory) { $migrate->query("INSERT INTO a_page_to_category (category_id, page_id) VALUES (:category_id, :page_id) ON DUPLICATE KEY UPDATE category_id = category_id", array('category_id' => $toCategory['category_id'], 'page_id' => $blogPagesById[$toCategory['blog_item_id']])); } // Older versions did not have taggings on the virtual page $blogTaggings = $migrate->query("SELECT * FROM tagging WHERE taggable_model IN ('aBlogPost', 'aEvent')"); $blogTagsById = array(); foreach ($blogTaggings as $tagging) { $blogTagsById[$tagging['taggable_id']][$tagging['tag_id']] = true; } $pageTaggings = $migrate->query("SELECT * FROM tagging WHERE taggable_model IN ('aPage')"); $pageTagsById = array(); foreach ($pageTaggings as $tagging) { $pageTagsById[$tagging['taggable_id']][$tagging['tag_id']] = true; } foreach ($blogTagsById as $blogId => $tags) { if (!isset($blogPagesById[$blogId])) { // No virtual page - just a stale tagging continue; } foreach ($tags as $tagId => $dummy) { if (!isset($pageTagsById[$blogPagesById[$blogId]][$tagId])) { $migrate->query('INSERT INTO tagging (taggable_model, taggable_id, tag_id) VALUES ("aPage", :taggable_id, :tag_id)', array('taggable_id' => $blogPagesById[$blogId], 'tag_id' => $tagId)); } } } $migrate->query('UPDATE a_page SET engine = "aBlog" WHERE slug LIKE "@a_blog_search_redirect%"'); $migrate->query('UPDATE a_page SET engine = "aEvent" WHERE slug LIKE "@a_event_search_redirect%"'); // Older blog post virtual pages won't have published_at $migrate->query('update a_page p inner join a_blog_item bi on bi.page_id = p.id set p.published_at = bi.published_at'); // Really old events may have full timestamps in start_date and end_date, break them out $migrate->query('UPDATE a_blog_item SET start_time = substr(start_date, 12), start_date = substr(start_date, 1, 10) WHERE (length(start_date) > 10) AND start_time IS NULL'); $migrate->query('ALTER TABLE a_blog_item modify column start_date date;'); $migrate->query('UPDATE a_blog_item SET end_time = substr(end_date, 12), end_date = substr(end_date, 1, 10) WHERE (length(end_date) > 10) AND end_time IS NULL'); $migrate->query('ALTER TABLE a_blog_item modify column end_date date;'); // Migrate old full day events from before we started defining this as a null start and end time $migrate->query('UPDATE a_blog_item SET start_time = null, end_time = null WHERE start_time = "00:00:00" AND end_time = "00:00:00"'); if ($migrate->tableExists('a_blog_category_user')) { $oldCategoryUsers = $migrate->query('SELECT * FROM a_blog_category_user'); $oldCategories = $migrate->query('SELECT * from a_blog_category'); $newCategories = $migrate->query('SELECT * from a_category'); $oldByName = array(); foreach ($oldCategories as $oldCategory) { $oldByName[$oldCategory['name']] = $oldCategory['id']; } $newByName = array(); foreach ($newCategories as $newCategory) { $newByName[$newCategory['name']] = $newCategory['id']; } $oldToNew = array(); foreach ($oldByName as $name => $id) { $oldToNew[$id] = $newByName[$name]; } foreach ($oldCategoryUsers as $oldCategoryUser) { $migrate->query('INSERT INTO a_category_user (category_id, user_id) VALUES (:category_id, :user_id) ON DUPLICATE KEY UPDATE category_id = category_id', array('category_id' => $oldToNew[$oldCategoryUser['blog_category_id']], 'user_id' => $oldCategoryUser['user_id'])); } } if ($migrate->tableExists('a_blog_category_group')) { $oldCategoryGroups = $migrate->query('SELECT * FROM a_blog_category_group'); $oldCategories = $migrate->query('SELECT * from a_blog_category'); $newCategories = $migrate->query('SELECT * from a_category'); $oldByName = array(); foreach ($oldCategories as $oldCategory) { $oldByName[$oldCategory['name']] = $oldCategory['id']; } $newByName = array(); foreach ($newCategories as $newCategory) { $newByName[$newCategory['name']] = $newCategory['id']; } $oldToNew = array(); foreach ($oldByName as $name => $id) { $oldToNew[$id] = $newByName[$name]; } foreach ($oldCategoryGroups as $oldCategoryGroup) { if (!isset($oldToNew[$oldCategoryGroup['blog_category_id']])) { echo "WARNING: there is no a_blog_category with the id " . $oldCategoryGroup['blog_category_id'] . "\n"; continue; } $migrate->query('INSERT INTO a_category_group (category_id, group_id) VALUES (:category_id, :group_id) ON DUPLICATE KEY UPDATE category_id = category_id', array('category_id' => $oldToNew[$oldCategoryGroup['blog_category_id']], 'group_id' => $oldCategoryGroup['group_id'])); } } // Blog item tags must also be on the virtual page, ditto for categories if (!$migrate->getCommandsRun()) { echo "Your database is already up to date.\n\n"; } else { echo $migrate->getCommandsRun() . " SQL commands were run.\n\n"; } echo "Done!\n"; }