I have some software that uses a yaml config file and I want to dynamically add a list of registered users to the config file when they join and remove them when their accounts are deleted.
The config file is as follows:
targets:
users:
- name: AlFredo01
uid: a1fa36h2a5hbd6535c919402ba8cc837bd75abfae
userinfo:
- email: Alfredo01@gmail.com
- gender: male
- country: it
- name: AlFredo02
uid: jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10
userinfo:
- email: Alfredo02@gmail.com
- gender: male
- country: gb
I effectively would like to be able to add in new names and remove by name or UID using a PHP script on register/archive.
All the info needed would be available on registration. On deleting, their UID/Name is stored in the DB exactly how it will be added to the config file.
Can this be achieved, please?
I’ve never used yaml files before. I’ve found php-yaml and I can parse the data in to an array and print or dump it.
<?
$parsed = yaml_parse_file('config2.yml');
var_dump($parsed);
?>
The above does dump the data as you would expect. Like below
Array
(
[targets] =>
[users] => Array
(
[0] => Array
(
[name] => AlFredo01
[uid] => a1fa36h2a5hbd6535c919402ba8cc837bd75abfae
[userinfo] => Array
(
[0] => Array
(
[email] => Alfredo01@gmail.com
)
[1] => Array
(
[gender] => male
)
[2] => Array
(
[country] => it
)
)
)
[1] => Array
(
[name] => AlFredo02
[uid] => jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10
[userinfo] => Array
(
[0] => Array
(
[email] => Alfredo02@gmail.com
)
[1] => Array
(
[gender] => male
)
[2] => Array
(
[country] => gb
)
)
)
)
)
I’d like to be able to effectively remove a full block based on UID.
So if I wanted to remove Alfredo02, I’d remove this section
[1] => Array
(
[name] => AlFredo02
[uid] => jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10
[userinfo] => Array
(
[0] => Array
(
[email] => Alfredo02@gmail.com
)
[1] => Array
(
[gender] => male
)
[2] => Array
(
[country] => gb
)
)
)
)
Based on UID: jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10
Additionally, I’d like to be able to add a full section in for a new user.
I’ve tried basic lines to get things like the array ID to start with but keep getting nothing returned.
$search = array_search('jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10', array_column($parsed, 'uid'));
Could anyone please help me with a method of removing and adding data? Once I can generate a new “output” with data added or removed, I can write that back to the config.yml file.
Advertisement
Answer
Through investigation and determination I have figured out a way which allows you to remove from the array and write back to the yml file with the removed block/user.
$search = print_r(array_search('jmed8d83m4mtjf7f7f8j299d8210sla9010labvab10', array_column($parsed[users], 'uid', true)));
unset($parsed[users][$search]);
echo '<pre>' , print_r($parsed) , '</pre>';
yaml_emit_file("config2.yml",$parsed);
This effectively allows you to search for your uid
inside of users
and then print the result on the page using echo
, but you can remove this.
Then writing the whole output back to the yml file using yaml_emit_file
.
The next stage will be working out how to add a new user in to the array and write that back where necessary.
I’ll update when I get to that point for the benefit of others.