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();
 }
Exemple #7
0
 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();
 }
Exemple #8
0
 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";
 }