Jump to content

fbg13

Members
  • Posts

    344
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by fbg13

  1. Figured it out... seems like I have to get the role again and turn of output formatting

    	...
    
    	$page_ = wire()->pages->get("template={$name}_blog, name={$name}");
    	if (!$page_->id) {
    		$page_ = wire()->pages->add($template_, "/", ["title" => "{$blogName}", "name" => "{$name}"]);
    		$page_->save();
    	}
    
    	$role_ = wire()->roles->get("{$name}_blog_editor");
        if ($role_->id) {
            $role_->of(false);
            $role_->save();
        }
    }

     

    • Like 1
  2. I'm trying to create a site with multiple blogs, run by different users.
    Each user only being able to see and manage to their blog.
    For each blog I create a role, a template, an user and a page.

    I'm creating everything through the api and only one thing doesn't work.
    When I login as one of these users I can't see the page (in the pages tree in the admin dashboard) set up as their blog root.

    But if I go and edit role assigned to the user and just click save (no other changes)
    then the page appears after a refresh and I can edit it and add child pages.

    Here's the code

    Spoiler
    function create(string $name, string $blogName) {
    
    	$role_ = wire()->roles->get("{$name}_blog_editor");
    	if (!$role_->id) {
    		$role_ = wire()->roles->add("{$name}_blog_editor");
    		$permission_ = wire()->permissions->get("page-edit");
    		$role_->addPermission($permission_);
    	}
    
    	$user_ = wire()->users->get("{$name}");
    	if (!$user_->id) {
    		$user_ = wire()->users->add("{$name}");
    		$user_->pass = "q";
    		$user_->addRole($role_);
    		$user_->save();
    	}
    
    	$homeTemplate = wire()->templates->get("home");
    	$blogPostTemplate = wire()->templates->get("blog_post");
    	if (!$blogPostTemplate->id) {
    		$blogPostTemplate = wire()->templates->add("blog_post");
    		$blogPostTemplate->noChildren = 1;
    		$blogPostTemplate->save();
    	}
    
    	$template_ = wire()->templates->get("{$name}_blog");
    	if (!$template_->id) {
    		$template_ = wire()->templates->add("{$name}_blog");
    
    		// give access to the role
    		$template_->useRoles = true;
    		// only the newly created role (and the admin) has access
    		$template_->editRoles   = [$role_->id]; // array of roles that can edit pages with this template
    		$template_->createRoles = [$role_->id]; // ... can create pages ...
    		$template_->addRoles    = [$role_->id]; // ... can add child pages ...
    		$template_->addRole($role_);
    		$role_->save();
    		$template_->save();
    
    		// limit the child and parent templates
    		$template_->childTemplates([$blogPostTemplate]);
    		$template_->parentTemplates([$homeTemplate]);
    
    		// add the title field
    		$template_->fieldgroup->add("title");
    		$template_->fieldgroup->save();
    		$template_->save();
    
    		// set as allowed parent template for the "blog_post" template
    		$blogPostTemplate->parentTemplates($blogPostTemplate->parentTemplates()->append($template_));
    		$blogPostTemplate->save();
    	}
    
    	$page_ = wire()->pages->get("template={$name}_blog, name={$name}");
    	if (!$page_->id) {
    		$page_ = wire()->pages->add($template_, "/", ["title" => "{$blogName}", "name" => "{$name}"]);
    		$page_->save();
    	}
    
    }

     

    What am I doing wrong?

  3. You can get all fields of a page, that are editable by the current user, like this:

    $p = wire("pages")->get(5994);
    foreach ($p->getFields() as $pField) {
    	foreach($p->getInputfields($pField->name) as $inputfield) {
    		if(!$p->editable($inputfield->name, false)) {
    			continue;
    		};
    		// need tracy debugger for bd
    		bd("is editable: {$pField->name}");
    	}
    }

    https://github.com/processwire/processwire/blob/96f62b313fca3f48df0521096145b782fa08c0e3/wire/modules/Process/ProcessPageEdit/ProcessPageEdit.module#L815

    https://github.com/processwire/processwire/blob/96f62b313fca3f48df0521096145b782fa08c0e3/wire/modules/PagePermissions.module#L118

    • Like 1
  4. 1 hour ago, MarkE said:

    I'm not sure what the API would be to create a new page directly.

    $p = new Page();
    $p->template = 'template_name';
    $p->parent = $pages->get('/about/');
    $p->name = 'mynewpage_url';
    $p->title = 'My New Page';
    $p->save();

    Edit the page

    $p = $pages->get('/about/mynewpage_url/');
    $p->title = 'My New Page (updated)';
    $p->save();

     

  5. I recommend you Solus with the plasma (kde) desktop, it's still in beta (the plasma version), but I had no issues with it. You can download it here., or check the other desktops available.

    Here is a screenshot of the taskbar and start menu (start menu is a custom one, plasma comes with 3 by default)

     

    image.png.f56a85cab3511543d47f41ac57582abb.thumb.png.eb6e869a6770501972d08a40aa6465c3.png

    With some distros you have to add extra repositories for codecs and drivers, which is not always straight forward, Solus provides them in their main repos.

     

    • Like 1
  6. On linux distros you use package managers to install software (packages).

    If there is no package you need to build and install the software from source, which can be a pain in the ass, especially if it has many dependencies (you have to build and install those too).

    9 hours ago, FrancisChung said:

    So you recommend a separate, entire partition for applications only?

    No, just devilbox (not the entire partition just for devilbox though). You can do that for other apps to but it gets complicated.

    9 hours ago, FrancisChung said:

    I'm guessing this wouldn't work if I switched distros for example right? Does it still work if you go from different versions of the same distro?

    For devilbox it will work, as long as you have docker and docker-compose installed. For other apps it depends, some will work some will not.

  7. 14 minutes ago, FrancisChung said:

    It was mainly using sudo to launch the application. The documentation doesn't state that you had to use it

    Do you mean docker compose up|down commands? It works without sudo for  me.

  8. Your problem is not with PW since you're not even reaching PW, from what you said. Your problem is most likely with pointing the domain to the new server.

    So take it slower, instead of moving PW just put a index.html (this eliminates most steps) file on the new server and try to access that. Once you reach that index.html start moving PW.

    • Like 2
  9. Your problem is unrelated to PW.

    You can read here how to move a PW site, but the steps apply to most CMS's, just step 5 is specific to PW in that the file name and its location differ from cms to cms. That's why i said it's unrelated to PW, there is nothing special about moving a PW site compared to moving any other site.

    23 minutes ago, henri said:

    My hosting provider isnt going to help me

    Have you actually contacted them?

     

    And as I said before no one can help you with the little info you provided. What kind of hosting do you have (shared, vps etc)? Do you have a control panel? Do you have phpmyadmin? Who handles your domain?

    • Like 1
×
×
  • Create New...